aboutsummaryrefslogtreecommitdiff
path: root/libXaw
diff options
context:
space:
mode:
Diffstat (limited to 'libXaw')
-rw-r--r--libXaw/AUTHORS0
-rw-r--r--libXaw/COPYING311
-rw-r--r--libXaw/ChangeLog748
-rw-r--r--libXaw/INSTALL229
-rw-r--r--libXaw/Makefile.am96
-rw-r--r--libXaw/Makefile.in824
-rw-r--r--libXaw/NEWS0
-rw-r--r--libXaw/aclocal.m48362
-rw-r--r--libXaw/config.guess1526
-rw-r--r--libXaw/config.h.in76
-rw-r--r--libXaw/config.sub1658
-rw-r--r--libXaw/configure26502
-rw-r--r--libXaw/configure.ac252
-rw-r--r--libXaw/depcomp630
-rw-r--r--libXaw/include/Makefile.in547
-rw-r--r--libXaw/include/X11/Xaw/AllWidgets.h75
-rw-r--r--libXaw/include/X11/Xaw/AsciiSink.h159
-rw-r--r--libXaw/include/X11/Xaw/AsciiSinkP.h196
-rw-r--r--libXaw/include/X11/Xaw/AsciiSrc.h347
-rw-r--r--libXaw/include/X11/Xaw/AsciiSrcP.h284
-rw-r--r--libXaw/include/X11/Xaw/AsciiText.h251
-rw-r--r--libXaw/include/X11/Xaw/AsciiTextP.h333
-rw-r--r--libXaw/include/X11/Xaw/Box.h210
-rw-r--r--libXaw/include/X11/Xaw/BoxP.h200
-rw-r--r--libXaw/include/X11/Xaw/Cardinals.h85
-rw-r--r--libXaw/include/X11/Xaw/Command.h235
-rw-r--r--libXaw/include/X11/Xaw/CommandP.h228
-rw-r--r--libXaw/include/X11/Xaw/Dialog.h199
-rw-r--r--libXaw/include/X11/Xaw/DialogP.h204
-rw-r--r--libXaw/include/X11/Xaw/Form.h338
-rw-r--r--libXaw/include/X11/Xaw/FormP.h281
-rw-r--r--libXaw/include/X11/Xaw/Grip.h195
-rw-r--r--libXaw/include/X11/Xaw/GripP.h176
-rw-r--r--libXaw/include/X11/Xaw/Label.h267
-rw-r--r--libXaw/include/X11/Xaw/LabelP.h236
-rw-r--r--libXaw/include/X11/Xaw/List.h471
-rw-r--r--libXaw/include/X11/Xaw/ListP.h233
-rw-r--r--libXaw/include/X11/Xaw/MenuButtoP.h159
-rw-r--r--libXaw/include/X11/Xaw/MenuButton.h180
-rw-r--r--libXaw/include/X11/Xaw/MultiSink.h223
-rw-r--r--libXaw/include/X11/Xaw/MultiSinkP.h279
-rw-r--r--libXaw/include/X11/Xaw/MultiSrc.h263
-rw-r--r--libXaw/include/X11/Xaw/MultiSrcP.h361
-rw-r--r--libXaw/include/X11/Xaw/Paned.h522
-rw-r--r--libXaw/include/X11/Xaw/PanedP.h356
-rw-r--r--libXaw/include/X11/Xaw/Panner.h212
-rw-r--r--libXaw/include/X11/Xaw/PannerP.h214
-rw-r--r--libXaw/include/X11/Xaw/Porthole.h124
-rw-r--r--libXaw/include/X11/Xaw/PortholeP.h126
-rw-r--r--libXaw/include/X11/Xaw/Repeater.h148
-rw-r--r--libXaw/include/X11/Xaw/RepeaterP.h166
-rw-r--r--libXaw/include/X11/Xaw/Reports.h111
-rw-r--r--libXaw/include/X11/Xaw/Scrollbar.h270
-rw-r--r--libXaw/include/X11/Xaw/ScrollbarP.h212
-rw-r--r--libXaw/include/X11/Xaw/Simple.h229
-rw-r--r--libXaw/include/X11/Xaw/SimpleMenP.h200
-rw-r--r--libXaw/include/X11/Xaw/SimpleMenu.h344
-rw-r--r--libXaw/include/X11/Xaw/SimpleP.h200
-rw-r--r--libXaw/include/X11/Xaw/Sme.h144
-rw-r--r--libXaw/include/X11/Xaw/SmeBSB.h194
-rw-r--r--libXaw/include/X11/Xaw/SmeBSBP.h186
-rw-r--r--libXaw/include/X11/Xaw/SmeLine.h140
-rw-r--r--libXaw/include/X11/Xaw/SmeLineP.h148
-rw-r--r--libXaw/include/X11/Xaw/SmeP.h178
-rw-r--r--libXaw/include/X11/Xaw/StripCharP.h214
-rw-r--r--libXaw/include/X11/Xaw/StripChart.h235
-rw-r--r--libXaw/include/X11/Xaw/Template.c393
-rw-r--r--libXaw/include/X11/Xaw/Template.h137
-rw-r--r--libXaw/include/X11/Xaw/TemplateP.h133
-rw-r--r--libXaw/include/X11/Xaw/Text.h743
-rw-r--r--libXaw/include/X11/Xaw/TextP.h640
-rw-r--r--libXaw/include/X11/Xaw/TextSink.h723
-rw-r--r--libXaw/include/X11/Xaw/TextSinkP.h606
-rw-r--r--libXaw/include/X11/Xaw/TextSrc.h555
-rw-r--r--libXaw/include/X11/Xaw/TextSrcP.h522
-rw-r--r--libXaw/include/X11/Xaw/Tip.h238
-rw-r--r--libXaw/include/X11/Xaw/TipP.h152
-rw-r--r--libXaw/include/X11/Xaw/Toggle.h360
-rw-r--r--libXaw/include/X11/Xaw/ToggleP.h187
-rw-r--r--libXaw/include/X11/Xaw/Tree.h273
-rw-r--r--libXaw/include/X11/Xaw/TreeP.h278
-rw-r--r--libXaw/include/X11/Xaw/VendorEP.h165
-rw-r--r--libXaw/include/X11/Xaw/Viewport.h239
-rw-r--r--libXaw/include/X11/Xaw/ViewportP.h216
-rw-r--r--libXaw/include/X11/Xaw/XawImP.h423
-rw-r--r--libXaw/include/X11/Xaw/XawInit.h126
-rw-r--r--libXaw/install-sh520
-rw-r--r--libXaw/ltmain.sh6956
-rw-r--r--libXaw/man/Makefile.am90
-rw-r--r--libXaw/man/Makefile.in464
-rw-r--r--libXaw/man/Xaw.man1257
-rw-r--r--libXaw/missing376
-rw-r--r--libXaw/spec/AsciiSink77
-rw-r--r--libXaw/spec/AsciiSource208
-rw-r--r--libXaw/spec/AsciiText166
-rw-r--r--libXaw/spec/Box139
-rw-r--r--libXaw/spec/CH1411
-rw-r--r--libXaw/spec/CH21103
-rw-r--r--libXaw/spec/CH3.intro67
-rw-r--r--libXaw/spec/CH6.intro84
-rw-r--r--libXaw/spec/CH7.intro99
-rw-r--r--libXaw/spec/Command205
-rw-r--r--libXaw/spec/Dialog280
-rw-r--r--libXaw/spec/Form200
-rw-r--r--libXaw/spec/Grip157
-rw-r--r--libXaw/spec/Label122
-rw-r--r--libXaw/spec/List341
-rw-r--r--libXaw/spec/Makefile.am96
-rw-r--r--libXaw/spec/Makefile.in513
-rw-r--r--libXaw/spec/MenuButton215
-rw-r--r--libXaw/spec/Paned492
-rw-r--r--libXaw/spec/Panner247
-rw-r--r--libXaw/spec/Porthole125
-rw-r--r--libXaw/spec/Repeater184
-rw-r--r--libXaw/spec/Scrollbar386
-rw-r--r--libXaw/spec/Simple95
-rw-r--r--libXaw/spec/SimpleMenu315
-rw-r--r--libXaw/spec/Sme106
-rw-r--r--libXaw/spec/SmeBSB125
-rw-r--r--libXaw/spec/SmeLine72
-rw-r--r--libXaw/spec/StripChart160
-rw-r--r--libXaw/spec/TPage_Credits156
-rw-r--r--libXaw/spec/Text123
-rw-r--r--libXaw/spec/TextActions506
-rw-r--r--libXaw/spec/TextFuncs397
-rw-r--r--libXaw/spec/TextSink420
-rw-r--r--libXaw/spec/TextSource331
-rw-r--r--libXaw/spec/Toggle370
-rw-r--r--libXaw/spec/Tree181
-rw-r--r--libXaw/spec/Viewport156
-rw-r--r--libXaw/spec/block.awk22
-rw-r--r--libXaw/spec/fixindex.awk73
-rw-r--r--libXaw/spec/indexmacros.t42
-rw-r--r--libXaw/spec/macros.t226
-rw-r--r--libXaw/spec/strings.mit10
-rw-r--r--libXaw/spec/strings.xaw714
-rw-r--r--libXaw/spec/widg.idxmac.t3
-rw-r--r--libXaw/specs/AsciiSink.xml141
-rw-r--r--libXaw/specs/AsciiSource.xml368
-rw-r--r--libXaw/specs/AsciiText.xml450
-rw-r--r--libXaw/specs/Box.xml346
-rw-r--r--libXaw/specs/CH1.xml725
-rw-r--r--libXaw/specs/CH2.xml1891
-rw-r--r--libXaw/specs/CH3.xml123
-rw-r--r--libXaw/specs/CH4.xml (renamed from libXaw/spec/CH4.intro)117
-rw-r--r--libXaw/specs/CH5.xml (renamed from libXaw/spec/CH5.intro)377
-rw-r--r--libXaw/specs/CH6.xml117
-rw-r--r--libXaw/specs/CH7.xml167
-rw-r--r--libXaw/specs/Command.xml525
-rw-r--r--libXaw/specs/Dialog.xml692
-rw-r--r--libXaw/specs/Form.xml531
-rw-r--r--libXaw/specs/Grip.xml357
-rw-r--r--libXaw/specs/Label.xml345
-rw-r--r--libXaw/specs/List.xml872
-rw-r--r--libXaw/specs/Makefile.am106
-rw-r--r--libXaw/specs/MenuButton.xml567
-rw-r--r--libXaw/specs/Paned.xml1213
-rw-r--r--libXaw/specs/Panner.xml734
-rw-r--r--libXaw/specs/Porthole.xml306
-rw-r--r--libXaw/specs/Repeater.xml558
-rw-r--r--libXaw/specs/Scrollbar.xml884
-rw-r--r--libXaw/specs/Simple.xml252
-rw-r--r--libXaw/specs/SimpleMenu.xml790
-rw-r--r--libXaw/specs/Sme.xml207
-rw-r--r--libXaw/specs/SmeBSB.xml310
-rw-r--r--libXaw/specs/SmeLine.xml148
-rw-r--r--libXaw/specs/StripChart.xml435
-rw-r--r--libXaw/specs/TPage_Credits.xml90
-rw-r--r--libXaw/specs/Template.xml (renamed from libXaw/spec/Template)291
-rw-r--r--libXaw/specs/Template_private_header_file.xml87
-rw-r--r--libXaw/specs/Template_public_header_file.xml112
-rw-r--r--libXaw/specs/Template_widget_source_file.xml208
-rw-r--r--libXaw/specs/Text.xml326
-rw-r--r--libXaw/specs/TextActions.xml976
-rw-r--r--libXaw/specs/TextActions_default_translation_bindings.xml85
-rw-r--r--libXaw/specs/TextActions_text_widget_actions.xml891
-rw-r--r--libXaw/specs/TextCustom.xml (renamed from libXaw/spec/TextCustom)114
-rw-r--r--libXaw/specs/TextFuncs.xml856
-rw-r--r--libXaw/specs/TextSink.xml915
-rw-r--r--libXaw/specs/TextSource.xml620
-rw-r--r--libXaw/specs/Toggle.xml773
-rw-r--r--libXaw/specs/Tree.xml404
-rw-r--r--libXaw/specs/Viewport.xml391
-rw-r--r--libXaw/specs/libXaw.xml88
-rw-r--r--libXaw/src/Actions.c2276
-rw-r--r--libXaw/src/AllWidgets.c245
-rw-r--r--libXaw/src/AsciiSink.c3899
-rw-r--r--libXaw/src/AsciiSrc.c3774
-rw-r--r--libXaw/src/AsciiText.c717
-rw-r--r--libXaw/src/Box.c1347
-rw-r--r--libXaw/src/Command.c1317
-rw-r--r--libXaw/src/Converters.c1400
-rw-r--r--libXaw/src/Dialog.c923
-rw-r--r--libXaw/src/DisplayList.c4512
-rw-r--r--libXaw/src/Form.c2216
-rw-r--r--libXaw/src/Grip.c373
-rw-r--r--libXaw/src/Label.c1645
-rw-r--r--libXaw/src/List.c2543
-rw-r--r--libXaw/src/Makefile.am264
-rw-r--r--libXaw/src/Makefile.in1506
-rw-r--r--libXaw/src/MenuButton.c548
-rw-r--r--libXaw/src/MultiSink.c1953
-rw-r--r--libXaw/src/MultiSrc.c3237
-rw-r--r--libXaw/src/OS.c117
-rw-r--r--libXaw/src/Paned.c4131
-rw-r--r--libXaw/src/Panner.c2161
-rw-r--r--libXaw/src/Pixmap.c1992
-rw-r--r--libXaw/src/Porthole.c754
-rw-r--r--libXaw/src/Private.h306
-rw-r--r--libXaw/src/Repeater.c598
-rw-r--r--libXaw/src/Scrollbar.c1767
-rw-r--r--libXaw/src/Simple.c1004
-rw-r--r--libXaw/src/SimpleMenu.c3664
-rw-r--r--libXaw/src/Sme.c541
-rw-r--r--libXaw/src/SmeBSB.c1544
-rw-r--r--libXaw/src/SmeLine.c531
-rw-r--r--libXaw/src/StripChart.c1155
-rw-r--r--libXaw/src/Text.c8320
-rw-r--r--libXaw/src/TextAction.c8807
-rw-r--r--libXaw/src/TextPop.c3104
-rw-r--r--libXaw/src/TextSink.c3656
-rw-r--r--libXaw/src/TextSrc.c4019
-rw-r--r--libXaw/src/TextTr.c319
-rw-r--r--libXaw/src/Tip.c1276
-rw-r--r--libXaw/src/Toggle.c1261
-rw-r--r--libXaw/src/Tree.c2031
-rw-r--r--libXaw/src/Vendor.c1051
-rw-r--r--libXaw/src/Viewport.c2201
-rw-r--r--libXaw/src/XawI18n.c213
-rw-r--r--libXaw/src/XawI18n.h240
-rw-r--r--libXaw/src/XawIm.c3221
-rw-r--r--libXaw/src/XawInit.c197
-rw-r--r--libXaw/src/sharedlib.c355
-rw-r--r--libXaw/xaw6.pc.in24
-rw-r--r--libXaw/xaw7.pc.in24
235 files changed, 78510 insertions, 119244 deletions
diff --git a/libXaw/AUTHORS b/libXaw/AUTHORS
deleted file mode 100644
index e69de29bb..000000000
--- a/libXaw/AUTHORS
+++ /dev/null
diff --git a/libXaw/COPYING b/libXaw/COPYING
index dcbab5e83..2c02555f6 100644
--- a/libXaw/COPYING
+++ b/libXaw/COPYING
@@ -1,169 +1,142 @@
-Copyright 1985-1990, 1994, 1998 The Open Group
-Copyright 2003-2004 Roland Mainz <roland.mainz@nrubsig.org>
-
-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.
-
-
-Copyright (c) 1998-1999 by The XFree86 Project, 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 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.
-
-
-Copyright 1991 by OMRON Corporation
-
-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 OMRON not be used in advertising or
-publicity pertaining to distribution of the software without specific,
-written prior permission. OMRON makes no representations about the
-suitability of this software for any purpose. It is provided "as is"
-without express or implied warranty.
-
-OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-OMRON 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 TORTUOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-
-Copyright 1987-1998 by 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 name of Digital 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.
-
-
-Copyright 1989 Prentice Hall
-
-Permission to use, copy, modify, and distribute this software for any
-purpose and without fee is hereby granted, provided that the above
-copyright notice appear in all copies and that both the copyright notice
-and this permission notice appear in supporting documentation.
-
-Prentice Hall and the authors disclaim all warranties with regard
-to this software, including all implied warranties of merchantability and
-fitness. In no event shall Prentice Hall or the authors be liable
-for any special, indirect or cosequential 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.
-
-
-(c) Copyright 2003 Danny Backx <danny.backx@skynet.be>
-(c) Copyright 2003-2004 Roland Mainz <roland.mainz@nrubsig.org>
-
-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
-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.
-
-Except as contained in this notice, the names 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 said
-copyright holders.
-
-
-
-Copyright 1985, 1986, 1987, 1988, 1989, 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 1985, 1986, 1987, 1988, 1989, 1991
-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.
+Copyright 1985-1990, 1994, 1998 The Open Group
+Copyright 2003-2004 Roland Mainz <roland.mainz@nrubsig.org>
+
+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.
+
+
+Copyright (c) 1998-1999 by The XFree86 Project, 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 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.
+
+
+Copyright 1991 by OMRON Corporation
+
+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 OMRON not be used in advertising or
+publicity pertaining to distribution of the software without specific,
+written prior permission. OMRON makes no representations about the
+suitability of this software for any purpose. It is provided "as is"
+without express or implied warranty.
+
+OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+OMRON 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 TORTUOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+
+Copyright 1987-1998 by 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 name of Digital 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.
+
+
+Copyright 1989 Prentice Hall
+
+Permission to use, copy, modify, and distribute this software for any
+purpose and without fee is hereby granted, provided that the above
+copyright notice appear in all copies and that both the copyright notice
+and this permission notice appear in supporting documentation.
+
+Prentice Hall and the authors disclaim all warranties with regard
+to this software, including all implied warranties of merchantability and
+fitness. In no event shall Prentice Hall or the authors be liable
+for any special, indirect or cosequential 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.
+
+
+Copyright 1985, 1986, 1987, 1988, 1989, 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 1985, 1986, 1987, 1988, 1989, 1991
+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.
diff --git a/libXaw/ChangeLog b/libXaw/ChangeLog
deleted file mode 100644
index 3d35405a7..000000000
--- a/libXaw/ChangeLog
+++ /dev/null
@@ -1,748 +0,0 @@
-commit 4ec346977273cc217b22a9225cb0d90351e6069c
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Sat Oct 17 14:45:39 2009 -0700
-
- libXaw 1.0.7
-
- Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
-
-commit d158018aad18552c5788df38de40ef50b7652dde
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Fri Oct 9 16:14:59 2009 -0700
-
- Move Xaw specification document from xorg-docs module to spec/*
-
- Makefile support added to build postscript, text & html output,
- and install it to ${docdir}, if groff is found and --disable-docs
- was not specified
-
- Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
-
-commit b5a23647f0bbd68f226e7e03496144f838c09000
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Fri Oct 9 11:02:07 2009 -0700
-
- Migrate to xorg macros 1.3 & XORG_DEFAULT_OPTIONS
-
- Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
-
-commit b512bfc3fb5c489f4e1ef6529f7632bd70b9f461
-Author: Bernhard R. Link <brlink@debian.org>
-Date: Fri Aug 18 16:29:10 2006 +0200
-
- Xaw's tooltips remove timers not belonging to them
-
- Xaw's Tips.c registers and releases timers for tooltips to show,
- but does not remember a timer already triggered. Thus it releases
- timers no longer belonging to it but to other users of Xt Timeouts
- within the same program. (This even happens very often, as Xt reuses
- old TimeEventRecs, so the next one adding a timeout will get exactly
- this number.)
-
- Section 7.1.3 of Intrinsic.txt.gz says:
-
- | Note that timeouts are automatically removed once they trig-
- | ger.
-
- src/Repeater.c correctly forgets the timer when it is triggered, but
- src/StripChart.c does very strange things with Xt Timeouts, which
- very likely will have similar problems.
-
- X.Org bug#9936 <http://bugs.freedesktop.org/show_bug.cgi?id=9936>
-
-commit 2ef9c2d730200246405cfdfc882a66fbd6728a92
-Author: Adam Jackson <ajax@redhat.com>
-Date: Thu Jul 2 13:37:13 2009 -0400
-
- libXaw 1.0.6
-
-commit 9d9facf604d2355842a3834664a1ddc233d4d1e1
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Mon Feb 2 20:34:32 2009 -0800
-
- Add README with pointers to mailing list, bugzilla & git repos
-
- Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
-
-commit 654fd414b7ebe3a0fccd6712bf52666d42d2a711
-Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
-Date: Fri Jan 9 20:24:10 2009 -0200
-
- Changed AsciiSrc widget to use only binary selection transfers.
-
- Conversion from multi byte to single byte text format, and
- vice versa, frequently doesn't do what the user want, so,
- operate only on literal/binary selection transfers.
-
-commit 0b9de9e69e95872dd3eddbe5c1602e42c27c53e1
-Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
-Date: Fri Jan 9 19:18:36 2009 -0200
-
- Compile warning fixes.
-
- This uses XORG_CHANGELOG macro to properly work with the "git-log"
- to "git log" change (required to pass "make distcheck"), uses the
- XORG_CWARNFLAGS macro. Most gcc 4.3 and sparse warnings corrected.
-
-commit 420efdba52593bf13d97c7e001b64caccd04cd5d
-Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
-Date: Sat Nov 8 16:04:23 2008 -0800
-
- Fixed compile/install on darwin
-
-commit a48021b05693c74bd03b51b82abec4ce3ba24dc5
-Author: Peter Breitenlohner <peb@mppmu.mpg.de>
-Date: Sat Nov 8 15:44:22 2008 +0100
-
- xaw6 doesn't depend on xpm
-
-commit 6dab13545cd26efd46dbb58a18ae651c56c7d76d
-Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
-Date: Fri Nov 7 15:45:32 2008 -0200
-
- libXaw version 1.0.5.
-
-commit 90a343b898dabb8cac5ec831b45e20b1abd306ac
-Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
-Date: Fri Nov 7 15:36:15 2008 -0200
-
- Correct build on systems that did not yet upgrade to libtool-2.2
-
- Also correct lib Changelog generation by running "git log" instead of
- "git-log", what should work on all versions of git.
- The libtool correction issue is probably a hack over several other
- hacks. The proper correction should be to ensure that AC_PROG_SED is run
- before the AC_CONFIG_COMMANDS([libtool_hack],...), what appears to be the
- case in latest libtool, but not 1.5.x.
-
-commit 8256de6062eb150c612ef09a1ae855de0a0cba6c
-Author: Lee Leahu <freedesktop-bugs@dyweni.com>
-Date: Fri Nov 7 11:00:15 2008 -0500
-
- Fix configure error when using libtool-2.2.*
-
- The configure script errors out when preparing to compile libXaw.
-
- The error occurs with libtool-2.2.6a and libtool-2.2.4.
-
- The error does not occur with libtool-1.5.26.
-
- The error is caused because the libtool file is not created by the
- time sed attempts to fix the SONAME.
-
- Libtool-2.2 made an incompatible change to LT_INIT (which replaces
- AC_PROG_LIBTOOL): it generates the libtool script at the AC_OUTPUT,
- rather then right after being called. Sometimes, configure scripts
- call configure to run tests or read its settings; in those cases,
- LT_OUTPUT can be appended to force libtool generation earlier.
-
- There is one caveat: libtool is still (re)generated during AC_OUTPUT,
- so in our case, even adding LT_OUTPUT wouldn't help, because the sed
- changes are overwritten.
-
- AFAICS the solution is to use AC_CONFIG_COMMANDS; patch against
- current git master attached.
-
- Report and patch from: http://bugs.freedesktop.org/show_bug.cgi?id=18073
-
- Signed-off-by: James Cloos <cloos@jhcloos.com>
-
-commit 012e73faab8dc8617c6da4679715dae14f6cddd4
-Author: Daniel Stone <daniel@fooishbar.org>
-Date: Fri Aug 15 18:25:53 2008 +0300
-
- Remove last remaining vestiges of Xprint support
-
- Occasionally I think I'm smart enough to commit without testing, then I
- break the build. Bad Daniel. No biscuit.
-
-commit 3cbe136d633d18b263f596638d55f8f13fabd540
-Author: Daniel Stone <daniel@fooishbar.org>
-Date: Fri Aug 15 17:59:59 2008 +0300
-
- Remove Xaw8 (Xprint)
-
- Remove Xaw8, which only provided Xprint support over Xaw7.
-
-commit 89416252097c97833c879dc2be56d2b6cd6a8f88
-Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
-Date: Wed Jul 23 18:08:09 2008 -0300
-
- Minor set of trivial corrections.
-
- Ansify two non ansified functions definitions.
- Don't declare a variable that is not used.
- Actually declare the prototype a function that is defined unconditionally.
-
-commit 43cb3d388eae5a814ac4f36edca5780a6ea4934f
-Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
-Date: Fri Jul 11 17:21:18 2008 -0300
-
- Remove almost 10 year old notice about Xaw development from man page.
-
- Correct a problem when deleting text portions that may lead to a crash
- due to accessing released memory; in most cases it would crash in
- AsciiSink.c:AsciiPreparePaint() when calling XtMalloc() with a negative
- value.
- The problem was due to not properly removing/updating XawTextEntity
- objects. One case that can cause the problem to happen is with patch files
- with syntax highlight, and sequentially selecting a deleting them. At one
- point attempt to remove the "first" XawTextAnchor, and also incorrectly
- update it's offset value to a negative value. The problem is not easy
- to reproduce as it requires a file with a special pattern (in this case
- the syntax highlight used for patch) and it would fail after removing
- all "entities" of the second "anchor".
-
-commit 0b6058db1ce978f17d6eb99f5b253b813a133294
-Author: Dan Nicholson <dbn.lists@gmail.com>
-Date: Thu Jul 10 16:21:06 2008 -0700
-
- Use sed instead of ed for libtool SONAME hacking
-
- Since sed is already required by autoconf and libtool, it makes sense to
- use it instead of pulling in ed, too. The editing script only has to be
- changed slightly to accommodate this. The resulting libtool has been
- checked to be the same on Linux (GNU sed) and HP-UX.
-
- Building libXaw was the only reason I have ed on my system anymore.
- Maybe someday this can be fixed properly.
-
-commit b605a26ff481259d4aca466ae68142f53ced43ce
-Author: Dan Nicholson <dbn.lists@gmail.com>
-Date: Thu Jul 10 15:37:51 2008 -0700
-
- Be more robust using ed for the libtool hacks
-
- Two failures during the libtool SONAME hacking that were being ignored
- are now fixed:
- * ed was called without first checking that it exists
- * ed could fail in editing the libtool script
-
-commit fa7dd561c40ce3dcd8252b5eda09258836659d66
-Author: Colin Harrison <colin.harrison-at-virgin.net>
-Date: Wed Apr 23 10:18:15 2008 +0100
-
- Add MINGW32 definition
-
-commit 8c0f99b1d1f0d5d3b734a43eddb10bd8c5397aed
-Author: Matthieu Herrb <matthieu.herrb@laas.fr>
-Date: Sun Mar 9 00:24:33 2008 +0100
-
- Makefile.am: nuke RCS Id
-
-commit 857781383ef123a31a84a766507a8e11b9e3f778
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Tue Aug 21 13:19:01 2007 -0700
-
- Version bump: 1.0.4
-
-commit cf90924541fe9af09c582ddd60953c4a08ceb004
-Author: Eric S. Raymond <esr@thyrsus.com>
-Date: Sun Jan 14 10:34:00 2007 -0800
-
- Bug #9649: Bad markup on XAw.3x
-
- X.Org Bugzilla #9649 <https://bugs.freedesktop.org/show_bug.cgi?id=9649>
-
-commit 0515e29cfc0ed99b06dcf9399a0504bde7c81d93
-Author: Daniel Drake <ddrake@brontes3d.com>
-Date: Tue May 29 12:21:00 2007 -0800
-
- Bug #11091: libXaw COPYING file
-
- X.Org Bugzilla #11091 <https://bugs.freedesktop.org/show_bug.cgi?id=11091>
- Attachment #10122 <https://bugs.freedesktop.org/attachment.cgi?id=10122>
-
-commit ee6e61225943ec77c8b97ae8115ce37c42e8c16e
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Wed Apr 11 20:15:00 2007 -0700
-
- Use iswalnum() if it's present as a function, not just if it's #defined
-
- Also fixes X.Org bugzilla #8564
-
-commit eccdec2bf4680b42036f03a7ce0ae9bfe5ef5374
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Wed Jan 3 21:30:22 2007 -0800
-
- Version bump: 1.0.3
-
-commit a2d3487dd5422ef273acae83cc20078a1a9f37c6
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Wed Jan 3 21:19:37 2007 -0800
-
- Replace static ChangeLog with dist-hook to generate from git log
-
-commit c653eb5742b0ef50570a8371d7787eeb1e7b5667
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Wed Jan 3 21:12:07 2007 -0800
-
- Add call to PKG_PROG_PKG_CONFIG so configure doesn't break with --disable-xaw6
-
-commit 32d0891b982b4cea322bdc2d8ecd32e912c70f54
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Wed Jan 3 21:09:36 2007 -0800
-
- Add *~ to .gitignore to skip over patch/emacs droppings
-
-commit 21a1c92130ef304607b696c8e5db2185a89a4ba7
-Author: Alan Coopersmith <alan.coopersmith@sun.com>
-Date: Thu Jul 13 14:58:49 2006 -0700
-
- renamed: .cvsignore -> .gitignore
-
-commit e487a686b1e251936c0926ff124c1b754814c7f5
-Author: Adam Jackson <ajax@nwnk.net>
-Date: Thu Apr 27 00:03:33 2006 +0000
-
- Bump to 1.0.2
-
-commit 580c3f12423e15192f4eff456ebf2f6246318bd9
-Author: Adam Jackson <ajax@nwnk.net>
-Date: Mon Apr 3 19:23:16 2006 +0000
-
- Bug #6404: Cygwin build fixes (Yaakov Selkowitz)
-
-commit 735d010ee2c6dc2a6279dc16d1c9a1128c59d91a
-Author: Kevin E Martin <kem@kem.org>
-Date: Wed Dec 21 02:30:05 2005 +0000
-
- Update package version for X11R7 release.
-
-commit 3b81b8af98277206eea791f0f9e7cf5a617a4b20
-Author: Adam Jackson <ajax@nwnk.net>
-Date: Mon Dec 19 16:28:26 2005 +0000
-
- Stub COPYING files
-
-commit 7f10a61e2cb38bbfee07fed4596ae176be3b7bb4
-Author: Kevin E Martin <kem@kem.org>
-Date: Thu Dec 15 00:24:28 2005 +0000
-
- Update package version number for final X11R7 release candidate.
-
-commit 12566cf69c51989ee932e812db0f2186c64b540b
-Author: Kevin E Martin <kem@kem.org>
-Date: Thu Dec 8 17:55:18 2005 +0000
-
- Add configure options to allow hard-coded paths to be changed.
-
-commit a108ef7e6a7864179bdf16b3adf08428dd66f4ad
-Author: Kevin E Martin <kem@kem.org>
-Date: Tue Dec 6 22:48:42 2005 +0000
-
- Change *man_SOURCES ==> *man_PRE to fix autotools warnings.
-
-commit 570029e344a36d8d0bcab5b2ea5b4f87ea508535
-Author: Kevin E Martin <kem@kem.org>
-Date: Mon Dec 5 17:48:19 2005 +0000
-
- Fix libtool hack to work with older libtools.
-
-commit 28645b0df40bcd428d98eb18aeb8d0875f12f4e3
-Author: Kevin E Martin <kem@kem.org>
-Date: Sat Dec 3 05:49:42 2005 +0000
-
- Update package version number for X11R7 RC3 release.
-
-commit 80a520a1a1724e0ba00c94139ca871f1944b4be1
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Mon Nov 28 22:03:05 2005 +0000
-
- Change *mandir targets to use new *_MAN_DIR variables set by xorg-macros.m4
- update to fix bug #5167 (Linux prefers *.1x man pages in man1 subdir)
-
-commit 651a3e0a2dcead0aad75734b438bf900de4f7c5c
-Author: Kevin E Martin <kem@kem.org>
-Date: Sun Nov 27 16:44:43 2005 +0000
-
- Fix Xaw6 to build without Xpm.
-
-commit 1c36da4ef2e308cb5b7a80b1e914fd637d622fae
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Mon Nov 21 03:24:10 2005 +0000
-
- libXaw6 shouldn't depend on libXpm, only Xaw7 & Xaw8 should
-
-commit 7cec5bf0ee960356821bea08a30feb92dcbf186e
-Author: Kevin E Martin <kem@kem.org>
-Date: Sat Nov 19 07:15:40 2005 +0000
-
- Update pkgconfig files to separate library build-time dependencies from
- application build-time dependencies, and update package deps to work
- with separate build roots.
-
-commit cb243066d12834c2f63a82f9695761a01400e26f
-Author: Kevin E Martin <kem@kem.org>
-Date: Wed Nov 9 21:19:12 2005 +0000
-
- Update package version number for X11R7 RC2 release.
-
-commit db01f1c4c84768e818dbfa28556f246b91c1391d
-Author: Kean Johnson <kean@armory.com>
-Date: Tue Nov 8 06:33:25 2005 +0000
-
- See ChangeLog entry 2005-11-07 for details.
-
-commit ca1c1425e53143899f212c6e783eec1eeb59e481
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Fri Oct 28 17:28:50 2005 +0000
-
- Add libXaw.so.N -> libXawN.so.N links for platforms where ldconfig doesn't
- add them automatically for you.
-
-commit 6f7e7194574ef1bed6ba7db4304d9e064c4f24c7
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Mon Oct 24 17:33:04 2005 +0000
-
- Add -DOLDXAW to flags for building libXaw6 to disable features that are
- only supposed to be in the newer versions.
-
-commit 7801c38f76000d4b93cc2208ad80e04505c6ff85
-Author: Adam Jackson <ajax@nwnk.net>
-Date: Sun Oct 23 00:50:43 2005 +0000
-
- Add xext check
-
-commit 8c7f3e277321213fc2798a73a88e222f145c3b59
-Author: Kevin E Martin <kem@kem.org>
-Date: Wed Oct 19 02:48:09 2005 +0000
-
- Update package version number for RC1 release.
-
-commit 4836a84ebcc266c35be110c7f708d0b221360e91
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Tue Oct 18 00:00:08 2005 +0000
-
- Use @LIB_MAN_SUFFIX@ instead of $(LIB_MAN_SUFFIX) in macro substitutions to
- work better with BSD make
-
-commit 0f4847e12e3a3b7ce3cbfaaf282a92e3f1be2073
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Thu Oct 13 04:26:32 2005 +0000
-
- Missed changelog
-
-commit ec0fdd5646ab4f4642a73860b24a155560c94616
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Thu Oct 13 04:25:46 2005 +0000
-
- Add generated man pages to .cvsignores
-
-commit 7b0d5f78d4e853014b6110066208ba237bd8c2a3
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Thu Oct 13 04:07:32 2005 +0000
-
- Use sed to fill in variables in man page
-
-commit 2692d1b40d46d3d97526664c2bc0130eb1900197
-Author: Kevin E Martin <kem@kem.org>
-Date: Wed Oct 5 21:34:53 2005 +0000
-
- Add old-doc files to EXTRA_DIST
- Add Template.c to install list
- Add sharedlib.c to EXTRA_DIST
- Remove the unneeded Makefile.am's
-
-commit bb18f5fb61626da0a5422a36830e57cd070981c2
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Sat Jul 30 19:53:03 2005 +0000
-
- Check for headers used by XawI18N.h and define the needed HAS_*_H symbols.
-
-commit 223c18dd13a524d144b856118b6f2ec036ae106d
-Author: Kevin E Martin <kem@kem.org>
-Date: Fri Jul 29 21:22:50 2005 +0000
-
- Various changes preparing packages for RC0:
- - Verify and update package version numbers as needed
- - Implement versioning scheme
- - Change bug address to point to bugzilla bug entry form
- - Disable loadable i18n in libX11 by default (use --enable-loadable-i18n to
- reenable it)
- - Fix makedepend to use pkgconfig and pass distcheck
- - Update build script to build macros first
- - Update modular Xorg version
-
-commit 3ce58da9ecd5337738b8b35cdeaab64b32b521cd
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Wed Jul 27 23:59:16 2005 +0000
-
- Set build_v8=yes when using autodetection to decide whether or not to build
- Xaw8 and libXp is found, so that it actually is built.
-
-commit b4e81526a0013ebdc8aa8c0dfb427db850213a7b
-Author: Daniel Stone <daniel@fooishbar.org>
-Date: Fri Jul 22 07:19:44 2005 +0000
-
- Fix autodetection of Xprint and quote arguments properly.
-
-commit e4ea145e991e947483054d85412002e64aeb08ea
-Author: Daniel Stone <daniel@fooishbar.org>
-Date: Sat Jul 16 06:30:43 2005 +0000
-
- Set version numbers to 6.1.0, 7.0.0 and 8.0.0 with -version-number.
-
-commit cf08b572fb22334e29ec56930f3cecba1dc18629
-Author: Adam Jackson <ajax@nwnk.net>
-Date: Thu Jul 14 05:56:32 2005 +0000
-
- style fix. don't use +=, just do conditionally defined variables. fixes
- build on a particularly picky platform.
-
-commit 3608270b1d1685082d9dab401d0e7d1aa9c91ba8
-Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
-Date: Sun Jul 10 19:53:50 2005 +0000
-
- grep -q is sadly not universally supported, use grep > /dev/null instead
-
-commit c22f98ed4fae3ccde3ff9a272b019a67fbc78c55
-Author: Keith Packard <keithp@keithp.com>
-Date: Sat Jul 9 06:11:58 2005 +0000
-
- Add .cvsignore files
- Build all three versions in src. Hack libtool to set SONAME in the libtool
- output to match old libXaw file names. Still missing is the creation of
- appropriate symlinks from libXaw.so.6 -> libXaw6.so.6 et al so that
- libraries not yet installed will work properly.
-
-commit 5fc8851308321a65a6987aedea6618d056ff7879
-Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
-Date: Wed Jul 6 19:26:27 2005 +0000
-
- - Xaw/xaw.m4: Change help string to say "enable xprint" instead of "disable
- xprint"
- - symlink.sh: Rename Bitmap-co.ad to Bitmap-color.ad. Add bitmaps for the
- bitmap application. Add xdbedizzy.sgml.
- - xc/programs/xdbedizzy/: Conditionalize use of xprint
- - remove font/arabic-misc/README and font/mutt-misc/README
-
-commit d4f214b6255184a2cbf571c02409a0e3f4405fb0
-Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
-Date: Tue Jul 5 22:51:11 2005 +0000
-
- Add build systems for xlogo, xlsatoms, xlsclients, xmag, xman, xmessage,
- xmh, xmore. lib/Xaw/xaw.m4: Add an AM_CONDITIONAL and a shell variable
- xaw_use_xprint symlink.sh: add some extra files for xgc, xinit,
- xkbcomp, xlogo, xmb, and xmodmap xc/programs/xmore/xmore.c:
- Conditionalize use of xprint
-
-commit 0e08a2ffb4b063b96d25dd7490caf91cb5bb6126
-Author: Daniel Stone <daniel@fooishbar.org>
-Date: Sun Jul 3 07:00:56 2005 +0000
-
- Add Xtrans definitions (FONT_t, TRANS_CLIENT) to clean up warnings.
- Add XSERV_t, TRANS_SERVER, TRANS_REOPEN to quash warnings.
- Add #include <dix-config.h> or <xorg-config.h>, as appropriate, to all
- source files in the xserver/xorg tree, predicated on defines of
- HAVE_{DIX,XORG}_CONFIG_H. Change all Xfont includes to
- <X11/fonts/foo.h>.
-
-commit f8e7a4ec6117006123dfdc7c970f9f1392bf7d84
-Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
-Date: Tue Jun 28 13:30:15 2005 +0000
-
- lib/Xaw/Makefile.am: install the libXaw.so symlink in $(DESTDIR)$(libdir) -
- pointed out by Stefan Dirsch
- lib/Xaw/man/Makefile.am: add Xaw.man to EXTRA_DIST to make it distcheck.
-
-commit c35ec1561bfc9bf8d79b68a071619f4904764002
-Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
-Date: Mon Jun 27 21:35:04 2005 +0000
-
- - Fix string test in lib/Xaw/xaw.m4
- - Xaw/Xaw7/Makefile.am: add -DXAW7
- - add build system for editres
-
-commit f6c298f70e13ecf37b4824f6ac01007b876dd3cb
-Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
-Date: Fri Jun 24 22:54:24 2005 +0000
-
- Add m4 macro to check for versions of the Xaw library
-
-commit e3e78cd7815716d8af729c19833bec51d7e3f19c
-Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
-Date: Fri Jun 24 21:20:32 2005 +0000
-
- Change the so names to libXaw{6,7,8}.so and install a symlink from
- libXaw.so to the newest version installed
-
-commit cc658b573a13f36868c5a2263e0b3ff8d0230b86
-Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
-Date: Mon May 23 21:47:37 2005 +0000
-
- Conditionally include config.h in xc/lib/Xaw/*.c
-
-commit 62b680d868fbe4bfdf1af6e6067d0ef27f773559
-Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
-Date: Mon May 23 20:01:46 2005 +0000
-
- Check in build system for Xaw
-
-commit f9faf0399180abbc89e44d5077b9070294c2f507
-Author: Egbert Eich <eich@suse.de>
-Date: Thu Jan 27 10:22:11 2005 +0000
-
- Muffle gcc4 sentinel (trailing NULL in varargs list) check (Marcus
- Meissner, Bugzilla #2392).
-
-commit 33f42c97af49095dd9a735c747c79b844e6afc25
-Author: Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
-Date: Sat Dec 4 00:42:47 2004 +0000
-
- Encoding of numerous files changed to UTF-8
-
-commit 4904540c4399fed01ce0d1977a0b5d3af173b66c
-Author: Egbert Eich <eich@suse.de>
-Date: Tue Sep 21 17:57:36 2004 +0000
-
- Merged over libXpm security fix provided by Chris Evans, Matthieu Herrb and
- Alan Coopersmith from release 6.8.1.
- Fail during initialization with error if font/fontset is not set for
- widget. This prevents a sig11 later when the non-existent font/fontset
- structs are referenced.
- Check if xf86Info.kbdProc pointer is really set before calling it on abort
- as this pointer won't be set if the new modular keyboard driver is used
- (Matthias Hopf).
- Added new libs to the bindist control files.
- Removed inclusion of unnecessary kernel header on Linux. This may fail in
- an -ansi environment.
-
-commit c7f720ae3f0dea94bc6e9eb9bdbbf00e6bb16b24
-Author: Kevin E Martin <kem@kem.org>
-Date: Thu Sep 2 01:10:29 2004 +0000
-
- Bump major version number of libXaw (Bug #1273).
-
-commit 93df4ff66635ea936d57723d317d0a0cdaa55e62
-Author: Kristian Høgsberg <krh@redhat.com>
-Date: Mon Aug 16 16:36:14 2004 +0000
-
- As discussed and agreed on on the release-wranglers meeting of August 16,
- I'm committing the patch from bug #1060 to back out unconditional
- Xprint functionality.
- Back out Xprint changes.
- Revert xman to CVS of June 5, revert xlogo to CVS of May 8, revert xedit to
- CVS of April 25, to back out unconditional Xprint support.
- Fix up Xprint config logic to be like the rest of the extensions:
- BuildXprint is a one-stop option for disabling everything Xprint
- related. XprtServer controls building Xprt, BuildXprintLib controls
- building Xprint libs and BuildXprintClients controls building clients
- related to Xprint. BuiltXprint defaults to YES and the other options
- respects relevant settings, i.e. BuildServer and BuildServersOnly.
- Build Xaw regardless of BuildXprintLib setting.
- Only build xphelloworld, xplsprinters and xprehashprinterlist when
- BuildXprintClients it YES. Disable building xmore, it has always
- supported XawPrintShell.
- Make Xprint support depend on BuildXprintLib.
-
-commit c0753d383d2b610863873fda5a1d2c65674e37b0
-Author: Roland Mainz <roland.mainz@nrubsig.org>
-Date: Thu Jul 29 00:40:34 2004 +0000
-
- Fix for https://freedesktop.org/bugzilla/show_bug.cgi?id=938 - Update
- XawPrintShell per feedback and review comments.
-
-commit 021dac1e5b9394a228dfe69f10307a2596c48135
-Author: Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de>
-Date: Tue Jun 29 15:53:10 2004 +0000
-
- #Bug 806: undefined reference to xawPrintShellWidgetClass in Xaw6 for
- cygwin. Wrap references to xawPrintShellWidgetClass with #ifndef
- OLDXAW.
-
-commit fcb62987b01b7166a4b1aceb677a2a777e6ba482
-Author: Egbert Eich <eich@suse.de>
-Date: Thu May 6 17:31:17 2004 +0000
-
- BugZilla #601: Fixing makedepend choking on floating point exception
- because CHAR_BIT is defined to __CHAR_BIT__ which is a compiler
- intrinsic define. BugZilla #605: Fixing build on IA64 which is broken
- due to the inclusion of the kernel header asm/page.h. Kernel headers
- however don't work with
- -ansi. The inclusion of asm/page.h can however savely be removed as it
- there are plenty of other ways to determine the page size.
-
-commit 39c07a5fa73bcbb48d5de8985d5f2540b65e470b
-Author: Egbert Eich <eich@suse.de>
-Date: Fri Apr 23 18:43:38 2004 +0000
-
- Merging XORG-CURRENT into trunk
-
-commit 5aa2c5d2169757ae410f1d13c5279fd4030b72f0
-Author: Roland Mainz <roland.mainz@nrubsig.org>
-Date: Tue Apr 13 23:32:21 2004 +0000
-
- file PrintShell.c was initially added on branch XPRINT.
-
-commit 31c961a93829b50fa0694a431fd1574cc2c67ea2
-Author: Roland Mainz <roland.mainz@nrubsig.org>
-Date: Tue Apr 13 23:32:21 2004 +0000
-
- file PrintSP.h was initially added on branch XPRINT.
-
-commit 04af3b0444e8514173c44fac44864f15119f93b4
-Author: Roland Mainz <roland.mainz@nrubsig.org>
-Date: Tue Apr 13 23:32:21 2004 +0000
-
- file Print.h was initially added on branch XPRINT.
-
-commit f601320d34173365050a04d8f1ec661ee1f541dd
-Author: Egbert Eich <eich@suse.de>
-Date: Sun Mar 14 08:32:04 2004 +0000
-
- Importing vendor version xf86-4_4_99_1 on Sun Mar 14 00:26:39 PST 2004
-
-commit d01cf1b69fd5444606b9183db6114a2972dcba0c
-Author: Egbert Eich <eich@suse.de>
-Date: Wed Mar 3 12:11:23 2004 +0000
-
- Importing vendor version xf86-4_4_0 on Wed Mar 3 04:09:24 PST 2004
-
-commit 0f9ae1ce47cc2271cb61887136c9a6b56b9ec4ba
-Author: Egbert Eich <eich@suse.de>
-Date: Thu Feb 26 13:35:32 2004 +0000
-
- readding XFree86's cvs IDs
-
-commit 0011f36c334046cce1126d4e3b45fead8fac551c
-Author: Egbert Eich <eich@suse.de>
-Date: Thu Feb 26 09:22:42 2004 +0000
-
- Importing vendor version xf86-4_3_99_903 on Wed Feb 26 01:21:00 PST 2004
-
-commit c75f90ead1132640b2848babda6625c800528a8c
-Author: Egbert Eich <eich@suse.de>
-Date: Thu Jan 29 08:08:05 2004 +0000
-
- Importing vendor version xf86-012804-2330 on Thu Jan 29 00:06:33 PST 2004
-
-commit 04a6533a94a1e0800c1806617b6dda48f30f9e6f
-Author: Kaleb Keithley <kaleb@freedesktop.org>
-Date: Fri Dec 19 20:54:35 2003 +0000
-
- XFree86 4.3.99.902 (RC 2)
-
-commit ffc55826a7c787dd65d3dd577fa0ac7a111540e3
-Author: Kaleb Keithley <kaleb@freedesktop.org>
-Date: Tue Nov 25 19:28:09 2003 +0000
-
- XFree86 4.3.99.16 Bring the tree up to date for the Cygwin folks
-
-commit 384ac455a6cd5d23dfa24f9939f3ec04f1e5de46
-Author: Kaleb Keithley <kaleb@freedesktop.org>
-Date: Fri Nov 14 16:48:48 2003 +0000
-
- XFree86 4.3.0.1
-
-commit 81ad93fde745d556aaa3880deabf3674bb3db49e
-Author: Kaleb Keithley <kaleb@freedesktop.org>
-Date: Fri Nov 14 16:48:48 2003 +0000
-
- Initial revision
-
-commit b6e0280a57c4dfa572770241a42fe6a476109516
-Author: Kaleb Keithley <kaleb@freedesktop.org>
-Date: Fri Nov 14 15:54:38 2003 +0000
-
- R6.6 is the Xorg base-line
diff --git a/libXaw/INSTALL b/libXaw/INSTALL
deleted file mode 100644
index 54caf7c19..000000000
--- a/libXaw/INSTALL
+++ /dev/null
@@ -1,229 +0,0 @@
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
-Foundation, Inc.
-
- This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
- These are generic installation instructions.
-
- 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 only 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. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. 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.
-
-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=c89 CFLAGS=-O2 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 must use a version of `make' that
-supports the `VPATH' variable, such as 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 `..'.
-
- If you have to use a `make' that does not support the `VPATH'
-variable, you have 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.
-
-Installation Names
-==================
-
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' 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.
-
-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 `--target=TYPE' option 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
-
-will cause the specified gcc to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-`configure' Invocation
-======================
-
- `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
- Print a summary of the options to `configure', and exit.
-
-`--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.
-
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
-
diff --git a/libXaw/Makefile.am b/libXaw/Makefile.am
index 16951fea5..d608a50f2 100644
--- a/libXaw/Makefile.am
+++ b/libXaw/Makefile.am
@@ -1,47 +1,49 @@
-SUBDIRS = include src man spec
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA =
-
-if BUILD_XAW6
-
-pkgconfig_DATA += xaw6.pc
-if PLATFORM_DARWIN
-DEFAULT_LIB = libXaw.6.@LIBEXT@
-else
-DEFAULT_LIB = libXaw6.@LIBEXT@
-endif
-
-endif
-
-if BUILD_XAW7
-
-pkgconfig_DATA += xaw7.pc
-if PLATFORM_DARWIN
-DEFAULT_LIB = libXaw.7.@LIBEXT@
-else
-DEFAULT_LIB = libXaw7.@LIBEXT@
-endif
-
-endif
-
-EXTRA_DIST = xaw6.pc.in \
- xaw7.pc.in \
- autogen.sh \
- old-doc/Changelog \
- old-doc/CHANGES \
- ChangeLog
-
-if !PLATFORM_WIN32
-install-exec-hook:
- cd $(DESTDIR)$(libdir) && rm -f libXaw.@LIBEXT@ && ln -s $(DEFAULT_LIB) libXaw.@LIBEXT@
-endif
-
-MAINTAINERCLEANFILES=ChangeLog
-
-.PHONY: ChangeLog
-
-ChangeLog:
- $(CHANGELOG_CMD)
-
-dist-hook: ChangeLog
+SUBDIRS = include src man specs
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA =
+
+if BUILD_XAW6
+
+pkgconfig_DATA += xaw6.pc
+if PLATFORM_DARWIN
+DEFAULT_LIB = libXaw.6.@LIBEXT@
+else
+DEFAULT_LIB = libXaw6.@LIBEXT@
+endif
+
+endif
+
+if BUILD_XAW7
+
+pkgconfig_DATA += xaw7.pc
+if PLATFORM_DARWIN
+DEFAULT_LIB = libXaw.7.@LIBEXT@
+else
+DEFAULT_LIB = libXaw7.@LIBEXT@
+endif
+
+endif
+
+MAINTAINERCLEANFILES = ChangeLog INSTALL
+EXTRA_DIST = \
+ autogen.sh \
+ old-doc/Changelog \
+ old-doc/CHANGES
+
+install-exec-hook:
+ cd $(DESTDIR)$(libdir) && rm -f libXaw.@LIBEXT@ && $(LN_S) $(DEFAULT_LIB) libXaw.@LIBEXT@
+
+uninstall-local:
+ -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@
+
+
+.PHONY: ChangeLog INSTALL
+
+INSTALL:
+ $(INSTALL_CMD)
+
+ChangeLog:
+ $(CHANGELOG_CMD)
+
+dist-hook: ChangeLog INSTALL
diff --git a/libXaw/Makefile.in b/libXaw/Makefile.in
deleted file mode 100644
index 2124fa58d..000000000
--- a/libXaw/Makefile.in
+++ /dev/null
@@ -1,824 +0,0 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-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@
-@BUILD_XAW6_TRUE@am__append_1 = xaw6.pc
-@BUILD_XAW7_TRUE@am__append_2 = xaw7.pc
-subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(srcdir)/config.h.in \
- $(srcdir)/xaw6.pc.in $(srcdir)/xaw7.pc.in \
- $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
- config.guess config.sub depcomp install-sh ltmain.sh missing
-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)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = xaw6.pc xaw7.pc
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo " GEN " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-recursive \
- install-dvi-recursive install-exec-recursive \
- install-html-recursive install-info-recursive \
- install-pdf-recursive install-ps-recursive install-recursive \
- installcheck-recursive installdirs-recursive pdf-recursive \
- ps-recursive uninstall-recursive
-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 = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
-DATA = $(pkgconfig_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
- distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
- distdir dist dist-all distcheck
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
- { test ! -d "$(distdir)" \
- || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
- && rm -fr "$(distdir)"; }; }
-am__relativize = \
- dir0=`pwd`; \
- sed_first='s,^\([^/]*\)/.*$$,\1,'; \
- sed_rest='s,^[^/]*/*,,'; \
- sed_last='s,^.*/\([^/]*\)$$,\1,'; \
- sed_butlast='s,/*[^/]*$$,,'; \
- while test -n "$$dir1"; do \
- first=`echo "$$dir1" | sed -e "$$sed_first"`; \
- if test "$$first" != "."; then \
- if test "$$first" = ".."; then \
- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
- else \
- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
- if test "$$first2" = "$$first"; then \
- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
- else \
- dir2="../$$dir2"; \
- fi; \
- dir0="$$dir0"/"$$first"; \
- fi; \
- fi; \
- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
- done; \
- reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-ACLOCAL = @ACLOCAL@
-ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
-ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APP_MAN_DIR = @APP_MAN_DIR@
-APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CHANGELOG_CMD = @CHANGELOG_CMD@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CWARNFLAGS = @CWARNFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
-DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
-DSYMUTIL = @DSYMUTIL@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-FILE_MAN_DIR = @FILE_MAN_DIR@
-FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
-GREP = @GREP@
-GROFF = @GROFF@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBEXT = @LIBEXT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_MAN_DIR = @LIB_MAN_DIR@
-LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MISC_MAN_DIR = @MISC_MAN_DIR@
-MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
-MKDIR_P = @MKDIR_P@
-NMEDIT = @NMEDIT@
-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@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XAW6_CFLAGS = @XAW6_CFLAGS@
-XAW6_LIBS = @XAW6_LIBS@
-XAW7_CFLAGS = @XAW7_CFLAGS@
-XAW7_LIBS = @XAW7_LIBS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-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@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-distcleancheck_listfiles = @distcleancheck_listfiles@
-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@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = include src man spec
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = $(am__append_1) $(am__append_2)
-@BUILD_XAW6_TRUE@@PLATFORM_DARWIN_FALSE@DEFAULT_LIB = libXaw6.@LIBEXT@
-@BUILD_XAW6_TRUE@@PLATFORM_DARWIN_TRUE@DEFAULT_LIB = libXaw.6.@LIBEXT@
-@BUILD_XAW7_TRUE@@PLATFORM_DARWIN_FALSE@DEFAULT_LIB = libXaw7.@LIBEXT@
-@BUILD_XAW7_TRUE@@PLATFORM_DARWIN_TRUE@DEFAULT_LIB = libXaw.7.@LIBEXT@
-EXTRA_DIST = xaw6.pc.in \
- xaw7.pc.in \
- autogen.sh \
- old-doc/Changelog \
- old-doc/CHANGES \
- ChangeLog
-
-MAINTAINERCLEANFILES = ChangeLog
-all: config.h
- $(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-am--refresh:
- @:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
- $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- echo ' $(SHELL) ./config.status'; \
- $(SHELL) ./config.status;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- $(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure: $(am__configure_deps)
- $(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-
-config.h: stamp-h1
- @if test ! -f $@; then \
- rm -f stamp-h1; \
- $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
- else :; fi
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
- @rm -f stamp-h1
- cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in: $(am__configure_deps)
- ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
- rm -f stamp-h1
- touch $@
-
-distclean-hdr:
- -rm -f config.h stamp-h1
-xaw6.pc: $(top_builddir)/config.status $(srcdir)/xaw6.pc.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-xaw7.pc: $(top_builddir)/config.status $(srcdir)/xaw7.pc.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
- -rm -f libtool config.lt
-install-pkgconfigDATA: $(pkgconfig_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
- @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
- done
-
-uninstall-pkgconfigDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
-
-# 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; \
- ($(am__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"
-
-$(RECURSIVE_CLEAN_TARGETS):
- @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; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- 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 || \
- set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) config.h.in $(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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) config.h.in $(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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- $(am__remove_distdir)
- test -d "$(distdir)" || mkdir "$(distdir)"
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$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; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
- $(am__relativize); \
- new_distdir=$$reldir; \
- dir1=$$subdir; dir2="$(top_distdir)"; \
- $(am__relativize); \
- new_top_distdir=$$reldir; \
- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
- ($(am__cd) $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$new_top_distdir" \
- distdir="$$new_distdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- am__skip_mode_fix=: \
- distdir) \
- || exit 1; \
- fi; \
- done
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$(top_distdir)" distdir="$(distdir)" \
- dist-hook
- -test -n "$(am__skip_mode_fix)" \
- || 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 \
- ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
- || chmod -R a+r "$(distdir)"
-dist-gzip: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
-dist-bzip2: distdir
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
- $(am__remove_distdir)
-
-dist-lzma: distdir
- tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
- $(am__remove_distdir)
-
-dist-xz: distdir
- tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
- $(am__remove_distdir)
-
-dist-tarZ: distdir
- tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
- $(am__remove_distdir)
-
-dist-shar: distdir
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
- $(am__remove_distdir)
-
-dist-zip: distdir
- -rm -f $(distdir).zip
- zip -rq $(distdir).zip $(distdir)
- $(am__remove_distdir)
-
-dist dist-all: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
- $(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration. Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
- case '$(DIST_ARCHIVES)' in \
- *.tar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
- *.tar.bz2*) \
- bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
- *.tar.lzma*) \
- unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
- *.tar.xz*) \
- xz -dc $(distdir).tar.xz | $(am__untar) ;;\
- *.tar.Z*) \
- uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
- *.shar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
- *.zip*) \
- unzip $(distdir).zip ;;\
- esac
- chmod -R a-w $(distdir); chmod a+w $(distdir)
- mkdir $(distdir)/_build
- mkdir $(distdir)/_inst
- chmod a-w $(distdir)
- test -d $(distdir)/_build || exit 0; \
- dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
- && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
- && am__cwd=`pwd` \
- && $(am__cd) $(distdir)/_build \
- && ../configure --srcdir=.. --prefix="$$dc_install_base" \
- $(DISTCHECK_CONFIGURE_FLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) dvi \
- && $(MAKE) $(AM_MAKEFLAGS) check \
- && $(MAKE) $(AM_MAKEFLAGS) install \
- && $(MAKE) $(AM_MAKEFLAGS) installcheck \
- && $(MAKE) $(AM_MAKEFLAGS) uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
- distuninstallcheck \
- && chmod -R a-w "$$dc_install_base" \
- && ({ \
- (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
- distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
- } || { rm -rf "$$dc_destdir"; exit 1; }) \
- && rm -rf "$$dc_destdir" \
- && $(MAKE) $(AM_MAKEFLAGS) dist \
- && rm -rf $(DIST_ARCHIVES) \
- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
- && cd "$$am__cwd" \
- || exit 1
- $(am__remove_distdir)
- @(echo "$(distdir) archives ready for distribution: "; \
- list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
- sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
- @$(am__cd) '$(distuninstallcheck_dir)' \
- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
- || { echo "ERROR: files left after uninstall:" ; \
- if test -n "$(DESTDIR)"; then \
- echo " (check DESTDIR support)"; \
- fi ; \
- $(distuninstallcheck_listfiles) ; \
- exit 1; } >&2
-distcleancheck: distclean
- @if test '$(srcdir)' = . ; then \
- echo "ERROR: distcleancheck can only run from a VPATH build" ; \
- exit 1 ; \
- fi
- @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
- || { echo "ERROR: files left in build directory after distclean:" ; \
- $(distcleancheck_listfiles) ; \
- exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA) config.h
-installdirs: installdirs-recursive
-installdirs-am:
- for dir in "$(DESTDIR)$(pkgconfigdir)"; 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:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-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)
-@PLATFORM_WIN32_TRUE@install-exec-hook:
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
- -rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr \
- distclean-libtool distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-pkgconfigDATA
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
- -rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf $(top_srcdir)/autom4te.cache
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-pkgconfigDATA
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
- ctags-recursive install-am install-exec-am install-strip \
- tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
- all all-am am--refresh check check-am clean clean-generic \
- clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
- dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
- dist-zip distcheck distclean distclean-generic distclean-hdr \
- distclean-libtool distclean-tags distcleancheck distdir \
- distuninstallcheck dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-exec-hook \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-pkgconfigDATA \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs installdirs-am maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
- uninstall uninstall-am uninstall-pkgconfigDATA
-
-
-@PLATFORM_WIN32_FALSE@install-exec-hook:
-@PLATFORM_WIN32_FALSE@ cd $(DESTDIR)$(libdir) && rm -f libXaw.@LIBEXT@ && ln -s $(DEFAULT_LIB) libXaw.@LIBEXT@
-
-.PHONY: ChangeLog
-
-ChangeLog:
- $(CHANGELOG_CMD)
-
-dist-hook: ChangeLog
-
-# 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/libXaw/NEWS b/libXaw/NEWS
deleted file mode 100644
index e69de29bb..000000000
--- a/libXaw/NEWS
+++ /dev/null
diff --git a/libXaw/aclocal.m4 b/libXaw/aclocal.m4
deleted file mode 100644
index ab7676a64..000000000
--- a/libXaw/aclocal.m4
+++ /dev/null
@@ -1,8362 +0,0 @@
-# generated automatically by aclocal 1.11 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009 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.
-
-# 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.
-
-m4_ifndef([AC_AUTOCONF_VERSION],
- [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
-[m4_warning([this file was generated for autoconf 2.63.
-You have another version of autoconf. It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 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.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.11], [],
- [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too. Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
- [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-
-# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-
-# Copyright (C) 2001, 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.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory. The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run. This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-# fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-# fails if $ac_aux_dir is absolute,
-# fails when called from a subdirectory in a VPATH build with
-# a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir. In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
-# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-# MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH. The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# 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 9
-
-# 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])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-m4_define([_AM_COND_VALUE_$1], [$2])dnl
-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, 2006, 2009
-# 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 10
-
-# 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], UPC, [depcc="$UPC" am_compiler_list=],
- [$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
- am__universal=false
- m4_case([$1], [CC],
- [case " $depcc " in #(
- *\ -arch\ *\ -arch\ *) am__universal=true ;;
- esac],
- [CXX],
- [case " $depcc " in #(
- *\ -arch\ *\ -arch\ *) am__universal=true ;;
- esac])
-
- 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
-
- # 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. Also, some Intel
- # versions had trouble with output in subdirs
- am__obj=sub/conftest.${OBJEXT-o}
- am__minus_obj="-o $am__obj"
- case $depmode in
- gcc)
- # This depmode causes a compiler race in universal mode.
- test "$am__universal" = false || continue
- ;;
- 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
- ;;
- msvisualcpp | msvcmsys)
- # This compiler won't grok `-c -o', but also, the minuso test has
- # not run yet. These depmodes are late enough in the game, and
- # so weak that their functioning should not be impacted.
- am__obj=conftest.${OBJEXT-o}
- am__minus_obj=
- ;;
- none) break ;;
- esac
- if depmode=$depmode \
- source=sub/conftest.c object=$am__obj \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep $am__obj 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])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-])
-
-# Generate code to set up dependency tracking. -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# 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 5
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[{
- # Autoconf 2.62 quotes --file arguments for eval, but not when files
- # are listed without --file. Let's play safe and only enable the eval
- # if we detect the quoting.
- case $CONFIG_FILES in
- *\'*) eval set x "$CONFIG_FILES" ;;
- *) set x $CONFIG_FILES ;;
- esac
- shift
- for mf
- 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.
- # Grep'ing the whole file is not good either: AIX grep has a line
- # limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/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"])
-])
-
-# Copyright (C) 1996, 1997, 2000, 2001, 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 8
-
-# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
-AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
-
-# Do all the work for Automake. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 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 16
-
-# This macro actually does too much. Some checks are only needed if
-# your package does certain things. But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out. PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition. After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
-dnl Autoconf wants to disallow AM_ names. We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
- # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
- # is not polluted with repeated "-I."
- AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
- # test to see if srcdir already configured
- if test -f $srcdir/config.status; then
- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
- fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
- if (cygpath --version) >/dev/null 2>/dev/null; then
- CYGPATH_W='cygpath -w'
- else
- CYGPATH_W=echo
- fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
- [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
- [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
- [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
- [_AM_DEPENDENCIES(CC)],
- [define([AC_PROG_CC],
- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [_AM_DEPENDENCIES(CXX)],
- [define([AC_PROG_CXX],
- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
- [_AM_DEPENDENCIES(OBJC)],
- [define([AC_PROG_OBJC],
- defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
-])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
-AC_CONFIG_COMMANDS_PRE(dnl
-[m4_provide_if([_AM_COMPILER_EXEEXT],
- [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
-
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
-dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
-dnl mangled by Autoconf and run in a shell conditional statement.
-m4_define([_AC_COMPILER_EXEEXT],
-m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated. The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $_am_arg | $_am_arg:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005, 2008 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.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
- *)
- install_sh="\${SHELL} $am_aux_dir/install-sh"
- esac
-fi
-AC_SUBST(install_sh)])
-
-# Copyright (C) 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 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot. For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Check to see how 'make' treats includes. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2009 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
-
-# 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 this is the am__doit target
-.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
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
- ;;
- esac
-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, 2004, 2005, 2008
-# 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 6
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-if test x"${MISSING+set}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
- *)
- MISSING="\${SHELL} $am_aux_dir/missing" ;;
- esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
- am_missing_run="$MISSING --run "
-else
- am_missing_run=
- AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005, 2006 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.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
- [[\\/$]]* | ?:[[\\/]]*) ;;
- */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
-# Helper functions for option handling. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2008 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
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME. Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# 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 5
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name. Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
- *[[\\\"\#\$\&\'\`$am_lf]]*)
- AC_MSG_ERROR([unsafe absolute working directory name]);;
-esac
-case $srcdir in
- *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
- AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
- if test "$[*]" = "X"; then
- # -L didn't work.
- set X `ls -t "$srcdir/configure" conftest.file`
- fi
- rm -f conftest.file
- if test "$[*]" != "X $srcdir/configure conftest.file" \
- && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
- test "$[2]" = conftest.file
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2009 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 1
-
-# AM_SILENT_RULES([DEFAULT])
-# --------------------------
-# Enable less verbose build rules; with the default set to DEFAULT
-# (`yes' being less verbose, `no' or empty being verbose).
-AC_DEFUN([AM_SILENT_RULES],
-[AC_ARG_ENABLE([silent-rules],
-[ --enable-silent-rules less verbose build output (undo: `make V=1')
- --disable-silent-rules verbose build output (undo: `make V=0')])
-case $enable_silent_rules in
-yes) AM_DEFAULT_VERBOSITY=0;;
-no) AM_DEFAULT_VERBOSITY=1;;
-*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
-esac
-AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
-AM_BACKSLASH='\'
-AC_SUBST([AM_BACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
-])
-
-# Copyright (C) 2001, 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.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries. This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
- AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006, 2008 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 2
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Public sister of _AM_SUBST_NOTMAKE.
-AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-
-# Check how to create a tarball. -*- Autoconf -*-
-
-# Copyright (C) 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 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-# tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-# $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
- [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
- [m4_case([$1], [ustar],, [pax],,
- [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
- case $_am_tool in
- gnutar)
- for _am_tar in tar gnutar gtar;
- do
- AM_RUN_LOG([$_am_tar --version]) && break
- done
- am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
- am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
- am__untar="$_am_tar -xf -"
- ;;
- plaintar)
- # Must skip GNU tar: if it does not support --format= it doesn't create
- # ustar tarball either.
- (tar --version) >/dev/null 2>&1 && continue
- am__tar='tar chf - "$$tardir"'
- am__tar_='tar chf - "$tardir"'
- am__untar='tar xf -'
- ;;
- pax)
- am__tar='pax -L -x $1 -w "$$tardir"'
- am__tar_='pax -L -x $1 -w "$tardir"'
- am__untar='pax -r'
- ;;
- cpio)
- am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
- am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
- am__untar='cpio -i -H $1 -d'
- ;;
- none)
- am__tar=false
- am__tar_=false
- am__untar=false
- ;;
- esac
-
- # If the value was cached, stop now. We just wanted to have am__tar
- # and am__untar set.
- test -n "${am_cv_prog_tar_$1}" && break
-
- # tar/untar a dummy directory, and stop if the command works
- rm -rf conftest.dir
- mkdir conftest.dir
- echo GrepMe > conftest.dir/file
- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
- rm -rf conftest.dir
- if test -s conftest.tar; then
- AM_RUN_LOG([$am__untar <conftest.tar])
- grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
- fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-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
-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
-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
-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.
-
-# XORG_MACROS_VERSION(required-version)
-# -------------------------------------
-# Minimum version: 1.1.0
-#
-# If you're using a macro added in Version 1.1 or newer, include this in
-# your configure.ac with the minimum required version, such as:
-# XORG_MACROS_VERSION(1.1)
-#
-# 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.
-m4_defun([XORG_MACROS_VERSION],[
-m4_define([vers_have], [1.3.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()
-# ------------------
-# Minimum version: 1.0.0
-#
-# Find cpp program and necessary flags for use in pre-processing text files
-# such as man pages and config files
-AC_DEFUN([XORG_PROG_RAWCPP],[
-AC_REQUIRE([AC_PROG_CPP])
-AC_PATH_PROGS(RAWCPP, [cpp], [${CPP}],
- [$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib])
-
-# Check for flag to avoid builtin definitions - assumes unix is predefined,
-# which is not the best choice for supporting other OS'es, but covers most
-# of the ones we need for now.
-AC_MSG_CHECKING([if $RAWCPP requires -undef])
-AC_LANG_CONFTEST([Does cpp redefine unix ?])
-if test `${RAWCPP} < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then
- AC_MSG_RESULT([no])
-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
-fi
-rm -f conftest.$ac_ext
-
-AC_MSG_CHECKING([if $RAWCPP requires -traditional])
-AC_LANG_CONFTEST([Does cpp preserve "whitespace"?])
-if test `${RAWCPP} < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then
- AC_MSG_RESULT([no])
-else
- if test `${RAWCPP} -traditional < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then
- RAWCPPFLAGS="${RAWCPPFLAGS} -traditional"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_ERROR([${RAWCPP} does not preserve whitespace with or without -traditional. I don't know what to do.])
- fi
-fi
-rm -f conftest.$ac_ext
-AC_SUBST(RAWCPPFLAGS)
-]) # XORG_PROG_RAWCPP
-
-# XORG_MANPAGE_SECTIONS()
-# -----------------------
-# Minimum version: 1.0.0
-#
-# Determine which sections man pages go in for the different man page types
-# 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
-
-AC_DEFUN([XORG_MANPAGE_SECTIONS],[
-AC_REQUIRE([AC_CANONICAL_HOST])
-
-if test x$APP_MAN_SUFFIX = x ; then
- APP_MAN_SUFFIX=1
-fi
-if test x$APP_MAN_DIR = x ; then
- APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)'
-fi
-
-if test x$LIB_MAN_SUFFIX = x ; then
- LIB_MAN_SUFFIX=3
-fi
-if test x$LIB_MAN_DIR = x ; then
- LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)'
-fi
-
-if test x$FILE_MAN_SUFFIX = x ; then
- case $host_os in
- solaris*) FILE_MAN_SUFFIX=4 ;;
- *) FILE_MAN_SUFFIX=5 ;;
- esac
-fi
-if test x$FILE_MAN_DIR = x ; then
- FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)'
-fi
-
-if test x$MISC_MAN_SUFFIX = x ; then
- case $host_os in
- solaris*) MISC_MAN_SUFFIX=5 ;;
- *) MISC_MAN_SUFFIX=7 ;;
- esac
-fi
-if test x$MISC_MAN_DIR = x ; then
- MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)'
-fi
-
-if test x$DRIVER_MAN_SUFFIX = x ; then
- case $host_os in
- solaris*) DRIVER_MAN_SUFFIX=7 ;;
- *) DRIVER_MAN_SUFFIX=4 ;;
- esac
-fi
-if test x$DRIVER_MAN_DIR = x ; then
- DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)'
-fi
-
-if test x$ADMIN_MAN_SUFFIX = x ; then
- case $host_os in
- solaris*) ADMIN_MAN_SUFFIX=1m ;;
- *) ADMIN_MAN_SUFFIX=8 ;;
- esac
-fi
-if test x$ADMIN_MAN_DIR = x ; then
- ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)'
-fi
-
-
-AC_SUBST([APP_MAN_SUFFIX])
-AC_SUBST([LIB_MAN_SUFFIX])
-AC_SUBST([FILE_MAN_SUFFIX])
-AC_SUBST([MISC_MAN_SUFFIX])
-AC_SUBST([DRIVER_MAN_SUFFIX])
-AC_SUBST([ADMIN_MAN_SUFFIX])
-AC_SUBST([APP_MAN_DIR])
-AC_SUBST([LIB_MAN_DIR])
-AC_SUBST([FILE_MAN_DIR])
-AC_SUBST([MISC_MAN_DIR])
-AC_SUBST([DRIVER_MAN_DIR])
-AC_SUBST([ADMIN_MAN_DIR])
-]) # XORG_MANPAGE_SECTIONS
-
-# XORG_CHECK_LINUXDOC
-# -------------------
-# Minimum version: 1.0.0
-#
-# Defines the variable MAKE_TEXT if the necessary tools and
-# files are found. $(MAKE_TEXT) blah.sgml will then produce blah.txt.
-# Whether or not the necessary tools and files are found can be checked
-# with the AM_CONDITIONAL "BUILD_LINUXDOC"
-AC_DEFUN([XORG_CHECK_LINUXDOC],[
-if test x$XORG_SGML_PATH = x ; then
- XORG_SGML_PATH=$prefix/share/sgml
-fi
-HAVE_DEFS_ENT=
-
-if test x"$cross_compiling" = x"yes" ; then
- HAVE_DEFS_ENT=no
-else
- AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes])
-fi
-
-AC_PATH_PROG(LINUXDOC, linuxdoc)
-AC_PATH_PROG(PS2PDF, ps2pdf)
-
-AC_MSG_CHECKING([Whether to build documentation])
-
-if test x$HAVE_DEFS_ENT != x && test x$LINUXDOC != x ; then
- BUILDDOC=yes
-else
- BUILDDOC=no
-fi
-
-AM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes])
-
-AC_MSG_RESULT([$BUILDDOC])
-
-AC_MSG_CHECKING([Whether to build pdf documentation])
-
-if test x$PS2PDF != x && test x$BUILD_PDFDOC != xno; then
- BUILDPDFDOC=yes
-else
- BUILDPDFDOC=no
-fi
-
-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_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"
-
-AC_SUBST(MAKE_TEXT)
-AC_SUBST(MAKE_PS)
-AC_SUBST(MAKE_PDF)
-AC_SUBST(MAKE_HTML)
-]) # XORG_CHECK_LINUXDOC
-
-# XORG_CHECK_DOCBOOK
-# -------------------
-# Minimum version: 1.0.0
-#
-# Checks for the ability to build output formats from SGML DocBook source.
-# For XXX in {TXT, PDF, PS, HTML}, the AM_CONDITIONAL "BUILD_XXXDOC"
-# 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],[
-if test x$XORG_SGML_PATH = x ; then
- XORG_SGML_PATH=$prefix/share/sgml
-fi
-HAVE_DEFS_ENT=
-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 &&
- 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 &&
- 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 &&
- 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 &&
- test x$BUILD_HTMLDOC != xno; then
- BUILDHTMLDOC=yes
-fi
-AM_CONDITIONAL(BUILD_HTMLDOC, [test x$BUILDHTMLDOC = xyes])
-AC_MSG_RESULT([$BUILDHTMLDOC])
-
-MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKTXT"
-MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPS"
-MAKE_PDF="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPDF"
-MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKHTML"
-
-AC_SUBST(MAKE_TEXT)
-AC_SUBST(MAKE_PS)
-AC_SUBST(MAKE_PDF)
-AC_SUBST(MAKE_HTML)
-]) # XORG_CHECK_DOCBOOK
-
-# XORG_CHECK_MALLOC_ZERO
-# ----------------------
-# Minimum version: 1.0.0
-#
-# Defines {MALLOC,XMALLOC,XTMALLOC}_ZERO_CFLAGS appropriately if
-# malloc(0) returns NULL. Packages should add one of these cflags to
-# their AM_CFLAGS (or other appropriate *_CFLAGS) to use them.
-AC_DEFUN([XORG_CHECK_MALLOC_ZERO],[
-AC_ARG_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() {
- 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);
-}],
- [MALLOC_ZERO_RETURNS_NULL=yes],
- [MALLOC_ZERO_RETURNS_NULL=no])
-fi
-AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL])
-
-if test "x$MALLOC_ZERO_RETURNS_NULL" = xyes; then
- MALLOC_ZERO_CFLAGS="-DMALLOC_0_RETURNS_NULL"
- XMALLOC_ZERO_CFLAGS=$MALLOC_ZERO_CFLAGS
- XTMALLOC_ZERO_CFLAGS="$MALLOC_ZERO_CFLAGS -DXTMALLOC_BC"
-else
- MALLOC_ZERO_CFLAGS=""
- XMALLOC_ZERO_CFLAGS=""
- XTMALLOC_ZERO_CFLAGS=""
-fi
-
-AC_SUBST([MALLOC_ZERO_CFLAGS])
-AC_SUBST([XMALLOC_ZERO_CFLAGS])
-AC_SUBST([XTMALLOC_ZERO_CFLAGS])
-]) # XORG_CHECK_MALLOC_ZERO
-
-# XORG_WITH_LINT()
-# ----------------
-# 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)
-#
-AC_DEFUN([XORG_WITH_LINT],[
-
-# Allow checking code with lint, sparse, etc.
-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"
-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
-fi
-
-AC_SUBST(LINT)
-AC_SUBST(LINT_FLAGS)
-AM_CONDITIONAL(LINT, [test x$LINT != xno])
-
-]) # XORG_WITH_LINT
-
-# XORG_LINT_LIBRARY(LIBNAME)
-# --------------------------
-# Minimum version: 1.1.0
-#
-# 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
-#
-
-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, [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
-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])
-if test "x$GCC" = xyes ; then
- CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \
--Wmissing-declarations -Wnested-externs -fno-strict-aliasing \
--Wbad-function-cast"
- 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)
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-]) # XORG_CWARNFLAGS
-
-# XORG_STRICT_OPTION
-# -----------------------
-# Minimum version: 1.3.0
-#
-# Add configure option to enable strict compilation
-AC_DEFUN([XORG_STRICT_OPTION], [
-AC_REQUIRE([AC_PROG_CC])
-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], [
-XORG_CWARNFLAGS
-XORG_STRICT_OPTION
-XORG_RELEASE_VERSION
-XORG_CHANGELOG
-XORG_MANPAGE_SECTIONS
-]) # XORG_DEFAULT_OPTIONS
-dnl Copyright 2005 Red Hat, Inc
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this software and its
-dnl documentation for any purpose is hereby granted without fee, provided that
-dnl the above copyright notice appear in all copies and that both that
-dnl copyright notice and this permission notice appear in supporting
-dnl documentation.
-dnl
-dnl The above copyright notice and this permission notice shall be included
-dnl in all copies or substantial portions of the Software.
-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 IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-dnl OTHER DEALINGS IN THE SOFTWARE.
-dnl
-dnl Except as contained in this notice, the name of the copyright holders shall
-dnl not be used in advertising or otherwise to promote the sale, use or
-dnl other dealings in this Software without prior written authorization
-dnl from the copyright holders.
-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.
-
-AC_DEFUN([XORG_RELEASE_VERSION],[
- AC_ARG_WITH(release-version,
- AS_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 | 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 | cut -d - -f 1`
- if test "x$PVP" = "x"; then
- PVP="0"
- fi
- AC_DEFINE_UNQUOTED([PACKAGE_VERSION_PATCHLEVEL],
- [$PVP],
- [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.
-#
-# Arrange that distcleancheck ignores ChangeLog left over by distclean.
-#
-AC_DEFUN([XORG_CHANGELOG], [
-CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > .changelog.tmp && \
-mv .changelog.tmp ChangeLog) || (rm -f .changelog.tmp; touch ChangeLog; \
-echo 'git directory not found: installing possibly empty changelog.' >&2)"
-AC_SUBST([CHANGELOG_CMD])
-AC_SUBST([distcleancheck_listfiles], ['find . -type f ! -name ChangeLog -print'])
-]) # XORG_CHANGELOG
-
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-
-# serial 52 AC_PROG_LIBTOOL
-
-
-# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-# -----------------------------------------------------------
-# If this macro is not defined by Autoconf, define it here.
-m4_ifdef([AC_PROVIDE_IFELSE],
- [],
- [m4_define([AC_PROVIDE_IFELSE],
- [m4_ifdef([AC_PROVIDE_$1],
- [$2], [$3])])])
-
-
-# AC_PROG_LIBTOOL
-# ---------------
-AC_DEFUN([AC_PROG_LIBTOOL],
-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
- AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [AC_LIBTOOL_CXX],
- [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
- ])])
-dnl And a similar setup for Fortran 77 support
- AC_PROVIDE_IFELSE([AC_PROG_F77],
- [AC_LIBTOOL_F77],
- [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
-])])
-
-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
- AC_PROVIDE_IFELSE([AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [ifdef([AC_PROG_GCJ],
- [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
- ifdef([A][M_PROG_GCJ],
- [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
- ifdef([LT_AC_PROG_GCJ],
- [define([LT_AC_PROG_GCJ],
- defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
-])])# AC_PROG_LIBTOOL
-
-
-# _AC_PROG_LIBTOOL
-# ----------------
-AC_DEFUN([_AC_PROG_LIBTOOL],
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-# Prevent multiple expansion
-define([AC_PROG_LIBTOOL], [])
-])# _AC_PROG_LIBTOOL
-
-
-# AC_LIBTOOL_SETUP
-# ----------------
-AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-
-AC_REQUIRE([AC_PROG_LN_S])dnl
-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-AC_REQUIRE([AC_OBJEXT])dnl
-AC_REQUIRE([AC_EXEEXT])dnl
-dnl
-AC_LIBTOOL_SYS_MAX_CMD_LEN
-AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-AC_LIBTOOL_OBJDIR
-
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-_LT_AC_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
-
-# Same as above, but do not quote variable references.
-[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-AC_CHECK_TOOL(AR, ar, false)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- AC_PATH_MAGIC
- fi
- ;;
-esac
-
-_LT_REQUIRED_DARWIN_CHECKS
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-enable_win32_dll=yes, enable_win32_dll=no)
-
-AC_ARG_ENABLE([libtool-lock],
- [AC_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-AC_ARG_WITH([pic],
- [AC_HELP_STRING([--with-pic],
- [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
- [pic_mode="$withval"],
- [pic_mode=default])
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-AC_LIBTOOL_LANG_C_CONFIG
-_LT_AC_TAGCONFIG
-])# AC_LIBTOOL_SETUP
-
-
-# _LT_AC_SYS_COMPILER
-# -------------------
-AC_DEFUN([_LT_AC_SYS_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_AC_SYS_COMPILER
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-AC_DEFUN([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
- case $cc_temp in
- compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
- distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-AC_DEFUN([_LT_LINKER_BOILERPLATE],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# --------------------------
-# Check for some things on darwin
-AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[
- case $host_os in
- rhapsody* | darwin*)
- AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
- AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-
- AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
- [lt_cv_apple_cc_single_mod=no
- if test -z "${LT_MULTI_MODULE}"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- echo "int foo(void){return 1;}" > conftest.c
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib ${wl}-single_module conftest.c
- if test -f libconftest.dylib; then
- lt_cv_apple_cc_single_mod=yes
- rm -rf libconftest.dylib*
- fi
- rm conftest.c
- fi])
- AC_CACHE_CHECK([for -exported_symbols_list linker flag],
- [lt_cv_ld_exported_symbols_list],
- [lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
- [lt_cv_ld_exported_symbols_list=yes],
- [lt_cv_ld_exported_symbols_list=no])
- LDFLAGS="$save_LDFLAGS"
- ])
- case $host_os in
- rhapsody* | darwin1.[[0123]])
- _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- darwin*)
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- 10.[[012]]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test "$lt_cv_apple_cc_single_mod" = "yes"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
- _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
- else
- _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}"
- fi
- if test "$DSYMUTIL" != ":"; then
- _lt_dsymutil="~$DSYMUTIL \$lib || :"
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-])
-
-# _LT_AC_SYS_LIBPATH_AIX
-# ----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_AC_SYS_LIBPATH_AIX
-
-
-# _LT_AC_SHELL_INIT(ARG)
-# ----------------------
-AC_DEFUN([_LT_AC_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
- [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
- [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_AC_SHELL_INIT
-
-
-# _LT_AC_PROG_ECHO_BACKSLASH
-# --------------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-[_LT_AC_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
- ;;
-esac
-
-echo=${ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X[$]1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-[$]*
-EOF
- exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string=`eval $cmd`) 2>/dev/null &&
- echo_test_string=`eval $cmd` &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
- then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
-else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
- else
- # Try using printf.
- echo='printf %s\n'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL [$]0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$CONFIG_SHELL [$]0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "[$]0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
- ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(ECHO)
-])])# _LT_AC_PROG_ECHO_BACKSLASH
-
-
-# _LT_AC_LOCK
-# -----------
-AC_DEFUN([_LT_AC_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
- [AC_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- if test "$lt_cv_prog_gnu_ld" = yes; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|sparc*-*linux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
- *32-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_i386"
- ;;
- ppc64-*linux*|powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- ppc*-*linux*|powerpc*-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_LANG_PUSH(C)
- AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
- AC_LANG_POP])
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-sparc*-*solaris*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
- AC_CHECK_TOOL(AS, as, false)
- AC_CHECK_TOOL(OBJDUMP, objdump, false)
- ;;
- ])
-esac
-
-need_locks="$enable_libtool_lock"
-
-])# _LT_AC_LOCK
-
-
-# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$3"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- fi
- $rm conftest*
-])
-
-if test x"[$]$2" = xyes; then
- ifelse([$5], , :, [$5])
-else
- ifelse([$6], , :, [$6])
-fi
-])# AC_LIBTOOL_COMPILER_OPTION
-
-
-# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [ACTION-SUCCESS], [ACTION-FAILURE])
-# ------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $3"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&AS_MESSAGE_LOG_FD
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- else
- $2=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
- ifelse([$4], , :, [$4])
-else
- ifelse([$5], , :, [$5])
-fi
-])# AC_LIBTOOL_LINKER_OPTION
-
-
-# AC_LIBTOOL_SYS_MAX_CMD_LEN
-# --------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-[# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
- i=0
- teststring="ABCD"
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
- ;;
-
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
- = "XX$teststring") >/dev/null 2>&1 &&
- new_result=`expr "X$teststring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- teststring=
- # Add a significant safety factor because C++ compilers can tack on massive
- # amounts of additional arguments before passing them to the linker.
- # It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
- ;;
- esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
- AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
- AC_MSG_RESULT(none)
-fi
-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-
-
-# _LT_AC_CHECK_DLFCN
-# ------------------
-AC_DEFUN([_LT_AC_CHECK_DLFCN],
-[AC_CHECK_HEADERS(dlfcn.h)dnl
-])# _LT_AC_CHECK_DLFCN
-
-
-# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ---------------------------------------------------------------------
-AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
- [$4]
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- exit (status);
-}]
-EOF
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) $1 ;;
- x$lt_dlneed_uscore) $2 ;;
- x$lt_dlunknown|x*) $3 ;;
- esac
- else :
- # compilation failed
- $3
- fi
-fi
-rm -fr conftest*
-])# _LT_AC_TRY_DLOPEN_SELF
-
-
-# AC_LIBTOOL_DLOPEN_SELF
-# ----------------------
-AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ])
- ;;
-
- *)
- AC_CHECK_FUNC([shl_load],
- [lt_cv_dlopen="shl_load"],
- [AC_CHECK_LIB([dld], [shl_load],
- [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
- [AC_CHECK_FUNC([dlopen],
- [lt_cv_dlopen="dlopen"],
- [AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
- [AC_CHECK_LIB([svld], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
- [AC_CHECK_LIB([dld], [dld_link],
- [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
- ])
- ])
- ])
- ])
- ])
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- AC_CACHE_CHECK([whether a program can dlopen itself],
- lt_cv_dlopen_self, [dnl
- _LT_AC_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
- lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
- ])
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
- lt_cv_dlopen_self_static, [dnl
- _LT_AC_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
- lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
- ])
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-])# AC_LIBTOOL_DLOPEN_SELF
-
-
-# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
-# ---------------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler
-AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
- fi
- fi
- chmod u+w . 2>&AS_MESSAGE_LOG_FD
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-])
-])# AC_LIBTOOL_PROG_CC_C_O
-
-
-# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
-# -----------------------------------------
-# Check to see if we can do hard links to lock some files if needed
-AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
-[AC_REQUIRE([_LT_AC_LOCK])dnl
-
-hard_links="nottested"
-if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- AC_MSG_CHECKING([if we can lock with hard links])
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- AC_MSG_RESULT([$hard_links])
- if test "$hard_links" = no; then
- AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-
-
-# AC_LIBTOOL_OBJDIR
-# -----------------
-AC_DEFUN([AC_LIBTOOL_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-])# AC_LIBTOOL_OBJDIR
-
-
-# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
-# ----------------------------------------------
-# Check hardcoding attributes.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_AC_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
- test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
- test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
- test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
- # Linking always hardcodes the temporary library directory.
- _LT_AC_TAGVAR(hardcode_action, $1)=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- _LT_AC_TAGVAR(hardcode_action, $1)=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-
-
-# AC_LIBTOOL_SYS_LIB_STRIP
-# ------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
-[striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
-fi
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
- esac
-fi
-])# AC_LIBTOOL_SYS_LIB_STRIP
-
-
-# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-m4_if($1,[],[
-if test "$GCC" = yes; then
- case $host_os in
- darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
- *) lt_awk_arg="/^libraries:/" ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'`
- else
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary.
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path/$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
- else
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
- lt_foo="";
- lt_count=0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo="/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[[lt_foo]]++; }
- if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
- sys_lib_search_path_spec=`echo $lt_search_path_spec`
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[[4-9]]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[[01]] | aix4.[[01]].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[[45]]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
- m4_if([$1], [],[
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[[123]]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[[01]]* | freebsdelf3.[[01]]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
- freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[[3-9]]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[[89]] | openbsd2.[[89]].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec],
-[lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"])
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec],
-[lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"])
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-
-
-# _LT_AC_TAGCONFIG
-# ----------------
-AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_ARG_WITH([tags],
- [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
- [include additional configurations @<:@automatic@:>@])],
- [tagnames="$withval"])
-
-if test -f "$ltmain" && test -n "$tagnames"; then
- if test ! -f "${ofile}"; then
- AC_MSG_WARN([output file `$ofile' does not exist])
- fi
-
- if test -z "$LTCC"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
- if test -z "$LTCC"; then
- AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
- else
- AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
- fi
- fi
- if test -z "$LTCFLAGS"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
- fi
-
- # Extract list of available tagged configurations in $ofile.
- # Note that this assumes the entire list is on one line.
- available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for tagname in $tagnames; do
- IFS="$lt_save_ifs"
- # Check whether tagname contains only valid characters
- case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
- "") ;;
- *) AC_MSG_ERROR([invalid tag name: $tagname])
- ;;
- esac
-
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
- then
- AC_MSG_ERROR([tag name \"$tagname\" already exists])
- fi
-
- # Update the list of available tags.
- if test -n "$tagname"; then
- echo appending configuration tag \"$tagname\" to $ofile
-
- case $tagname in
- CXX)
- if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_LIBTOOL_LANG_CXX_CONFIG
- else
- tagname=""
- fi
- ;;
-
- F77)
- if test -n "$F77" && test "X$F77" != "Xno"; then
- AC_LIBTOOL_LANG_F77_CONFIG
- else
- tagname=""
- fi
- ;;
-
- GCJ)
- if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
- AC_LIBTOOL_LANG_GCJ_CONFIG
- else
- tagname=""
- fi
- ;;
-
- RC)
- AC_LIBTOOL_LANG_RC_CONFIG
- ;;
-
- *)
- AC_MSG_ERROR([Unsupported tag name: $tagname])
- ;;
- esac
-
- # Append the new tag name to the list of available tags.
- if test -n "$tagname" ; then
- available_tags="$available_tags $tagname"
- fi
- fi
- done
- IFS="$lt_save_ifs"
-
- # Now substitute the updated list of available tags.
- if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
- mv "${ofile}T" "$ofile"
- chmod +x "$ofile"
- else
- rm -f "${ofile}T"
- AC_MSG_ERROR([unable to update list of available tagged configurations.])
- fi
-fi
-])# _LT_AC_TAGCONFIG
-
-
-# AC_LIBTOOL_DLOPEN
-# -----------------
-# enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN],
- [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_DLOPEN
-
-
-# AC_LIBTOOL_WIN32_DLL
-# --------------------
-# declare package support for building win32 DLLs
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_WIN32_DLL
-
-
-# AC_ENABLE_SHARED([DEFAULT])
-# ---------------------------
-# implement the --enable-shared flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_SHARED],
-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([shared],
- [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
- [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
-])# AC_ENABLE_SHARED
-
-
-# AC_DISABLE_SHARED
-# -----------------
-# set the default shared flag to --disable-shared
-AC_DEFUN([AC_DISABLE_SHARED],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)
-])# AC_DISABLE_SHARED
-
-
-# AC_ENABLE_STATIC([DEFAULT])
-# ---------------------------
-# implement the --enable-static flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_STATIC],
-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([static],
- [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
- [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_static=]AC_ENABLE_STATIC_DEFAULT)
-])# AC_ENABLE_STATIC
-
-
-# AC_DISABLE_STATIC
-# -----------------
-# set the default static flag to --disable-static
-AC_DEFUN([AC_DISABLE_STATIC],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)
-])# AC_DISABLE_STATIC
-
-
-# AC_ENABLE_FAST_INSTALL([DEFAULT])
-# ---------------------------------
-# implement the --enable-fast-install flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([fast-install],
- [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
- [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
-])# AC_ENABLE_FAST_INSTALL
-
-
-# AC_DISABLE_FAST_INSTALL
-# -----------------------
-# set the default to --disable-fast-install
-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)
-])# AC_DISABLE_FAST_INSTALL
-
-
-# AC_LIBTOOL_PICMODE([MODE])
-# --------------------------
-# implement the --with-pic flag
-# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
-AC_DEFUN([AC_LIBTOOL_PICMODE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)
-])# AC_LIBTOOL_PICMODE
-
-
-# AC_PROG_EGREP
-# -------------
-# This is predefined starting with Autoconf 2.54, so this conditional
-# definition can be removed once we require Autoconf 2.54 or later.
-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
- [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
-])])
-
-
-# AC_PATH_TOOL_PREFIX
-# -------------------
-# find a file program which can recognize shared library
-AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] | ?:[\\/]*])
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word. This closes a longstanding sh security hole.
- ac_dummy="ifelse([$2], , $PATH, [$2])"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$1; then
- lt_cv_path_MAGIC_CMD="$ac_dir/$1"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- AC_MSG_RESULT($MAGIC_CMD)
-else
- AC_MSG_RESULT(no)
-fi
-])# AC_PATH_TOOL_PREFIX
-
-
-# AC_PATH_MAGIC
-# -------------
-# find a file program which can recognize a shared library
-AC_DEFUN([AC_PATH_MAGIC],
-[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
- else
- MAGIC_CMD=:
- fi
-fi
-])# AC_PATH_MAGIC
-
-
-# AC_PROG_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH([gnu-ld],
- [AC_HELP_STRING([--with-gnu-ld],
- [assume the C compiler uses GNU ld @<:@default=no@:>@])],
- [test "$withval" = no || with_gnu_ld=yes],
- [with_gnu_ld=no])
-AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by $CC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]]* | ?:[[\\/]]*)
- re_direlt='/[[^/]][[^/]]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_PROG_LD_GNU
-])# AC_PROG_LD
-
-
-# AC_PROG_LD_GNU
-# --------------
-AC_DEFUN([AC_PROG_LD_GNU],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# AC_PROG_LD_GNU
-
-
-# AC_PROG_LD_RELOAD_FLAG
-# ----------------------
-# find reload flag for linker
-# -- PORTME Some linkers may need a different reload flag.
-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[AC_CACHE_CHECK([for $LD option to reload object files],
- lt_cv_ld_reload_flag,
- [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-])# AC_PROG_LD_RELOAD_FLAG
-
-
-# AC_DEPLIBS_CHECK_METHOD
-# -----------------------
-# how to check for library dependencies
-# -- PORTME fill in with the dynamic library characteristics
-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[[45]]*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | dragonfly*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case $host_cpu in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-interix[[3-9]]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-nto-qnx*)
- lt_cv_deplibs_check_method=unknown
- ;;
-
-openbsd*)
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-rdos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.3*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-])# AC_DEPLIBS_CHECK_METHOD
-
-
-# AC_PROG_NM
-# ----------
-# find the pathname to a BSD-compatible name lister
-AC_DEFUN([AC_PROG_NM],
-[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
-[if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/$lt_tmp_nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
- done
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi])
-NM="$lt_cv_path_NM"
-])# AC_PROG_NM
-
-
-# AC_CHECK_LIBM
-# -------------
-# check for math library
-AC_DEFUN([AC_CHECK_LIBM],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
- # These system don't have libm, or don't need it
- ;;
-*-ncr-sysv4.3*)
- AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
- AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
- ;;
-*)
- AC_CHECK_LIB(m, cos, LIBM="-lm")
- ;;
-esac
-])# AC_CHECK_LIBM
-
-
-# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl convenience library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-convenience to the configure arguments. Note that
-# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
-# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
-# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
-# (note the single quotes!). If your package is not flat and you're not
-# using automake, define top_builddir and top_srcdir appropriately in
-# the Makefiles.
-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- case $enable_ltdl_convenience in
- no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
- "") enable_ltdl_convenience=yes
- ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
- esac
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- # For backwards non-gettext consistent compatibility...
- INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_CONVENIENCE
-
-
-# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl installable library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-install to the configure arguments. Note that
-# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
-# and an installed libltdl is not found, it is assumed to be `libltdl'.
-# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
-# '${top_srcdir}/' (note the single quotes!). If your package is not
-# flat and you're not using automake, define top_builddir and top_srcdir
-# appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_CHECK_LIB(ltdl, lt_dlinit,
- [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
- [if test x"$enable_ltdl_install" = xno; then
- AC_MSG_WARN([libltdl not installed, but installation disabled])
- else
- enable_ltdl_install=yes
- fi
- ])
- if test x"$enable_ltdl_install" = x"yes"; then
- ac_configure_args="$ac_configure_args --enable-ltdl-install"
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- else
- ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
- LIBLTDL="-lltdl"
- LTDLINCL=
- fi
- # For backwards non-gettext consistent compatibility...
- INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_INSTALLABLE
-
-
-# AC_LIBTOOL_CXX
-# --------------
-# enable support for C++ libraries
-AC_DEFUN([AC_LIBTOOL_CXX],
-[AC_REQUIRE([_LT_AC_LANG_CXX])
-])# AC_LIBTOOL_CXX
-
-
-# _LT_AC_LANG_CXX
-# ---------------
-AC_DEFUN([_LT_AC_LANG_CXX],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
-])# _LT_AC_LANG_CXX
-
-# _LT_AC_PROG_CXXCPP
-# ------------------
-AC_DEFUN([_LT_AC_PROG_CXXCPP],
-[
-AC_REQUIRE([AC_PROG_CXX])
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_PROG_CXXCPP
-fi
-])# _LT_AC_PROG_CXXCPP
-
-# AC_LIBTOOL_F77
-# --------------
-# enable support for Fortran 77 libraries
-AC_DEFUN([AC_LIBTOOL_F77],
-[AC_REQUIRE([_LT_AC_LANG_F77])
-])# AC_LIBTOOL_F77
-
-
-# _LT_AC_LANG_F77
-# ---------------
-AC_DEFUN([_LT_AC_LANG_F77],
-[AC_REQUIRE([AC_PROG_F77])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
-])# _LT_AC_LANG_F77
-
-
-# AC_LIBTOOL_GCJ
-# --------------
-# enable support for GCJ libraries
-AC_DEFUN([AC_LIBTOOL_GCJ],
-[AC_REQUIRE([_LT_AC_LANG_GCJ])
-])# AC_LIBTOOL_GCJ
-
-
-# _LT_AC_LANG_GCJ
-# ---------------
-AC_DEFUN([_LT_AC_LANG_GCJ],
-[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
- [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
- [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
- [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
-])# _LT_AC_LANG_GCJ
-
-
-# AC_LIBTOOL_RC
-# -------------
-# enable support for Windows resource files
-AC_DEFUN([AC_LIBTOOL_RC],
-[AC_REQUIRE([LT_AC_PROG_RC])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
-])# AC_LIBTOOL_RC
-
-
-# AC_LIBTOOL_LANG_C_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
-AC_DEFUN([_LT_AC_LANG_C_CONFIG],
-[lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF
-
-# Report which library types will actually be built
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_C_CONFIG
-
-
-# AC_LIBTOOL_LANG_CXX_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
-AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
-[AC_LANG_PUSH(C++)
-AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Dependencies to place before and after the object being linked:
-_LT_AC_TAGVAR(predep_objects, $1)=
-_LT_AC_TAGVAR(postdep_objects, $1)=
-_LT_AC_TAGVAR(predeps, $1)=
-_LT_AC_TAGVAR(postdeps, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_LD=$LD
-lt_save_GCC=$GCC
-GCC=$GXX
-lt_save_with_gnu_ld=$with_gnu_ld
-lt_save_path_LD=$lt_cv_path_LD
-if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
- lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-else
- $as_unset lt_cv_prog_gnu_ld
-fi
-if test -n "${lt_cv_path_LDCXX+set}"; then
- lt_cv_path_LD=$lt_cv_path_LDCXX
-else
- $as_unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-else
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-fi
-
-if test "$GXX" = yes; then
- # Set up default GNU C++ configuration
-
- AC_PROG_LD
-
- # Check if GNU C++ uses GNU ld as the underlying linker, since the
- # archiving commands below assume that GNU ld is being used.
- if test "$with_gnu_ld" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # If archive_cmds runs LD, not CC, wlarc should be empty
- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
- # investigate it a little bit more. (MM)
- wlarc='${wl}'
-
- # ancient GNU ld didn't support --whole-archive et. al.
- if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
- grep 'no-whole-archive' > /dev/null; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- with_gnu_ld=no
- wlarc=
-
- # A generic and very simple default shared library creation
- # command for GNU C++ for the case where it uses the native
- # linker, instead of GNU ld. If possible, this setting should
- # overridden to take advantage of the native linker features on
- # the platform it is being used on.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- fi
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-else
- GXX=no
- with_gnu_ld=no
- wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-_LT_AC_TAGVAR(ld_shlibs, $1)=yes
-case $host_os in
- aix3*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aix[[4-9]]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
- for ld_flag in $LDFLAGS; do
- case $ld_flag in
- *-brtl*)
- aix_use_runtimelinking=yes
- break
- ;;
- esac
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_AC_TAGVAR(archive_cmds, $1)=''
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GXX" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- chorus*)
- case $cc_basename in
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- darwin* | rhapsody*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
- if test "$GXX" = yes ; then
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- case $cc_basename in
- ec++*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- freebsd[[12]]*)
- # C++ shared libraries reported to be fairly broken before switch to ELF
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- freebsd-elf*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- ;;
- freebsd* | dragonfly*)
- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
- # conventions
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- ;;
- gnu*)
- ;;
- hpux9*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- hpux10*|hpux11*)
- if test $with_gnu_ld = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- case $host_cpu in
- hppa*64*|ia64*) ;;
- *)
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
- esac
- fi
- case $host_cpu in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- esac
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- if test $with_gnu_ld = no; then
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- interix[[3-9]]*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC*)
- # SGI C++
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- # Archives containing C++ object files must be created using
- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
- ;;
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
- fi
- fi
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
- esac
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
- ;;
- icpc*)
- # Intel C++
- with_gnu_ld=yes
- # version 8.0 and above of icpc choke on multiply defined symbols
- # if we add $predep_objects and $postdep_objects, however 7.1 and
- # earlier do not add the objects themselves.
- case `$CC -V 2>&1` in
- *"Version 7."*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- *) # Version 8.0 or newer
- tmp_idyn=
- case $host_cpu in
- ia64*) tmp_idyn=' -i_dynamic';;
- esac
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- ;;
- cxx*)
- # Compaq C++
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
- runpath_var=LD_RUN_PATH
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-
- # Not sure whether something based on
- # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
- # would be better.
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- m88k*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
- wlarc=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- fi
- # Workaround some broken pre-1.5 toolchains
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
- ;;
- openbsd2*)
- # C++ shared libraries are fairly broken
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- fi
- output_verbose_link_cmd='echo'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- osf3*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- osf4* | osf5*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
- echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
- $rm $lib.exp'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- psos*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- lcc*)
- # Lucid
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
- ;;
- esac
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
- # The C++ compiler must be used to create the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
- ;;
- *)
- # GNU C++ compiler with Solaris linker
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
- if $CC --version | grep -v '^2\.7' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- else
- # g++ 2.7 appears to require `-G' NOT `-shared' on this
- # platform.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- fi
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- ;;
- esac
- fi
- ;;
- esac
- ;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- # So that behaviour is only enabled if SCOABSPATH is set to a
- # non-empty value in the environment. Most likely only useful for
- # creating official distributions of packages.
- # This is a hack until libtool officially supports absolute path
- # names for shared libraries.
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- vxworks*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-esac
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$GXX"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_POSTDEP_PREDEP($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-with_gnu_ld=$lt_save_with_gnu_ld
-lt_cv_path_LDCXX=$lt_cv_path_LD
-lt_cv_path_LD=$lt_save_path_LD
-lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-])# AC_LIBTOOL_LANG_CXX_CONFIG
-
-# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
-# ------------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library. It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
-int a;
-void foo (void) { a = 0; }
-EOF
-],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
- Foo (void) { a = 0; }
-private:
- int a;
-};
-EOF
-],[$1],[F77],[cat > conftest.$ac_ext <<EOF
- subroutine foo
- implicit none
- integer*4 a
- a=0
- return
- end
-EOF
-],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
-public class foo {
- private int a;
- public void bar (void) {
- a = 0;
- }
-};
-EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
- # Parse the compiler output and extract the necessary
- # objects, libraries and library flags.
-
- # Sentinel used to keep track of whether or not we are before
- # the conftest object file.
- pre_test_object_deps_done=no
-
- # The `*' in the case matches for architectures that use `case' in
- # $output_verbose_cmd can trigger glob expansion during the loop
- # eval without this substitution.
- output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
-
- for p in `eval $output_verbose_link_cmd`; do
- case $p in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test $p = "-L" \
- || test $p = "-R"; then
- prev=$p
- continue
- else
- prev=
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- case $p in
- -L* | -R*)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
- if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
- else
- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
- fi
- ;;
- # The "-l" case would never come before the object being
- # linked, so don't bother handling this case.
- esac
- else
- if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
- _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
- else
- _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
- fi
- fi
- ;;
-
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
- if test "$p" = "conftest.$objext"; then
- pre_test_object_deps_done=yes
- continue
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
- _LT_AC_TAGVAR(predep_objects, $1)="$p"
- else
- _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
- fi
- else
- if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
- _LT_AC_TAGVAR(postdep_objects, $1)="$p"
- else
- _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
- fi
- fi
- ;;
-
- *) ;; # Ignore the rest.
-
- esac
- done
-
- # Clean up.
- rm -f a.out a.exe
-else
- echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$rm -f confest.$objext
-
-_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
- _LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_AC_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-
-# PORTME: override above test on systems where it is broken
-ifelse([$1],[CXX],
-[case $host_os in
-interix[[3-9]]*)
- # Interix 3.5 installs completely hosed .la files for C++, so rather than
- # hack all around it, let's just trust "g++" to DTRT.
- _LT_AC_TAGVAR(predep_objects,$1)=
- _LT_AC_TAGVAR(postdep_objects,$1)=
- _LT_AC_TAGVAR(postdeps,$1)=
- ;;
-
-linux*)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- #
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
- if test "$solaris_use_stlport4" != yes; then
- _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-
-solaris*)
- case $cc_basename in
- CC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- # Adding this requires a known-good setup of shared libraries for
- # Sun compiler versions before 5.6, else PIC objects from an old
- # archive will be linked into the output, leading to subtle bugs.
- if test "$solaris_use_stlport4" != yes; then
- _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-esac
-])
-case " $_LT_AC_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
-])# AC_LIBTOOL_POSTDEP_PREDEP
-
-# AC_LIBTOOL_LANG_F77_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
-AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
-[AC_REQUIRE([AC_PROG_F77])
-AC_LANG_PUSH(Fortran 77)
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="\
- subroutine t
- return
- end
-"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="\
- program t
- end
-"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${F77-"f77"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-_LT_AC_TAGVAR(GCC, $1)="$G77"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_F77_CONFIG
-
-
-# AC_LIBTOOL_LANG_GCJ_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
-AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_GCJ_CONFIG
-
-
-# AC_LIBTOOL_LANG_RC_CONFIG
-# -------------------------
-# Ensure that the configuration vars for the Windows resource compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
-AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${RC-"windres"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_RC_CONFIG
-
-
-# AC_LIBTOOL_CONFIG([TAGNAME])
-# ----------------------------
-# If TAGNAME is not passed, then create an initial libtool script
-# with a default configuration from the untagged config vars. Otherwise
-# add code to config.status for appending the configuration named by
-# TAGNAME from the matching tagged config vars.
-AC_DEFUN([AC_LIBTOOL_CONFIG],
-[# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- _LT_AC_TAGVAR(compiler, $1) \
- _LT_AC_TAGVAR(CC, $1) \
- _LT_AC_TAGVAR(LD, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
- _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
- _LT_AC_TAGVAR(old_archive_cmds, $1) \
- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
- _LT_AC_TAGVAR(predep_objects, $1) \
- _LT_AC_TAGVAR(postdep_objects, $1) \
- _LT_AC_TAGVAR(predeps, $1) \
- _LT_AC_TAGVAR(postdeps, $1) \
- _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
- _LT_AC_TAGVAR(compiler_lib_search_dirs, $1) \
- _LT_AC_TAGVAR(archive_cmds, $1) \
- _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
- _LT_AC_TAGVAR(postinstall_cmds, $1) \
- _LT_AC_TAGVAR(postuninstall_cmds, $1) \
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
- _LT_AC_TAGVAR(allow_undefined_flag, $1) \
- _LT_AC_TAGVAR(no_undefined_flag, $1) \
- _LT_AC_TAGVAR(export_symbols_cmds, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
- _LT_AC_TAGVAR(hardcode_automatic, $1) \
- _LT_AC_TAGVAR(module_cmds, $1) \
- _LT_AC_TAGVAR(module_expsym_cmds, $1) \
- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
- _LT_AC_TAGVAR(fix_srcfile_path, $1) \
- _LT_AC_TAGVAR(exclude_expsyms, $1) \
- _LT_AC_TAGVAR(include_expsyms, $1); do
-
- case $var in
- _LT_AC_TAGVAR(old_archive_cmds, $1) | \
- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
- _LT_AC_TAGVAR(archive_cmds, $1) | \
- _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
- _LT_AC_TAGVAR(module_cmds, $1) | \
- _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
- _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\[$]0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
- ;;
- esac
-
-ifelse([$1], [],
- [cfgfile="${ofile}T"
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- $rm -f "$cfgfile"
- AC_MSG_NOTICE([creating $ofile])],
- [cfgfile="$ofile"])
-
- cat <<__EOF__ >> "$cfgfile"
-ifelse([$1], [],
-[#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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.
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e 1s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG],
-[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
-
-# Is the compiler the GNU C compiler?
-with_gcc=$_LT_AC_TAGVAR(GCC, $1)
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
-archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
-module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
-
-# Symbols that must always be exported.
-include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
-
-ifelse([$1],[],
-[# ### END LIBTOOL CONFIG],
-[# ### END LIBTOOL TAG CONFIG: $tagname])
-
-__EOF__
-
-ifelse([$1],[], [
- case $host_os in
- aix3*)
- cat <<\EOF >> "$cfgfile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" || \
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-])
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-])# AC_LIBTOOL_CONFIG
-
-
-# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-
-_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
- AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
- lt_cv_prog_compiler_rtti_exceptions,
- [-fno-rtti -fno-exceptions], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
-
-
-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-# ---------------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([LT_AC_PROG_SED])
-AC_REQUIRE([AC_PROG_NM])
-AC_REQUIRE([AC_OBJEXT])
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[[BCDT]]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[[ABCDGISTW]]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDEGRST]]'
- fi
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- ;;
-linux* | k*bsd*-gnu)
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDGIRSTW]]'
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- fi
- ;;
-irix* | nonstopux*)
- symcode='[[BCDEGRST]]'
- ;;
-osf*)
- symcode='[[BCDEGQRST]]'
- ;;
-solaris*)
- symcode='[[BDRT]]'
- ;;
-sco3.2v5*)
- symcode='[[DT]]'
- ;;
-sysv4.2uw2*)
- symcode='[[DT]]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[[ABDT]]'
- ;;
-sysv4)
- symcode='[[DFNSTU]]'
- ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- if AC_TRY_EVAL(ac_compile); then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if grep ' nm_test_var$' "$nlist" >/dev/null; then
- if grep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
- cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[[]] =
-{
-EOF
- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
- cat <<\EOF >> conftest.$ac_ext
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
- cat conftest.$ac_ext >&5
- fi
- rm -rf conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- AC_MSG_RESULT(failed)
-else
- AC_MSG_RESULT(ok)
-fi
-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-
-
-# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
-# ---------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
-[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
- ifelse([$1],[CXX],[
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- mingw* | cygwin* | os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- interix[[3-9]]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- case $host_os in
- aix[[4-9]]*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- chorus*)
- case $cc_basename in
- cxch68*)
- # Green Hills C++ Compiler
- # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
- ;;
- esac
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- freebsd* | dragonfly*)
- # FreeBSD uses GNU C++
- ;;
- hpux9* | hpux10* | hpux11*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- if test "$host_cpu" != ia64; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- fi
- ;;
- aCC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- ;;
- *)
- ;;
- esac
- ;;
- interix*)
- # This is c89, which is MS Visual C++ (no shared libs)
- # Anyone wants to do a port?
- ;;
- irix5* | irix6* | nonstopux*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- # CC pic flag -KPIC is the default.
- ;;
- *)
- ;;
- esac
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # KAI C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- icpc* | ecpc*)
- # Intel C++
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler.
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- cxx*)
- # Compaq C++
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- ;;
- m88k*)
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
- ;;
- *)
- ;;
- esac
- ;;
- netbsd*)
- ;;
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- cxx*)
- # Digital/Compaq C++
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- psos*)
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- ;;
- *)
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- lcc*)
- # Lucid
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- esac
- ;;
- vxworks*)
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-],
-[
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
-
- interix[[3-9]]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
-
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
-
- hpux9* | hpux10* | hpux11*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC (with -KPIC) is the default.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- newsos6)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- icc* | ecc*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- ccc*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All Alpha code is PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=''
- ;;
- esac
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All OSF/1 code is PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- rdos*)
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- solaris*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
- esac
- ;;
-
- sunos4*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- unicos*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
-
- uts4*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
- _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1),
- [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
- [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
- "" | " "*) ;;
- *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
- esac],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
- ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
-AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
- _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1),
- $lt_tmp_static_flag,
- [],
- [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
-])
-
-
-# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
-# ------------------------------------
-# See if the linker supports building shared libraries.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-ifelse([$1],[CXX],[
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- case $host_os in
- aix[[4-9]]*)
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- fi
- ;;
- pw32*)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
- ;;
- cygwin* | mingw*)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
- ;;
- *)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- esac
- _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-],[
- runpath_var=
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
- _LT_AC_TAGVAR(archive_cmds, $1)=
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
- _LT_AC_TAGVAR(hardcode_automatic, $1)=no
- _LT_AC_TAGVAR(module_cmds, $1)=
- _LT_AC_TAGVAR(module_expsym_cmds, $1)=
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- _LT_AC_TAGVAR(include_expsyms, $1)=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- _LT_CC_BASENAME([$compiler])
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[[3-9]]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- interix[[3-9]]*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
-
- if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
- runpath_var=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- fi
- ;;
-
- aix[[4-9]]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_AC_TAGVAR(archive_cmds, $1)=''
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- # see comment about different semantics on the GNU ld section
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- bsdi[[45]]*)
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
- # FIXME: Should let the user specify the lib program.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
- _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- ;;
-
- darwin* | rhapsody*)
- case $host_os in
- rhapsody* | darwin1.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- if test "$GCC" = yes ; then
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- freebsd1*)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
-
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- fi
- ;;
-
- hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- newsos6)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- else
- case $host_os in
- openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- os2*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- else
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- solaris*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- ;;
- motorola)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4.3*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
- # Assume -lc should be added
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $_LT_AC_TAGVAR(archive_cmds, $1) in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- AC_MSG_CHECKING([whether -lc should be explicitly linked in])
- $rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
- pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
- if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
- then
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- else
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- fi
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
- ;;
- esac
- fi
- ;;
-esac
-])# AC_LIBTOOL_PROG_LD_SHLIBS
-
-
-# _LT_AC_FILE_LTDLL_C
-# -------------------
-# Be careful that the start marker always follows a newline.
-AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
-])# _LT_AC_FILE_LTDLL_C
-
-
-# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
-# ---------------------------------
-AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
-
-
-# old names
-AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
-AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
-AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
-
-# This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])
-
-AC_DEFUN([LT_AC_PROG_GCJ],
-[AC_CHECK_TOOL(GCJ, gcj, no)
- test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
- AC_SUBST(GCJFLAGS)
-])
-
-AC_DEFUN([LT_AC_PROG_RC],
-[AC_CHECK_TOOL(RC, windres, no)
-])
-
-
-# Cheap backport of AS_EXECUTABLE_P and required macros
-# from Autoconf 2.59; we should not use $as_executable_p directly.
-
-# _AS_TEST_PREPARE
-# ----------------
-m4_ifndef([_AS_TEST_PREPARE],
-[m4_defun([_AS_TEST_PREPARE],
-[if test -x / >/dev/null 2>&1; then
- as_executable_p='test -x'
-else
- as_executable_p='test -f'
-fi
-])])# _AS_TEST_PREPARE
-
-# AS_EXECUTABLE_P
-# ---------------
-# Check whether a file is executable.
-m4_ifndef([AS_EXECUTABLE_P],
-[m4_defun([AS_EXECUTABLE_P],
-[AS_REQUIRE([_AS_TEST_PREPARE])dnl
-$as_executable_p $1[]dnl
-])])# AS_EXECUTABLE_P
-
-# NOTE: This macro has been submitted for inclusion into #
-# GNU Autoconf as AC_PROG_SED. When it is available in #
-# a released version of Autoconf we should remove this #
-# macro and use it instead. #
-# LT_AC_PROG_SED
-# --------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible. Prefer GNU sed if found.
-AC_DEFUN([LT_AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for lt_ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then
- lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
- fi
- done
- done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
- test ! -f $lt_ac_sed && continue
- cat /dev/null > conftest.in
- lt_ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >conftest.in
- # Check for GNU sed and select it if it is found.
- if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
- lt_cv_path_SED=$lt_ac_sed
- break
- fi
- while true; do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo >>conftest.nl
- $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
- cmp -s conftest.out conftest.nl || break
- # 10000 chars as input seems more than enough
- test $lt_ac_count -gt 10 && break
- lt_ac_count=`expr $lt_ac_count + 1`
- if test $lt_ac_count -gt $lt_ac_max; then
- lt_ac_max=$lt_ac_count
- lt_cv_path_SED=$lt_ac_sed
- fi
- done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])
-
-# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-#
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# 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 "$$1"; then
- pkg_cv_[]$1="$$1"
- elif test -n "$PKG_CONFIG"; then
- PKG_CHECK_EXISTS([$3],
- [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
- [pkg_failed=yes])
- 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 --print-errors "$2" 2>&1`
- else
- $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
- 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 <http://pkg-config.freedesktop.org/>.])],
- [$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
-
diff --git a/libXaw/config.guess b/libXaw/config.guess
deleted file mode 100644
index f32079abd..000000000
--- a/libXaw/config.guess
+++ /dev/null
@@ -1,1526 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-
-timestamp='2008-01-23'
-
-# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, 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.
-
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- *:SolidBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[456])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep __LP64__ >/dev/null
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- *:Interix*:[3456]*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- EM64T | authenticamd)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
- IA64)
- echo ia64-unknown-interix${UNAME_RELEASE}
- exit ;;
- esac ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- arm*:Linux:*:*)
- eval $set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
- echo frv-unknown-linux-gnu
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- or32:Linux:*:*)
- echo or32-unknown-linux-gnu
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit ;;
- xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^LIBC/{
- s: ::g
- p
- }'`"
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux${UNAME_RELEASE}
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
- i*86:rdos:*:*)
- echo ${UNAME_MACHINE}-pc-rdos
- exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/libXaw/config.h.in b/libXaw/config.h.in
deleted file mode 100644
index 2f553dc42..000000000
--- a/libXaw/config.h.in
+++ /dev/null
@@ -1,76 +0,0 @@
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#undef HAS_WCHAR_H
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#undef HAS_WCTYPE_H
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `iswalnum' function. */
-#undef HAVE_ISWALNUM
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you DO NOT have the <widec.h> header file. */
-#undef NO_WIDEC_H
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Major version of this package */
-#undef PACKAGE_VERSION_MAJOR
-
-/* Minor version of this package */
-#undef PACKAGE_VERSION_MINOR
-
-/* Patch version of this package */
-#undef PACKAGE_VERSION_PATCHLEVEL
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Version number of package */
-#undef VERSION
diff --git a/libXaw/config.sub b/libXaw/config.sub
deleted file mode 100644
index 6759825a5..000000000
--- a/libXaw/config.sub
+++ /dev/null
@@ -1,1658 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-
-timestamp='2008-01-16'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, 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.
-
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore | mep \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64vr | mips64vrel \
- | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | mt \
- | msp430 \
- | nios | nios2 \
- | ns16k | ns32k \
- | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | score \
- | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
- ms1)
- basic_machine=mt-unknown
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nios-* | nios2-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rdos)
- basic_machine=i386-pc
- os=-rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh5el)
- basic_machine=sh5le-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
- tile*)
- basic_machine=tile-unknown
- os=-linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -openbsd* | -solidbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- score-*)
- os=-elf
- ;;
- spu-*)
- os=-elf
- ;;
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mep-*)
- os=-elf
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-haiku)
- os=-haiku
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/libXaw/configure b/libXaw/configure
deleted file mode 100644
index 175946f66..000000000
--- a/libXaw/configure
+++ /dev/null
@@ -1,26502 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for libXaw 1.0.7.
-#
-# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
-#
-# 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 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=:
- # 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
-
-
-
-
-# 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
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-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.
-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.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-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
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- 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
-
-
-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
-}
-
-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
- 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=.
- case $as_dir in
- /*)
- 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
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- 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 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
- # 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
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-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
-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
-else
- as_ln_s='cp -p'
-fi
-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=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-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'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
- ;;
-esac
-
-echo=${ECHO-echo}
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string=`eval $cmd`) 2>/dev/null &&
- echo_test_string=`eval $cmd` &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
- then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
-else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
- else
- # Try using printf.
- echo='printf %s\n'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL $0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$CONFIG_SHELL $0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "$0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
- ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
-
-tagnames=${tagnames+${tagnames},}CXX
-
-tagnames=${tagnames+${tagnames},}F77
-
-exec 7<&0 </dev/null 6>&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`
-
-#
-# 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}
-
-# Identity of this package.
-PACKAGE_NAME='libXaw'
-PACKAGE_TARNAME='libXaw'
-PACKAGE_VERSION='1.0.7'
-PACKAGE_STRING='libXaw 1.0.7'
-PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
-
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='am__EXEEXT_FALSE
-am__EXEEXT_TRUE
-LTLIBOBJS
-LIBOBJS
-BUILD_XAW7_FALSE
-BUILD_XAW7_TRUE
-BUILD_XAW6_FALSE
-BUILD_XAW6_TRUE
-XAW7_LIBS
-XAW7_CFLAGS
-XAW6_LIBS
-XAW6_CFLAGS
-PLATFORM_DARWIN_FALSE
-PLATFORM_DARWIN_TRUE
-PLATFORM_WIN32_FALSE
-PLATFORM_WIN32_TRUE
-LIBEXT
-ADMIN_MAN_DIR
-DRIVER_MAN_DIR
-MISC_MAN_DIR
-FILE_MAN_DIR
-LIB_MAN_DIR
-APP_MAN_DIR
-ADMIN_MAN_SUFFIX
-DRIVER_MAN_SUFFIX
-MISC_MAN_SUFFIX
-FILE_MAN_SUFFIX
-LIB_MAN_SUFFIX
-APP_MAN_SUFFIX
-distcleancheck_listfiles
-CHANGELOG_CMD
-AM_BACKSLASH
-AM_DEFAULT_VERBOSITY
-CWARNFLAGS
-PKG_CONFIG
-BUILD_DOCS_FALSE
-BUILD_DOCS_TRUE
-GROFF
-LIBTOOL
-ac_ct_F77
-FFLAGS
-F77
-CXXCPP
-am__fastdepCXX_FALSE
-am__fastdepCXX_TRUE
-CXXDEPMODE
-ac_ct_CXX
-CXXFLAGS
-CXX
-CPP
-NMEDIT
-DSYMUTIL
-RANLIB
-AR
-ECHO
-LN_S
-EGREP
-GREP
-SED
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-CCDEPMODE
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-DEPDIR
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-am__untar
-am__tar
-AMTAR
-am__leading_dot
-SET_MAKE
-AWK
-mkdir_p
-MKDIR_P
-INSTALL_STRIP_PROGRAM
-STRIP
-install_sh
-MAKEINFO
-AUTOHEADER
-AUTOMAKE
-AUTOCONF
-ACLOCAL
-VERSION
-PACKAGE
-CYGPATH_W
-am__isrc
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_dependency_tracking
-enable_shared
-enable_static
-enable_fast_install
-with_gnu_ld
-enable_libtool_lock
-with_pic
-with_tags
-enable_docs
-enable_silent_rules
-enable_strict_compilation
-with_release_version
-enable_xaw6
-enable_xaw7
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-CXX
-CXXFLAGS
-CCC
-CXXCPP
-F77
-FFLAGS
-PKG_CONFIG
-XAW6_CFLAGS
-XAW6_LIBS
-XAW7_CFLAGS
-XAW7_LIBS'
-
-
-# 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
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# 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'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-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
- ac_prev=
- continue
- fi
-
- 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_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- 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_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_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- 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_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_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -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 ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --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)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --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 ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- 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_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_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- 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_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.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- 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 &&
- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-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
-fi
-
-# 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=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- 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'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- $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
- fi
-fi
-
-ac_tool_prefix=
-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 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
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-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; }; }
-fi
-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; }; }
- 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.
-#
-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 libXaw 1.0.7 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-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]
- --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/libXaw]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-Program names:
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM run sed PROGRAM on installed program names
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of libXaw 1.0.7:";;
- 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]
- --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors
- --enable-shared[=PKGS] build shared libraries [default=yes]
- --enable-static[=PKGS] build static libraries [default=yes]
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
- --enable-docs Enable building of Xaw documentation
- --enable-silent-rules less verbose build output (undo: `make V=1')
- --disable-silent-rules verbose build output (undo: `make V=0')
- --enable-strict-compilation
- Enable all warnings from compiler and make them
- errors (default: disabled)
- --disable-xaw6 Disable building of libXaw.so.6
- --disable-xaw7 Disable building of libXaw.so.7
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-tags[=TAGS] include additional configurations [automatic]
- --with-release-version=STRING
- Use release version string in package name
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
- CXXCPP C++ preprocessor
- F77 Fortran 77 compiler command
- FFLAGS Fortran 77 compiler flags
- PKG_CONFIG path to pkg-config utility
- XAW6_CFLAGS C compiler flags for XAW6, overriding pkg-config
- XAW6_LIBS linker flags for XAW6, overriding pkg-config
- XAW7_CFLAGS C compiler flags for XAW7, overriding pkg-config
- XAW7_LIBS linker flags for XAW7, overriding pkg-config
-
-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 <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-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
- .) # We are building in place.
- ac_srcdir=.
- 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
- 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
-
- 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
- $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 $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-libXaw configure 1.0.7
-generated by GNU Autoconf 2.63
-
-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
-fi
-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 libXaw $as_me 1.0.7, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 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`
-/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`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
-done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# 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: 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.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_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 $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"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- 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
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- 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
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 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 -f -r conftest* confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# 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 "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
- { $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
-done
-
-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
- { $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";;
- esac
- fi
-else
- { $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 $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
- case $ac_old_set,$ac_new_set in
- set,)
- { $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)
- { $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
- # 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=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&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'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-am__api_version='1.11'
-
-ac_aux_dir=
-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
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- 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
- { { $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
-
-# 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
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# 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.
-# 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
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- 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.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- 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
-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. 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 value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $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.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name. Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
- *[\\\"\#\$\&\'\`$am_lf]*)
- { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5
-$as_echo "$as_me: error: unsafe absolute working directory name" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-case $srcdir in
- *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
- { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5
-$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
- if test "$*" = "X"; then
- # -L didn't work.
- set X `ls -t "$srcdir/configure" conftest.file`
- fi
- rm -f conftest.file
- if test "$*" != "X $srcdir/configure conftest.file" \
- && test "$*" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" >&5
-$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" >&2;}
- { (exit 1); exit 1; }; }
- fi
-
- test "$2" = conftest.file
- )
-then
- # Ok.
- :
-else
- { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-$as_echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
- { (exit 1); exit 1; }; }
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-test "$program_prefix" != NONE &&
- 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 $.
-# By default was `s,x,x', remove it if useless.
-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`
-
-if test x"${MISSING+set}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
- *)
- MISSING="\${SHELL} $am_aux_dir/missing" ;;
- esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
- am_missing_run="$MISSING --run "
-else
- am_missing_run=
- { $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 test x"${install_sh}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
- *)
- install_sh="\${SHELL} $am_aux_dir/install-sh"
- esac
-fi
-
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-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
-{ $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
- $as_echo_n "(cached) " >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip"
- $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
- { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $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
-{ $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
- $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.
-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_STRIP="strip"
- $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_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_STRIP" = x; then
- STRIP=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- STRIP=$ac_ct_STRIP
- fi
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-
-{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
- if test "${ac_cv_path_mkdir+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in mkdir gmkdir; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
- case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
- 'mkdir (GNU coreutils) '* | \
- 'mkdir (coreutils) '* | \
- 'mkdir (fileutils) '4.1*)
- ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
- break 3;;
- esac
- done
- done
-done
-IFS=$as_save_IFS
-
-fi
-
- if test "${ac_cv_path_mkdir+set}" = set; then
- MKDIR_P="$ac_cv_path_mkdir -p"
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for MKDIR_P within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- test -d ./--version && rmdir ./--version
- MKDIR_P="$ac_install_sh -d"
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
- [\\/$]* | ?:[\\/]*) ;;
- */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
-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
-{ $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
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # 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_AWK="$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
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
- { $as_echo "$as_me:$LINENO: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AWK" && break
-done
-
-{ $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 '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-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 \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
- # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
- # is not polluted with repeated "-I."
- am__isrc=' -I$(srcdir)'
- # test to see if srcdir already configured
- if test -f $srcdir/config.status; then
- { { $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
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
- if (cygpath --version) >/dev/null 2>/dev/null; then
- CYGPATH_W='cygpath -w'
- else
- CYGPATH_W=echo
- fi
-fi
-
-
-# Define the identity of the package.
- PACKAGE='libXaw'
- VERSION='1.0.7'
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-# Some tools Automake needs.
-
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-
-
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-
-
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-
-
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-
-
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-
-
-
-
-
-
-ac_config_headers="$ac_config_headers config.h"
-
-
-# Require xorg-macros: XORG_WITH_LINT, XORG_DEFAULT_OPTIONS
-
-
-
-
-
-
-
-
-
-
-
-
-# Check for progs
-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: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&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: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $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: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $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: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $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: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $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: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $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 <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* 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
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo this is the am__doit target
-.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
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
- ;;
- esac
-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
-
-
-
-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
- am__universal=false
- case " $depcc " in #(
- *\ -arch\ *\ -arch\ *) am__universal=true ;;
- esac
-
- 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
-
- # 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. Also, some Intel
- # versions had trouble with output in subdirs
- am__obj=sub/conftest.${OBJEXT-o}
- am__minus_obj="-o $am__obj"
- case $depmode in
- gcc)
- # This depmode causes a compiler race in universal mode.
- test "$am__universal" = false || continue
- ;;
- 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
- ;;
- msvisualcpp | msvcmsys)
- # This compiler won't grok `-c -o', but also, the minuso test has
- # not run yet. These depmodes are late enough in the game, and
- # so weak that their functioning should not be impacted.
- am__obj=conftest.${OBJEXT-o}
- am__minus_obj=
- ;;
- none) break ;;
- esac
- if depmode=$depmode \
- source=sub/conftest.c object=$am__obj \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep $am__obj 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
-
-
-# Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
- enableval=$enable_shared; p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_shared=yes
-fi
-
-
-# Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then
- enableval=$enable_static; p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_static=yes
-fi
-
-
-# Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then
- enableval=$enable_fast_install; p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_fast_install=yes
-fi
-
-
-# Make sure we can run config.sub.
-$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; }; }
-
-{ $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
- $as_echo_n "(cached) " >&6
-else
- 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=`$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
-{ $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
-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
-
-
-{ $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
- $as_echo_n "(cached) " >&6
-else
- 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
-{ $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
-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 "${lt_cv_path_SED+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for lt_ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$lt_ac_prog$ac_exec_ext"; }; then
- lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
- fi
- done
- done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
- test ! -f $lt_ac_sed && continue
- cat /dev/null > conftest.in
- lt_ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >conftest.in
- # Check for GNU sed and select it if it is found.
- if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
- lt_cv_path_SED=$lt_ac_sed
- break
- fi
- while true; do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo >>conftest.nl
- $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
- cmp -s conftest.out conftest.nl || break
- # 10000 chars as input seems more than enough
- test $lt_ac_count -gt 10 && break
- lt_ac_count=`expr $lt_ac_count + 1`
- if test $lt_ac_count -gt $lt_ac_max; then
- lt_ac_max=$lt_ac_count
- lt_cv_path_SED=$lt_ac_sed
- fi
- done
-done
-
-fi
-
-SED=$lt_cv_path_SED
-
-{ $as_echo "$as_me:$LINENO: result: $SED" >&5
-$as_echo "$SED" >&6; }
-
-{ $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"
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
- withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [\\/]* | ?:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
- { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- { $as_echo "$as_me:$LINENO: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
- { (exit 1); exit 1; }; }
-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-
-{ $as_echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-$as_echo_n "checking for BSD-compatible nm... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/$lt_tmp_nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
- done
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-NM="$lt_cv_path_NM"
-
-{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[4-9]*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[45]*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | dragonfly*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case $host_cpu in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-interix[3-9]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-nto-qnx*)
- lt_cv_deplibs_check_method=unknown
- ;;
-
-openbsd*)
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-rdos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.3*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
- enableval=$enable_libtool_lock;
-fi
-
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '#line 4540 "configure"' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- if test "$lt_cv_prog_gnu_ld" = yes; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|sparc*-*linux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case `/usr/bin/file conftest.o` in
- *32-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_i386"
- ;;
- ppc64-*linux*|powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- ppc*-*linux*|powerpc*-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- 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
-
- 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 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- lt_cv_cc_needs_belf=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- lt_cv_cc_needs_belf=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- 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
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-sparc*-*solaris*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-
-esac
-
-need_locks="$enable_libtool_lock"
-
-
-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 <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> 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 <limits.h>
-#else
-# include <assert.h>
-#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 <ac_nonexistent.h>
-_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 <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> 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 <limits.h>
-#else
-# include <assert.h>
-#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 <ac_nonexistent.h>
-_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: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $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 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 <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.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_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 <string.h>
-
-_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 <stdlib.h>
-
-_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 <ctype.h>
-#include <stdlib.h>
-#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; }
-as_val=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- if test "x$as_val" = x""yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in dlfcn.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { $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
-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; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
-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
- ac_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_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
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ---------------------------------------------------------------------- ##
-## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg ##
-## ---------------------------------------------------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ $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
- eval "$as_ac_Header=\$ac_header_preproc"
-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; }
-
-fi
-as_val=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- if test "x$as_val" = x""yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- 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_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # 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_CXX="$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
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:$LINENO: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-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_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$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_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# 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); }
-
-{ $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_cxx_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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-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_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cxx_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CXXFLAGS=""
- 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_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-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_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-depcc="$CXX" 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_CXX_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_CXX_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
- fi
- am__universal=false
- case " $depcc " in #(
- *\ -arch\ *\ -arch\ *) am__universal=true ;;
- esac
-
- 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
-
- # 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. Also, some Intel
- # versions had trouble with output in subdirs
- am__obj=sub/conftest.${OBJEXT-o}
- am__minus_obj="-o $am__obj"
- case $depmode in
- gcc)
- # This depmode causes a compiler race in universal mode.
- test "$am__universal" = false || continue
- ;;
- 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
- ;;
- msvisualcpp | msvcmsys)
- # This compiler won't grok `-c -o', but also, the minuso test has
- # not run yet. These depmodes are late enough in the game, and
- # so weak that their functioning should not be impacted.
- am__obj=conftest.${OBJEXT-o}
- am__minus_obj=
- ;;
- none) break ;;
- esac
- if depmode=$depmode \
- source=sub/conftest.c object=$am__obj \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep $am__obj 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_CXX_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
- am__fastdepCXX_TRUE=
- am__fastdepCXX_FALSE='#'
-else
- am__fastdepCXX_TRUE='#'
- am__fastdepCXX_FALSE=
-fi
-
-
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_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; }
-if test -z "$CXXCPP"; then
- if test "${ac_cv_prog_CXXCPP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CXXCPP needs to be expanded
- for CXXCPP in "$CXX -E" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> 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 <limits.h>
-#else
-# include <assert.h>
-#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_cxx_preproc_warn_flag$ac_cxx_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 <ac_nonexistent.h>
-_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_cxx_preproc_warn_flag$ac_cxx_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_CXXCPP=$CXXCPP
-
-fi
- CXXCPP=$ac_cv_prog_CXXCPP
-else
- ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> 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 <limits.h>
-#else
-# include <assert.h>
-#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_cxx_preproc_warn_flag$ac_cxx_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 <ac_nonexistent.h>
-_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_cxx_preproc_warn_flag$ac_cxx_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: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-fi
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-fi
-
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn
- 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_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$F77"; then
- ac_cv_prog_F77="$F77" # 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_F77="$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
-F77=$ac_cv_prog_F77
-if test -n "$F77"; then
- { $as_echo "$as_me:$LINENO: result: $F77" >&5
-$as_echo "$F77" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$F77" && break
- done
-fi
-if test -z "$F77"; then
- ac_ct_F77=$F77
- for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn
-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_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_F77"; then
- ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_F77="$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_F77=$ac_cv_prog_ac_ct_F77
-if test -n "$ac_ct_F77"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
-$as_echo "$ac_ct_F77" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_F77" && break
-done
-
- if test "x$ac_ct_F77" = x; then
- F77=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- F77=$ac_ct_F77
- fi
-fi
-
-
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for Fortran 77 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); }
-rm -f a.out
-
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file. (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
-$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; }
-if test "${ac_cv_f77_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
- program main
-#ifndef __GNUC__
- choke me
-#endif
-
- end
-_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_f77_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_f77_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
-$as_echo "$ac_cv_f77_compiler_gnu" >&6; }
-ac_ext=$ac_save_ext
-ac_test_FFLAGS=${FFLAGS+set}
-ac_save_FFLAGS=$FFLAGS
-FFLAGS=
-{ $as_echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
-$as_echo_n "checking whether $F77 accepts -g... " >&6; }
-if test "${ac_cv_prog_f77_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- FFLAGS=-g
-cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_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_f77_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_f77_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_prog_f77_g=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
-$as_echo "$ac_cv_prog_f77_g" >&6; }
-if test "$ac_test_FFLAGS" = set; then
- FFLAGS=$ac_save_FFLAGS
-elif test $ac_cv_prog_f77_g = yes; then
- if test "x$ac_cv_f77_compiler_gnu" = xyes; then
- FFLAGS="-g -O2"
- else
- FFLAGS="-g"
- fi
-else
- if test "x$ac_cv_f77_compiler_gnu" = xyes; then
- FFLAGS="-O2"
- else
- FFLAGS=
- fi
-fi
-
-if test $ac_compiler_gnu = yes; then
- G77=yes
-else
- G77=
-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
-
-
-
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-# find the maximum length of command line arguments
-{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- i=0
- teststring="ABCD"
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
- ;;
-
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
- = "XX$teststring") >/dev/null 2>&1 &&
- new_result=`expr "X$teststring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- teststring=
- # Add a significant safety factor because C++ compilers can tack on massive
- # amounts of additional arguments before passing them to the linker.
- # It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
- ;;
- esac
-
-fi
-
-if test -n $lt_cv_sys_max_cmd_len ; then
- { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: none" >&5
-$as_echo "none" >&6; }
-fi
-
-
-
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[BCDT]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- if test "$host_cpu" = ia64; then
- symcode='[ABCDEGRST]'
- fi
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- ;;
-linux* | k*bsd*-gnu)
- if test "$host_cpu" = ia64; then
- symcode='[ABCDGIRSTW]'
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- fi
- ;;
-irix* | nonstopux*)
- symcode='[BCDEGRST]'
- ;;
-osf*)
- symcode='[BCDEGQRST]'
- ;;
-solaris*)
- symcode='[BDRT]'
- ;;
-sco3.2v5*)
- symcode='[DT]'
- ;;
-sysv4.2uw2*)
- symcode='[DT]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[ABDT]'
- ;;
-sysv4)
- symcode='[DFNSTU]'
- ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[ABCDGIRSTW]' ;;
-esac
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
- (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if grep ' nm_test_var$' "$nlist" >/dev/null; then
- if grep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
- cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
- cat <<\EOF >> conftest.$ac_ext
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&5
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
- fi
- else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- fi
- rm -rf conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-
-fi
-
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- { $as_echo "$as_me:$LINENO: result: failed" >&5
-$as_echo "failed" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
-objdir=$lt_cv_objdir
-
-
-
-
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; 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_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # 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_AR="${ac_tool_prefix}ar"
- $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
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:$LINENO: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; 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_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="ar"
- $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_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-else
- AR="$ac_cv_prog_AR"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
- $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
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; 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_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
- $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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-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
-{ $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
- $as_echo_n "(cached) " >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip"
- $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
- { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $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
-{ $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
- $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.
-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_STRIP="strip"
- $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_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_STRIP" = x; then
- STRIP=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- STRIP=$ac_ct_STRIP
- fi
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
-
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/${ac_tool_prefix}file; then
- lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- { $as_echo "$as_me:$LINENO: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/file; then
- lt_cv_path_MAGIC_CMD="$ac_dir/file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- else
- MAGIC_CMD=:
- fi
-fi
-
- fi
- ;;
-esac
-
-
- case $host_os in
- rhapsody* | darwin*)
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DSYMUTIL"; then
- ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil"
- $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
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
- { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
- ac_ct_DSYMUTIL=$DSYMUTIL
- # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; 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_DSYMUTIL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DSYMUTIL"; then
- ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil"
- $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DSYMUTIL" = x; then
- DSYMUTIL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DSYMUTIL=$ac_ct_DSYMUTIL
- fi
-else
- DSYMUTIL="$ac_cv_prog_DSYMUTIL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NMEDIT"; then
- ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit"
- $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
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
- { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NMEDIT"; then
- ac_ct_NMEDIT=$NMEDIT
- # Extract the first word of "nmedit", so it can be a program name with args.
-set dummy nmedit; 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_NMEDIT+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_NMEDIT"; then
- ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit"
- $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
-if test -n "$ac_ct_NMEDIT"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_NMEDIT" = x; then
- NMEDIT=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- NMEDIT=$ac_ct_NMEDIT
- fi
-else
- NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
-
- { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_apple_cc_single_mod=no
- if test -z "${LT_MULTI_MODULE}"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- echo "int foo(void){return 1;}" > conftest.c
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib ${wl}-single_module conftest.c
- if test -f libconftest.dylib; then
- lt_cv_apple_cc_single_mod=yes
- rm -rf libconftest.dylib*
- fi
- rm conftest.c
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
- { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- 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 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- lt_cv_ld_exported_symbols_list=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- lt_cv_ld_exported_symbols_list=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
- case $host_os in
- rhapsody* | darwin1.[0123])
- _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- darwin*)
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- 10.[012]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test "$lt_cv_apple_cc_single_mod" = "yes"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
- _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
- else
- _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}"
- fi
- if test "$DSYMUTIL" != ":"; then
- _lt_dsymutil="~$DSYMUTIL \$lib || :"
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-
-
-enable_dlopen=no
-enable_win32_dll=no
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
- enableval=$enable_libtool_lock;
-fi
-
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then
- withval=$with_pic; pic_mode="$withval"
-else
- pic_mode=default
-fi
-
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-lt_save_CC="$CC"
-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
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-objext=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
-
-lt_prog_compiler_no_builtin_flag=
-
-if test "$GCC" = yes; then
- lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_rtti_exceptions=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="-fno-rtti -fno-exceptions"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7644: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:7648: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_rtti_exceptions=yes
- fi
- fi
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
- lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-else
- :
-fi
-
-fi
-
-lt_prog_compiler_wl=
-lt_prog_compiler_pic=
-lt_prog_compiler_static=
-
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- lt_prog_compiler_pic='-DDLL_EXPORT'
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- ;;
-
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
- ;;
-
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- else
- lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- lt_prog_compiler_pic='-qnocommon'
- lt_prog_compiler_wl='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- newsos6)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- icc* | ecc*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
- ccc*)
- lt_prog_compiler_wl='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl=''
- ;;
- esac
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- rdos*)
- lt_prog_compiler_static='-non_shared'
- ;;
-
- solaris*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl='-Qoption ld '
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- lt_prog_compiler_pic='-Kconform_pic'
- lt_prog_compiler_static='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_can_build_shared=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic='-pic'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared=no
- ;;
- esac
- fi
-
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic_works=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7934: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:7938: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works=yes
- fi
- fi
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
- case $lt_prog_compiler_pic in
- "" | " "*) ;;
- *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
- esac
-else
- lt_prog_compiler_pic=
- lt_prog_compiler_can_build_shared=no
-fi
-
-fi
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic=
- ;;
- *)
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works=yes
- fi
- else
- lt_cv_prog_compiler_static_works=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
- :
-else
- lt_prog_compiler_static=
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8038: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:8042: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o=yes
- fi
- fi
- chmod u+w . 2>&5
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
- runpath_var=
- allow_undefined_flag=
- enable_shared_with_static_runtimes=no
- archive_cmds=
- archive_expsym_cmds=
- old_archive_From_new_cmds=
- old_archive_from_expsyms_cmds=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- thread_safe_flag_spec=
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld=
- hardcode_libdir_separator=
- hardcode_direct=no
- hardcode_minus_L=no
- hardcode_shlibpath_var=unsupported
- link_all_deplibs=unknown
- hardcode_automatic=no
- module_cmds=
- module_expsym_cmds=
- always_export_symbols=no
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[3-9]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- ld_shlibs=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- interix[3-9]*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- export_dynamic_flag_spec='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = no; then
- runpath_var=
- hardcode_libdir_flag_spec=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix[4-9]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds=''
- hardcode_direct=yes
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- 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 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- 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 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag=' ${wl}-bernotok'
- allow_undefined_flag=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec='$convenience'
- archive_cmds_need_lc=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs=no
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_From_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes=yes
- ;;
-
- darwin* | rhapsody*)
- case $host_os in
- rhapsody* | darwin1.[012])
- allow_undefined_flag='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[012])
- allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
- hardcode_shlibpath_var=unsupported
- whole_archive_flag_spec=''
- link_all_deplibs=yes
- if test "$GCC" = yes ; then
- output_verbose_link_cmd='echo'
- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- ld_shlibs=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- freebsd1*)
- ld_shlibs=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- export_dynamic_flag_spec='${wl}-E'
- ;;
-
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
-
- hardcode_direct=yes
- export_dynamic_flag_spec='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- fi
- ;;
-
- hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_libdir_flag_spec_ld='+b $libdir'
- hardcode_direct=no
- hardcode_shlibpath_var=no
- ;;
- *)
- hardcode_direct=yes
- export_dynamic_flag_spec='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- link_all_deplibs=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- newsos6)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_shlibpath_var=no
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- export_dynamic_flag_spec='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- hardcode_libdir_separator=:
- ;;
-
- solaris*)
- no_undefined_flag=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- link_all_deplibs=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds='$CC -r -o $output$reload_objs'
- hardcode_direct=no
- ;;
- motorola)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag='${wl}-z,text'
- archive_cmds_need_lc=no
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag='${wl}-z,text'
- allow_undefined_flag='${wl}-z,nodefs'
- archive_cmds_need_lc=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- export_dynamic_flag_spec='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
- fi
-
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
- $rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl
- pic_flag=$lt_prog_compiler_pic
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc=no
- else
- archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
- ;;
- esac
- fi
- ;;
-esac
-
-{ $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-
-if test "$GCC" = yes; then
- case $host_os in
- darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
- *) lt_awk_arg="/^libraries:/" ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'`
- else
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary.
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path/$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
- else
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
- lt_foo="";
- lt_count=0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo="/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[lt_foo]++; }
- if (lt_freq[lt_foo] == 1) { print lt_foo; }
-}'`
- sys_lib_search_path_spec=`echo $lt_search_path_spec`
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[4-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
- test -n "$runpath_var" || \
- test "X$hardcode_automatic" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
- test "$hardcode_minus_L" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action=unsupported
-fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-striplib=
-old_striplib=
-{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- { $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; }
-fi
- ;;
- *)
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- ;;
- esac
-fi
-
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dl_dlopen=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dl_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
-
-fi
-
- ;;
-
- *)
- { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
-$as_echo_n "checking for shl_load... " >&6; }
-if test "${ac_cv_func_shl_load+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. */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shl_load
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_shl_load || defined __stub___shl_load
-choke me
-#endif
-
-int
-main ()
-{
-return shl_load ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_func_shl_load=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_shl_load=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-$as_echo "$ac_cv_func_shl_load" >&6; }
-if test "x$ac_cv_func_shl_load" = x""yes; then
- lt_cv_dlopen="shl_load"
-else
- { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dld_shl_load=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dld_shl_load=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
- { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
-$as_echo_n "checking for dlopen... " >&6; }
-if test "${ac_cv_func_dlopen+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. */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef dlopen
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_dlopen || defined __stub___dlopen
-choke me
-#endif
-
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_func_dlopen=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-$as_echo "$ac_cv_func_dlopen" >&6; }
-if test "x$ac_cv_func_dlopen" = x""yes; then
- lt_cv_dlopen="dlopen"
-else
- { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dl_dlopen=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dl_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
- { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_svld_dlopen=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_svld_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
- { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link ();
-int
-main ()
-{
-return dld_link ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dld_dld_link=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dld_dld_link=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-#line 10438 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- exit (status);
-}
-EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self_static=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-#line 10538 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- exit (status);
-}
-EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self_static=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-
-# Report which library types will actually be built
-{ $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix[4-9]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-{ $as_echo "$as_me:$LINENO: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler \
- CC \
- LD \
- lt_prog_compiler_wl \
- lt_prog_compiler_pic \
- lt_prog_compiler_static \
- lt_prog_compiler_no_builtin_flag \
- export_dynamic_flag_spec \
- thread_safe_flag_spec \
- whole_archive_flag_spec \
- enable_shared_with_static_runtimes \
- old_archive_cmds \
- old_archive_from_new_cmds \
- predep_objects \
- postdep_objects \
- predeps \
- postdeps \
- compiler_lib_search_path \
- compiler_lib_search_dirs \
- archive_cmds \
- archive_expsym_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- old_archive_from_expsyms_cmds \
- allow_undefined_flag \
- no_undefined_flag \
- export_symbols_cmds \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
- hardcode_automatic \
- module_cmds \
- module_expsym_cmds \
- lt_cv_prog_compiler_c_o \
- fix_srcfile_path \
- exclude_expsyms \
- include_expsyms; do
-
- case $var in
- old_archive_cmds | \
- old_archive_from_new_cmds | \
- archive_cmds | \
- archive_expsym_cmds | \
- module_cmds | \
- module_expsym_cmds | \
- old_archive_from_expsyms_cmds | \
- export_symbols_cmds | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="${ofile}T"
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- $rm -f "$cfgfile"
- { $as_echo "$as_me:$LINENO: creating $ofile" >&5
-$as_echo "$as_me: creating $ofile" >&6;}
-
- cat <<__EOF__ >> "$cfgfile"
-#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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.
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e 1s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
-
-# ### END LIBTOOL CONFIG
-
-__EOF__
-
-
- case $host_os in
- aix3*)
- cat <<\EOF >> "$cfgfile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" || \
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-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
-
-CC="$lt_save_CC"
-
-
-# Check whether --with-tags was given.
-if test "${with_tags+set}" = set; then
- withval=$with_tags; tagnames="$withval"
-fi
-
-
-if test -f "$ltmain" && test -n "$tagnames"; then
- if test ! -f "${ofile}"; then
- { $as_echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
-$as_echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
- fi
-
- if test -z "$LTCC"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
- if test -z "$LTCC"; then
- { $as_echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
-$as_echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
- else
- { $as_echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
-$as_echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
- fi
- fi
- if test -z "$LTCFLAGS"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
- fi
-
- # Extract list of available tagged configurations in $ofile.
- # Note that this assumes the entire list is on one line.
- available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for tagname in $tagnames; do
- IFS="$lt_save_ifs"
- # Check whether tagname contains only valid characters
- case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
- "") ;;
- *) { { $as_echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
-$as_echo "$as_me: error: invalid tag name: $tagname" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- esac
-
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
- then
- { { $as_echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
-$as_echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
- { (exit 1); exit 1; }; }
- fi
-
- # Update the list of available tags.
- if test -n "$tagname"; then
- echo appending configuration tag \"$tagname\" to $ofile
-
- case $tagname in
- CXX)
- if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-
-archive_cmds_need_lc_CXX=no
-allow_undefined_flag_CXX=
-always_export_symbols_CXX=no
-archive_expsym_cmds_CXX=
-export_dynamic_flag_spec_CXX=
-hardcode_direct_CXX=no
-hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
-hardcode_libdir_separator_CXX=
-hardcode_minus_L_CXX=no
-hardcode_shlibpath_var_CXX=unsupported
-hardcode_automatic_CXX=no
-module_cmds_CXX=
-module_expsym_cmds_CXX=
-link_all_deplibs_CXX=unknown
-old_archive_cmds_CXX=$old_archive_cmds
-no_undefined_flag_CXX=
-whole_archive_flag_spec_CXX=
-enable_shared_with_static_runtimes_CXX=no
-
-# Dependencies to place before and after the object being linked:
-predep_objects_CXX=
-postdep_objects_CXX=
-predeps_CXX=
-postdeps_CXX=
-compiler_lib_search_path_CXX=
-compiler_lib_search_dirs_CXX=
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-objext_CXX=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_LD=$LD
-lt_save_GCC=$GCC
-GCC=$GXX
-lt_save_with_gnu_ld=$with_gnu_ld
-lt_save_path_LD=$lt_cv_path_LD
-if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
- lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-else
- $as_unset lt_cv_prog_gnu_ld
-fi
-if test -n "${lt_cv_path_LDCXX+set}"; then
- lt_cv_path_LD=$lt_cv_path_LDCXX
-else
- $as_unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-compiler=$CC
-compiler_CXX=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
- lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
-else
- lt_prog_compiler_no_builtin_flag_CXX=
-fi
-
-if test "$GXX" = yes; then
- # Set up default GNU C++ configuration
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
- withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [\\/]* | ?:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
- { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- { $as_echo "$as_me:$LINENO: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
- { (exit 1); exit 1; }; }
-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
- # Check if GNU C++ uses GNU ld as the underlying linker, since the
- # archiving commands below assume that GNU ld is being used.
- if test "$with_gnu_ld" = yes; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-
- # If archive_cmds runs LD, not CC, wlarc should be empty
- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
- # investigate it a little bit more. (MM)
- wlarc='${wl}'
-
- # ancient GNU ld didn't support --whole-archive et. al.
- if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
- grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec_CXX=
- fi
- else
- with_gnu_ld=no
- wlarc=
-
- # A generic and very simple default shared library creation
- # command for GNU C++ for the case where it uses the native
- # linker, instead of GNU ld. If possible, this setting should
- # overridden to take advantage of the native linker features on
- # the platform it is being used on.
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- fi
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-else
- GXX=no
- with_gnu_ld=no
- wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-ld_shlibs_CXX=yes
-case $host_os in
- aix3*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- aix[4-9]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- case $ld_flag in
- *-brtl*)
- aix_use_runtimelinking=yes
- break
- ;;
- esac
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds_CXX=''
- hardcode_direct_CXX=yes
- hardcode_libdir_separator_CXX=':'
- link_all_deplibs_CXX=yes
-
- if test "$GXX" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- hardcode_direct_CXX=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L_CXX=yes
- hardcode_libdir_flag_spec_CXX='-L$libdir'
- hardcode_libdir_separator_CXX=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols_CXX=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag_CXX='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- 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 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>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_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-
- archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag_CXX="-z nodefs"
- archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- 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 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>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_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag_CXX=' ${wl}-bernotok'
- allow_undefined_flag_CXX=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_CXX='$convenience'
- archive_cmds_need_lc_CXX=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag_CXX=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs_CXX=no
- fi
- ;;
-
- chorus*)
- case $cc_basename in
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec_CXX='-L$libdir'
- allow_undefined_flag_CXX=unsupported
- always_export_symbols_CXX=no
- enable_shared_with_static_runtimes_CXX=yes
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs_CXX=no
- fi
- ;;
- darwin* | rhapsody*)
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
- hardcode_shlibpath_var_CXX=unsupported
- whole_archive_flag_spec_CXX=''
- link_all_deplibs_CXX=yes
- allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
- if test "$GXX" = yes ; then
- output_verbose_link_cmd='echo'
- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- ld_shlibs_CXX=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- case $cc_basename in
- ec++*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- freebsd[12]*)
- # C++ shared libraries reported to be fairly broken before switch to ELF
- ld_shlibs_CXX=no
- ;;
- freebsd-elf*)
- archive_cmds_need_lc_CXX=no
- ;;
- freebsd* | dragonfly*)
- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
- # conventions
- ld_shlibs_CXX=yes
- ;;
- gnu*)
- ;;
- hpux9*)
- hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
- export_dynamic_flag_spec_CXX='${wl}-E'
- hardcode_direct_CXX=yes
- hardcode_minus_L_CXX=yes # Not in the search PATH,
- # but as the default
- # location of the library.
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- aCC*)
- archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- fi
- ;;
- esac
- ;;
- hpux10*|hpux11*)
- if test $with_gnu_ld = no; then
- hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
-
- case $host_cpu in
- hppa*64*|ia64*) ;;
- *)
- export_dynamic_flag_spec_CXX='${wl}-E'
- ;;
- esac
- fi
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_direct_CXX=no
- hardcode_shlibpath_var_CXX=no
- ;;
- *)
- hardcode_direct_CXX=yes
- hardcode_minus_L_CXX=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- esac
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- aCC*)
- case $host_cpu in
- hppa*64*)
- archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- if test $with_gnu_ld = no; then
- case $host_cpu in
- hppa*64*)
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- fi
- ;;
- esac
- ;;
- interix[3-9]*)
- hardcode_direct_CXX=no
- hardcode_shlibpath_var_CXX=no
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_CXX='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC*)
- # SGI C++
- archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- # Archives containing C++ object files must be created using
- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
- ;;
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
- fi
- fi
- link_all_deplibs_CXX=yes
- ;;
- esac
- hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
- archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
- ;;
- icpc*)
- # Intel C++
- with_gnu_ld=yes
- # version 8.0 and above of icpc choke on multiply defined symbols
- # if we add $predep_objects and $postdep_objects, however 7.1 and
- # earlier do not add the objects themselves.
- case `$CC -V 2>&1` in
- *"Version 7."*)
- archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- *) # Version 8.0 or newer
- tmp_idyn=
- case $host_cpu in
- ia64*) tmp_idyn=' -i_dynamic';;
- esac
- archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- esac
- archive_cmds_need_lc_CXX=no
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
- whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler
- archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
- whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- ;;
- cxx*)
- # Compaq C++
- archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec_CXX='-rpath $libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- no_undefined_flag_CXX=' -zdefs'
- archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
- hardcode_libdir_flag_spec_CXX='-R$libdir'
- whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-
- # Not sure whether something based on
- # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
- # would be better.
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- m88k*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
- wlarc=
- hardcode_libdir_flag_spec_CXX='-R$libdir'
- hardcode_direct_CXX=yes
- hardcode_shlibpath_var_CXX=no
- fi
- # Workaround some broken pre-1.5 toolchains
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
- ;;
- openbsd2*)
- # C++ shared libraries are fairly broken
- ld_shlibs_CXX=no
- ;;
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct_CXX=yes
- hardcode_shlibpath_var_CXX=no
- archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
- export_dynamic_flag_spec_CXX='${wl}-E'
- whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- fi
- output_verbose_link_cmd='echo'
- else
- ld_shlibs_CXX=no
- fi
- ;;
- osf3*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
-
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- cxx*)
- allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- fi
- ;;
- esac
- ;;
- osf4* | osf5*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Archives containing C++ object files must be created using
- # the KAI C++ compiler.
- old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- cxx*)
- allow_undefined_flag_CXX=' -expect_unresolved \*'
- archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
- echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
- $rm $lib.exp'
-
- hardcode_libdir_flag_spec_CXX='-rpath $libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- fi
- ;;
- esac
- ;;
- psos*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- lcc*)
- # Lucid
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- archive_cmds_need_lc_CXX=yes
- no_undefined_flag_CXX=' -zdefs'
- archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- hardcode_libdir_flag_spec_CXX='-R$libdir'
- hardcode_shlibpath_var_CXX=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
- ;;
- esac
- link_all_deplibs_CXX=yes
-
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
- ;;
- gcx*)
- # Green Hills C++ Compiler
- archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
- # The C++ compiler must be used to create the archive.
- old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
- ;;
- *)
- # GNU C++ compiler with Solaris linker
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
- if $CC --version | grep -v '^2\.7' > /dev/null; then
- archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- else
- # g++ 2.7 appears to require `-G' NOT `-shared' on this
- # platform.
- archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- fi
-
- hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- ;;
- esac
- fi
- ;;
- esac
- ;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag_CXX='${wl}-z,text'
- archive_cmds_need_lc_CXX=no
- hardcode_shlibpath_var_CXX=no
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- # So that behaviour is only enabled if SCOABSPATH is set to a
- # non-empty value in the environment. Most likely only useful for
- # creating official distributions of packages.
- # This is a hack until libtool officially supports absolute path
- # names for shared libraries.
- no_undefined_flag_CXX='${wl}-z,text'
- allow_undefined_flag_CXX='${wl}-z,nodefs'
- archive_cmds_need_lc_CXX=no
- hardcode_shlibpath_var_CXX=no
- hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator_CXX=':'
- link_all_deplibs_CXX=yes
- export_dynamic_flag_spec_CXX='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- vxworks*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-$as_echo "$ld_shlibs_CXX" >&6; }
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-GCC_CXX="$GXX"
-LD_CXX="$LD"
-
-cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
- Foo (void) { a = 0; }
-private:
- int a;
-};
-EOF
-
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Parse the compiler output and extract the necessary
- # objects, libraries and library flags.
-
- # Sentinel used to keep track of whether or not we are before
- # the conftest object file.
- pre_test_object_deps_done=no
-
- # The `*' in the case matches for architectures that use `case' in
- # $output_verbose_cmd can trigger glob expansion during the loop
- # eval without this substitution.
- output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
-
- for p in `eval $output_verbose_link_cmd`; do
- case $p in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test $p = "-L" \
- || test $p = "-R"; then
- prev=$p
- continue
- else
- prev=
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- case $p in
- -L* | -R*)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
- if test -z "$compiler_lib_search_path_CXX"; then
- compiler_lib_search_path_CXX="${prev}${p}"
- else
- compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
- fi
- ;;
- # The "-l" case would never come before the object being
- # linked, so don't bother handling this case.
- esac
- else
- if test -z "$postdeps_CXX"; then
- postdeps_CXX="${prev}${p}"
- else
- postdeps_CXX="${postdeps_CXX} ${prev}${p}"
- fi
- fi
- ;;
-
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
- if test "$p" = "conftest.$objext"; then
- pre_test_object_deps_done=yes
- continue
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- if test -z "$predep_objects_CXX"; then
- predep_objects_CXX="$p"
- else
- predep_objects_CXX="$predep_objects_CXX $p"
- fi
- else
- if test -z "$postdep_objects_CXX"; then
- postdep_objects_CXX="$p"
- else
- postdep_objects_CXX="$postdep_objects_CXX $p"
- fi
- fi
- ;;
-
- *) ;; # Ignore the rest.
-
- esac
- done
-
- # Clean up.
- rm -f a.out a.exe
-else
- echo "libtool.m4: error: problem compiling CXX test program"
-fi
-
-$rm -f confest.$objext
-
-compiler_lib_search_dirs_CXX=
-if test -n "$compiler_lib_search_path_CXX"; then
- compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-
-# PORTME: override above test on systems where it is broken
-case $host_os in
-interix[3-9]*)
- # Interix 3.5 installs completely hosed .la files for C++, so rather than
- # hack all around it, let's just trust "g++" to DTRT.
- predep_objects_CXX=
- postdep_objects_CXX=
- postdeps_CXX=
- ;;
-
-linux*)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- #
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
- if test "$solaris_use_stlport4" != yes; then
- postdeps_CXX='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-
-solaris*)
- case $cc_basename in
- CC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- # Adding this requires a known-good setup of shared libraries for
- # Sun compiler versions before 5.6, else PIC objects from an old
- # archive will be linked into the output, leading to subtle bugs.
- if test "$solaris_use_stlport4" != yes; then
- postdeps_CXX='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-esac
-
-case " $postdeps_CXX " in
-*" -lc "*) archive_cmds_need_lc_CXX=no ;;
-esac
-
-lt_prog_compiler_wl_CXX=
-lt_prog_compiler_pic_CXX=
-lt_prog_compiler_static_CXX=
-
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_CXX='-Bstatic'
- fi
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- mingw* | cygwin* | os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic_CXX='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- lt_prog_compiler_pic_CXX=
- ;;
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic_CXX=-Kconform_pic
- fi
- ;;
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- ;;
- *)
- lt_prog_compiler_pic_CXX='-fPIC'
- ;;
- esac
- ;;
- *)
- lt_prog_compiler_pic_CXX='-fPIC'
- ;;
- esac
- else
- case $host_os in
- aix[4-9]*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_CXX='-Bstatic'
- else
- lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- chorus*)
- case $cc_basename in
- cxch68*)
- # Green Hills C++ Compiler
- # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
- ;;
- esac
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- lt_prog_compiler_pic_CXX='-qnocommon'
- lt_prog_compiler_wl_CXX='-Wl,'
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++*)
- lt_prog_compiler_pic_CXX='-KPIC'
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- lt_prog_compiler_pic_CXX='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- freebsd* | dragonfly*)
- # FreeBSD uses GNU C++
- ;;
- hpux9* | hpux10* | hpux11*)
- case $cc_basename in
- CC*)
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
- if test "$host_cpu" != ia64; then
- lt_prog_compiler_pic_CXX='+Z'
- fi
- ;;
- aCC*)
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_CXX='+Z'
- ;;
- esac
- ;;
- *)
- ;;
- esac
- ;;
- interix*)
- # This is c89, which is MS Visual C++ (no shared libs)
- # Anyone wants to do a port?
- ;;
- irix5* | irix6* | nonstopux*)
- case $cc_basename in
- CC*)
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX='-non_shared'
- # CC pic flag -KPIC is the default.
- ;;
- *)
- ;;
- esac
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # KAI C++ Compiler
- lt_prog_compiler_wl_CXX='--backend -Wl,'
- lt_prog_compiler_pic_CXX='-fPIC'
- ;;
- icpc* | ecpc*)
- # Intel C++
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-static'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler.
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_pic_CXX='-fpic'
- lt_prog_compiler_static_CXX='-Bstatic'
- ;;
- cxx*)
- # Compaq C++
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- lt_prog_compiler_pic_CXX=
- lt_prog_compiler_static_CXX='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-Bstatic'
- lt_prog_compiler_wl_CXX='-Qoption ld '
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- ;;
- m88k*)
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- lt_prog_compiler_pic_CXX='-W c,exportall'
- ;;
- *)
- ;;
- esac
- ;;
- netbsd*)
- ;;
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC*)
- lt_prog_compiler_wl_CXX='--backend -Wl,'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- lt_prog_compiler_pic_CXX='-pic'
- ;;
- cxx*)
- # Digital/Compaq C++
- lt_prog_compiler_wl_CXX='-Wl,'
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- lt_prog_compiler_pic_CXX=
- lt_prog_compiler_static_CXX='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- psos*)
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-Bstatic'
- lt_prog_compiler_wl_CXX='-Qoption ld '
- ;;
- gcx*)
- # Green Hills C++ Compiler
- lt_prog_compiler_pic_CXX='-PIC'
- ;;
- *)
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- lt_prog_compiler_pic_CXX='-pic'
- lt_prog_compiler_static_CXX='-Bstatic'
- ;;
- lcc*)
- # Lucid
- lt_prog_compiler_pic_CXX='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- lt_prog_compiler_pic_CXX='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- case $cc_basename in
- CC*)
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-Bstatic'
- ;;
- esac
- ;;
- vxworks*)
- ;;
- *)
- lt_prog_compiler_can_build_shared_CXX=no
- ;;
- esac
- fi
-
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_CXX"; then
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic_works_CXX=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12947: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:12951: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works_CXX=yes
- fi
- fi
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
- case $lt_prog_compiler_pic_CXX in
- "" | " "*) ;;
- *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
- esac
-else
- lt_prog_compiler_pic_CXX=
- lt_prog_compiler_can_build_shared_CXX=no
-fi
-
-fi
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic_CXX=
- ;;
- *)
- lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
- ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works_CXX=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works_CXX=yes
- fi
- else
- lt_cv_prog_compiler_static_works_CXX=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
- :
-else
- lt_prog_compiler_static_CXX=
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o_CXX=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:13051: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:13055: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o_CXX=yes
- fi
- fi
- chmod u+w . 2>&5
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- case $host_os in
- aix[4-9]*)
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- ;;
- pw32*)
- export_symbols_cmds_CXX="$ltdll_cmds"
- ;;
- cygwin* | mingw*)
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
- ;;
- *)
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- esac
- exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-$as_echo "$ld_shlibs_CXX" >&6; }
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_CXX" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc_CXX=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds_CXX in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
- $rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl_CXX
- pic_flag=$lt_prog_compiler_pic_CXX
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
- allow_undefined_flag_CXX=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc_CXX=no
- else
- archive_cmds_need_lc_CXX=yes
- fi
- allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
- ;;
- esac
- fi
- ;;
-esac
-
-{ $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[4-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action_CXX=
-if test -n "$hardcode_libdir_flag_spec_CXX" || \
- test -n "$runpath_var_CXX" || \
- test "X$hardcode_automatic_CXX" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct_CXX" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
- test "$hardcode_minus_L_CXX" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action_CXX=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action_CXX=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action_CXX=unsupported
-fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
-$as_echo "$hardcode_action_CXX" >&6; }
-
-if test "$hardcode_action_CXX" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler_CXX \
- CC_CXX \
- LD_CXX \
- lt_prog_compiler_wl_CXX \
- lt_prog_compiler_pic_CXX \
- lt_prog_compiler_static_CXX \
- lt_prog_compiler_no_builtin_flag_CXX \
- export_dynamic_flag_spec_CXX \
- thread_safe_flag_spec_CXX \
- whole_archive_flag_spec_CXX \
- enable_shared_with_static_runtimes_CXX \
- old_archive_cmds_CXX \
- old_archive_from_new_cmds_CXX \
- predep_objects_CXX \
- postdep_objects_CXX \
- predeps_CXX \
- postdeps_CXX \
- compiler_lib_search_path_CXX \
- compiler_lib_search_dirs_CXX \
- archive_cmds_CXX \
- archive_expsym_cmds_CXX \
- postinstall_cmds_CXX \
- postuninstall_cmds_CXX \
- old_archive_from_expsyms_cmds_CXX \
- allow_undefined_flag_CXX \
- no_undefined_flag_CXX \
- export_symbols_cmds_CXX \
- hardcode_libdir_flag_spec_CXX \
- hardcode_libdir_flag_spec_ld_CXX \
- hardcode_libdir_separator_CXX \
- hardcode_automatic_CXX \
- module_cmds_CXX \
- module_expsym_cmds_CXX \
- lt_cv_prog_compiler_c_o_CXX \
- fix_srcfile_path_CXX \
- exclude_expsyms_CXX \
- include_expsyms_CXX; do
-
- case $var in
- old_archive_cmds_CXX | \
- old_archive_from_new_cmds_CXX | \
- archive_cmds_CXX | \
- archive_expsym_cmds_CXX | \
- module_cmds_CXX | \
- module_expsym_cmds_CXX | \
- old_archive_from_expsyms_cmds_CXX | \
- export_symbols_cmds_CXX | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="$ofile"
-
- cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_CXX
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler_CXX
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_CXX
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_CXX
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_CXX
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_CXX
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_CXX
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_CXX
-archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_CXX
-module_expsym_cmds=$lt_module_expsym_cmds_CXX
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_CXX
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_CXX
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_CXX
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_CXX
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_CXX
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_CXX
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_CXX
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_CXX
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_CXX
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic_CXX
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_CXX
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_CXX
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_CXX
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_CXX
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_CXX
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-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
-
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-with_gnu_ld=$lt_save_with_gnu_ld
-lt_cv_path_LDCXX=$lt_cv_path_LD
-lt_cv_path_LD=$lt_save_path_LD
-lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-
- else
- tagname=""
- fi
- ;;
-
- F77)
- if test -n "$F77" && test "X$F77" != "Xno"; then
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
-
-archive_cmds_need_lc_F77=no
-allow_undefined_flag_F77=
-always_export_symbols_F77=no
-archive_expsym_cmds_F77=
-export_dynamic_flag_spec_F77=
-hardcode_direct_F77=no
-hardcode_libdir_flag_spec_F77=
-hardcode_libdir_flag_spec_ld_F77=
-hardcode_libdir_separator_F77=
-hardcode_minus_L_F77=no
-hardcode_automatic_F77=no
-module_cmds_F77=
-module_expsym_cmds_F77=
-link_all_deplibs_F77=unknown
-old_archive_cmds_F77=$old_archive_cmds
-no_undefined_flag_F77=
-whole_archive_flag_spec_F77=
-enable_shared_with_static_runtimes_F77=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-objext_F77=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="\
- subroutine t
- return
- end
-"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="\
- program t
- end
-"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${F77-"f77"}
-compiler=$CC
-compiler_F77=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-{ $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-aix[4-9]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-{ $as_echo "$as_me:$LINENO: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
-
-GCC_F77="$G77"
-LD_F77="$LD"
-
-lt_prog_compiler_wl_F77=
-lt_prog_compiler_pic_F77=
-lt_prog_compiler_static_F77=
-
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_static_F77='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_F77='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- lt_prog_compiler_pic_F77='-DDLL_EXPORT'
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic_F77='-fno-common'
- ;;
-
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared_F77=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic_F77=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_F77='-fPIC'
- ;;
- esac
- ;;
-
- *)
- lt_prog_compiler_pic_F77='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl_F77='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_F77='-Bstatic'
- else
- lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- lt_prog_compiler_pic_F77='-qnocommon'
- lt_prog_compiler_wl_F77='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_F77='-DDLL_EXPORT'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl_F77='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_F77='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl_F77='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static_F77='-non_shared'
- ;;
-
- newsos6)
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- icc* | ecc*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-fpic'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
- ccc*)
- lt_prog_compiler_wl_F77='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static_F77='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- lt_prog_compiler_wl_F77='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- lt_prog_compiler_wl_F77=''
- ;;
- esac
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl_F77='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static_F77='-non_shared'
- ;;
-
- rdos*)
- lt_prog_compiler_static_F77='-non_shared'
- ;;
-
- solaris*)
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl_F77='-Qoption ld ';;
- *)
- lt_prog_compiler_wl_F77='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl_F77='-Qoption ld '
- lt_prog_compiler_pic_F77='-PIC'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- lt_prog_compiler_pic_F77='-Kconform_pic'
- lt_prog_compiler_static_F77='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_can_build_shared_F77=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic_F77='-pic'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared_F77=no
- ;;
- esac
- fi
-
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
-$as_echo "$lt_prog_compiler_pic_F77" >&6; }
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_F77"; then
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic_works_F77=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic_F77"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14634: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:14638: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works_F77=yes
- fi
- fi
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_F77" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then
- case $lt_prog_compiler_pic_F77 in
- "" | " "*) ;;
- *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
- esac
-else
- lt_prog_compiler_pic_F77=
- lt_prog_compiler_can_build_shared_F77=no
-fi
-
-fi
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic_F77=
- ;;
- *)
- lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
- ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works_F77=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works_F77=yes
- fi
- else
- lt_cv_prog_compiler_static_works_F77=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_F77" >&5
-$as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then
- :
-else
- lt_prog_compiler_static_F77=
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o_F77=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14738: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:14742: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o_F77=yes
- fi
- fi
- chmod u+w . 2>&5
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; }
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
- runpath_var=
- allow_undefined_flag_F77=
- enable_shared_with_static_runtimes_F77=no
- archive_cmds_F77=
- archive_expsym_cmds_F77=
- old_archive_From_new_cmds_F77=
- old_archive_from_expsyms_cmds_F77=
- export_dynamic_flag_spec_F77=
- whole_archive_flag_spec_F77=
- thread_safe_flag_spec_F77=
- hardcode_libdir_flag_spec_F77=
- hardcode_libdir_flag_spec_ld_F77=
- hardcode_libdir_separator_F77=
- hardcode_direct_F77=no
- hardcode_minus_L_F77=no
- hardcode_shlibpath_var_F77=unsupported
- link_all_deplibs_F77=unknown
- hardcode_automatic_F77=no
- module_cmds_F77=
- module_expsym_cmds_F77=
- always_export_symbols_F77=no
- export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms_F77=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs_F77=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_F77='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec_F77=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[3-9]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs_F77=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_minus_L_F77=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- ld_shlibs_F77=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag_F77=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec_F77='-L$libdir'
- allow_undefined_flag_F77=unsupported
- always_export_symbols_F77=no
- enable_shared_with_static_runtimes_F77=yes
- export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- interix[3-9]*)
- hardcode_direct_F77=no
- hardcode_shlibpath_var_F77=no
- hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_F77='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- ld_shlibs_F77=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs_F77=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs_F77" = no; then
- runpath_var=
- hardcode_libdir_flag_spec_F77=
- export_dynamic_flag_spec_F77=
- whole_archive_flag_spec_F77=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag_F77=unsupported
- always_export_symbols_F77=yes
- archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L_F77=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct_F77=unsupported
- fi
- ;;
-
- aix[4-9]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds_F77=''
- hardcode_direct_F77=yes
- hardcode_libdir_separator_F77=':'
- link_all_deplibs_F77=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- hardcode_direct_F77=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L_F77=yes
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_libdir_separator_F77=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols_F77=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag_F77='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-rm -f conftest.$ac_objext 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>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_f77_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag_F77="-z nodefs"
- archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-rm -f conftest.$ac_objext 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>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_f77_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag_F77=' ${wl}-bernotok'
- allow_undefined_flag_F77=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_F77='$convenience'
- archive_cmds_need_lc_F77=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_minus_L_F77=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs_F77=no
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec_F77=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec_F77=' '
- allow_undefined_flag_F77=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_From_new_cmds_F77='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes_F77=yes
- ;;
-
- darwin* | rhapsody*)
- case $host_os in
- rhapsody* | darwin1.[012])
- allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[012])
- allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- archive_cmds_need_lc_F77=no
- hardcode_direct_F77=no
- hardcode_automatic_F77=yes
- hardcode_shlibpath_var_F77=unsupported
- whole_archive_flag_spec_F77=''
- link_all_deplibs_F77=yes
- if test "$GCC" = yes ; then
- output_verbose_link_cmd='echo'
- archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- ld_shlibs_F77=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_shlibpath_var_F77=no
- ;;
-
- freebsd1*)
- ld_shlibs_F77=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec_F77='-R$libdir'
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=yes
- hardcode_minus_L_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_F77='-R$libdir'
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- hardcode_direct_F77=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_F77=yes
- export_dynamic_flag_spec_F77='${wl}-E'
- ;;
-
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_F77=:
-
- hardcode_direct_F77=yes
- export_dynamic_flag_spec_F77='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_F77=yes
- fi
- ;;
-
- hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
- archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_F77=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_libdir_flag_spec_ld_F77='+b $libdir'
- hardcode_direct_F77=no
- hardcode_shlibpath_var_F77=no
- ;;
- *)
- hardcode_direct_F77=yes
- export_dynamic_flag_spec_F77='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_F77=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
- fi
- hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- link_all_deplibs_F77=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec_F77='-R$libdir'
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- newsos6)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=yes
- hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- hardcode_shlibpath_var_F77=no
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_F77='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_F77='-R$libdir'
- ;;
- *)
- archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_minus_L_F77=yes
- allow_undefined_flag_F77=unsupported
- archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- allow_undefined_flag_F77=' -expect_unresolved \*'
- archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag_F77=' -expect_unresolved \*'
- archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec_F77='-rpath $libdir'
- fi
- hardcode_libdir_separator_F77=:
- ;;
-
- solaris*)
- no_undefined_flag_F77=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- hardcode_libdir_flag_spec_F77='-R$libdir'
- hardcode_shlibpath_var_F77=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- link_all_deplibs_F77=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_direct_F77=yes
- hardcode_minus_L_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds_F77='$CC -r -o $output$reload_objs'
- hardcode_direct_F77=no
- ;;
- motorola)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var_F77=no
- ;;
-
- sysv4.3*)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_F77=no
- export_dynamic_flag_spec_F77='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_F77=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs_F77=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag_F77='${wl}-z,text'
- archive_cmds_need_lc_F77=no
- hardcode_shlibpath_var_F77=no
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag_F77='${wl}-z,text'
- allow_undefined_flag_F77='${wl}-z,nodefs'
- archive_cmds_need_lc_F77=no
- hardcode_shlibpath_var_F77=no
- hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator_F77=':'
- link_all_deplibs_F77=yes
- export_dynamic_flag_spec_F77='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_shlibpath_var_F77=no
- ;;
-
- *)
- ld_shlibs_F77=no
- ;;
- esac
- fi
-
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
-$as_echo "$ld_shlibs_F77" >&6; }
-test "$ld_shlibs_F77" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_F77" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc_F77=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds_F77 in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
- $rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl_F77
- pic_flag=$lt_prog_compiler_pic_F77
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag_F77
- allow_undefined_flag_F77=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc_F77=no
- else
- archive_cmds_need_lc_F77=yes
- fi
- allow_undefined_flag_F77=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
-$as_echo "$archive_cmds_need_lc_F77" >&6; }
- ;;
- esac
- fi
- ;;
-esac
-
-{ $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[4-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action_F77=
-if test -n "$hardcode_libdir_flag_spec_F77" || \
- test -n "$runpath_var_F77" || \
- test "X$hardcode_automatic_F77" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct_F77" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
- test "$hardcode_minus_L_F77" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action_F77=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action_F77=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action_F77=unsupported
-fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
-$as_echo "$hardcode_action_F77" >&6; }
-
-if test "$hardcode_action_F77" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler_F77 \
- CC_F77 \
- LD_F77 \
- lt_prog_compiler_wl_F77 \
- lt_prog_compiler_pic_F77 \
- lt_prog_compiler_static_F77 \
- lt_prog_compiler_no_builtin_flag_F77 \
- export_dynamic_flag_spec_F77 \
- thread_safe_flag_spec_F77 \
- whole_archive_flag_spec_F77 \
- enable_shared_with_static_runtimes_F77 \
- old_archive_cmds_F77 \
- old_archive_from_new_cmds_F77 \
- predep_objects_F77 \
- postdep_objects_F77 \
- predeps_F77 \
- postdeps_F77 \
- compiler_lib_search_path_F77 \
- compiler_lib_search_dirs_F77 \
- archive_cmds_F77 \
- archive_expsym_cmds_F77 \
- postinstall_cmds_F77 \
- postuninstall_cmds_F77 \
- old_archive_from_expsyms_cmds_F77 \
- allow_undefined_flag_F77 \
- no_undefined_flag_F77 \
- export_symbols_cmds_F77 \
- hardcode_libdir_flag_spec_F77 \
- hardcode_libdir_flag_spec_ld_F77 \
- hardcode_libdir_separator_F77 \
- hardcode_automatic_F77 \
- module_cmds_F77 \
- module_expsym_cmds_F77 \
- lt_cv_prog_compiler_c_o_F77 \
- fix_srcfile_path_F77 \
- exclude_expsyms_F77 \
- include_expsyms_F77; do
-
- case $var in
- old_archive_cmds_F77 | \
- old_archive_from_new_cmds_F77 | \
- archive_cmds_F77 | \
- archive_expsym_cmds_F77 | \
- module_cmds_F77 | \
- module_expsym_cmds_F77 | \
- old_archive_from_expsyms_cmds_F77 | \
- export_symbols_cmds_F77 | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="$ofile"
-
- cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_F77
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler_F77
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_F77
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_F77
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_F77
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_F77
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_F77
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_F77
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_F77
-archive_expsym_cmds=$lt_archive_expsym_cmds_F77
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_F77
-module_expsym_cmds=$lt_module_expsym_cmds_F77
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_F77
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_F77
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_F77
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_F77
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_F77
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_F77
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_F77
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_F77
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_F77
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_F77
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic_F77
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_F77
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_F77
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_F77
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_F77
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_F77
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-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
-
-CC="$lt_save_CC"
-
- else
- tagname=""
- fi
- ;;
-
- GCJ)
- if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-objext_GCJ=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${GCJ-"gcj"}
-compiler=$CC
-compiler_GCJ=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-archive_cmds_need_lc_GCJ=no
-
-old_archive_cmds_GCJ=$old_archive_cmds
-
-
-lt_prog_compiler_no_builtin_flag_GCJ=
-
-if test "$GCC" = yes; then
- lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_rtti_exceptions=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="-fno-rtti -fno-exceptions"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16953: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:16957: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_rtti_exceptions=yes
- fi
- fi
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
- lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
-else
- :
-fi
-
-fi
-
-lt_prog_compiler_wl_GCJ=
-lt_prog_compiler_pic_GCJ=
-lt_prog_compiler_static_GCJ=
-
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_static_GCJ='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_GCJ='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
-
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic_GCJ='-fno-common'
- ;;
-
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared_GCJ=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic_GCJ=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_GCJ='-fPIC'
- ;;
- esac
- ;;
-
- *)
- lt_prog_compiler_pic_GCJ='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_GCJ='-Bstatic'
- else
- lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- lt_prog_compiler_pic_GCJ='-qnocommon'
- lt_prog_compiler_wl_GCJ='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
-
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_GCJ='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static_GCJ='-non_shared'
- ;;
-
- newsos6)
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- icc* | ecc*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-fpic'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
- ccc*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static_GCJ='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- lt_prog_compiler_wl_GCJ='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- lt_prog_compiler_wl_GCJ=''
- ;;
- esac
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static_GCJ='-non_shared'
- ;;
-
- rdos*)
- lt_prog_compiler_static_GCJ='-non_shared'
- ;;
-
- solaris*)
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl_GCJ='-Qoption ld ';;
- *)
- lt_prog_compiler_wl_GCJ='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl_GCJ='-Qoption ld '
- lt_prog_compiler_pic_GCJ='-PIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- lt_prog_compiler_pic_GCJ='-Kconform_pic'
- lt_prog_compiler_static_GCJ='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_can_build_shared_GCJ=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic_GCJ='-pic'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared_GCJ=no
- ;;
- esac
- fi
-
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
-$as_echo "$lt_prog_compiler_pic_GCJ" >&6; }
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_GCJ"; then
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_GCJ+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic_works_GCJ=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17243: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:17247: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works_GCJ=yes
- fi
- fi
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_GCJ" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works_GCJ" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works_GCJ" = xyes; then
- case $lt_prog_compiler_pic_GCJ in
- "" | " "*) ;;
- *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
- esac
-else
- lt_prog_compiler_pic_GCJ=
- lt_prog_compiler_can_build_shared_GCJ=no
-fi
-
-fi
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic_GCJ=
- ;;
- *)
- lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
- ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_GCJ+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works_GCJ=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works_GCJ=yes
- fi
- else
- lt_cv_prog_compiler_static_works_GCJ=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_GCJ" >&5
-$as_echo "$lt_cv_prog_compiler_static_works_GCJ" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_GCJ" = xyes; then
- :
-else
- lt_prog_compiler_static_GCJ=
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o_GCJ=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17347: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:17351: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o_GCJ=yes
- fi
- fi
- chmod u+w . 2>&5
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_GCJ" >&6; }
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
- runpath_var=
- allow_undefined_flag_GCJ=
- enable_shared_with_static_runtimes_GCJ=no
- archive_cmds_GCJ=
- archive_expsym_cmds_GCJ=
- old_archive_From_new_cmds_GCJ=
- old_archive_from_expsyms_cmds_GCJ=
- export_dynamic_flag_spec_GCJ=
- whole_archive_flag_spec_GCJ=
- thread_safe_flag_spec_GCJ=
- hardcode_libdir_flag_spec_GCJ=
- hardcode_libdir_flag_spec_ld_GCJ=
- hardcode_libdir_separator_GCJ=
- hardcode_direct_GCJ=no
- hardcode_minus_L_GCJ=no
- hardcode_shlibpath_var_GCJ=unsupported
- link_all_deplibs_GCJ=unknown
- hardcode_automatic_GCJ=no
- module_cmds_GCJ=
- module_expsym_cmds_GCJ=
- always_export_symbols_GCJ=no
- export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms_GCJ=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms_GCJ='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs_GCJ=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec_GCJ=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[3-9]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs_GCJ=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_minus_L_GCJ=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- ld_shlibs_GCJ=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag_GCJ=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- allow_undefined_flag_GCJ=unsupported
- always_export_symbols_GCJ=no
- enable_shared_with_static_runtimes_GCJ=yes
- export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- interix[3-9]*)
- hardcode_direct_GCJ=no
- hardcode_shlibpath_var_GCJ=no
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_GCJ='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- ld_shlibs_GCJ=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs_GCJ=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs_GCJ" = no; then
- runpath_var=
- hardcode_libdir_flag_spec_GCJ=
- export_dynamic_flag_spec_GCJ=
- whole_archive_flag_spec_GCJ=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag_GCJ=unsupported
- always_export_symbols_GCJ=yes
- archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L_GCJ=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct_GCJ=unsupported
- fi
- ;;
-
- aix[4-9]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds_GCJ=''
- hardcode_direct_GCJ=yes
- hardcode_libdir_separator_GCJ=':'
- link_all_deplibs_GCJ=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- hardcode_direct_GCJ=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L_GCJ=yes
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_libdir_separator_GCJ=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols_GCJ=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag_GCJ='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- 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 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag_GCJ="-z nodefs"
- archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- 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 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag_GCJ=' ${wl}-bernotok'
- allow_undefined_flag_GCJ=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_GCJ='$convenience'
- archive_cmds_need_lc_GCJ=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_minus_L_GCJ=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs_GCJ=no
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec_GCJ=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec_GCJ=' '
- allow_undefined_flag_GCJ=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_From_new_cmds_GCJ='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes_GCJ=yes
- ;;
-
- darwin* | rhapsody*)
- case $host_os in
- rhapsody* | darwin1.[012])
- allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[012])
- allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- archive_cmds_need_lc_GCJ=no
- hardcode_direct_GCJ=no
- hardcode_automatic_GCJ=yes
- hardcode_shlibpath_var_GCJ=unsupported
- whole_archive_flag_spec_GCJ=''
- link_all_deplibs_GCJ=yes
- if test "$GCC" = yes ; then
- output_verbose_link_cmd='echo'
- archive_cmds_GCJ="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds_GCJ="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds_GCJ="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_GCJ="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- ld_shlibs_GCJ=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- freebsd1*)
- ld_shlibs_GCJ=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes
- hardcode_minus_L_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- hardcode_direct_GCJ=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_GCJ=yes
- export_dynamic_flag_spec_GCJ='${wl}-E'
- ;;
-
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
-
- hardcode_direct_GCJ=yes
- export_dynamic_flag_spec_GCJ='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_GCJ=yes
- fi
- ;;
-
- hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
- archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
- hardcode_direct_GCJ=no
- hardcode_shlibpath_var_GCJ=no
- ;;
- *)
- hardcode_direct_GCJ=yes
- export_dynamic_flag_spec_GCJ='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_GCJ=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
- fi
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- link_all_deplibs_GCJ=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- newsos6)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_GCJ='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- ;;
- *)
- archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_minus_L_GCJ=yes
- allow_undefined_flag_GCJ=unsupported
- archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- allow_undefined_flag_GCJ=' -expect_unresolved \*'
- archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag_GCJ=' -expect_unresolved \*'
- archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
- fi
- hardcode_libdir_separator_GCJ=:
- ;;
-
- solaris*)
- no_undefined_flag_GCJ=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- hardcode_shlibpath_var_GCJ=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- link_all_deplibs_GCJ=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_direct_GCJ=yes
- hardcode_minus_L_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds_GCJ='$CC -r -o $output$reload_objs'
- hardcode_direct_GCJ=no
- ;;
- motorola)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- sysv4.3*)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_GCJ=no
- export_dynamic_flag_spec_GCJ='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_GCJ=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs_GCJ=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag_GCJ='${wl}-z,text'
- archive_cmds_need_lc_GCJ=no
- hardcode_shlibpath_var_GCJ=no
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag_GCJ='${wl}-z,text'
- allow_undefined_flag_GCJ='${wl}-z,nodefs'
- archive_cmds_need_lc_GCJ=no
- hardcode_shlibpath_var_GCJ=no
- hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator_GCJ=':'
- link_all_deplibs_GCJ=yes
- export_dynamic_flag_spec_GCJ='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- *)
- ld_shlibs_GCJ=no
- ;;
- esac
- fi
-
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
-$as_echo "$ld_shlibs_GCJ" >&6; }
-test "$ld_shlibs_GCJ" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_GCJ" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc_GCJ=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds_GCJ in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
- $rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl_GCJ
- pic_flag=$lt_prog_compiler_pic_GCJ
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
- allow_undefined_flag_GCJ=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc_GCJ=no
- else
- archive_cmds_need_lc_GCJ=yes
- fi
- allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
-$as_echo "$archive_cmds_need_lc_GCJ" >&6; }
- ;;
- esac
- fi
- ;;
-esac
-
-{ $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[4-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action_GCJ=
-if test -n "$hardcode_libdir_flag_spec_GCJ" || \
- test -n "$runpath_var_GCJ" || \
- test "X$hardcode_automatic_GCJ" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct_GCJ" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
- test "$hardcode_minus_L_GCJ" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action_GCJ=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action_GCJ=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action_GCJ=unsupported
-fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
-$as_echo "$hardcode_action_GCJ" >&6; }
-
-if test "$hardcode_action_GCJ" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler_GCJ \
- CC_GCJ \
- LD_GCJ \
- lt_prog_compiler_wl_GCJ \
- lt_prog_compiler_pic_GCJ \
- lt_prog_compiler_static_GCJ \
- lt_prog_compiler_no_builtin_flag_GCJ \
- export_dynamic_flag_spec_GCJ \
- thread_safe_flag_spec_GCJ \
- whole_archive_flag_spec_GCJ \
- enable_shared_with_static_runtimes_GCJ \
- old_archive_cmds_GCJ \
- old_archive_from_new_cmds_GCJ \
- predep_objects_GCJ \
- postdep_objects_GCJ \
- predeps_GCJ \
- postdeps_GCJ \
- compiler_lib_search_path_GCJ \
- compiler_lib_search_dirs_GCJ \
- archive_cmds_GCJ \
- archive_expsym_cmds_GCJ \
- postinstall_cmds_GCJ \
- postuninstall_cmds_GCJ \
- old_archive_from_expsyms_cmds_GCJ \
- allow_undefined_flag_GCJ \
- no_undefined_flag_GCJ \
- export_symbols_cmds_GCJ \
- hardcode_libdir_flag_spec_GCJ \
- hardcode_libdir_flag_spec_ld_GCJ \
- hardcode_libdir_separator_GCJ \
- hardcode_automatic_GCJ \
- module_cmds_GCJ \
- module_expsym_cmds_GCJ \
- lt_cv_prog_compiler_c_o_GCJ \
- fix_srcfile_path_GCJ \
- exclude_expsyms_GCJ \
- include_expsyms_GCJ; do
-
- case $var in
- old_archive_cmds_GCJ | \
- old_archive_from_new_cmds_GCJ | \
- archive_cmds_GCJ | \
- archive_expsym_cmds_GCJ | \
- module_cmds_GCJ | \
- module_expsym_cmds_GCJ | \
- old_archive_from_expsyms_cmds_GCJ | \
- export_symbols_cmds_GCJ | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="$ofile"
-
- cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_GCJ
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler_GCJ
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_GCJ
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_GCJ
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_GCJ
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_GCJ
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_GCJ
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_GCJ
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_GCJ
-archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_GCJ
-module_expsym_cmds=$lt_module_expsym_cmds_GCJ
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_GCJ
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_GCJ
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_GCJ
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_GCJ
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_GCJ
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_GCJ
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_GCJ
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_GCJ
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_GCJ
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_GCJ
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic_GCJ
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_GCJ
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_GCJ
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_GCJ
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_GCJ
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_GCJ
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-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
-
-CC="$lt_save_CC"
-
- else
- tagname=""
- fi
- ;;
-
- RC)
-
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-objext_RC=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${RC-"windres"}
-compiler=$CC
-compiler_RC=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-lt_cv_prog_compiler_c_o_RC=yes
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler_RC \
- CC_RC \
- LD_RC \
- lt_prog_compiler_wl_RC \
- lt_prog_compiler_pic_RC \
- lt_prog_compiler_static_RC \
- lt_prog_compiler_no_builtin_flag_RC \
- export_dynamic_flag_spec_RC \
- thread_safe_flag_spec_RC \
- whole_archive_flag_spec_RC \
- enable_shared_with_static_runtimes_RC \
- old_archive_cmds_RC \
- old_archive_from_new_cmds_RC \
- predep_objects_RC \
- postdep_objects_RC \
- predeps_RC \
- postdeps_RC \
- compiler_lib_search_path_RC \
- compiler_lib_search_dirs_RC \
- archive_cmds_RC \
- archive_expsym_cmds_RC \
- postinstall_cmds_RC \
- postuninstall_cmds_RC \
- old_archive_from_expsyms_cmds_RC \
- allow_undefined_flag_RC \
- no_undefined_flag_RC \
- export_symbols_cmds_RC \
- hardcode_libdir_flag_spec_RC \
- hardcode_libdir_flag_spec_ld_RC \
- hardcode_libdir_separator_RC \
- hardcode_automatic_RC \
- module_cmds_RC \
- module_expsym_cmds_RC \
- lt_cv_prog_compiler_c_o_RC \
- fix_srcfile_path_RC \
- exclude_expsyms_RC \
- include_expsyms_RC; do
-
- case $var in
- old_archive_cmds_RC | \
- old_archive_from_new_cmds_RC | \
- archive_cmds_RC | \
- archive_expsym_cmds_RC | \
- module_cmds_RC | \
- module_expsym_cmds_RC | \
- old_archive_from_expsyms_cmds_RC | \
- export_symbols_cmds_RC | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="$ofile"
-
- cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_RC
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler_RC
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_RC
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_RC
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_RC
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_RC
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_RC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_RC
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_RC
-archive_expsym_cmds=$lt_archive_expsym_cmds_RC
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_RC
-module_expsym_cmds=$lt_module_expsym_cmds_RC
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_RC
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_RC
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_RC
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_RC
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_RC
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_RC
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_RC
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_RC
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_RC
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_RC
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_RC
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic_RC
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_RC
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_RC
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_RC
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_RC
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_RC
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-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
-
-CC="$lt_save_CC"
-
- ;;
-
- *)
- { { $as_echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
-$as_echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- esac
-
- # Append the new tag name to the list of available tags.
- if test -n "$tagname" ; then
- available_tags="$available_tags $tagname"
- fi
- fi
- done
- IFS="$lt_save_ifs"
-
- # Now substitute the updated list of available tags.
- if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
- mv "${ofile}T" "$ofile"
- chmod +x "$ofile"
- else
- rm -f "${ofile}T"
- { { $as_echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
-$as_echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
- { (exit 1); exit 1; }; }
- fi
-fi
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-# Prevent multiple expansion
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-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
-{ $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
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # 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_AWK="$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
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
- { $as_echo "$as_me:$LINENO: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AWK" && break
-done
-
-{ $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
-
-
-for ac_prog in groff
-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_path_GROFF+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- case $GROFF in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_GROFF="$GROFF" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/usr/gnu/bin"
-for as_dir in $as_dummy
-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_GROFF="$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
-GROFF=$ac_cv_path_GROFF
-if test -n "$GROFF"; then
- { $as_echo "$as_me:$LINENO: result: $GROFF" >&5
-$as_echo "$GROFF" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$GROFF" && break
-done
-test -n "$GROFF" || GROFF="none"
-
-
-{ $as_echo "$as_me:$LINENO: checking whether to build documentation" >&5
-$as_echo_n "checking whether to build documentation... " >&6; }
-# Check whether --enable-docs was given.
-if test "${enable_docs+set}" = set; then
- enableval=$enable_docs; build_docs="${enableval}"
-else
- build_docs="auto"
-fi
-
-
-if test "x${build_docs}" = xauto; then
- if test "x${GROFF}" = xnone ; then
- build_docs=no
- else
- build_docs=yes
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: ${build_docs}" >&5
-$as_echo "${build_docs}" >&6; }
-if test "x${build_docs}" = xyes && test "x${GROFF}" = xnone ; then
- { { $as_echo "$as_me:$LINENO: error: can't build documentation without groff" >&5
-$as_echo "$as_me: error: can't build documentation without groff" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
- if test x$build_docs = xyes; then
- BUILD_DOCS_TRUE=
- BUILD_DOCS_FALSE='#'
-else
- BUILD_DOCS_TRUE='#'
- BUILD_DOCS_FALSE=
-fi
-
-
-# Need to call this explicitly since the first call to PKG_CHECK_MODULES
-# is in an if statement, and later calls would break if it's skipped.
-
-
-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: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&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
-
- { $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 <stdarg.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <stdio.h>
-
-// 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
-
-
-
-
-
-
-if test "x$GCC" = xyes ; then
- CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \
--Wmissing-declarations -Wnested-externs -fno-strict-aliasing \
--Wbad-function-cast"
- 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 "x$ac_cv_have_decl___SUNPRO_C" = x""yes; then
- SUNCC="yes"
-else
- SUNCC="no"
-fi
-
- if test "x$SUNCC" = "xyes"; then
- CWARNFLAGS="-v"
- fi
-fi
-
-# Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then
- enableval=$enable_silent_rules;
-fi
-
-case $enable_silent_rules in
-yes) AM_DEFAULT_VERBOSITY=0;;
-no) AM_DEFAULT_VERBOSITY=1;;
-*) AM_DEFAULT_VERBOSITY=0;;
-esac
-AM_BACKSLASH='\'
-
-
-
-
-
-
-
-# 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 "x$ac_cv_have_decl___SUNPRO_C" = x""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 "x$ac_cv_have_decl___INTEL_COMPILER" = x""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"
-
-
-
-
-# Check whether --with-release-version was given.
-if test "${with_release_version+set}" = set; then
- withval=$with_release_version; RELEASE_VERSION="$withval"
-else
- RELEASE_VERSION=""
-fi
-
- if test "x$RELEASE_VERSION" != "x"; then
- PACKAGE="$PACKAGE-$RELEASE_VERSION"
- PACKAGE_TARNAME="$PACKAGE_TARNAME-$RELEASE_VERSION"
- { $as_echo "$as_me:$LINENO: Building with package name set to $PACKAGE" >&5
-$as_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 | 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 > .changelog.tmp && \
-mv .changelog.tmp ChangeLog) || (rm -f .changelog.tmp; touch ChangeLog; \
-echo 'git directory not found: installing possibly empty changelog.' >&2)"
-
-distcleancheck_listfiles='find . -type f ! -name ChangeLog -print'
-
-
-
-
-
-if test x$APP_MAN_SUFFIX = x ; then
- APP_MAN_SUFFIX=1
-fi
-if test x$APP_MAN_DIR = x ; then
- APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)'
-fi
-
-if test x$LIB_MAN_SUFFIX = x ; then
- LIB_MAN_SUFFIX=3
-fi
-if test x$LIB_MAN_DIR = x ; then
- LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)'
-fi
-
-if test x$FILE_MAN_SUFFIX = x ; then
- case $host_os in
- solaris*) FILE_MAN_SUFFIX=4 ;;
- *) FILE_MAN_SUFFIX=5 ;;
- esac
-fi
-if test x$FILE_MAN_DIR = x ; then
- FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)'
-fi
-
-if test x$MISC_MAN_SUFFIX = x ; then
- case $host_os in
- solaris*) MISC_MAN_SUFFIX=5 ;;
- *) MISC_MAN_SUFFIX=7 ;;
- esac
-fi
-if test x$MISC_MAN_DIR = x ; then
- MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)'
-fi
-
-if test x$DRIVER_MAN_SUFFIX = x ; then
- case $host_os in
- solaris*) DRIVER_MAN_SUFFIX=7 ;;
- *) DRIVER_MAN_SUFFIX=4 ;;
- esac
-fi
-if test x$DRIVER_MAN_DIR = x ; then
- DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)'
-fi
-
-if test x$ADMIN_MAN_SUFFIX = x ; then
- case $host_os in
- solaris*) ADMIN_MAN_SUFFIX=1m ;;
- *) ADMIN_MAN_SUFFIX=8 ;;
- esac
-fi
-if test x$ADMIN_MAN_DIR = x ; then
- ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)'
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# fix libtool to set SONAME to libXaw.so.$major
-#
-ac_config_commands="$ac_config_commands libtool_hack"
-
-
-# OSX/Win32 rules are different.
-platform_win32=no
-platform_darwin=no
-LIBEXT=so
-case $host_os in
- cygwin*|mingw*)
- platform_win32=yes
- ;;
- darwin*)
- LIBEXT=dylib
- platform_darwin=yes
- ;;
-esac
-
- if test "x$platform_win32" = "xyes"; then
- PLATFORM_WIN32_TRUE=
- PLATFORM_WIN32_FALSE='#'
-else
- PLATFORM_WIN32_TRUE='#'
- PLATFORM_WIN32_FALSE=
-fi
-
- if test "x$platform_darwin" = "xyes"; then
- PLATFORM_DARWIN_TRUE=
- PLATFORM_DARWIN_FALSE='#'
-else
- PLATFORM_DARWIN_TRUE='#'
- PLATFORM_DARWIN_FALSE=
-fi
-
-
-# Whether to build Xaw6
-
-# Check whether --enable-xaw6 was given.
-if test "${enable_xaw6+set}" = set; then
- enableval=$enable_xaw6; build_v6=$enableval
-else
- build_v6=yes
-fi
-
-
-if test "x$build_v6" = xyes; then
-
-pkg_failed=no
-{ $as_echo "$as_me:$LINENO: checking for XAW6" >&5
-$as_echo_n "checking for XAW6... " >&6; }
-
-if test -n "$XAW6_CFLAGS"; then
- pkg_cv_XAW6_CFLAGS="$XAW6_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xproto x11 xext xextproto xt xmu\"") >&5
- ($PKG_CONFIG --exists --print-errors "xproto x11 xext xextproto xt xmu") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- pkg_cv_XAW6_CFLAGS=`$PKG_CONFIG --cflags "xproto x11 xext xextproto xt xmu" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$XAW6_LIBS"; then
- pkg_cv_XAW6_LIBS="$XAW6_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xproto x11 xext xextproto xt xmu\"") >&5
- ($PKG_CONFIG --exists --print-errors "xproto x11 xext xextproto xt xmu") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- pkg_cv_XAW6_LIBS=`$PKG_CONFIG --libs "xproto x11 xext xextproto xt xmu" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- XAW6_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "xproto x11 xext xextproto xt xmu" 2>&1`
- else
- XAW6_PKG_ERRORS=`$PKG_CONFIG --print-errors "xproto x11 xext xextproto xt xmu" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$XAW6_PKG_ERRORS" >&5
-
- { { $as_echo "$as_me:$LINENO: error: Package requirements (xproto x11 xext xextproto xt xmu) were not met:
-
-$XAW6_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables XAW6_CFLAGS
-and XAW6_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" >&5
-$as_echo "$as_me: error: Package requirements (xproto x11 xext xextproto xt xmu) were not met:
-
-$XAW6_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables XAW6_CFLAGS
-and XAW6_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" >&2;}
- { (exit 1); exit 1; }; }
-elif test $pkg_failed = untried; then
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: 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.
-
-Alternatively, you may set the environment variables XAW6_CFLAGS
-and XAW6_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: 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.
-
-Alternatively, you may set the environment variables XAW6_CFLAGS
-and XAW6_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-else
- XAW6_CFLAGS=$pkg_cv_XAW6_CFLAGS
- XAW6_LIBS=$pkg_cv_XAW6_LIBS
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- :
-fi
-
-
-fi
-
-
-# Whether to build Xaw7
-
-# Check whether --enable-xaw7 was given.
-if test "${enable_xaw7+set}" = set; then
- enableval=$enable_xaw7; build_v7=$enableval
-else
- build_v7=yes
-fi
-
-
-if test "x$build_v7" = xyes; then
-
-pkg_failed=no
-{ $as_echo "$as_me:$LINENO: checking for XAW7" >&5
-$as_echo_n "checking for XAW7... " >&6; }
-
-if test -n "$XAW7_CFLAGS"; then
- pkg_cv_XAW7_CFLAGS="$XAW7_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xproto x11 xext xextproto xt xmu xpm\"") >&5
- ($PKG_CONFIG --exists --print-errors "xproto x11 xext xextproto xt xmu xpm") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- pkg_cv_XAW7_CFLAGS=`$PKG_CONFIG --cflags "xproto x11 xext xextproto xt xmu xpm" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$XAW7_LIBS"; then
- pkg_cv_XAW7_LIBS="$XAW7_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xproto x11 xext xextproto xt xmu xpm\"") >&5
- ($PKG_CONFIG --exists --print-errors "xproto x11 xext xextproto xt xmu xpm") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- pkg_cv_XAW7_LIBS=`$PKG_CONFIG --libs "xproto x11 xext xextproto xt xmu xpm" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- XAW7_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "xproto x11 xext xextproto xt xmu xpm" 2>&1`
- else
- XAW7_PKG_ERRORS=`$PKG_CONFIG --print-errors "xproto x11 xext xextproto xt xmu xpm" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$XAW7_PKG_ERRORS" >&5
-
- { { $as_echo "$as_me:$LINENO: error: Package requirements (xproto x11 xext xextproto xt xmu xpm) were not met:
-
-$XAW7_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables XAW7_CFLAGS
-and XAW7_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" >&5
-$as_echo "$as_me: error: Package requirements (xproto x11 xext xextproto xt xmu xpm) were not met:
-
-$XAW7_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables XAW7_CFLAGS
-and XAW7_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" >&2;}
- { (exit 1); exit 1; }; }
-elif test $pkg_failed = untried; then
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: 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.
-
-Alternatively, you may set the environment variables XAW7_CFLAGS
-and XAW7_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: 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.
-
-Alternatively, you may set the environment variables XAW7_CFLAGS
-and XAW7_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-else
- XAW7_CFLAGS=$pkg_cv_XAW7_CFLAGS
- XAW7_LIBS=$pkg_cv_XAW7_LIBS
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- :
-fi
-
-
-fi
-
-
- if test x$build_v6 = xyes; then
- BUILD_XAW6_TRUE=
- BUILD_XAW6_FALSE='#'
-else
- BUILD_XAW6_TRUE='#'
- BUILD_XAW6_FALSE=
-fi
-
- if test x$build_v7 = xyes; then
- BUILD_XAW7_TRUE=
- BUILD_XAW7_FALSE='#'
-else
- BUILD_XAW7_TRUE='#'
- BUILD_XAW7_FALSE=
-fi
-
-
-# Checks for header files.
-{ $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 <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.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_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 <string.h>
-
-_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 <stdlib.h>
-
-_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 <ctype.h>
-#include <stdlib.h>
-#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
-
-if test "${ac_cv_header_wctype_h+set}" = set; then
- { $as_echo "$as_me:$LINENO: checking for wctype.h" >&5
-$as_echo_n "checking for wctype.h... " >&6; }
-if test "${ac_cv_header_wctype_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_wctype_h" >&5
-$as_echo "$ac_cv_header_wctype_h" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking wctype.h usability" >&5
-$as_echo_n "checking wctype.h usability... " >&6; }
-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 <wctype.h>
-_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_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking wctype.h presence" >&5
-$as_echo_n "checking wctype.h presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <wctype.h>
-_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
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: wctype.h: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: wctype.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wctype.h: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: wctype.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: wctype.h: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: wctype.h: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wctype.h: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: wctype.h: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wctype.h: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: wctype.h: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wctype.h: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: wctype.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wctype.h: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: wctype.h: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wctype.h: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: wctype.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ---------------------------------------------------------------------- ##
-## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg ##
-## ---------------------------------------------------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for wctype.h" >&5
-$as_echo_n "checking for wctype.h... " >&6; }
-if test "${ac_cv_header_wctype_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_header_wctype_h=$ac_header_preproc
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_wctype_h" >&5
-$as_echo "$ac_cv_header_wctype_h" >&6; }
-
-fi
-if test "x$ac_cv_header_wctype_h" = x""yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAS_WCTYPE_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_wchar_h+set}" = set; then
- { $as_echo "$as_me:$LINENO: checking for wchar.h" >&5
-$as_echo_n "checking for wchar.h... " >&6; }
-if test "${ac_cv_header_wchar_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_wchar_h" >&5
-$as_echo "$ac_cv_header_wchar_h" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking wchar.h usability" >&5
-$as_echo_n "checking wchar.h usability... " >&6; }
-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 <wchar.h>
-_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_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking wchar.h presence" >&5
-$as_echo_n "checking wchar.h presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <wchar.h>
-_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
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: wchar.h: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: wchar.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wchar.h: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: wchar.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: wchar.h: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: wchar.h: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wchar.h: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: wchar.h: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wchar.h: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: wchar.h: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wchar.h: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: wchar.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wchar.h: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: wchar.h: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: wchar.h: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: wchar.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ---------------------------------------------------------------------- ##
-## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg ##
-## ---------------------------------------------------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for wchar.h" >&5
-$as_echo_n "checking for wchar.h... " >&6; }
-if test "${ac_cv_header_wchar_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_header_wchar_h=$ac_header_preproc
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_wchar_h" >&5
-$as_echo "$ac_cv_header_wchar_h" >&6; }
-
-fi
-if test "x$ac_cv_header_wchar_h" = x""yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAS_WCHAR_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_widec_h+set}" = set; then
- { $as_echo "$as_me:$LINENO: checking for widec.h" >&5
-$as_echo_n "checking for widec.h... " >&6; }
-if test "${ac_cv_header_widec_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_widec_h" >&5
-$as_echo "$ac_cv_header_widec_h" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking widec.h usability" >&5
-$as_echo_n "checking widec.h usability... " >&6; }
-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 <widec.h>
-_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_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking widec.h presence" >&5
-$as_echo_n "checking widec.h presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <widec.h>
-_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
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: widec.h: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: widec.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: widec.h: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: widec.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: widec.h: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: widec.h: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: widec.h: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: widec.h: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: widec.h: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: widec.h: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: widec.h: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: widec.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: widec.h: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: widec.h: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: widec.h: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: widec.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ---------------------------------------------------------------------- ##
-## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg ##
-## ---------------------------------------------------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for widec.h" >&5
-$as_echo_n "checking for widec.h... " >&6; }
-if test "${ac_cv_header_widec_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_header_widec_h=$ac_header_preproc
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_widec_h" >&5
-$as_echo "$ac_cv_header_widec_h" >&6; }
-
-fi
-if test "x$ac_cv_header_widec_h" = x""yes; then
- :
-else
-
-cat >>confdefs.h <<\_ACEOF
-#define NO_WIDEC_H 1
-_ACEOF
-
-fi
-
-
-
-# Checks for functions
-
-for ac_func in iswalnum
-do
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; 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. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext 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>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_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- eval "$as_ac_var=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'`
- if test "x$as_val" = x""yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-ac_config_files="$ac_config_files Makefile include/Makefile man/Makefile spec/Makefile src/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
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_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, 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 $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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- 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
- { $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
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_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_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 -n "$EXEEXT"; then
- am__EXEEXT_TRUE=
- am__EXEEXT_FALSE='#'
-else
- am__EXEEXT_TRUE='#'
- am__EXEEXT_FALSE=
-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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_DOCS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_DOCS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"PLATFORM_WIN32\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"PLATFORM_WIN32\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${PLATFORM_DARWIN_TRUE}" && test -z "${PLATFORM_DARWIN_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"PLATFORM_DARWIN\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"PLATFORM_DARWIN\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_XAW6_TRUE}" && test -z "${BUILD_XAW6_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_XAW6\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_XAW6\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_XAW7_TRUE}" && test -z "${BUILD_XAW7_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_XAW7\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_XAW7\" 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"
-{ $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.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# 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=:
- # 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
-
-
-
-
-# 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
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-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.
-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.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-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
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- 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
-
-
-
- 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 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
- # 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
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-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
-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
-else
- as_ln_s='cp -p'
-fi
-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=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-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'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# 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.
-ac_log="
-This file was extended by libXaw $as_me 1.0.7, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTION]... [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet, --silent
- 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
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-libXaw config.status 1.0.7
-configured by $0, generated by GNU Autoconf 2.63,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-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."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-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_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --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
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- { $as_echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
- --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.
- -*) { $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_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- 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
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "libtool_hack") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool_hack" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
- "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
- "spec/Makefile") CONFIG_FILES="$CONFIG_FILES spec/Makefile" ;;
- "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/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_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
- 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 against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# 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 ||
-{
- 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 "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- $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 2>/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
-
-
-{
- 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; }; }
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $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
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$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"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_t"; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
-$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
- { (exit 1); exit 1; }; }
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :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
-
- 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 ||
-$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 :; 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; }; }; }
- ac_builddir=.
-
-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
- .) # We are building in place.
- ac_srcdir=.
- 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
- 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
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
- ac_MKDIR_P=$MKDIR_P
- case $MKDIR_P in
- [\\/$]* | ?:[\\/]* ) ;;
- */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
- esac
-_ACEOF
-
-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 || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-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
-s&@MKDIR_P@&$ac_MKDIR_P&;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; }; }
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
- } >"$tmp/config.h" \
- || { { $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; }; }
- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$tmp/config.h" "$ac_file" \
- || { { $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; }; }
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
- || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
-$as_echo "$as_me: error: could not create -" >&2;}
- { (exit 1); exit 1; }; }
- fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $_am_arg | $_am_arg:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$_am_arg" : 'X\(//\)[^/]' \| \
- X"$_am_arg" : 'X\(//\)$' \| \
- X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`/stamp-h$_am_stamp_count
- ;;
-
- :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"" || {
- # Autoconf 2.62 quotes --file arguments for eval, but not when files
- # are listed without --file. Let's play safe and only enable the eval
- # if we detect the quoting.
- case $CONFIG_FILES in
- *\'*) eval set x "$CONFIG_FILES" ;;
- *) set x $CONFIG_FILES ;;
- esac
- shift
- for mf
- 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.
- # Grep'ing the whole file is not good either: AIX grep has a line
- # limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/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
- 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
-}
- ;;
- "libtool_hack":C)
- cp -f libtool libtool_
- test -z "$SED" && SED=sed
- $SED '1,/^soname_spec/{
-/^soname_spec/i\
-# X.Org hack to match monolithic Xaw SONAME\
-xorglibxawname="libXaw"
-/^soname_spec/s/libname/xorglibxawname/
-}' libtool_ > libtool
- rm -f libtool_
- ;;
-
- esac
-done # for ac_tag
-
-
-{ (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.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # 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
-
-
-if test "x$build_v6" = xyes; then
- ac_config_files="$ac_config_files xaw6.pc"
-
-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
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_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, 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 $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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- 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
- { $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
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_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_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 -n "$EXEEXT"; then
- am__EXEEXT_TRUE=
- am__EXEEXT_FALSE='#'
-else
- am__EXEEXT_TRUE='#'
- am__EXEEXT_FALSE=
-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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_DOCS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_DOCS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"PLATFORM_WIN32\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"PLATFORM_WIN32\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${PLATFORM_DARWIN_TRUE}" && test -z "${PLATFORM_DARWIN_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"PLATFORM_DARWIN\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"PLATFORM_DARWIN\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_XAW6_TRUE}" && test -z "${BUILD_XAW6_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_XAW6\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_XAW6\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_XAW7_TRUE}" && test -z "${BUILD_XAW7_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_XAW7\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_XAW7\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${am__EXEEXT_TRUE}" && test -z "${am__EXEEXT_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"am__EXEEXT\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__EXEEXT\" 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"
-{ $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.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# 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=:
- # 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
-
-
-
-
-# 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
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-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.
-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.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-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
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- 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
-
-
-
- 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 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
- # 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
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-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
-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
-else
- as_ln_s='cp -p'
-fi
-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=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-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'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# 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.
-ac_log="
-This file was extended by libXaw $as_me 1.0.7, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTION]... [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet, --silent
- 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
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-libXaw config.status 1.0.7
-configured by $0, generated by GNU Autoconf 2.63,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-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."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-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_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --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
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- { $as_echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
- --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.
- -*) { $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_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- 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
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "libtool_hack") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool_hack" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
- "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
- "spec/Makefile") CONFIG_FILES="$CONFIG_FILES spec/Makefile" ;;
- "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
- "xaw6.pc") CONFIG_FILES="$CONFIG_FILES xaw6.pc" ;;
-
- *) { { $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_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
- 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 against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# 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 ||
-{
- 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 "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- $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 2>/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
-
-
-{
- 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; }; }
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $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
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$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"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_t"; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
-$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
- { (exit 1); exit 1; }; }
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :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
-
- 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 ||
-$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 :; 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; }; }; }
- ac_builddir=.
-
-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
- .) # We are building in place.
- ac_srcdir=.
- 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
- 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
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
- ac_MKDIR_P=$MKDIR_P
- case $MKDIR_P in
- [\\/$]* | ?:[\\/]* ) ;;
- */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
- esac
-_ACEOF
-
-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 || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-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
-s&@MKDIR_P@&$ac_MKDIR_P&;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; }; }
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
- } >"$tmp/config.h" \
- || { { $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; }; }
- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$tmp/config.h" "$ac_file" \
- || { { $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; }; }
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
- || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
-$as_echo "$as_me: error: could not create -" >&2;}
- { (exit 1); exit 1; }; }
- fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $_am_arg | $_am_arg:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$_am_arg" : 'X\(//\)[^/]' \| \
- X"$_am_arg" : 'X\(//\)$' \| \
- X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`/stamp-h$_am_stamp_count
- ;;
-
- :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"" || {
- # Autoconf 2.62 quotes --file arguments for eval, but not when files
- # are listed without --file. Let's play safe and only enable the eval
- # if we detect the quoting.
- case $CONFIG_FILES in
- *\'*) eval set x "$CONFIG_FILES" ;;
- *) set x $CONFIG_FILES ;;
- esac
- shift
- for mf
- 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.
- # Grep'ing the whole file is not good either: AIX grep has a line
- # limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/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
- 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
-}
- ;;
- "libtool_hack":C)
- cp -f libtool libtool_
- test -z "$SED" && SED=sed
- $SED '1,/^soname_spec/{
-/^soname_spec/i\
-# X.Org hack to match monolithic Xaw SONAME\
-xorglibxawname="libXaw"
-/^soname_spec/s/libname/xorglibxawname/
-}' libtool_ > libtool
- rm -f libtool_
- ;;
-
- esac
-done # for ac_tag
-
-
-{ (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.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # 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
-
-fi
-
-if test "x$build_v7" = xyes; then
- ac_config_files="$ac_config_files xaw7.pc"
-
-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
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_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, 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 $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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- 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
- { $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
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_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_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 -n "$EXEEXT"; then
- am__EXEEXT_TRUE=
- am__EXEEXT_FALSE='#'
-else
- am__EXEEXT_TRUE='#'
- am__EXEEXT_FALSE=
-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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_DOCS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_DOCS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"PLATFORM_WIN32\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"PLATFORM_WIN32\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${PLATFORM_DARWIN_TRUE}" && test -z "${PLATFORM_DARWIN_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"PLATFORM_DARWIN\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"PLATFORM_DARWIN\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_XAW6_TRUE}" && test -z "${BUILD_XAW6_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_XAW6\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_XAW6\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${BUILD_XAW7_TRUE}" && test -z "${BUILD_XAW7_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_XAW7\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_XAW7\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${am__EXEEXT_TRUE}" && test -z "${am__EXEEXT_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"am__EXEEXT\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__EXEEXT\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${am__EXEEXT_TRUE}" && test -z "${am__EXEEXT_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"am__EXEEXT\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__EXEEXT\" 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"
-{ $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.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# 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=:
- # 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
-
-
-
-
-# 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
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-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.
-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.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-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
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- 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
-
-
-
- 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 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
- # 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
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-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
-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
-else
- as_ln_s='cp -p'
-fi
-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=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-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'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# 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.
-ac_log="
-This file was extended by libXaw $as_me 1.0.7, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTION]... [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet, --silent
- 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
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-libXaw config.status 1.0.7
-configured by $0, generated by GNU Autoconf 2.63,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-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."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-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_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --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
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- { $as_echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
- --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.
- -*) { $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_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- 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
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "libtool_hack") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool_hack" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
- "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
- "spec/Makefile") CONFIG_FILES="$CONFIG_FILES spec/Makefile" ;;
- "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
- "xaw6.pc") CONFIG_FILES="$CONFIG_FILES xaw6.pc" ;;
- "xaw7.pc") CONFIG_FILES="$CONFIG_FILES xaw7.pc" ;;
-
- *) { { $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_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
- 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 against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# 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 ||
-{
- 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 "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- $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 2>/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
-
-
-{
- 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; }; }
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $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
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$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"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_t"; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
-$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
- { (exit 1); exit 1; }; }
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :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
-
- 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 ||
-$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 :; 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; }; }; }
- ac_builddir=.
-
-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
- .) # We are building in place.
- ac_srcdir=.
- 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
- 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
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
- ac_MKDIR_P=$MKDIR_P
- case $MKDIR_P in
- [\\/$]* | ?:[\\/]* ) ;;
- */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
- esac
-_ACEOF
-
-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 || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-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
-s&@MKDIR_P@&$ac_MKDIR_P&;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; }; }
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
- } >"$tmp/config.h" \
- || { { $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; }; }
- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$tmp/config.h" "$ac_file" \
- || { { $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; }; }
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
- || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
-$as_echo "$as_me: error: could not create -" >&2;}
- { (exit 1); exit 1; }; }
- fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $_am_arg | $_am_arg:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$_am_arg" : 'X\(//\)[^/]' \| \
- X"$_am_arg" : 'X\(//\)$' \| \
- X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`/stamp-h$_am_stamp_count
- ;;
-
- :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"" || {
- # Autoconf 2.62 quotes --file arguments for eval, but not when files
- # are listed without --file. Let's play safe and only enable the eval
- # if we detect the quoting.
- case $CONFIG_FILES in
- *\'*) eval set x "$CONFIG_FILES" ;;
- *) set x $CONFIG_FILES ;;
- esac
- shift
- for mf
- 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.
- # Grep'ing the whole file is not good either: AIX grep has a line
- # limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/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
- 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
-}
- ;;
- "libtool_hack":C)
- cp -f libtool libtool_
- test -z "$SED" && SED=sed
- $SED '1,/^soname_spec/{
-/^soname_spec/i\
-# X.Org hack to match monolithic Xaw SONAME\
-xorglibxawname="libXaw"
-/^soname_spec/s/libname/xorglibxawname/
-}' libtool_ > libtool
- rm -f libtool_
- ;;
-
- esac
-done # for ac_tag
-
-
-{ (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.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # 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
-
-fi
diff --git a/libXaw/configure.ac b/libXaw/configure.ac
index bd7b202aa..a7875f201 100644
--- a/libXaw/configure.ac
+++ b/libXaw/configure.ac
@@ -1,140 +1,112 @@
-dnl Process this file with autoconf to create configure.
-
-AC_PREREQ([2.57])
-
-AC_INIT([libXaw],
- 1.0.7,
- [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
- libXaw)
-
-AM_INIT_AUTOMAKE([dist-bzip2])
-
-AM_CONFIG_HEADER(config.h)
-
-# Require xorg-macros: XORG_WITH_LINT, XORG_DEFAULT_OPTIONS
-m4_ifndef([XORG_MACROS_VERSION],
- [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.3)
-
-# Check for progs
-AC_PROG_CC
-AC_PROG_LIBTOOL
-AC_PROG_AWK
-AC_PROG_SED
-
-AC_PATH_PROGS([GROFF], [groff], [none], [$PATH:/usr/gnu/bin])
-
-AC_MSG_CHECKING([whether to build documentation])
-AC_ARG_ENABLE(docs, AC_HELP_STRING([--enable-docs],
- [Enable building of Xaw documentation]),
- [build_docs="${enableval}"], [build_docs="auto"])
-
-if test "x${build_docs}" = xauto; then
- if test "x${GROFF}" = xnone ; then
- build_docs=no
- else
- build_docs=yes
- fi
-fi
-AC_MSG_RESULT([${build_docs}])
-if test "x${build_docs}" = xyes && test "x${GROFF}" = xnone ; then
- AC_MSG_ERROR([can't build documentation without groff])
-fi
-
-AM_CONDITIONAL(BUILD_DOCS, [test x$build_docs = xyes])
-
-# Need to call this explicitly since the first call to PKG_CHECK_MODULES
-# is in an if statement, and later calls would break if it's skipped.
-PKG_PROG_PKG_CONFIG
-
-XORG_DEFAULT_OPTIONS
-
-#
-# fix libtool to set SONAME to libXaw.so.$major
-#
-AC_CONFIG_COMMANDS([libtool_hack], [
- cp -f libtool libtool_
- test -z "$SED" && SED=sed
- $SED '1,/^soname_spec/{
-/^soname_spec/i\
-# X.Org hack to match monolithic Xaw SONAME\
-xorglibxawname="libXaw"
-/^soname_spec/s/libname/xorglibxawname/
-}' libtool_ > libtool
- rm -f libtool_
-])
-
-# OSX/Win32 rules are different.
-platform_win32=no
-platform_darwin=no
-LIBEXT=so
-case $host_os in
- cygwin*|mingw*)
- platform_win32=yes
- ;;
- darwin*)
- LIBEXT=dylib
- platform_darwin=yes
- ;;
-esac
-AC_SUBST(LIBEXT)
-AM_CONDITIONAL(PLATFORM_WIN32, test "x$platform_win32" = "xyes")
-AM_CONDITIONAL(PLATFORM_DARWIN, test "x$platform_darwin" = "xyes")
-
-# Whether to build Xaw6
-
-AC_ARG_ENABLE(xaw6, AC_HELP_STRING([--disable-xaw6],
- [Disable building of libXaw.so.6]),
- [build_v6=$enableval], [build_v6=yes])
-
-if test "x$build_v6" = xyes; then
- PKG_CHECK_MODULES(XAW6, xproto x11 xext xextproto xt xmu)
- AC_SUBST(XAW6_CFLAGS)
- AC_SUBST(XAW6_LIBS)
-fi
-
-
-# Whether to build Xaw7
-
-AC_ARG_ENABLE(xaw7, AC_HELP_STRING([--disable-xaw7],
- [Disable building of libXaw.so.7]),
- [build_v7=$enableval], [build_v7=yes])
-
-if test "x$build_v7" = xyes; then
- PKG_CHECK_MODULES(XAW7, xproto x11 xext xextproto xt xmu xpm)
- AC_SUBST(XAW7_CFLAGS)
- AC_SUBST(XAW7_LIBS)
-fi
-
-
-AM_CONDITIONAL(BUILD_XAW6, [test x$build_v6 = xyes])
-AM_CONDITIONAL(BUILD_XAW7, [test x$build_v7 = xyes])
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADER(wctype.h,
- AC_DEFINE([HAS_WCTYPE_H],1,
- [Define to 1 if you have the <wctype.h> header file.]))
-AC_CHECK_HEADER(wchar.h,
- AC_DEFINE([HAS_WCHAR_H],1,
- [Define to 1 if you have the <wchar.h> header file.]))
-AC_CHECK_HEADER(widec.h, [],
- AC_DEFINE([NO_WIDEC_H],1,
- [Define to 1 if you DO NOT have the <widec.h> header file.]))
-
-# Checks for functions
-AC_CHECK_FUNCS([iswalnum])
-
-AC_OUTPUT([Makefile
- include/Makefile
- man/Makefile
- spec/Makefile
- src/Makefile])
-
-if test "x$build_v6" = xyes; then
- AC_OUTPUT(xaw6.pc)
-fi
-
-if test "x$build_v7" = xyes; then
- AC_OUTPUT(xaw7.pc)
-fi
+dnl Process this file with autoconf to create configure.
+
+# Initialize Autoconf
+AC_PREREQ([2.60])
+AC_INIT([libXaw], [1.0.9],
+ [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXaw])
+AC_CONFIG_SRCDIR([Makefile.am])
+AC_CONFIG_HEADERS([config.h])
+
+# Initialize Automake
+AM_INIT_AUTOMAKE([foreign dist-bzip2])
+AM_MAINTAINER_MODE
+
+# Require xorg-macros minimum of 1.10 for HAVE_STYLESHEETS in XORG_CHECK_SGML_DOCTOOLS
+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_SPECS
+XORG_WITH_XMLTO(0.0.20)
+XORG_WITH_FOP
+XORG_CHECK_SGML_DOCTOOLS(1.5)
+
+# Check for progs
+AC_PROG_LIBTOOL
+AC_PROG_AWK
+AM_PROG_CC_C_O
+
+# Need to call this explicitly since the first call to PKG_CHECK_MODULES
+# is in an if statement, and later calls would break if it's skipped.
+PKG_PROG_PKG_CONFIG
+
+#
+# fix libtool to set SONAME to libXaw.so.$major
+#
+AC_CONFIG_COMMANDS([libtool_hack], [
+ cp -f libtool libtool_
+ test -z "$SED" && SED=sed
+ $SED '1,/^soname_spec/{
+/^soname_spec/i\
+# X.Org hack to match monolithic Xaw SONAME\
+xorglibxawname="libXaw"
+/^soname_spec/s/libname/xorglibxawname/
+}' libtool_ > libtool
+ rm -f libtool_
+])
+
+# OSX/Win32 rules are different.
+platform_win32=no
+platform_darwin=no
+LIBEXT=so
+case $host_os in
+ cygwin*|mingw*)
+ LIBEXT=dll.a
+ platform_win32=yes
+ ;;
+ darwin*)
+ LIBEXT=dylib
+ platform_darwin=yes
+ ;;
+esac
+AC_SUBST(LIBEXT)
+AM_CONDITIONAL(PLATFORM_WIN32, test "x$platform_win32" = "xyes")
+AM_CONDITIONAL(PLATFORM_DARWIN, test "x$platform_darwin" = "xyes")
+
+# Whether to build Xaw6
+
+AC_ARG_ENABLE(xaw6, AC_HELP_STRING([--disable-xaw6],
+ [Disable building of libXaw.so.6]),
+ [build_v6=$enableval], [build_v6=yes])
+
+if test "x$build_v6" = xyes; then
+ PKG_CHECK_MODULES(XAW6, xproto x11 xext xextproto xt xmu)
+fi
+
+
+# Whether to build Xaw7
+
+AC_ARG_ENABLE(xaw7, AC_HELP_STRING([--disable-xaw7],
+ [Disable building of libXaw.so.7]),
+ [build_v7=$enableval], [build_v7=yes])
+
+if test "x$build_v7" = xyes; then
+ PKG_CHECK_MODULES(XAW7, xproto x11 xext xextproto xt xmu xpm)
+fi
+
+
+AM_CONDITIONAL(BUILD_XAW6, [test x$build_v6 = xyes])
+AM_CONDITIONAL(BUILD_XAW7, [test x$build_v7 = xyes])
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([wctype.h wchar.h widec.h])
+
+# Checks for functions
+AC_CHECK_FUNCS([iswalnum getpagesize])
+
+AC_CONFIG_FILES([Makefile
+ include/Makefile
+ man/Makefile
+ specs/Makefile
+ src/Makefile])
+
+if test "x$build_v6" = xyes; then
+ AC_CONFIG_FILES(xaw6.pc)
+fi
+
+if test "x$build_v7" = xyes; then
+ AC_CONFIG_FILES(xaw7.pc)
+fi
+
+AC_OUTPUT
diff --git a/libXaw/depcomp b/libXaw/depcomp
deleted file mode 100644
index df8eea7e4..000000000
--- a/libXaw/depcomp
+++ /dev/null
@@ -1,630 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2009-04-28.21; # UTC
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
-# Software Foundation, Inc.
-
-# 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, 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 <http://www.gnu.org/licenses/>.
-
-# 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.
-
-# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
-
-case $1 in
- '')
- echo "$0: No command. Try \`$0 --help' for more information." 1>&2
- exit 1;
- ;;
- -h | --h*)
- cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
- depmode Dependency tracking mode.
- source Source file read by `PROGRAMS ARGS'.
- object Object file output by `PROGRAMS ARGS'.
- DEPDIR directory where to store dependencies.
- depfile Dependency file to output.
- tmpdepfile Temporary file to use when outputing dependencies.
- libtool Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
- exit $?
- ;;
- -v | --v*)
- echo "depcomp $scriptversion"
- exit $?
- ;;
-esac
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
- echo "depcomp: Variables source, object and depmode must be set" 1>&2
- exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
- sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Some modes work just like other modes, but use different flags. We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write. Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
- # HP compiler uses -M and no extra arg.
- gccflag=-M
- depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
- # This is just like dashmstdout with a different argument.
- dashmflag=-xM
- depmode=dashmstdout
-fi
-
-cygpath_u="cygpath -u -f -"
-if test "$depmode" = msvcmsys; then
- # This is just like msvisualcpp but w/o cygpath translation.
- # Just convert the backslash-escaped backslashes to single forward
- # slashes to satisfy depend.m4
- cygpath_u="sed s,\\\\\\\\,/,g"
- depmode=msvisualcpp
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want. Yay! Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff. Hmm.
-## Unfortunately, FreeBSD c89 acceptance of flags depends upon
-## the command line argument order; so add the flags where they
-## appear in depend2.am. Note that the slowdown incurred here
-## affects only configure: in makefiles, %FASTDEP% shortcuts this.
- for arg
- do
- case $arg in
- -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
- *) set fnord "$@" "$arg" ;;
- esac
- shift # fnord
- shift # $arg
- done
- "$@"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- mv "$tmpdepfile" "$depfile"
- ;;
-
-gcc)
-## There are various ways to get dependency output from gcc. Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-## up in a subdir. Having to rename by hand is ugly.
-## (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-## -MM, not -M (despite what the docs say).
-## - Using -M directly means running the compiler twice (even worse
-## than renaming).
- if test -z "$gccflag"; then
- gccflag=-MD,
- fi
- "$@" -Wp,"$gccflag$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
- sed -e 's/^[^:]*: / /' \
- -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header). We avoid this by adding
-## dummy dependencies for each header file. Too bad gcc doesn't do
-## this for us directly.
- tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'. On the theory
-## that the space means something, we add a space to the output as
-## well.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-hp)
- # This case exists only to let depend.m4 do its work. It works by
- # looking at the text of this script. This case will never be run,
- # since it is checked for above.
- exit 1
- ;;
-
-sgi)
- if test "$libtool" = yes; then
- "$@" "-Wp,-MDupdate,$tmpdepfile"
- else
- "$@" -MDupdate "$tmpdepfile"
- fi
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
-
- if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
- echo "$object : \\" > "$depfile"
-
- # Clip off the initial element (the dependent). Don't try to be
- # clever and replace this with sed code, as IRIX sed won't handle
- # lines with more than a fixed number of characters (4096 in
- # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
- # the IRIX cc adds comments like `#:fec' to the end of the
- # dependency line.
- tr ' ' '
-' < "$tmpdepfile" \
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
- tr '
-' ' ' >> "$depfile"
- echo >> "$depfile"
-
- # The second pass generates a dummy entry for each header file.
- tr ' ' '
-' < "$tmpdepfile" \
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
- >> "$depfile"
- else
- # The sourcefile does not contain any dependencies, so just
- # store a dummy comment line, to avoid errors with the Makefile
- # "include basename.Plo" scheme.
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-aix)
- # The C for AIX Compiler uses -M and outputs the dependencies
- # in a .u file. In older versions, this file always lives in the
- # current directory. Also, the AIX compiler puts `$object:' at the
- # start of each line; $object doesn't have directory information.
- # Version 6 uses the directory in both cases.
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
- if test "$libtool" = yes; then
- tmpdepfile1=$dir$base.u
- tmpdepfile2=$base.u
- tmpdepfile3=$dir.libs/$base.u
- "$@" -Wc,-M
- else
- tmpdepfile1=$dir$base.u
- tmpdepfile2=$dir$base.u
- tmpdepfile3=$dir$base.u
- "$@" -M
- fi
- stat=$?
-
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
- exit $stat
- fi
-
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
- do
- test -f "$tmpdepfile" && break
- done
- if test -f "$tmpdepfile"; then
- # Each line is of the form `foo.o: dependent.h'.
- # Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
- # That's a tab and a space in the [].
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
- else
- # The sourcefile does not contain any dependencies, so just
- # store a dummy comment line, to avoid errors with the Makefile
- # "include basename.Plo" scheme.
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-icc)
- # Intel's C compiler understands `-MD -MF file'. However on
- # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
- # ICC 7.0 will fill foo.d with something like
- # foo.o: sub/foo.c
- # foo.o: sub/foo.h
- # which is wrong. We want:
- # sub/foo.o: sub/foo.c
- # sub/foo.o: sub/foo.h
- # sub/foo.c:
- # sub/foo.h:
- # ICC 7.1 will output
- # foo.o: sub/foo.c sub/foo.h
- # and will wrap long lines using \ :
- # foo.o: sub/foo.c ... \
- # sub/foo.h ... \
- # ...
-
- "$@" -MD -MF "$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- # Each line is of the form `foo.o: dependent.h',
- # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
- # Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
- # Some versions of the HPUX 10.20 sed can't process this invocation
- # correctly. Breaking it into two sed invocations is a workaround.
- sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
- sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-hp2)
- # The "hp" stanza above does not work with aCC (C++) and HP's ia64
- # compilers, which have integrated preprocessors. The correct option
- # to use with these is +Maked; it writes dependencies to a file named
- # 'foo.d', which lands next to the object file, wherever that
- # happens to be.
- # Much of this is similar to the tru64 case; see comments there.
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
- if test "$libtool" = yes; then
- tmpdepfile1=$dir$base.d
- tmpdepfile2=$dir.libs/$base.d
- "$@" -Wc,+Maked
- else
- tmpdepfile1=$dir$base.d
- tmpdepfile2=$dir$base.d
- "$@" +Maked
- fi
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile1" "$tmpdepfile2"
- exit $stat
- fi
-
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
- do
- test -f "$tmpdepfile" && break
- done
- if test -f "$tmpdepfile"; then
- sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
- # Add `dependent.h:' lines.
- sed -ne '2,${
- s/^ *//
- s/ \\*$//
- s/$/:/
- p
- }' "$tmpdepfile" >> "$depfile"
- else
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile" "$tmpdepfile2"
- ;;
-
-tru64)
- # The Tru64 compiler uses -MD to generate dependencies as a side
- # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
- # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
- # dependencies in `foo.d' instead, so we check for that too.
- # Subdirectories are respected.
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
- if test "$libtool" = yes; then
- # With Tru64 cc, shared objects can also be used to make a
- # static library. This mechanism is used in libtool 1.4 series to
- # handle both shared and static libraries in a single compilation.
- # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
- #
- # With libtool 1.5 this exception was removed, and libtool now
- # generates 2 separate objects for the 2 libraries. These two
- # compilations output dependencies in $dir.libs/$base.o.d and
- # in $dir$base.o.d. We have to check for both files, because
- # one of the two compilations can be disabled. We should prefer
- # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
- # automatically cleaned when .libs/ is deleted, while ignoring
- # the former would cause a distcleancheck panic.
- tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
- tmpdepfile2=$dir$base.o.d # libtool 1.5
- tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
- tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
- "$@" -Wc,-MD
- else
- tmpdepfile1=$dir$base.o.d
- tmpdepfile2=$dir$base.d
- tmpdepfile3=$dir$base.d
- tmpdepfile4=$dir$base.d
- "$@" -MD
- fi
-
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
- exit $stat
- fi
-
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
- do
- test -f "$tmpdepfile" && break
- done
- if test -f "$tmpdepfile"; then
- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
- # That's a tab and a space in the [].
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
- else
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-#nosideeffect)
- # This comment above is used by automake to tell side-effect
- # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout, regardless of -o.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test "X$1" != 'X--mode=compile'; do
- shift
- done
- shift
- fi
-
- # Remove `-o $object'.
- IFS=" "
- for arg
- do
- case $arg in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift # fnord
- shift # $arg
- ;;
- esac
- done
-
- test -z "$dashmflag" && dashmflag=-M
- # Require at least two characters before searching for `:'
- # in the target name. This is to cope with DOS-style filenames:
- # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
- "$@" $dashmflag |
- sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
- rm -f "$depfile"
- cat < "$tmpdepfile" > "$depfile"
- tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-dashXmstdout)
- # This case only exists to satisfy depend.m4. It is never actually
- # run, as this mode is specially recognized in the preamble.
- exit 1
- ;;
-
-makedepend)
- "$@" || exit $?
- # Remove any Libtool call
- if test "$libtool" = yes; then
- while test "X$1" != 'X--mode=compile'; do
- shift
- done
- shift
- fi
- # X makedepend
- shift
- cleared=no eat=no
- for arg
- do
- case $cleared in
- no)
- set ""; shift
- cleared=yes ;;
- esac
- if test $eat = yes; then
- eat=no
- continue
- fi
- case "$arg" in
- -D*|-I*)
- set fnord "$@" "$arg"; shift ;;
- # Strip any option that makedepend may not understand. Remove
- # the object too, otherwise makedepend will parse it as a source file.
- -arch)
- eat=yes ;;
- -*|$object)
- ;;
- *)
- set fnord "$@" "$arg"; shift ;;
- esac
- done
- obj_suffix=`echo "$object" | sed 's/^.*\././'`
- touch "$tmpdepfile"
- ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
- rm -f "$depfile"
- cat < "$tmpdepfile" > "$depfile"
- sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile" "$tmpdepfile".bak
- ;;
-
-cpp)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test "X$1" != 'X--mode=compile'; do
- shift
- done
- shift
- fi
-
- # Remove `-o $object'.
- IFS=" "
- for arg
- do
- case $arg in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift # fnord
- shift # $arg
- ;;
- esac
- done
-
- "$@" -E |
- sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
- -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
- sed '$ s: \\$::' > "$tmpdepfile"
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- cat < "$tmpdepfile" >> "$depfile"
- sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-msvisualcpp)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test "X$1" != 'X--mode=compile'; do
- shift
- done
- shift
- fi
-
- IFS=" "
- for arg
- do
- case "$arg" in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
- set fnord "$@"
- shift
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift
- shift
- ;;
- esac
- done
- "$@" -E 2>/dev/null |
- sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
- echo " " >> "$depfile"
- sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-msvcmsys)
- # This case exists only to let depend.m4 do its work. It works by
- # looking at the text of this script. This case will never be run,
- # since it is checked for above.
- exit 1
- ;;
-
-none)
- exec "$@"
- ;;
-
-*)
- echo "Unknown depmode $depmode" 1>&2
- exit 1
- ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/libXaw/include/Makefile.in b/libXaw/include/Makefile.in
deleted file mode 100644
index 4e56ac57a..000000000
--- a/libXaw/include/Makefile.in
+++ /dev/null
@@ -1,547 +0,0 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-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 = include
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(xawinclude_HEADERS)
-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 = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo " GEN " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-SOURCES =
-DIST_SOURCES =
-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 = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(xawincludedir)"
-HEADERS = $(xawinclude_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
-ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APP_MAN_DIR = @APP_MAN_DIR@
-APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CHANGELOG_CMD = @CHANGELOG_CMD@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CWARNFLAGS = @CWARNFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
-DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
-DSYMUTIL = @DSYMUTIL@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-FILE_MAN_DIR = @FILE_MAN_DIR@
-FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
-GREP = @GREP@
-GROFF = @GROFF@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBEXT = @LIBEXT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_MAN_DIR = @LIB_MAN_DIR@
-LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MISC_MAN_DIR = @MISC_MAN_DIR@
-MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
-MKDIR_P = @MKDIR_P@
-NMEDIT = @NMEDIT@
-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@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XAW6_CFLAGS = @XAW6_CFLAGS@
-XAW6_LIBS = @XAW6_LIBS@
-XAW7_CFLAGS = @XAW7_CFLAGS@
-XAW7_LIBS = @XAW7_LIBS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-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@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-distcleancheck_listfiles = @distcleancheck_listfiles@
-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@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-xawincludedir = ${includedir}/X11/Xaw
-xawinclude_HEADERS = \
- X11/Xaw/AllWidgets.h \
- X11/Xaw/AsciiSink.h \
- X11/Xaw/AsciiSinkP.h \
- X11/Xaw/AsciiSrc.h \
- X11/Xaw/AsciiSrcP.h \
- X11/Xaw/AsciiText.h \
- X11/Xaw/AsciiTextP.h \
- X11/Xaw/Box.h \
- X11/Xaw/BoxP.h \
- X11/Xaw/Cardinals.h \
- X11/Xaw/Command.h \
- X11/Xaw/CommandP.h \
- X11/Xaw/Dialog.h \
- X11/Xaw/DialogP.h \
- X11/Xaw/Form.h \
- X11/Xaw/FormP.h \
- X11/Xaw/Grip.h \
- X11/Xaw/GripP.h \
- X11/Xaw/Label.h \
- X11/Xaw/LabelP.h \
- X11/Xaw/List.h \
- X11/Xaw/ListP.h \
- X11/Xaw/MenuButton.h \
- X11/Xaw/MenuButtoP.h \
- X11/Xaw/MultiSrc.h \
- X11/Xaw/MultiSrcP.h \
- X11/Xaw/MultiSink.h \
- X11/Xaw/MultiSinkP.h \
- X11/Xaw/Paned.h \
- X11/Xaw/PanedP.h \
- X11/Xaw/Panner.h \
- X11/Xaw/PannerP.h \
- X11/Xaw/Porthole.h \
- X11/Xaw/PortholeP.h \
- X11/Xaw/Repeater.h \
- X11/Xaw/RepeaterP.h \
- X11/Xaw/Reports.h \
- X11/Xaw/Scrollbar.h \
- X11/Xaw/ScrollbarP.h \
- X11/Xaw/Simple.h \
- X11/Xaw/SimpleP.h \
- X11/Xaw/SimpleMenu.h \
- X11/Xaw/SimpleMenP.h \
- X11/Xaw/Sme.h \
- X11/Xaw/SmeP.h \
- X11/Xaw/SmeBSB.h \
- X11/Xaw/SmeBSBP.h \
- X11/Xaw/SmeLine.h \
- X11/Xaw/SmeLineP.h \
- X11/Xaw/StripChart.h \
- X11/Xaw/StripCharP.h \
- X11/Xaw/Template.c \
- X11/Xaw/Template.h \
- X11/Xaw/TemplateP.h \
- X11/Xaw/Text.h \
- X11/Xaw/TextP.h \
- X11/Xaw/TextSink.h \
- X11/Xaw/TextSinkP.h \
- X11/Xaw/TextSrc.h \
- X11/Xaw/TextSrcP.h \
- X11/Xaw/Tip.h \
- X11/Xaw/TipP.h \
- X11/Xaw/Toggle.h \
- X11/Xaw/ToggleP.h \
- X11/Xaw/Tree.h \
- X11/Xaw/TreeP.h \
- X11/Xaw/VendorEP.h \
- X11/Xaw/Viewport.h \
- X11/Xaw/ViewportP.h \
- X11/Xaw/XawImP.h \
- X11/Xaw/XawInit.h
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu include/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: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-xawincludeHEADERS: $(xawinclude_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(xawincludedir)" || $(MKDIR_P) "$(DESTDIR)$(xawincludedir)"
- @list='$(xawinclude_HEADERS)'; test -n "$(xawincludedir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(xawincludedir)'"; \
- $(INSTALL_HEADER) $$files "$(DESTDIR)$(xawincludedir)" || exit $$?; \
- done
-
-uninstall-xawincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(xawinclude_HEADERS)'; test -n "$(xawincludedir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(xawincludedir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(xawincludedir)" && rm -f $$files
-
-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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- 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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- 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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__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)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$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 $(HEADERS)
-installdirs:
- for dir in "$(DESTDIR)$(xawincludedir)"; 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:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-xawincludeHEADERS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-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 mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-xawincludeHEADERS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool ctags distclean distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip \
- install-xawincludeHEADERS installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
- ps ps-am tags uninstall uninstall-am \
- uninstall-xawincludeHEADERS
-
-
-# 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/libXaw/include/X11/Xaw/AllWidgets.h b/libXaw/include/X11/Xaw/AllWidgets.h
index 0200ac4cc..4c81cc0ce 100644
--- a/libXaw/include/X11/Xaw/AllWidgets.h
+++ b/libXaw/include/X11/Xaw/AllWidgets.h
@@ -1,38 +1,37 @@
-/*
- * $Xorg: AllWidgets.h,v 1.5 2001/02/09 02:03:42 xorgcvs Exp $
- *
-Copyright 1990, 1998 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.
- */
-
-#ifndef _XawAllWidgets_h
-#define _XawAllWidgets_h
-
-#include <X11/Xmu/WidgetNode.h>
-
-/*
- * This file matches the generated AllWidgets.c
- */
-extern XmuWidgetNode XawWidgetArray[];
-extern int XawWidgetCount;
-
-#endif /* _XawAllWidgets_h */
+/*
+ *
+Copyright 1990, 1998 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.
+ */
+
+#ifndef _XawAllWidgets_h
+#define _XawAllWidgets_h
+
+#include <X11/Xmu/WidgetNode.h>
+
+/*
+ * This file matches the generated AllWidgets.c
+ */
+extern XmuWidgetNode XawWidgetArray[];
+extern int XawWidgetCount;
+
+#endif /* _XawAllWidgets_h */
diff --git a/libXaw/include/X11/Xaw/AsciiSink.h b/libXaw/include/X11/Xaw/AsciiSink.h
index 234927493..e60056bc9 100644
--- a/libXaw/include/X11/Xaw/AsciiSink.h
+++ b/libXaw/include/X11/Xaw/AsciiSink.h
@@ -1,82 +1,77 @@
-/*
- * $Xorg: AsciiSink.h,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $
- */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/AsciiSink.h,v 1.5 2001/01/17 19:42:25 dawes Exp $ */
-
-#ifndef _XawAsciiSink_h
-#define _XawAsciiSink_h
-
-/*
- * AsciiSink Object
- */
-
-#include <X11/Xaw/TextSink.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- echo Output Boolean True
- displayNonprinting Output Boolean True
-
-*/
-
-#define XtCOutput "Output"
-
-#define XtNdisplayNonprinting "displayNonprinting"
-#define XtNecho "echo"
-
-/* Class record constants */
-extern WidgetClass asciiSinkObjectClass;
-
-typedef struct _AsciiSinkClassRec *AsciiSinkObjectClass;
-typedef struct _AsciiSinkRec *AsciiSinkObject;
-
-#endif /* _XawAsciiSink_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawAsciiSink_h
+#define _XawAsciiSink_h
+
+/*
+ * AsciiSink Object
+ */
+
+#include <X11/Xaw/TextSink.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ echo Output Boolean True
+ displayNonprinting Output Boolean True
+
+*/
+
+#define XtCOutput "Output"
+
+#define XtNdisplayNonprinting "displayNonprinting"
+#define XtNecho "echo"
+
+/* Class record constants */
+extern WidgetClass asciiSinkObjectClass;
+
+typedef struct _AsciiSinkClassRec *AsciiSinkObjectClass;
+typedef struct _AsciiSinkRec *AsciiSinkObject;
+
+#endif /* _XawAsciiSink_h */
diff --git a/libXaw/include/X11/Xaw/AsciiSinkP.h b/libXaw/include/X11/Xaw/AsciiSinkP.h
index b160092f3..f2256db77 100644
--- a/libXaw/include/X11/Xaw/AsciiSinkP.h
+++ b/libXaw/include/X11/Xaw/AsciiSinkP.h
@@ -1,101 +1,95 @@
-/*
-* $Xorg: AsciiSinkP.h,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/AsciiSinkP.h,v 1.9 2001/01/17 19:42:25 dawes Exp $ */
-
-#ifndef _XawAsciiSinkP_h
-#define _XawAsciiSinkP_h
-
-/*
- * AsciiSink Object Private Data
- */
-#include <X11/Xaw/TextSinkP.h>
-#include <X11/Xaw/AsciiSink.h>
-
-/* New fields for the AsciiSink object class record */
-typedef struct _AsciiSinkClassPart {
- XtPointer extension;
-} AsciiSinkClassPart;
-
-/* Full class record declaration */
-typedef struct _AsciiSinkClassRec {
- ObjectClassPart object_class;
- TextSinkClassPart text_sink_class;
- AsciiSinkClassPart ascii_sink_class;
-} AsciiSinkClassRec;
-
-extern AsciiSinkClassRec asciiSinkClassRec;
-
-/* New fields for the AsciiSink object record */
-typedef struct {
- /* resources */
- XFontStruct *font; /* Font to draw in. */
- Boolean echo;
- Boolean display_nonprinting;
-
- /* private */
- GC normgc, invgc, xorgc;
- XawTextPosition cursor_position;
- XawTextInsertState laststate;
- short cursor_x, cursor_y; /* Cursor Location. */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} AsciiSinkPart;
-
-/* Full instance record declaration */
-typedef struct _AsciiSinkRec {
- ObjectPart object;
- TextSinkPart text_sink;
- AsciiSinkPart ascii_sink;
-} AsciiSinkRec;
-
-#endif /* _XawAsciiSinkP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawAsciiSinkP_h
+#define _XawAsciiSinkP_h
+
+/*
+ * AsciiSink Object Private Data
+ */
+#include <X11/Xaw/TextSinkP.h>
+#include <X11/Xaw/AsciiSink.h>
+
+/* New fields for the AsciiSink object class record */
+typedef struct _AsciiSinkClassPart {
+ XtPointer extension;
+} AsciiSinkClassPart;
+
+/* Full class record declaration */
+typedef struct _AsciiSinkClassRec {
+ ObjectClassPart object_class;
+ TextSinkClassPart text_sink_class;
+ AsciiSinkClassPart ascii_sink_class;
+} AsciiSinkClassRec;
+
+extern AsciiSinkClassRec asciiSinkClassRec;
+
+/* New fields for the AsciiSink object record */
+typedef struct {
+ /* resources */
+ XFontStruct *font; /* Font to draw in. */
+ Boolean echo;
+ Boolean display_nonprinting;
+
+ /* private */
+ GC normgc, invgc, xorgc;
+ XawTextPosition cursor_position;
+ XawTextInsertState laststate;
+ short cursor_x, cursor_y; /* Cursor Location. */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} AsciiSinkPart;
+
+/* Full instance record declaration */
+typedef struct _AsciiSinkRec {
+ ObjectPart object;
+ TextSinkPart text_sink;
+ AsciiSinkPart ascii_sink;
+} AsciiSinkRec;
+
+#endif /* _XawAsciiSinkP_h */
diff --git a/libXaw/include/X11/Xaw/AsciiSrc.h b/libXaw/include/X11/Xaw/AsciiSrc.h
index 8728dd9ea..eb80eebcd 100644
--- a/libXaw/include/X11/Xaw/AsciiSrc.h
+++ b/libXaw/include/X11/Xaw/AsciiSrc.h
@@ -1,175 +1,172 @@
-/* $Xorg: AsciiSrc.h,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $ */
-
-/*
-
-Copyright 1989, 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/AsciiSrc.h,v 1.7 2001/01/17 19:42:25 dawes Exp $ */
-
-
-/*
- * AsciiSrc.h - Public Header file for Ascii Text Source.
- *
- * This is the public header file for the Ascii Text Source.
- * It is intended to be used with the Text widget, the simplest way to use
- * this text source is to use the AsciiText Object.
- *
- * Date: June 29, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-
-#ifndef _XawAsciiSrc_h
-#define _XawAsciiSrc_h
-
-#include <X11/Xaw/TextSrc.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- dataCompression DataCompression Boolean True
- length Length int (internal)
- pieceSize PieceSize int BUFSIZ
- string String String NULL
- type Type XawAsciiType XawAsciiString
- useStringInPlace UseStringInPlace Boolean False
-
-*/
-
-extern WidgetClass asciiSrcObjectClass;
-
-typedef struct _AsciiSrcClassRec *AsciiSrcObjectClass;
-typedef struct _AsciiSrcRec *AsciiSrcObject;
-
-#define AsciiSourceObjectClass AsciiSrcObjectClass
-#define AsciiSourceObject AsciiSrcObject
-
-/*
- * Resource Definitions
- */
-#define XtCDataCompression "DataCompression"
-#define XtCPieceSize "PieceSize"
-#define XtCType "Type"
-#define XtCUseStringInPlace "UseStringInPlace"
-
-#define XtNdataCompression "dataCompression"
-#define XtNpieceSize "pieceSize"
-#define XtNtype "type"
-#define XtNuseStringInPlace "useStringInPlace"
-
-#define XtRAsciiType "AsciiType"
-
-#define XtEstring "string"
-#define XtEfile "file"
-
-typedef enum {
- XawAsciiFile,
- XawAsciiString
-} XawAsciiType;
-
-/*
- * Public routines
- */
-
-_XFUNCPROTOBEGIN
-
-/*
- * Function:
- * XawAsciiSourceFreeString
- *
- * Parameters:
- * w - AsciiSrc object
- *
- * Description:
- * Frees the string returned by a get values call
- * on the string when the source is of type string.
- */
-void XawAsciiSourceFreeString
-(
- Widget w
- );
-
-/*
- * Function:
- * XawAsciiSave
- *
- * Arguments:
- * w - asciiSrc Object.
- *
- * Description:
- * Saves all the pieces into a file or string as required.
- *
- * Returns:
- * True if the save was successful
- */
-Bool XawAsciiSave
-(
- Widget w
- );
-
-/*
- * Function:
- * XawAsciiSaveAsFile
- *
- * Parameters:
- * w - asciiSrc object
- * name - name of the file to save this file into
- *
- * Description:
- * Save the current buffer as a file.
- *
- * Returns:
- * True if the save was successful
- */
-Bool XawAsciiSaveAsFile
-(
- Widget w,
- _Xconst char *name
- );
-
-/*
- * Function:
- * XawAsciiSourceChanged
- *
- * Parameters:
- * w - asciiSource object
- *
- * Description:
- * Returns true if the source has changed since last saved.
- *
- * Returns:
- * a Boolean (see description)
- */
-Bool XawAsciiSourceChanged
-(
- Widget w
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawAsciiSrc_h */
+/*
+
+Copyright 1989, 1994, 1998 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.
+
+*/
+
+
+/*
+ * AsciiSrc.h - Public Header file for Ascii Text Source.
+ *
+ * This is the public header file for the Ascii Text Source.
+ * It is intended to be used with the Text widget, the simplest way to use
+ * this text source is to use the AsciiText Object.
+ *
+ * Date: June 29, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+
+#ifndef _XawAsciiSrc_h
+#define _XawAsciiSrc_h
+
+#include <X11/Xaw/TextSrc.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ dataCompression DataCompression Boolean True
+ length Length int (internal)
+ pieceSize PieceSize int BUFSIZ
+ string String String NULL
+ type Type XawAsciiType XawAsciiString
+ useStringInPlace UseStringInPlace Boolean False
+
+*/
+
+extern WidgetClass asciiSrcObjectClass;
+
+typedef struct _AsciiSrcClassRec *AsciiSrcObjectClass;
+typedef struct _AsciiSrcRec *AsciiSrcObject;
+
+#define AsciiSourceObjectClass AsciiSrcObjectClass
+#define AsciiSourceObject AsciiSrcObject
+
+/*
+ * Resource Definitions
+ */
+#define XtCDataCompression "DataCompression"
+#define XtCPieceSize "PieceSize"
+#define XtCType "Type"
+#define XtCUseStringInPlace "UseStringInPlace"
+
+#define XtNdataCompression "dataCompression"
+#define XtNpieceSize "pieceSize"
+#define XtNtype "type"
+#define XtNuseStringInPlace "useStringInPlace"
+
+#define XtRAsciiType "AsciiType"
+
+#define XtEstring "string"
+#define XtEfile "file"
+
+typedef enum {
+ XawAsciiFile,
+ XawAsciiString
+} XawAsciiType;
+
+/*
+ * Public routines
+ */
+
+_XFUNCPROTOBEGIN
+
+/*
+ * Function:
+ * XawAsciiSourceFreeString
+ *
+ * Parameters:
+ * w - AsciiSrc object
+ *
+ * Description:
+ * Frees the string returned by a get values call
+ * on the string when the source is of type string.
+ */
+void XawAsciiSourceFreeString
+(
+ Widget w
+ );
+
+/*
+ * Function:
+ * XawAsciiSave
+ *
+ * Arguments:
+ * w - asciiSrc Object.
+ *
+ * Description:
+ * Saves all the pieces into a file or string as required.
+ *
+ * Returns:
+ * True if the save was successful
+ */
+Bool XawAsciiSave
+(
+ Widget w
+ );
+
+/*
+ * Function:
+ * XawAsciiSaveAsFile
+ *
+ * Parameters:
+ * w - asciiSrc object
+ * name - name of the file to save this file into
+ *
+ * Description:
+ * Save the current buffer as a file.
+ *
+ * Returns:
+ * True if the save was successful
+ */
+Bool XawAsciiSaveAsFile
+(
+ Widget w,
+ _Xconst char *name
+ );
+
+/*
+ * Function:
+ * XawAsciiSourceChanged
+ *
+ * Parameters:
+ * w - asciiSource object
+ *
+ * Description:
+ * Returns true if the source has changed since last saved.
+ *
+ * Returns:
+ * a Boolean (see description)
+ */
+Bool XawAsciiSourceChanged
+(
+ Widget w
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawAsciiSrc_h */
diff --git a/libXaw/include/X11/Xaw/AsciiSrcP.h b/libXaw/include/X11/Xaw/AsciiSrcP.h
index 22d30082a..910e42ebb 100644
--- a/libXaw/include/X11/Xaw/AsciiSrcP.h
+++ b/libXaw/include/X11/Xaw/AsciiSrcP.h
@@ -1,145 +1,139 @@
-/*
-* $Xorg: AsciiSrcP.h,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/AsciiSrcP.h,v 1.8 2001/01/17 19:42:25 dawes Exp $ */
-
-/*
- * AsciiSrcP.h - Private Header for Ascii Text Source.
- *
- * This is the private header file for the Ascii Text Source.
- * It is intended to be used with the Text widget, the simplest way to use
- * this text source is to use the AsciiText Object.
- *
- * Date: June 29, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _XawAsciiSrcP_h
-#define _XawAsciiSrcP_h
-
-#include <X11/Xaw/TextSrcP.h>
-#include <X11/Xaw/AsciiSrc.h>
-
-#ifdef L_tmpnam
-#define TMPSIZ L_tmpnam
-#else
-#ifdef PATH_MAX
-#define TMPSIZ PATH_MAX
-#else
-#define TMPSIZ 1024 /* bytes to allocate for tmpnam */
-#endif
-#endif
-
-typedef struct _Piece { /* Piece of the text file of BUFSIZ allocated
- characters */
- char *text; /* The text in this buffer */
- XawTextPosition used; /* The number of characters of this buffer
- that have been used */
- struct _Piece *prev, *next; /* linked list pointers */
-} Piece;
-
-typedef struct _AsciiSrcClassPart {
- XtPointer extension;
-} AsciiSrcClassPart;
-
-/* Full class record */
-typedef struct _AsciiSrcClassRec {
- ObjectClassPart object_class;
- TextSrcClassPart text_src_class;
- AsciiSrcClassPart ascii_src_class;
-} AsciiSrcClassRec;
-
-extern AsciiSrcClassRec asciiSrcClassRec;
-
-/* New fields for the AsciiSrc object */
-typedef struct _AsciiSrcPart {
- /* resources */
- char *string; /* either the string, or the
- file name, depending upon the type */
- XawAsciiType type; /* either string or disk */
- XawTextPosition piece_size; /* Size of text buffer for each piece */
- Boolean data_compression; /* compress to minimum memory automatically
- on save? */
-#ifdef OLDXAW
- XtCallbackList callback;
-#endif
- Boolean use_string_in_place;/* Use the string passed in place */
- int ascii_length; /* length field for ascii string emulation */
-
-#ifdef ASCII_DISK
- String filename; /* name of file for Compatability */
-#endif /* ASCII_DISK */
-
- /* private */
- Boolean is_tempfile; /* Is this a temporary file? */
-#ifdef OLDXAW
- Boolean changes;
-#endif
- Boolean allocated_string; /* Have I allocated the
- string in ascii_src->string? */
- XawTextPosition length; /* length of file */
- Piece *first_piece; /* first piece of the text */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} AsciiSrcPart;
-
-/* instance record */
-typedef struct _AsciiSrcRec {
- ObjectPart object;
- TextSrcPart text_src;
- AsciiSrcPart ascii_src;
-} AsciiSrcRec;
-
-#endif /* _XawAsciiSrcP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * AsciiSrcP.h - Private Header for Ascii Text Source.
+ *
+ * This is the private header file for the Ascii Text Source.
+ * It is intended to be used with the Text widget, the simplest way to use
+ * this text source is to use the AsciiText Object.
+ *
+ * Date: June 29, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _XawAsciiSrcP_h
+#define _XawAsciiSrcP_h
+
+#include <X11/Xaw/TextSrcP.h>
+#include <X11/Xaw/AsciiSrc.h>
+
+#ifdef L_tmpnam
+#define TMPSIZ L_tmpnam
+#else
+#ifdef PATH_MAX
+#define TMPSIZ PATH_MAX
+#else
+#define TMPSIZ 1024 /* bytes to allocate for tmpnam */
+#endif
+#endif
+
+typedef struct _Piece { /* Piece of the text file of BUFSIZ allocated
+ characters */
+ char *text; /* The text in this buffer */
+ XawTextPosition used; /* The number of characters of this buffer
+ that have been used */
+ struct _Piece *prev, *next; /* linked list pointers */
+} Piece;
+
+typedef struct _AsciiSrcClassPart {
+ XtPointer extension;
+} AsciiSrcClassPart;
+
+/* Full class record */
+typedef struct _AsciiSrcClassRec {
+ ObjectClassPart object_class;
+ TextSrcClassPart text_src_class;
+ AsciiSrcClassPart ascii_src_class;
+} AsciiSrcClassRec;
+
+extern AsciiSrcClassRec asciiSrcClassRec;
+
+/* New fields for the AsciiSrc object */
+typedef struct _AsciiSrcPart {
+ /* resources */
+ char *string; /* either the string, or the
+ file name, depending upon the type */
+ XawAsciiType type; /* either string or disk */
+ XawTextPosition piece_size; /* Size of text buffer for each piece */
+ Boolean data_compression; /* compress to minimum memory automatically
+ on save? */
+#ifdef OLDXAW
+ XtCallbackList callback;
+#endif
+ Boolean use_string_in_place;/* Use the string passed in place */
+ int ascii_length; /* length field for ascii string emulation */
+
+#ifdef ASCII_DISK
+ String filename; /* name of file for Compatability */
+#endif /* ASCII_DISK */
+
+ /* private */
+ Boolean is_tempfile; /* Is this a temporary file? */
+#ifdef OLDXAW
+ Boolean changes;
+#endif
+ Boolean allocated_string; /* Have I allocated the
+ string in ascii_src->string? */
+ XawTextPosition length; /* length of file */
+ Piece *first_piece; /* first piece of the text */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} AsciiSrcPart;
+
+/* instance record */
+typedef struct _AsciiSrcRec {
+ ObjectPart object;
+ TextSrcPart text_src;
+ AsciiSrcPart ascii_src;
+} AsciiSrcRec;
+
+#endif /* _XawAsciiSrcP_h */
diff --git a/libXaw/include/X11/Xaw/AsciiText.h b/libXaw/include/X11/Xaw/AsciiText.h
index e6b4bc863..a874d9778 100644
--- a/libXaw/include/X11/Xaw/AsciiText.h
+++ b/libXaw/include/X11/Xaw/AsciiText.h
@@ -1,128 +1,123 @@
-/*
- * $Xorg: AsciiText.h,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $
- */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/AsciiText.h,v 1.5 2001/01/17 19:42:25 dawes Exp $ */
-
-/*
- * AsciiText.h - Public header file for AsciiText Widget
- *
- * This Widget is intended to be used as a simple front end to the
- * text widget with an ascii source and ascii sink attached to it
- *
- * Date: June 29, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-#ifndef _AsciiText_h
-#define _AsciiText_h
-
-#include <X11/Xaw/Text.h>
-#include <X11/Xaw/AsciiSrc.h>
-#include <X11/Xaw/MultiSrc.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- autoFill AutoFill Boolean False
- background Background Pixel XtDefaultBackground
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- bottomMargin Margin Position 2
- cursor Cursor Cursor xterm
- destroyCallback Callback Pointer NULL
- displayCaret Output Boolean True
- displayPosition TextPosition int 0
- editType EditType XawTextEditType XawtextRead
- font Font XFontStruct* Fixed
- foreground Foreground Pixel Black
- height Height Dimension font height
- insertPosition TextPosition int 0
- international International Boolean false
- leftMargin Margin Position 2
- mappedWhenManaged MappedWhenManaged Boolean True
- resize Resize XawTextResizeMode XawtextResizeNever
- rightMargin Margin Position 4
- scrollHorizontal Scroll XawTextScrollMode XawtextScrollNever
- scrollVertical Scroll XawTextScrollMode XawtextScrollNever
- selectTypes SelectTypes Pointer pos/word/line/par/all
- selection Selection Pointer (empty selection)
- sensitive Sensitive Boolean True
- sink TextSink Widget (none)
- source TextSource Widget (none)
- string String String NULL
- topMargin Margin Position 2
- width Width Dimension 100
- wrap Wrap XawTextWrapMode XawtextWrapNever
- x Position Position 0
- y Position Position 0
-
- (see also *Src.h and *Sink.h)
-*/
-
-typedef struct _AsciiTextClassRec *AsciiTextWidgetClass;
-typedef struct _AsciiRec *AsciiWidget;
-
-extern WidgetClass asciiTextWidgetClass;
-
-/*
- * Disk and String Emulation Info
- */
-#ifdef ASCII_STRING
-extern WidgetClass asciiStringWidgetClass;
-#endif
-
-#ifdef ASCII_DISK
-extern WidgetClass asciiDiskWidgetClass;
-#endif
-
-#endif /* _AsciiText_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * AsciiText.h - Public header file for AsciiText Widget
+ *
+ * This Widget is intended to be used as a simple front end to the
+ * text widget with an ascii source and ascii sink attached to it
+ *
+ * Date: June 29, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+#ifndef _AsciiText_h
+#define _AsciiText_h
+
+#include <X11/Xaw/Text.h>
+#include <X11/Xaw/AsciiSrc.h>
+#include <X11/Xaw/MultiSrc.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ autoFill AutoFill Boolean False
+ background Background Pixel XtDefaultBackground
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ bottomMargin Margin Position 2
+ cursor Cursor Cursor xterm
+ destroyCallback Callback Pointer NULL
+ displayCaret Output Boolean True
+ displayPosition TextPosition int 0
+ editType EditType XawTextEditType XawtextRead
+ font Font XFontStruct* Fixed
+ foreground Foreground Pixel Black
+ height Height Dimension font height
+ insertPosition TextPosition int 0
+ international International Boolean false
+ leftMargin Margin Position 2
+ mappedWhenManaged MappedWhenManaged Boolean True
+ resize Resize XawTextResizeMode XawtextResizeNever
+ rightMargin Margin Position 4
+ scrollHorizontal Scroll XawTextScrollMode XawtextScrollNever
+ scrollVertical Scroll XawTextScrollMode XawtextScrollNever
+ selectTypes SelectTypes Pointer pos/word/line/par/all
+ selection Selection Pointer (empty selection)
+ sensitive Sensitive Boolean True
+ sink TextSink Widget (none)
+ source TextSource Widget (none)
+ string String String NULL
+ topMargin Margin Position 2
+ width Width Dimension 100
+ wrap Wrap XawTextWrapMode XawtextWrapNever
+ x Position Position 0
+ y Position Position 0
+
+ (see also *Src.h and *Sink.h)
+*/
+
+typedef struct _AsciiTextClassRec *AsciiTextWidgetClass;
+typedef struct _AsciiRec *AsciiWidget;
+
+extern WidgetClass asciiTextWidgetClass;
+
+/*
+ * Disk and String Emulation Info
+ */
+#ifdef ASCII_STRING
+extern WidgetClass asciiStringWidgetClass;
+#endif
+
+#ifdef ASCII_DISK
+extern WidgetClass asciiDiskWidgetClass;
+#endif
+
+#endif /* _AsciiText_h */
diff --git a/libXaw/include/X11/Xaw/AsciiTextP.h b/libXaw/include/X11/Xaw/AsciiTextP.h
index 25e3eeeab..91efd1607 100644
--- a/libXaw/include/X11/Xaw/AsciiTextP.h
+++ b/libXaw/include/X11/Xaw/AsciiTextP.h
@@ -1,169 +1,164 @@
-/*
- * $Xorg: AsciiTextP.h,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $
- */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/AsciiTextP.h,v 1.8 2001/01/17 19:42:25 dawes Exp $ */
-
-/*
- * AsciiText.c - Private header file for AsciiText Widget.
- *
- * This Widget is intended to be used as a simple front end to the
- * text widget with an ascii source and ascii sink attached to it.
- *
- * Date: June 29, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _AsciiTextP_h
-#define _AsciiTextP_h
-
-#include <X11/Xaw/TextP.h>
-#include <X11/Xaw/AsciiText.h>
-#include <X11/Xaw/AsciiSrc.h>
-#include <X11/Xaw/MultiSrc.h>
-
-typedef struct {
- XtPointer extension;
-} AsciiClassPart;
-
-typedef struct _AsciiTextClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- TextClassPart text_class;
- AsciiClassPart ascii_class;
-} AsciiTextClassRec;
-
-extern AsciiTextClassRec asciiTextClassRec;
-
-typedef struct {
- int resource;
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} AsciiPart;
-
-typedef struct _AsciiRec {
- CorePart core;
- SimplePart simple;
- TextPart text;
- AsciiPart ascii;
-} AsciiRec;
-
-/*
- * Ascii String Emulation widget
- */
-#ifdef ASCII_STRING
-typedef struct {
- XtPointer extension;
-} AsciiStringClassPart;
-
-typedef struct _AsciiStringClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- TextClassPart text_class;
- AsciiClassPart ascii_class;
- AsciiStringClassPart string_class;
-} AsciiStringClassRec;
-
-extern AsciiStringClassRec asciiStringClassRec;
-
-typedef struct {
- int resource;
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} AsciiStringPart;
-
-typedef struct _AsciiStringRec {
- CorePart core;
- SimplePart simple;
- TextPart text;
- AsciiPart ascii;
- AsciiStringPart ascii_str;
-} AsciiStringRec;
-#endif /* ASCII_STRING */
-
-#ifdef ASCII_DISK
-/*
- * Ascii Disk Emulation widget
- */
-typedef struct {
- XtPointer extension;
-} AsciiDiskClassPart;
-
-typedef struct _AsciiDiskClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- TextClassPart text_class;
- AsciiClassPart ascii_class;
- AsciiDiskClassPart disk_class;
-} AsciiDiskClassRec;
-
-extern AsciiDiskClassRec asciiDiskClassRec;
-
-typedef struct {
- char resource;
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} AsciiDiskPart;
-
-typedef struct _AsciiDiskRec {
- CorePart core;
- SimplePart simple;
- TextPart text;
- AsciiPart ascii;
- AsciiDiskPart ascii_disk;
-} AsciiDiskRec;
-#endif /* ASCII_DISK */
-
-#endif /* _AsciiTextP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * AsciiText.c - Private header file for AsciiText Widget.
+ *
+ * This Widget is intended to be used as a simple front end to the
+ * text widget with an ascii source and ascii sink attached to it.
+ *
+ * Date: June 29, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _AsciiTextP_h
+#define _AsciiTextP_h
+
+#include <X11/Xaw/TextP.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/AsciiSrc.h>
+#include <X11/Xaw/MultiSrc.h>
+
+typedef struct {
+ XtPointer extension;
+} AsciiClassPart;
+
+typedef struct _AsciiTextClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ TextClassPart text_class;
+ AsciiClassPart ascii_class;
+} AsciiTextClassRec;
+
+extern AsciiTextClassRec asciiTextClassRec;
+
+typedef struct {
+ int resource;
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} AsciiPart;
+
+typedef struct _AsciiRec {
+ CorePart core;
+ SimplePart simple;
+ TextPart text;
+ AsciiPart ascii;
+} AsciiRec;
+
+/*
+ * Ascii String Emulation widget
+ */
+#ifdef ASCII_STRING
+typedef struct {
+ XtPointer extension;
+} AsciiStringClassPart;
+
+typedef struct _AsciiStringClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ TextClassPart text_class;
+ AsciiClassPart ascii_class;
+ AsciiStringClassPart string_class;
+} AsciiStringClassRec;
+
+extern AsciiStringClassRec asciiStringClassRec;
+
+typedef struct {
+ int resource;
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} AsciiStringPart;
+
+typedef struct _AsciiStringRec {
+ CorePart core;
+ SimplePart simple;
+ TextPart text;
+ AsciiPart ascii;
+ AsciiStringPart ascii_str;
+} AsciiStringRec;
+#endif /* ASCII_STRING */
+
+#ifdef ASCII_DISK
+/*
+ * Ascii Disk Emulation widget
+ */
+typedef struct {
+ XtPointer extension;
+} AsciiDiskClassPart;
+
+typedef struct _AsciiDiskClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ TextClassPart text_class;
+ AsciiClassPart ascii_class;
+ AsciiDiskClassPart disk_class;
+} AsciiDiskClassRec;
+
+extern AsciiDiskClassRec asciiDiskClassRec;
+
+typedef struct {
+ char resource;
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} AsciiDiskPart;
+
+typedef struct _AsciiDiskRec {
+ CorePart core;
+ SimplePart simple;
+ TextPart text;
+ AsciiPart ascii;
+ AsciiDiskPart ascii_disk;
+} AsciiDiskRec;
+#endif /* ASCII_DISK */
+
+#endif /* _AsciiTextP_h */
diff --git a/libXaw/include/X11/Xaw/Box.h b/libXaw/include/X11/Xaw/Box.h
index 17db281d6..ccf746852 100644
--- a/libXaw/include/X11/Xaw/Box.h
+++ b/libXaw/include/X11/Xaw/Box.h
@@ -1,108 +1,102 @@
-/*
-* $Xorg: Box.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Box.h,v 1.7 2001/01/17 19:42:25 dawes Exp $ */
-
-#ifndef _XawBox_h
-#define _XawBox_h
-
-#include <X11/Xmu/Converters.h>
-
-/*
- * Box Widget (subclass of CompositeClass)
- */
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- destroyCallback Callback Pointer NULL
- displayList DisplayList XawDisplayList* NULL
- hSpace HSpace Dimension 4
- height Height Dimension 0
- mappedWhenManaged MappedWhenManaged Boolean True
- orientation Orientation XtOrientation vertical
- vSpace VSpace Dimension 4
- width Width Dimension 0
- x Position Position 0
- y Position Position 0
-
-*/
-
-#ifndef _XtStringDefs_h_
-#define XtNhSpace "hSpace"
-#define XtNvSpace "vSpace"
-#endif
-
-#ifndef OLDXAW
-#ifndef XawNdisplayList
-#define XawNdisplayList "displayList"
-#endif
-
-#ifndef XawCDisplayList
-#define XawCDisplayList "DisplayList"
-#endif
-
-#ifndef XawRDisplayList
-#define XawRDisplayList "XawDisplayList"
-#endif
-#endif /* OLDXAW */
-
-/* Class record constants */
-extern WidgetClass boxWidgetClass;
-
-typedef struct _BoxClassRec *BoxWidgetClass;
-typedef struct _BoxRec *BoxWidget;
-
-#endif /* _XawBox_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawBox_h
+#define _XawBox_h
+
+#include <X11/Xmu/Converters.h>
+
+/*
+ * Box Widget (subclass of CompositeClass)
+ */
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ destroyCallback Callback Pointer NULL
+ displayList DisplayList XawDisplayList* NULL
+ hSpace HSpace Dimension 4
+ height Height Dimension 0
+ mappedWhenManaged MappedWhenManaged Boolean True
+ orientation Orientation XtOrientation vertical
+ vSpace VSpace Dimension 4
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#ifndef _XtStringDefs_h_
+#define XtNhSpace "hSpace"
+#define XtNvSpace "vSpace"
+#endif
+
+#ifndef OLDXAW
+#ifndef XawNdisplayList
+#define XawNdisplayList "displayList"
+#endif
+
+#ifndef XawCDisplayList
+#define XawCDisplayList "DisplayList"
+#endif
+
+#ifndef XawRDisplayList
+#define XawRDisplayList "XawDisplayList"
+#endif
+#endif /* OLDXAW */
+
+/* Class record constants */
+extern WidgetClass boxWidgetClass;
+
+typedef struct _BoxClassRec *BoxWidgetClass;
+typedef struct _BoxRec *BoxWidget;
+
+#endif /* _XawBox_h */
diff --git a/libXaw/include/X11/Xaw/BoxP.h b/libXaw/include/X11/Xaw/BoxP.h
index a64142e7d..be230bcf8 100644
--- a/libXaw/include/X11/Xaw/BoxP.h
+++ b/libXaw/include/X11/Xaw/BoxP.h
@@ -1,103 +1,97 @@
-/*
-* $Xorg: BoxP.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/BoxP.h,v 1.10 2001/01/17 19:42:25 dawes Exp $ */
-
-#ifndef _XawBoxP_h
-#define _XawBoxP_h
-
-/*
- * Box Widget Private Data
- */
-#include <X11/Xaw/Box.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xaw/XawInit.h>
-
-/* New fields for the Box widget class record */
-typedef struct {
- XtPointer extension;
-} BoxClassPart;
-
-/* Full class record declaration */
-typedef struct _BoxClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- BoxClassPart box_class;
-} BoxClassRec;
-
-extern BoxClassRec boxClassRec;
-
-/* New fields for the Box widget record */
-typedef struct {
- /* resources */
- Dimension h_space, v_space;
- XtOrientation orientation;
-
- /* private state */
- Dimension preferred_width, preferred_height;
- Dimension last_query_width, last_query_height;
- XtGeometryMask last_query_mode;
-#ifndef OLDXAW
- XawDisplayList *display_list;
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} BoxPart;
-
-/*
- * Full instance record declaration
- */
-typedef struct _BoxRec {
- CorePart core;
- CompositePart composite;
- BoxPart box;
-} BoxRec;
-
-#endif /* _XawBoxP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawBoxP_h
+#define _XawBoxP_h
+
+/*
+ * Box Widget Private Data
+ */
+#include <X11/Xaw/Box.h>
+#include <X11/Xmu/Converters.h>
+#include <X11/Xaw/XawInit.h>
+
+/* New fields for the Box widget class record */
+typedef struct {
+ XtPointer extension;
+} BoxClassPart;
+
+/* Full class record declaration */
+typedef struct _BoxClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ BoxClassPart box_class;
+} BoxClassRec;
+
+extern BoxClassRec boxClassRec;
+
+/* New fields for the Box widget record */
+typedef struct {
+ /* resources */
+ Dimension h_space, v_space;
+ XtOrientation orientation;
+
+ /* private state */
+ Dimension preferred_width, preferred_height;
+ Dimension last_query_width, last_query_height;
+ XtGeometryMask last_query_mode;
+#ifndef OLDXAW
+ XawDisplayList *display_list;
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} BoxPart;
+
+/*
+ * Full instance record declaration
+ */
+typedef struct _BoxRec {
+ CorePart core;
+ CompositePart composite;
+ BoxPart box;
+} BoxRec;
+
+#endif /* _XawBoxP_h */
diff --git a/libXaw/include/X11/Xaw/Cardinals.h b/libXaw/include/X11/Xaw/Cardinals.h
index a8b3dfc41..1c536208e 100644
--- a/libXaw/include/X11/Xaw/Cardinals.h
+++ b/libXaw/include/X11/Xaw/Cardinals.h
@@ -1,43 +1,42 @@
-/* $Xorg: Cardinals.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-/*
-
-Copyright 1985, 1986, 1987, 1998 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.
-
-*/
-
-#ifndef _Cardinals_h
-#define _Cardinals_h
-
-#define ZERO ((Cardinal)0)
-#define ONE ((Cardinal)1)
-#define TWO ((Cardinal)2)
-#define THREE ((Cardinal)3)
-#define FOUR ((Cardinal)4)
-#define FIVE ((Cardinal)5)
-#define SIX ((Cardinal)6)
-#define SEVEN ((Cardinal)7)
-#define EIGHT ((Cardinal)8)
-#define NINE ((Cardinal)9)
-#define TEN ((Cardinal)10)
-
-#endif /* _Cardinals_h */
+/*
+
+Copyright 1985, 1986, 1987, 1998 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.
+
+*/
+
+#ifndef _Cardinals_h
+#define _Cardinals_h
+
+#define ZERO ((Cardinal)0)
+#define ONE ((Cardinal)1)
+#define TWO ((Cardinal)2)
+#define THREE ((Cardinal)3)
+#define FOUR ((Cardinal)4)
+#define FIVE ((Cardinal)5)
+#define SIX ((Cardinal)6)
+#define SEVEN ((Cardinal)7)
+#define EIGHT ((Cardinal)8)
+#define NINE ((Cardinal)9)
+#define TEN ((Cardinal)10)
+
+#endif /* _Cardinals_h */
diff --git a/libXaw/include/X11/Xaw/Command.h b/libXaw/include/X11/Xaw/Command.h
index 49eb99122..ba21a1e9c 100644
--- a/libXaw/include/X11/Xaw/Command.h
+++ b/libXaw/include/X11/Xaw/Command.h
@@ -1,119 +1,116 @@
-/* $Xorg: Command.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Command.h,v 1.5 2001/01/17 19:42:26 dawes Exp $ */
-
-#ifndef _XawCommand_h
-#define _XawCommand_h
-
-#include <X11/Xaw/Label.h>
-
-/* Command widget resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- accelerators Accelerators AcceleratorTable NULL
- ancestorSensitive AncestorSensitive Boolean True
- background Background Pixel XtDefaultBackground
- backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
- bitmap Pixmap 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 parent's depth
- destroyCallback Callback XtCallbackList NULL
- displayList DisplayList XawDisplayList* NULL
- encoding Encoding UnsignedChar XawTextEncoding8bit
- font Font XFontStruct* XtDefaultFont
- foreground Foreground Pixel XtDefaultForeground
- height Height Dimension text height
- highlightThickness Thickness Dimension 0 if shaped, else 2
- insensitiveBorder Insensitive Pixmap Gray
- internalHeight Height Dimension 2
- internalWidth Width Dimension 4
- justify Justify XtJustify XtJustifyCenter
- label Label String NULL
- leftBitmap LeftBitmap Pixmap None
- mappedWhenManaged MappedWhenManaged Boolean True
- pointerColor Foreground Pixel XtDefaultForeground
- pointerColorBackground Background Pixel XtDefaultBackground
- resize Resize Boolean True
- screen Screen Screen parent's Screen
- sensitive Sensitive Boolean True
- shapeStyle ShapeStyle ShapeStyle Rectangle
- translations Translations TranslationTable see doc or source
- width Width Dimension text width
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define XtNhighlightThickness "highlightThickness"
-
-#define XtNshapeStyle "shapeStyle"
-#define XtCShapeStyle "ShapeStyle"
-#define XtRShapeStyle "ShapeStyle"
-#define XtNcornerRoundPercent "cornerRoundPercent"
-#define XtCCornerRoundPercent "CornerRoundPercent"
-
-#define XawShapeRectangle XmuShapeRectangle
-#define XawShapeOval XmuShapeOval
-#define XawShapeEllipse XmuShapeEllipse
-#define XawShapeRoundedRectangle XmuShapeRoundedRectangle
-
-extern WidgetClass commandWidgetClass;
-
-typedef struct _CommandClassRec *CommandWidgetClass;
-typedef struct _CommandRec *CommandWidget;
-
-#endif /* _XawCommand_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawCommand_h
+#define _XawCommand_h
+
+#include <X11/Xaw/Label.h>
+
+/* Command widget resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ accelerators Accelerators AcceleratorTable NULL
+ ancestorSensitive AncestorSensitive Boolean True
+ background Background Pixel XtDefaultBackground
+ backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+ bitmap Pixmap 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 parent's depth
+ destroyCallback Callback XtCallbackList NULL
+ displayList DisplayList XawDisplayList* NULL
+ encoding Encoding UnsignedChar XawTextEncoding8bit
+ font Font XFontStruct* XtDefaultFont
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension text height
+ highlightThickness Thickness Dimension 0 if shaped, else 2
+ insensitiveBorder Insensitive Pixmap Gray
+ internalHeight Height Dimension 2
+ internalWidth Width Dimension 4
+ justify Justify XtJustify XtJustifyCenter
+ label Label String NULL
+ leftBitmap LeftBitmap Pixmap None
+ mappedWhenManaged MappedWhenManaged Boolean True
+ pointerColor Foreground Pixel XtDefaultForeground
+ pointerColorBackground Background Pixel XtDefaultBackground
+ resize Resize Boolean True
+ screen Screen Screen parent's Screen
+ sensitive Sensitive Boolean True
+ shapeStyle ShapeStyle ShapeStyle Rectangle
+ translations Translations TranslationTable see doc or source
+ width Width Dimension text width
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define XtNhighlightThickness "highlightThickness"
+
+#define XtNshapeStyle "shapeStyle"
+#define XtCShapeStyle "ShapeStyle"
+#define XtRShapeStyle "ShapeStyle"
+#define XtNcornerRoundPercent "cornerRoundPercent"
+#define XtCCornerRoundPercent "CornerRoundPercent"
+
+#define XawShapeRectangle XmuShapeRectangle
+#define XawShapeOval XmuShapeOval
+#define XawShapeEllipse XmuShapeEllipse
+#define XawShapeRoundedRectangle XmuShapeRoundedRectangle
+
+extern WidgetClass commandWidgetClass;
+
+typedef struct _CommandClassRec *CommandWidgetClass;
+typedef struct _CommandRec *CommandWidget;
+
+#endif /* _XawCommand_h */
diff --git a/libXaw/include/X11/Xaw/CommandP.h b/libXaw/include/X11/Xaw/CommandP.h
index bc639f825..6e6e1d42b 100644
--- a/libXaw/include/X11/Xaw/CommandP.h
+++ b/libXaw/include/X11/Xaw/CommandP.h
@@ -1,117 +1,111 @@
-/*
-* $Xorg: CommandP.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/CommandP.h,v 1.7 2001/01/17 19:42:26 dawes Exp $ */
-
-#ifndef _XawCommandP_h
-#define _XawCommandP_h
-
-/*
- * Command Widget Private Data
- */
-#include <X11/Xaw/Command.h>
-#include <X11/Xaw/LabelP.h>
-
-typedef enum {
- HighlightNone, /* Do not highlight */
- HighlightWhenUnset, /* Highlight only when unset, this is
- to preserve current command widget
- functionality */
- HighlightAlways /* Always highlight, lets the toggle widget
- and other subclasses do the right thing */
-} XtCommandHighlight;
-
-/* New fields for the Command widget class record */
-typedef struct _CommandClass {
- XtPointer extension;
-} CommandClassPart;
-
-/* Full class record declaration */
-typedef struct _CommandClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- LabelClassPart label_class;
- CommandClassPart command_class;
-} CommandClassRec;
-
-extern CommandClassRec commandClassRec;
-
-/* New fields for the Command widget record */
-typedef struct {
- /* resources */
- Dimension highlight_thickness;
- XtCallbackList callbacks;
-
- /* private state */
- Pixmap gray_pixmap;
- GC normal_GC;
- GC inverse_GC;
- Boolean set;
- XtCommandHighlight highlighted;
-
- /* more resources */
- int shape_style;
- Dimension corner_round;
-
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} CommandPart;
-
-/* Full widget declaration */
-typedef struct _CommandRec {
- CorePart core;
- SimplePart simple;
- LabelPart label;
- CommandPart command;
-} CommandRec;
-
-#endif /* _XawCommandP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawCommandP_h
+#define _XawCommandP_h
+
+/*
+ * Command Widget Private Data
+ */
+#include <X11/Xaw/Command.h>
+#include <X11/Xaw/LabelP.h>
+
+typedef enum {
+ HighlightNone, /* Do not highlight */
+ HighlightWhenUnset, /* Highlight only when unset, this is
+ to preserve current command widget
+ functionality */
+ HighlightAlways /* Always highlight, lets the toggle widget
+ and other subclasses do the right thing */
+} XtCommandHighlight;
+
+/* New fields for the Command widget class record */
+typedef struct _CommandClass {
+ XtPointer extension;
+} CommandClassPart;
+
+/* Full class record declaration */
+typedef struct _CommandClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ LabelClassPart label_class;
+ CommandClassPart command_class;
+} CommandClassRec;
+
+extern CommandClassRec commandClassRec;
+
+/* New fields for the Command widget record */
+typedef struct {
+ /* resources */
+ Dimension highlight_thickness;
+ XtCallbackList callbacks;
+
+ /* private state */
+ Pixmap gray_pixmap;
+ GC normal_GC;
+ GC inverse_GC;
+ Boolean set;
+ XtCommandHighlight highlighted;
+
+ /* more resources */
+ int shape_style;
+ Dimension corner_round;
+
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} CommandPart;
+
+/* Full widget declaration */
+typedef struct _CommandRec {
+ CorePart core;
+ SimplePart simple;
+ LabelPart label;
+ CommandPart command;
+} CommandRec;
+
+#endif /* _XawCommandP_h */
diff --git a/libXaw/include/X11/Xaw/Dialog.h b/libXaw/include/X11/Xaw/Dialog.h
index 96fd36d38..2d84c0d4d 100644
--- a/libXaw/include/X11/Xaw/Dialog.h
+++ b/libXaw/include/X11/Xaw/Dialog.h
@@ -1,101 +1,98 @@
-/* $Xorg: Dialog.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Dialog.h,v 1.5 2001/01/17 19:42:26 dawes Exp $ */
-
-#ifndef _XawDialog_h
-#define _XawDialog_h
-
-#include <X11/Xaw/Form.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- borderColor BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- destroyCallback Callback Pointer NULL
- height Height Dimension computed at create
- icon Icon Pixmap 0
- label Label String NULL
- mappedWhenManaged MappedWhenManaged Boolean True
- sensitive Sensitive Boolean True
- value Value String NULL
- width Width Dimension computed at create
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define XtCIcon "Icon"
-#define XtNicon "icon"
-
-typedef struct _DialogClassRec *DialogWidgetClass;
-typedef struct _DialogRec *DialogWidget;
-
-extern WidgetClass dialogWidgetClass;
-
-_XFUNCPROTOBEGIN
-
-void XawDialogAddButton
-(
- Widget dialog,
- _Xconst char *name,
- XtCallbackProc function,
- XtPointer client_data
- );
-
-char *XawDialogGetValueString
-(
- Widget w
-);
-
-_XFUNCPROTOEND
-
-#endif /* _XawDialog_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawDialog_h
+#define _XawDialog_h
+
+#include <X11/Xaw/Form.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ borderColor BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ destroyCallback Callback Pointer NULL
+ height Height Dimension computed at create
+ icon Icon Pixmap 0
+ label Label String NULL
+ mappedWhenManaged MappedWhenManaged Boolean True
+ sensitive Sensitive Boolean True
+ value Value String NULL
+ width Width Dimension computed at create
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define XtCIcon "Icon"
+#define XtNicon "icon"
+
+typedef struct _DialogClassRec *DialogWidgetClass;
+typedef struct _DialogRec *DialogWidget;
+
+extern WidgetClass dialogWidgetClass;
+
+_XFUNCPROTOBEGIN
+
+void XawDialogAddButton
+(
+ Widget dialog,
+ _Xconst char *name,
+ XtCallbackProc function,
+ XtPointer client_data
+ );
+
+char *XawDialogGetValueString
+(
+ Widget w
+);
+
+_XFUNCPROTOEND
+
+#endif /* _XawDialog_h */
diff --git a/libXaw/include/X11/Xaw/DialogP.h b/libXaw/include/X11/Xaw/DialogP.h
index fcc2240d7..d6d55d3b6 100644
--- a/libXaw/include/X11/Xaw/DialogP.h
+++ b/libXaw/include/X11/Xaw/DialogP.h
@@ -1,104 +1,100 @@
-/* $Xorg: DialogP.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/DialogP.h,v 1.8 2001/01/17 19:42:26 dawes Exp $ */
-
-#ifndef _DialogP_h
-#define _DialogP_h
-
-#include <X11/Xaw/Dialog.h>
-#include <X11/Xaw/FormP.h>
-
-typedef struct {
- XtPointer extension;
-} DialogClassPart;
-
-typedef struct _DialogClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ConstraintClassPart constraint_class;
- FormClassPart form_class;
- DialogClassPart dialog_class;
-} DialogClassRec;
-
-extern DialogClassRec dialogClassRec;
-
-typedef struct _DialogPart {
- /* resources */
- String label; /* description of the dialog */
- String value; /* for the user response */
- Pixmap icon; /* icon bitmap */
-
- /* private */
- Widget iconW; /* widget to display the icon */
- Widget labelW; /* widget to display description */
- Widget valueW; /* user response TextWidget */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} DialogPart;
-
-typedef struct _DialogRec {
- CorePart core;
- CompositePart composite;
- ConstraintPart constraint;
- FormPart form;
- DialogPart dialog;
-} DialogRec;
-
-typedef struct {
- XtPointer extension;
-} DialogConstraintsPart;
-
-typedef struct _DialogConstraintsRec {
- FormConstraintsPart form;
- DialogConstraintsPart dialog;
-} DialogConstraintsRec, *DialogConstraints;
-
-#endif /* _DialogP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _DialogP_h
+#define _DialogP_h
+
+#include <X11/Xaw/Dialog.h>
+#include <X11/Xaw/FormP.h>
+
+typedef struct {
+ XtPointer extension;
+} DialogClassPart;
+
+typedef struct _DialogClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ConstraintClassPart constraint_class;
+ FormClassPart form_class;
+ DialogClassPart dialog_class;
+} DialogClassRec;
+
+extern DialogClassRec dialogClassRec;
+
+typedef struct _DialogPart {
+ /* resources */
+ String label; /* description of the dialog */
+ String value; /* for the user response */
+ Pixmap icon; /* icon bitmap */
+
+ /* private */
+ Widget iconW; /* widget to display the icon */
+ Widget labelW; /* widget to display description */
+ Widget valueW; /* user response TextWidget */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} DialogPart;
+
+typedef struct _DialogRec {
+ CorePart core;
+ CompositePart composite;
+ ConstraintPart constraint;
+ FormPart form;
+ DialogPart dialog;
+} DialogRec;
+
+typedef struct {
+ XtPointer extension;
+} DialogConstraintsPart;
+
+typedef struct _DialogConstraintsRec {
+ FormConstraintsPart form;
+ DialogConstraintsPart dialog;
+} DialogConstraintsRec, *DialogConstraints;
+
+#endif /* _DialogP_h */
diff --git a/libXaw/include/X11/Xaw/Form.h b/libXaw/include/X11/Xaw/Form.h
index 9eb1ad7d6..a290cb5dc 100644
--- a/libXaw/include/X11/Xaw/Form.h
+++ b/libXaw/include/X11/Xaw/Form.h
@@ -1,171 +1,167 @@
-/* $Xorg: Form.h,v 1.5 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Form.h,v 1.8 2001/01/17 19:42:26 dawes Exp $ */
-
-#ifndef _XawForm_h
-#define _XawForm_h
-
-#include <X11/Intrinsic.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- defaultDistance Thickness int 4
- destroyCallback Callback Pointer NULL
- displayList DisplayList XawDisplayList* NULL
- height Height Dimension computed at realize
- mappedWhenManaged MappedWhenManaged Boolean True
- sensitive Sensitive Boolean True
- width Width Dimension computed at realize
- x Position Position 0
- y Position Position 0
-
-*/
-
-/* Constraint parameters:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- bottom Edge XtEdgeType XtRubber
- fromHoriz Widget Widget (left edge of form)
- fromVert Widget Widget (top of form)
- horizDistance Thickness int defaultDistance
- left Edge XtEdgeType XtRubber
- resizable Boolean Boolean False
- right Edge XtEdgeType XtRubber
- top Edge XtEdgeType XtRubber
- vertDistance Thickness int defaultDistance
-
-*/
-
-
-#ifndef _XtStringDefs_h_
-#define XtNtop "top"
-#define XtRWidget "Widget"
-#endif
-
-#define XtNdefaultDistance "defaultDistance"
-#define XtNbottom "bottom"
-#define XtNleft "left"
-#define XtNright "right"
-#define XtNfromHoriz "fromHoriz"
-#define XtNfromVert "fromVert"
-#define XtNhorizDistance "horizDistance"
-#define XtNvertDistance "vertDistance"
-#define XtNresizable "resizable"
-
-#define XtCEdge "Edge"
-#define XtCWidget "Widget"
-
-typedef enum {
- XawChainTop, /* Keep this edge a constant distance from
- the top of the form */
- XawChainBottom, /* Keep this edge a constant distance from
- the bottom of the form */
- XawChainLeft, /* Keep this edge a constant distance from
- the left of the form */
- XawChainRight, /* Keep this edge a constant distance from
- the right of the form */
- XawRubber /* Keep this edge a proportional distance
- from the edges of the form */
-} XawEdgeType;
-
-#define XtEdgeType XawEdgeType
-
-#define XtChainTop XawChainTop
-#define XtChainBottom XawChainBottom
-#define XtChainLeft XawChainLeft
-#define XtChainRight XawChainRight
-#define XtRubber XawRubber
-
-#define XtEchainLeft "chainLeft"
-#define XtEchainRight "chainRight"
-#define XtEchainTop "chainTop"
-#define XtEchainBottom "chainBottom"
-#define XtErubber "rubber"
-
-#ifndef OLDXAW
-#ifndef XawNdisplayList
-#define XawNdisplayList "displayList"
-#endif
-
-#ifndef XawCDisplayList
-#define XawCDisplayList "DisplayList"
-#endif
-
-#ifndef XawRDisplayList
-#define XawRDisplayList "XawDisplayList"
-#endif
-#endif
-
-typedef struct _FormClassRec *FormWidgetClass;
-typedef struct _FormRec *FormWidget;
-
-extern WidgetClass formWidgetClass;
-
-_XFUNCPROTOBEGIN
-
-void XawFormDoLayout
-(
- Widget w,
-#if NeedWidePrototypes
- Bool do_layout
-#else
- Boolean do_layout
-#endif
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawForm_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawForm_h
+#define _XawForm_h
+
+#include <X11/Intrinsic.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ defaultDistance Thickness int 4
+ destroyCallback Callback Pointer NULL
+ displayList DisplayList XawDisplayList* NULL
+ height Height Dimension computed at realize
+ mappedWhenManaged MappedWhenManaged Boolean True
+ sensitive Sensitive Boolean True
+ width Width Dimension computed at realize
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+/* Constraint parameters:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ bottom Edge XtEdgeType XtRubber
+ fromHoriz Widget Widget (left edge of form)
+ fromVert Widget Widget (top of form)
+ horizDistance Thickness int defaultDistance
+ left Edge XtEdgeType XtRubber
+ resizable Boolean Boolean False
+ right Edge XtEdgeType XtRubber
+ top Edge XtEdgeType XtRubber
+ vertDistance Thickness int defaultDistance
+
+*/
+
+
+#ifndef _XtStringDefs_h_
+#define XtNtop "top"
+#define XtRWidget "Widget"
+#endif
+
+#define XtNdefaultDistance "defaultDistance"
+#define XtNbottom "bottom"
+#define XtNleft "left"
+#define XtNright "right"
+#define XtNfromHoriz "fromHoriz"
+#define XtNfromVert "fromVert"
+#define XtNhorizDistance "horizDistance"
+#define XtNvertDistance "vertDistance"
+#define XtNresizable "resizable"
+
+#define XtCEdge "Edge"
+#define XtCWidget "Widget"
+
+typedef enum {
+ XawChainTop, /* Keep this edge a constant distance from
+ the top of the form */
+ XawChainBottom, /* Keep this edge a constant distance from
+ the bottom of the form */
+ XawChainLeft, /* Keep this edge a constant distance from
+ the left of the form */
+ XawChainRight, /* Keep this edge a constant distance from
+ the right of the form */
+ XawRubber /* Keep this edge a proportional distance
+ from the edges of the form */
+} XawEdgeType;
+
+#define XtEdgeType XawEdgeType
+
+#define XtChainTop XawChainTop
+#define XtChainBottom XawChainBottom
+#define XtChainLeft XawChainLeft
+#define XtChainRight XawChainRight
+#define XtRubber XawRubber
+
+#define XtEchainLeft "chainLeft"
+#define XtEchainRight "chainRight"
+#define XtEchainTop "chainTop"
+#define XtEchainBottom "chainBottom"
+#define XtErubber "rubber"
+
+#ifndef OLDXAW
+#ifndef XawNdisplayList
+#define XawNdisplayList "displayList"
+#endif
+
+#ifndef XawCDisplayList
+#define XawCDisplayList "DisplayList"
+#endif
+
+#ifndef XawRDisplayList
+#define XawRDisplayList "XawDisplayList"
+#endif
+#endif
+
+typedef struct _FormClassRec *FormWidgetClass;
+typedef struct _FormRec *FormWidget;
+
+extern WidgetClass formWidgetClass;
+
+_XFUNCPROTOBEGIN
+
+void XawFormDoLayout
+(
+ Widget w,
+#if NeedWidePrototypes
+ Bool do_layout
+#else
+ Boolean do_layout
+#endif
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawForm_h */
diff --git a/libXaw/include/X11/Xaw/FormP.h b/libXaw/include/X11/Xaw/FormP.h
index 7203dda0c..fa6757666 100644
--- a/libXaw/include/X11/Xaw/FormP.h
+++ b/libXaw/include/X11/Xaw/FormP.h
@@ -1,142 +1,139 @@
-/* $Xorg: FormP.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/FormP.h,v 1.13 2001/12/14 19:54:40 dawes Exp $ */
-
-/* Form widget private definitions */
-
-#ifndef _XawFormP_h
-#define _XawFormP_h
-
-#include <X11/Xfuncproto.h>
-
-#include <X11/Xaw/Form.h>
-#include <X11/Xaw/XawInit.h>
-
-_XFUNCPROTOBEGIN
-
-#define XtREdgeType "EdgeType"
-
-typedef enum {
- LayoutPending,
- LayoutInProgress,
- LayoutDone
-} LayoutState;
-
-#define XtInheritLayout \
-((Boolean (*)(FormWidget, unsigned int, unsigned int, Bool))_XtInherit)
-
-typedef struct {
- Boolean(*layout)(FormWidget, unsigned int, unsigned int, Bool);
-#ifndef OLDXAW
- XtPointer extension;
-#endif
-} FormClassPart;
-
-typedef struct _FormClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ConstraintClassPart constraint_class;
- FormClassPart form_class;
-} FormClassRec;
-
-extern FormClassRec formClassRec;
-
-typedef struct _FormPart {
- /* resources */
- int default_spacing; /* default distance between children */
-
- /* private */
- Dimension old_width, old_height; /* reference value for *_virtual */
- int no_refigure; /* no re-layout while > 0 */
- Boolean needs_relayout; /* next time no_refigure == 0 */
- Boolean resize_in_layout; /* should layout() do geom request? */
- Dimension preferred_width, preferred_height; /* cached from layout */
- Boolean resize_is_no_op; /* Causes resize to take not action */
-#ifndef OLDXAW
- XawDisplayList *display_list;
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} FormPart;
-
-typedef struct _FormRec {
- CorePart core;
- CompositePart composite;
- ConstraintPart constraint;
- FormPart form;
-} FormRec;
-
-typedef struct _FormConstraintsPart {
- /* resources */
- XtEdgeType top, bottom, left, right;/* where to drag edge on resize */
- int dx; /* desired horiz offset */
- int dy; /* desired vertical offset */
- Widget horiz_base; /* measure dx from here if non-null */
- Widget vert_base; /* measure dy from here if non-null */
- Boolean allow_resize; /* True if child may request resize */
-
- /* private */
- short virtual_width, virtual_height;
- Position new_x, new_y;
- LayoutState layout_state; /* temporary layout state */
- Boolean deferred_resize;/* was resized while no_refigure is set */
-#ifndef OLDXAW
- short virtual_x, virtual_y;
- XtPointer pad[2]; /* leave some space for further optimizations
- * in the form widget geometry
- */
-#endif
-} FormConstraintsPart;
-
-typedef struct _FormConstraintsRec {
- FormConstraintsPart form;
-} FormConstraintsRec, *FormConstraints;
-
-_XFUNCPROTOEND
-
-#endif /* _XawFormP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/* Form widget private definitions */
+
+#ifndef _XawFormP_h
+#define _XawFormP_h
+
+#include <X11/Xfuncproto.h>
+
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/XawInit.h>
+
+_XFUNCPROTOBEGIN
+
+#define XtREdgeType "EdgeType"
+
+typedef enum {
+ LayoutPending,
+ LayoutInProgress,
+ LayoutDone
+} LayoutState;
+
+#define XtInheritLayout \
+((Boolean (*)(FormWidget, unsigned int, unsigned int, Bool))_XtInherit)
+
+typedef struct {
+ Boolean(*layout)(FormWidget, unsigned int, unsigned int, Bool);
+#ifndef OLDXAW
+ XtPointer extension;
+#endif
+} FormClassPart;
+
+typedef struct _FormClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ConstraintClassPart constraint_class;
+ FormClassPart form_class;
+} FormClassRec;
+
+extern FormClassRec formClassRec;
+
+typedef struct _FormPart {
+ /* resources */
+ int default_spacing; /* default distance between children */
+
+ /* private */
+ Dimension old_width, old_height; /* reference value for *_virtual */
+ int no_refigure; /* no re-layout while > 0 */
+ Boolean needs_relayout; /* next time no_refigure == 0 */
+ Boolean resize_in_layout; /* should layout() do geom request? */
+ Dimension preferred_width, preferred_height; /* cached from layout */
+ Boolean resize_is_no_op; /* Causes resize to take not action */
+#ifndef OLDXAW
+ XawDisplayList *display_list;
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} FormPart;
+
+typedef struct _FormRec {
+ CorePart core;
+ CompositePart composite;
+ ConstraintPart constraint;
+ FormPart form;
+} FormRec;
+
+typedef struct _FormConstraintsPart {
+ /* resources */
+ XtEdgeType top, bottom, left, right;/* where to drag edge on resize */
+ int dx; /* desired horiz offset */
+ int dy; /* desired vertical offset */
+ Widget horiz_base; /* measure dx from here if non-null */
+ Widget vert_base; /* measure dy from here if non-null */
+ Boolean allow_resize; /* True if child may request resize */
+
+ /* private */
+ short virtual_width, virtual_height;
+ Position new_x, new_y;
+ LayoutState layout_state; /* temporary layout state */
+ Boolean deferred_resize;/* was resized while no_refigure is set */
+#ifndef OLDXAW
+ short virtual_x, virtual_y;
+ XtPointer pad[2]; /* leave some space for further optimizations
+ * in the form widget geometry
+ */
+#endif
+} FormConstraintsPart;
+
+typedef struct _FormConstraintsRec {
+ FormConstraintsPart form;
+} FormConstraintsRec, *FormConstraints;
+
+_XFUNCPROTOEND
+
+#endif /* _XawFormP_h */
diff --git a/libXaw/include/X11/Xaw/Grip.h b/libXaw/include/X11/Xaw/Grip.h
index 1c19f6043..03d18fff2 100644
--- a/libXaw/include/X11/Xaw/Grip.h
+++ b/libXaw/include/X11/Xaw/Grip.h
@@ -1,99 +1,96 @@
-/* $Xorg: Grip.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Grip.h,v 1.6 2001/01/17 19:42:26 dawes Exp $ */
-
-/*
- * Grip.h - Public Definitions for Grip widget (used by VPane Widget)
- *
- */
-
-#ifndef _XawGrip_h
-#define _XawGrip_h
-
-#include <X11/Xaw/Simple.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- foreground Foreground Pixel XtDefaultForeground
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 0
- callback Callback Pointer GripAction
- cursor Cursor Cursor None
- cursorName Cursor String NULL
- destroyCallback Callback Pointer NULL
- height Height Dimension 8
- mappedWhenManaged MappedWhenManaged Boolean True
- pointerColor Foreground Pixel XtDefaultForeground
- pointerColorBackground Background Pixel XtDefaultBackground
- sensitive Sensitive Boolean True
- width Width Dimension 8
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define XtNgripTranslations "gripTranslations"
-
-typedef struct _XawGripCallData {
- XEvent *event; /* the event causing the GripAction */
- String *params; /* the TranslationTable params */
- Cardinal num_params; /* count of params */
-} XawGripCallDataRec, *XawGripCallData,
- GripCallDataRec, *GripCallData; /* supported for R4 compatibility */
-
-/* Class Record Constant */
-
-extern WidgetClass gripWidgetClass;
-
-typedef struct _GripClassRec *GripWidgetClass;
-typedef struct _GripRec *GripWidget;
-
-#endif /* _XawGrip_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * Grip.h - Public Definitions for Grip widget (used by VPane Widget)
+ *
+ */
+
+#ifndef _XawGrip_h
+#define _XawGrip_h
+
+#include <X11/Xaw/Simple.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ foreground Foreground Pixel XtDefaultForeground
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 0
+ callback Callback Pointer GripAction
+ cursor Cursor Cursor None
+ cursorName Cursor String NULL
+ destroyCallback Callback Pointer NULL
+ height Height Dimension 8
+ mappedWhenManaged MappedWhenManaged Boolean True
+ pointerColor Foreground Pixel XtDefaultForeground
+ pointerColorBackground Background Pixel XtDefaultBackground
+ sensitive Sensitive Boolean True
+ width Width Dimension 8
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define XtNgripTranslations "gripTranslations"
+
+typedef struct _XawGripCallData {
+ XEvent *event; /* the event causing the GripAction */
+ String *params; /* the TranslationTable params */
+ Cardinal num_params; /* count of params */
+} XawGripCallDataRec, *XawGripCallData,
+ GripCallDataRec, *GripCallData; /* supported for R4 compatibility */
+
+/* Class Record Constant */
+
+extern WidgetClass gripWidgetClass;
+
+typedef struct _GripClassRec *GripWidgetClass;
+typedef struct _GripRec *GripWidget;
+
+#endif /* _XawGrip_h */
diff --git a/libXaw/include/X11/Xaw/GripP.h b/libXaw/include/X11/Xaw/GripP.h
index f40a8d1e7..ec732eeae 100644
--- a/libXaw/include/X11/Xaw/GripP.h
+++ b/libXaw/include/X11/Xaw/GripP.h
@@ -1,91 +1,85 @@
-/*
-* $Xorg: GripP.h,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/GripP.h,v 1.7 2001/01/17 19:42:26 dawes Exp $ */
-
-#ifndef _XawGripP_h
-#define _XawGripP_h
-
-#include <X11/Xaw/Grip.h>
-#include <X11/Xaw/SimpleP.h>
-
-#define DEFAULT_GRIP_SIZE 8
-
-/* New fields for the Grip widget class */
-typedef struct {
- XtPointer extension;
-} GripClassPart;
-
-/* Full Class record */
-typedef struct _GripClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- GripClassPart grip_class;
-} GripClassRec;
-
-extern GripClassRec gripClassRec;
-
-/* New fields for the Grip widget */
-typedef struct {
- XtCallbackList grip_action;
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} GripPart;
-
-/* Full instance record */
-typedef struct _GripRec {
- CorePart core;
- SimplePart simple;
- GripPart grip;
-} GripRec;
-
-#endif /* _XawGripP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawGripP_h
+#define _XawGripP_h
+
+#include <X11/Xaw/Grip.h>
+#include <X11/Xaw/SimpleP.h>
+
+#define DEFAULT_GRIP_SIZE 8
+
+/* New fields for the Grip widget class */
+typedef struct {
+ XtPointer extension;
+} GripClassPart;
+
+/* Full Class record */
+typedef struct _GripClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ GripClassPart grip_class;
+} GripClassRec;
+
+extern GripClassRec gripClassRec;
+
+/* New fields for the Grip widget */
+typedef struct {
+ XtCallbackList grip_action;
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} GripPart;
+
+/* Full instance record */
+typedef struct _GripRec {
+ CorePart core;
+ SimplePart simple;
+ GripPart grip;
+} GripRec;
+
+#endif /* _XawGripP_h */
diff --git a/libXaw/include/X11/Xaw/Label.h b/libXaw/include/X11/Xaw/Label.h
index fc3942b01..3c4595efc 100644
--- a/libXaw/include/X11/Xaw/Label.h
+++ b/libXaw/include/X11/Xaw/Label.h
@@ -1,135 +1,132 @@
-/* $Xorg: Label.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Label.h,v 1.6 2001/01/17 19:42:27 dawes Exp $ */
-
-#ifndef _XawLabel_h
-#define _XawLabel_h
-
-/*
- * Label Widget
- */
-
-#include <X11/Xaw/Simple.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- bitmap Pixmap Pixmap None
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- cursor Cursor Cursor None
- cursorName Cursor String NULL
- destroyCallback Callback XtCallbackList NULL
- encoding Encoding UnsignedChar XawTextEncoding8bit
- font Font XFontStruct* XtDefaultFont
- foreground Foreground Pixel XtDefaultForeground
- height Height Dimension text height
- insensitiveBorder Insensitive Pixmap Gray
- internalHeight Height Dimension 2
- internalWidth Width Dimension 4
- justify Justify XtJustify XtJustifyCenter
- label Label String NULL
- leftBitmap LeftBitmap Pixmap None
- mappedWhenManaged MappedWhenManaged Boolean True
- pointerColor Foreground Pixel XtDefaultForeground
- pointerColorBackground Background Pixel XtDefaultBackground
- resize Resize Boolean True
- sensitive Sensitive Boolean True
- width Width Dimension text width
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define XawTextEncoding8bit 0
-#define XawTextEncodingChar2b 1
-
-#define XtNleftBitmap "leftBitmap"
-#define XtCLeftBitmap "LeftBitmap"
-#define XtNencoding "encoding"
-#define XtCEncoding "Encoding"
-
-#ifndef XtNfontSet
-#define XtNfontSet "fontSet"
-#endif
-
-#ifndef XtCFontSet
-#define XtCFontSet "FontSet"
-#endif
-
-#ifndef _XtStringDefs_h_
-#define XtNbitmap "bitmap"
-#define XtNforeground "foreground"
-#define XtNlabel "label"
-#define XtNfont "font"
-#define XtNinternalWidth "internalWidth"
-#define XtNinternalHeight "internalHeight"
-#define XtNresize "resize"
-#define XtCResize "Resize"
-#define XtCBitmap "Bitmap"
-#endif
-
-#ifndef XtNlabelX
-#define XtNlabelX "labelX"
-#endif
-
-#ifndef XtNlabelY
-#define XtNlabelY "labelY"
-#endif
-
-/* Class record constants */
-
-extern WidgetClass labelWidgetClass;
-
-typedef struct _LabelClassRec *LabelWidgetClass;
-typedef struct _LabelRec *LabelWidget;
-
-#endif /* _XawLabel_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawLabel_h
+#define _XawLabel_h
+
+/*
+ * Label Widget
+ */
+
+#include <X11/Xaw/Simple.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ bitmap Pixmap Pixmap None
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ cursor Cursor Cursor None
+ cursorName Cursor String NULL
+ destroyCallback Callback XtCallbackList NULL
+ encoding Encoding UnsignedChar XawTextEncoding8bit
+ font Font XFontStruct* XtDefaultFont
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension text height
+ insensitiveBorder Insensitive Pixmap Gray
+ internalHeight Height Dimension 2
+ internalWidth Width Dimension 4
+ justify Justify XtJustify XtJustifyCenter
+ label Label String NULL
+ leftBitmap LeftBitmap Pixmap None
+ mappedWhenManaged MappedWhenManaged Boolean True
+ pointerColor Foreground Pixel XtDefaultForeground
+ pointerColorBackground Background Pixel XtDefaultBackground
+ resize Resize Boolean True
+ sensitive Sensitive Boolean True
+ width Width Dimension text width
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define XawTextEncoding8bit 0
+#define XawTextEncodingChar2b 1
+
+#define XtNleftBitmap "leftBitmap"
+#define XtCLeftBitmap "LeftBitmap"
+#define XtNencoding "encoding"
+#define XtCEncoding "Encoding"
+
+#ifndef XtNfontSet
+#define XtNfontSet "fontSet"
+#endif
+
+#ifndef XtCFontSet
+#define XtCFontSet "FontSet"
+#endif
+
+#ifndef _XtStringDefs_h_
+#define XtNbitmap "bitmap"
+#define XtNforeground "foreground"
+#define XtNlabel "label"
+#define XtNfont "font"
+#define XtNinternalWidth "internalWidth"
+#define XtNinternalHeight "internalHeight"
+#define XtNresize "resize"
+#define XtCResize "Resize"
+#define XtCBitmap "Bitmap"
+#endif
+
+#ifndef XtNlabelX
+#define XtNlabelX "labelX"
+#endif
+
+#ifndef XtNlabelY
+#define XtNlabelY "labelY"
+#endif
+
+/* Class record constants */
+
+extern WidgetClass labelWidgetClass;
+
+typedef struct _LabelClassRec *LabelWidgetClass;
+typedef struct _LabelRec *LabelWidget;
+
+#endif /* _XawLabel_h */
diff --git a/libXaw/include/X11/Xaw/LabelP.h b/libXaw/include/X11/Xaw/LabelP.h
index 9f49fdd4f..7271b8316 100644
--- a/libXaw/include/X11/Xaw/LabelP.h
+++ b/libXaw/include/X11/Xaw/LabelP.h
@@ -1,121 +1,115 @@
-/*
-* $Xorg: LabelP.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/LabelP.h,v 1.7 2001/01/17 19:42:27 dawes Exp $ */
-
-#ifndef _XawLabelP_h
-#define _XawLabelP_h
-
-/*
- * Label Widget Private Data
- */
-#include <X11/Xaw/Label.h>
-#include <X11/Xaw/SimpleP.h>
-
-/* New fields for the Label widget class record */
-typedef struct {
- XtPointer extension;
-} LabelClassPart;
-
-/* Full class record declaration */
-typedef struct _LabelClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- LabelClassPart label_class;
-} LabelClassRec;
-
-extern LabelClassRec labelClassRec;
-
-/* New fields for the Label widget record */
-typedef struct {
- /* resources */
- Pixel foreground;
- XFontStruct *font;
- XFontSet fontset;
- char *label;
- XtJustify justify;
- Dimension internal_width;
- Dimension internal_height;
- Pixmap pixmap;
- Boolean resize;
- unsigned char encoding;
- Pixmap left_bitmap;
-
- /* private state */
- GC normal_GC;
- GC gray_GC;
- Pixmap stipple;
- Position label_x;
- Position label_y;
- Dimension label_width;
- Dimension label_height;
- Dimension label_len;
- int lbm_y; /* where in label */
- unsigned int lbm_width, lbm_height; /* size of pixmap */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} LabelPart;
-
-/*
- * Full instance record declaration
- */
-typedef struct _LabelRec {
- CorePart core;
- SimplePart simple;
- LabelPart label;
-} LabelRec;
-
-#define LEFT_OFFSET(lw) ((lw)->label.left_bitmap \
- ? (lw)->label.lbm_width + (lw)->label.internal_width \
- : 0)
-
-#endif /* _XawLabelP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawLabelP_h
+#define _XawLabelP_h
+
+/*
+ * Label Widget Private Data
+ */
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/SimpleP.h>
+
+/* New fields for the Label widget class record */
+typedef struct {
+ XtPointer extension;
+} LabelClassPart;
+
+/* Full class record declaration */
+typedef struct _LabelClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ LabelClassPart label_class;
+} LabelClassRec;
+
+extern LabelClassRec labelClassRec;
+
+/* New fields for the Label widget record */
+typedef struct {
+ /* resources */
+ Pixel foreground;
+ XFontStruct *font;
+ XFontSet fontset;
+ char *label;
+ XtJustify justify;
+ Dimension internal_width;
+ Dimension internal_height;
+ Pixmap pixmap;
+ Boolean resize;
+ unsigned char encoding;
+ Pixmap left_bitmap;
+
+ /* private state */
+ GC normal_GC;
+ GC gray_GC;
+ Pixmap stipple;
+ Position label_x;
+ Position label_y;
+ Dimension label_width;
+ Dimension label_height;
+ Dimension label_len;
+ int lbm_y; /* where in label */
+ unsigned int lbm_width, lbm_height; /* size of pixmap */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} LabelPart;
+
+/*
+ * Full instance record declaration
+ */
+typedef struct _LabelRec {
+ CorePart core;
+ SimplePart simple;
+ LabelPart label;
+} LabelRec;
+
+#define LEFT_OFFSET(lw) ((lw)->label.left_bitmap \
+ ? (lw)->label.lbm_width + (lw)->label.internal_width \
+ : 0)
+
+#endif /* _XawLabelP_h */
diff --git a/libXaw/include/X11/Xaw/List.h b/libXaw/include/X11/Xaw/List.h
index 2115eefd4..df0496bd4 100644
--- a/libXaw/include/X11/Xaw/List.h
+++ b/libXaw/include/X11/Xaw/List.h
@@ -1,237 +1,234 @@
-/* $Xorg: List.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
-Copyright 1989, 1994, 1998 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.
-*/
-/* $XFree86: xc/lib/Xaw/List.h,v 1.7 2001/01/17 19:42:27 dawes Exp $ */
-
-/* This is the List widget, it is useful to display a list, without the
- * overhead of having a widget for each item in the list. It allows
- * the user to select an item in a list and notifies the application through
- * a callback function.
- *
- * Created: 8/13/88
- * By: Chris D. Peterson
- * MIT X Consortium
- */
-
-#ifndef _XawList_h
-#define _XawList_h
-
-#include <X11/Xaw/Simple.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- borderColor BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- callback Callback XtCallbackList NULL **6
- columnSpacing Spacing Dimension 6
- cursor Cursor Cursor left_ptr
- cursorName Cursor String NULL
- defaultColumns Columns int 2 **5
- destroyCallback Callback Pointer NULL
- font Font XFontStruct* XtDefaultFont
- forceColumns Columns Boolean False **5
- foreground Foreground Pixel XtDefaultForeground
- height Height Dimension 0 **1
- insensitiveBorder Insensitive Pixmap Gray
- internalHeight Height Dimension 2
- internalWidth Width Dimension 4
- list List String* NULL **2
- longest Longest int 0 **3 **4
- mappedWhenManaged MappedWhenManaged Boolean True
- numberStrings NumberStrings int 0 **4
- pasteBuffer Boolean Boolean False
- pointerColor Foreground Pixel XtDefaultForeground
- pointerColorBackground Background Pixel XtDefaultBackground
- rowSpacing Spacing Dimension 4
- sensitive Sensitive Boolean True
- verticalList Boolean Boolean False
- width Width Dimension 0 **1
- x Position Position 0
- y Position Position 0
-
- **1 - If the Width or Height of the list widget is zero (0) then the value
- is set to the minimum size necessay to fit the entire list.
-
- If both Width and Height are zero then they are adjusted to fit the
- entire list that is created width the number of default columns
- specified in the defaultColumns resource.
-
- **2 - This is an array of strings the specify elements of the list.
- This resource must be specified.
- (What good is a list widget without a list?? :-)
-
- **3 - Longest is the length of the widest string in pixels.
-
- **4 - If either of these values are zero (0) then the list widget calculates
- the correct value.
-
- (This allows you to make startup faster if you already have
- this information calculated)
-
- NOTE: If the numberStrings value is zero the list must
- be NULL terminated.
-
- **5 - By setting the List.Columns resource you can force the application to
- have a given number of columns.
-
- **6 - This returns the name and index of the item selected in an
- XawListReturnStruct that is pointed to by the client_data
- in the CallbackProc.
-
-*/
-
-/*
- * Value returned when there are no highlighted objects
- */
-#define XAW_LIST_NONE -1
-
-#define XtCList "List"
-#define XtCSpacing "Spacing"
-#define XtCColumns "Columns"
-#define XtCLongest "Longest"
-#define XtCNumberStrings "NumberStrings"
-
-#define XtNcursor "cursor"
-#define XtNcolumnSpacing "columnSpacing"
-#define XtNdefaultColumns "defaultColumns"
-#define XtNforceColumns "forceColumns"
-#define XtNlist "list"
-#define XtNlongest "longest"
-#define XtNnumberStrings "numberStrings"
-#define XtNpasteBuffer "pasteBuffer"
-#define XtNrowSpacing "rowSpacing"
-#define XtNverticalList "verticalList"
-#define XtNshowCurrent "showCurrent"
-
-#ifndef XtNfontSet
-#define XtNfontSet "fontSet"
-#endif
-
-#ifndef XtCFontSet
-#define XtCFontSet "FontSet"
-#endif
-
-extern WidgetClass listWidgetClass;
-
-typedef struct _ListClassRec *ListWidgetClass;
-typedef struct _ListRec *ListWidget;
-
-/* list return structure */
-typedef struct _XawListReturnStruct {
- String string;
- int list_index;
-} XawListReturnStruct;
-
-_XFUNCPROTOBEGIN
-
-/*
- * Function:
- * XawListChange
- *
- * Parameters:
- * w - list widget
- * list - new list
- * nitems - number of items in the list
- * longest - length (in Pixels) of the longest element in the list
- * resize - if True the the list widget will try to resize itself
- *
- * Description:
- * Changes the list being used and shown.
- *
- * Note:
- * If nitems of longest are <= 0 then they will be caluculated
- * If nitems is <= 0 then the list needs to be NULL terminated
- */
-void XawListChange
-(
- Widget w,
- String *list,
- int nitems,
- int longest,
-#if NeedWidePrototypes
- int resize
-#else
- Boolean resize
-#endif
- );
-
-/*
- * Function:
- * XawListUnhighlight
- *
- * Parameters:
- * w - list widget
- *
- * Description:
- * Unlights the current highlighted element.
- */
-void XawListUnhighlight
-(
- Widget w
- );
-
-/*
- * Function:
- * XawListHighlight
- *
- * Parameters:
- * w - list widget
- * item - item to highlight
- *
- * Description:
- * Highlights the given item.
- */
-void XawListHighlight
-(
- Widget w,
- int item
- );
-
-
-/*
- * Function:
- * XawListShowCurrent
- *
- * Paraneters:
- * w - list widget
- *
- * Description:
- * Returns the currently highlighted object.
- *
- * Returns:
- * The info about the currently highlighted object
- */
-
-XawListReturnStruct *XawListShowCurrent
-(
- Widget w
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawList_h */
+/*
+Copyright 1989, 1994, 1998 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.
+*/
+
+/* This is the List widget, it is useful to display a list, without the
+ * overhead of having a widget for each item in the list. It allows
+ * the user to select an item in a list and notifies the application through
+ * a callback function.
+ *
+ * Created: 8/13/88
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ */
+
+#ifndef _XawList_h
+#define _XawList_h
+
+#include <X11/Xaw/Simple.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ borderColor BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ callback Callback XtCallbackList NULL **6
+ columnSpacing Spacing Dimension 6
+ cursor Cursor Cursor left_ptr
+ cursorName Cursor String NULL
+ defaultColumns Columns int 2 **5
+ destroyCallback Callback Pointer NULL
+ font Font XFontStruct* XtDefaultFont
+ forceColumns Columns Boolean False **5
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension 0 **1
+ insensitiveBorder Insensitive Pixmap Gray
+ internalHeight Height Dimension 2
+ internalWidth Width Dimension 4
+ list List String* NULL **2
+ longest Longest int 0 **3 **4
+ mappedWhenManaged MappedWhenManaged Boolean True
+ numberStrings NumberStrings int 0 **4
+ pasteBuffer Boolean Boolean False
+ pointerColor Foreground Pixel XtDefaultForeground
+ pointerColorBackground Background Pixel XtDefaultBackground
+ rowSpacing Spacing Dimension 4
+ sensitive Sensitive Boolean True
+ verticalList Boolean Boolean False
+ width Width Dimension 0 **1
+ x Position Position 0
+ y Position Position 0
+
+ **1 - If the Width or Height of the list widget is zero (0) then the value
+ is set to the minimum size necessay to fit the entire list.
+
+ If both Width and Height are zero then they are adjusted to fit the
+ entire list that is created width the number of default columns
+ specified in the defaultColumns resource.
+
+ **2 - This is an array of strings the specify elements of the list.
+ This resource must be specified.
+ (What good is a list widget without a list?? :-)
+
+ **3 - Longest is the length of the widest string in pixels.
+
+ **4 - If either of these values are zero (0) then the list widget calculates
+ the correct value.
+
+ (This allows you to make startup faster if you already have
+ this information calculated)
+
+ NOTE: If the numberStrings value is zero the list must
+ be NULL terminated.
+
+ **5 - By setting the List.Columns resource you can force the application to
+ have a given number of columns.
+
+ **6 - This returns the name and index of the item selected in an
+ XawListReturnStruct that is pointed to by the client_data
+ in the CallbackProc.
+
+*/
+
+/*
+ * Value returned when there are no highlighted objects
+ */
+#define XAW_LIST_NONE -1
+
+#define XtCList "List"
+#define XtCSpacing "Spacing"
+#define XtCColumns "Columns"
+#define XtCLongest "Longest"
+#define XtCNumberStrings "NumberStrings"
+
+#define XtNcursor "cursor"
+#define XtNcolumnSpacing "columnSpacing"
+#define XtNdefaultColumns "defaultColumns"
+#define XtNforceColumns "forceColumns"
+#define XtNlist "list"
+#define XtNlongest "longest"
+#define XtNnumberStrings "numberStrings"
+#define XtNpasteBuffer "pasteBuffer"
+#define XtNrowSpacing "rowSpacing"
+#define XtNverticalList "verticalList"
+#define XtNshowCurrent "showCurrent"
+
+#ifndef XtNfontSet
+#define XtNfontSet "fontSet"
+#endif
+
+#ifndef XtCFontSet
+#define XtCFontSet "FontSet"
+#endif
+
+extern WidgetClass listWidgetClass;
+
+typedef struct _ListClassRec *ListWidgetClass;
+typedef struct _ListRec *ListWidget;
+
+/* list return structure */
+typedef struct _XawListReturnStruct {
+ String string;
+ int list_index;
+} XawListReturnStruct;
+
+_XFUNCPROTOBEGIN
+
+/*
+ * Function:
+ * XawListChange
+ *
+ * Parameters:
+ * w - list widget
+ * list - new list
+ * nitems - number of items in the list
+ * longest - length (in Pixels) of the longest element in the list
+ * resize - if True the the list widget will try to resize itself
+ *
+ * Description:
+ * Changes the list being used and shown.
+ *
+ * Note:
+ * If nitems of longest are <= 0 then they will be caluculated
+ * If nitems is <= 0 then the list needs to be NULL terminated
+ */
+void XawListChange
+(
+ Widget w,
+ String *list,
+ int nitems,
+ int longest,
+#if NeedWidePrototypes
+ int resize
+#else
+ Boolean resize
+#endif
+ );
+
+/*
+ * Function:
+ * XawListUnhighlight
+ *
+ * Parameters:
+ * w - list widget
+ *
+ * Description:
+ * Unlights the current highlighted element.
+ */
+void XawListUnhighlight
+(
+ Widget w
+ );
+
+/*
+ * Function:
+ * XawListHighlight
+ *
+ * Parameters:
+ * w - list widget
+ * item - item to highlight
+ *
+ * Description:
+ * Highlights the given item.
+ */
+void XawListHighlight
+(
+ Widget w,
+ int item
+ );
+
+
+/*
+ * Function:
+ * XawListShowCurrent
+ *
+ * Paraneters:
+ * w - list widget
+ *
+ * Description:
+ * Returns the currently highlighted object.
+ *
+ * Returns:
+ * The info about the currently highlighted object
+ */
+
+XawListReturnStruct *XawListShowCurrent
+(
+ Widget w
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawList_h */
diff --git a/libXaw/include/X11/Xaw/ListP.h b/libXaw/include/X11/Xaw/ListP.h
index 2b8fc4639..a65c51100 100644
--- a/libXaw/include/X11/Xaw/ListP.h
+++ b/libXaw/include/X11/Xaw/ListP.h
@@ -1,118 +1,115 @@
-/* $Xorg: ListP.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
-Copyright 1989, 1994, 1998 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.
-*/
-/* $XFree86: xc/lib/Xaw/ListP.h,v 1.8 2001/01/17 19:42:27 dawes Exp $ */
-
-
-/*
- * This is a List widget. It allows the user to select an item in a list and
- * notifies the application through a callback function.
- *
- * Created: 8/13/88
- * By: Chris D. Peterson
- * MIT - Project Athena
- */
-
-#ifndef _XawListP_h
-#define _XawListP_h
-
-/*
- * List Widget Private Data
- */
-#include <X11/Xaw/SimpleP.h>
-#include <X11/Xaw/List.h>
-
-#define NO_HIGHLIGHT XAW_LIST_NONE
-#define OUT_OF_RANGE -1
-#define OKAY 0
-
-/* New fields for the List widget class */
-typedef struct {
- XtPointer extension;
-} ListClassPart;
-
-/* Full class record */
-typedef struct _ListClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- ListClassPart list_class;
-} ListClassRec;
-
-extern ListClassRec listClassRec;
-
-/* New fields for the List widget */
-typedef struct {
- /* resources */
- Pixel foreground;
- Dimension internal_width; /* if not 3d, user sets directly */
- Dimension internal_height;
- Dimension column_space; /* half of *_space is add on
- top/bot/left of */
- Dimension row_space; /* each item's text bounding box
- half added to longest for right */
- int default_cols;
- Boolean force_cols;
- Boolean paste;
- Boolean vertical_cols;
- int longest; /* in pixels */
- int nitems;
- XFontStruct *font;
- XFontSet fontset; /* Sheeran, Omron KK, 93/03/05 */
- String *list; /* for i18n, always in multibyte
- format */
- XtCallbackList callback;
-
- /* private */
- int is_highlighted; /* set to the item currently
- highlighted */
- int highlight; /* set to the item that should be
- highlighted */
- int col_width; /* width of each column */
- int row_height; /* height of each row */
- int nrows; /* number of rows in the list */
- int ncols; /* number of columns in the list */
- GC normgc;
- GC revgc;
- GC graygc;
- int freedoms; /* flags for resizing height
- and width */
-#ifndef OLDXAW
- int selected;
- Boolean show_current;
- char pad1[(sizeof(XtPointer) - sizeof(Boolean)) +
- (sizeof(XtPointer) - sizeof(int))];
- XtPointer pad2[2]; /* for future use and keep binary compatability */
-#endif
-} ListPart;
-
-
-/* Full instance record */
-typedef struct _ListRec {
- CorePart core;
- SimplePart simple;
- ListPart list;
-} ListRec;
-
-#endif /* _XawListP_h */
+/*
+Copyright 1989, 1994, 1998 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.
+*/
+
+
+/*
+ * This is a List widget. It allows the user to select an item in a list and
+ * notifies the application through a callback function.
+ *
+ * Created: 8/13/88
+ * By: Chris D. Peterson
+ * MIT - Project Athena
+ */
+
+#ifndef _XawListP_h
+#define _XawListP_h
+
+/*
+ * List Widget Private Data
+ */
+#include <X11/Xaw/SimpleP.h>
+#include <X11/Xaw/List.h>
+
+#define NO_HIGHLIGHT XAW_LIST_NONE
+#define OUT_OF_RANGE -1
+#define OKAY 0
+
+/* New fields for the List widget class */
+typedef struct {
+ XtPointer extension;
+} ListClassPart;
+
+/* Full class record */
+typedef struct _ListClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ ListClassPart list_class;
+} ListClassRec;
+
+extern ListClassRec listClassRec;
+
+/* New fields for the List widget */
+typedef struct {
+ /* resources */
+ Pixel foreground;
+ Dimension internal_width; /* if not 3d, user sets directly */
+ Dimension internal_height;
+ Dimension column_space; /* half of *_space is add on
+ top/bot/left of */
+ Dimension row_space; /* each item's text bounding box
+ half added to longest for right */
+ int default_cols;
+ Boolean force_cols;
+ Boolean paste;
+ Boolean vertical_cols;
+ int longest; /* in pixels */
+ int nitems;
+ XFontStruct *font;
+ XFontSet fontset; /* Sheeran, Omron KK, 93/03/05 */
+ String *list; /* for i18n, always in multibyte
+ format */
+ XtCallbackList callback;
+
+ /* private */
+ int is_highlighted; /* set to the item currently
+ highlighted */
+ int highlight; /* set to the item that should be
+ highlighted */
+ int col_width; /* width of each column */
+ int row_height; /* height of each row */
+ int nrows; /* number of rows in the list */
+ int ncols; /* number of columns in the list */
+ GC normgc;
+ GC revgc;
+ GC graygc;
+ int freedoms; /* flags for resizing height
+ and width */
+#ifndef OLDXAW
+ int selected;
+ Boolean show_current;
+ char pad1[(sizeof(XtPointer) - sizeof(Boolean)) +
+ (sizeof(XtPointer) - sizeof(int))];
+ XtPointer pad2[2]; /* for future use and keep binary compatability */
+#endif
+} ListPart;
+
+
+/* Full instance record */
+typedef struct _ListRec {
+ CorePart core;
+ SimplePart simple;
+ ListPart list;
+} ListRec;
+
+#endif /* _XawListP_h */
diff --git a/libXaw/include/X11/Xaw/MenuButtoP.h b/libXaw/include/X11/Xaw/MenuButtoP.h
index 416fdf9b5..a4e058606 100644
--- a/libXaw/include/X11/Xaw/MenuButtoP.h
+++ b/libXaw/include/X11/Xaw/MenuButtoP.h
@@ -1,80 +1,79 @@
-/* $Xorg: MenuButtoP.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $
- *
-Copyright 1989,1998 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.
- */
-/* $XFree86: xc/lib/Xaw/MenuButtoP.h,v 1.7 2001/01/17 19:42:27 dawes Exp $ */
-
-/*
- * MenuButtonP.h - Private Header file for MenuButton widget.
- *
- * This is the private header file for the Athena MenuButton widget.
- * It is intended to provide an easy method of activating pulldown menus.
- *
- * Date: May 2, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _XawMenuButtonP_h
-#define _XawMenuButtonP_h
-
-#include <X11/Xaw/MenuButton.h>
-#include <X11/Xaw/CommandP.h>
-
-/* New fields for the MenuButton widget class */
-typedef struct _MenuButtonClass {
- XtPointer extension;
-} MenuButtonClassPart;
-
-/* class record declaration */
-typedef struct _MenuButtonClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- LabelClassPart label_class;
- CommandClassPart command_class;
- MenuButtonClassPart menuButton_class;
-} MenuButtonClassRec;
-
-extern MenuButtonClassRec menuButtonClassRec;
-
-/* New fields for the MenuButton widget */
-typedef struct {
- /* resources */
- String menu_name;
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} MenuButtonPart;
-
-/* widget declaration */
-typedef struct _MenuButtonRec {
- CorePart core;
- SimplePart simple;
- LabelPart label;
- CommandPart command;
- MenuButtonPart menu_button;
-} MenuButtonRec;
-
-#endif /* _XawMenuButtonP_h */
+/*
+ *
+Copyright 1989,1998 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.
+ */
+
+/*
+ * MenuButtonP.h - Private Header file for MenuButton widget.
+ *
+ * This is the private header file for the Athena MenuButton widget.
+ * It is intended to provide an easy method of activating pulldown menus.
+ *
+ * Date: May 2, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _XawMenuButtonP_h
+#define _XawMenuButtonP_h
+
+#include <X11/Xaw/MenuButton.h>
+#include <X11/Xaw/CommandP.h>
+
+/* New fields for the MenuButton widget class */
+typedef struct _MenuButtonClass {
+ XtPointer extension;
+} MenuButtonClassPart;
+
+/* class record declaration */
+typedef struct _MenuButtonClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ LabelClassPart label_class;
+ CommandClassPart command_class;
+ MenuButtonClassPart menuButton_class;
+} MenuButtonClassRec;
+
+extern MenuButtonClassRec menuButtonClassRec;
+
+/* New fields for the MenuButton widget */
+typedef struct {
+ /* resources */
+ String menu_name;
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} MenuButtonPart;
+
+/* widget declaration */
+typedef struct _MenuButtonRec {
+ CorePart core;
+ SimplePart simple;
+ LabelPart label;
+ CommandPart command;
+ MenuButtonPart menu_button;
+} MenuButtonRec;
+
+#endif /* _XawMenuButtonP_h */
diff --git a/libXaw/include/X11/Xaw/MenuButton.h b/libXaw/include/X11/Xaw/MenuButton.h
index 59744c26c..62f7d0cd4 100644
--- a/libXaw/include/X11/Xaw/MenuButton.h
+++ b/libXaw/include/X11/Xaw/MenuButton.h
@@ -1,91 +1,89 @@
-/*
- * $Xorg: MenuButton.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- */
-/* $XFree86: xc/lib/Xaw/MenuButton.h,v 1.5 2001/01/17 19:42:27 dawes Exp $ */
-
-/***********************************************************************
- *
- * MenuButton Widget
- *
- ***********************************************************************/
-
-/*
- * MenuButton.h - Public Header file for MenuButton widget.
- *
- * This is the public header file for the Athena MenuButton widget.
- * It is intended to provide an easy method of activating pulldown menus.
- *
- * Date: May 2, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _XawMenuButton_h
-#define _XawMenuButton_h
-
-#include <X11/Xaw/Command.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- bitmap Pixmap Pixmap None
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- callback Callback Pointer NULL
- cursor Cursor Cursor None
- destroyCallback Callback Pointer NULL
- displayList DisplayList XawDisplayList* NULL
- font Font XFontStruct* XtDefaultFont
- foreground Foreground Pixel XtDefaultForeground
- height Height Dimension text height
- highlightThickness Thickness Dimension 2
- insensitiveBorder Insensitive Pixmap Gray
- internalHeight Height Dimension 2
- internalWidth Width Dimension 4
- justify Justify XtJustify XtJustifyCenter
- label Label String NULL
- mappedWhenManaged MappedWhenManaged Boolean True
- menuName MenuName String "menu"
- resize Resize Boolean True
- sensitive Sensitive Boolean True
- width Width Dimension text width
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define XtNmenuName "menuName"
-#define XtCMenuName "MenuName"
-
-extern WidgetClass menuButtonWidgetClass;
-
-typedef struct _MenuButtonClassRec *MenuButtonWidgetClass;
-typedef struct _MenuButtonRec *MenuButtonWidget;
-
-#endif /* _XawMenuButton_h */
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ */
+
+/***********************************************************************
+ *
+ * MenuButton Widget
+ *
+ ***********************************************************************/
+
+/*
+ * MenuButton.h - Public Header file for MenuButton widget.
+ *
+ * This is the public header file for the Athena MenuButton widget.
+ * It is intended to provide an easy method of activating pulldown menus.
+ *
+ * Date: May 2, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _XawMenuButton_h
+#define _XawMenuButton_h
+
+#include <X11/Xaw/Command.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ bitmap Pixmap Pixmap None
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ callback Callback Pointer NULL
+ cursor Cursor Cursor None
+ destroyCallback Callback Pointer NULL
+ displayList DisplayList XawDisplayList* NULL
+ font Font XFontStruct* XtDefaultFont
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension text height
+ highlightThickness Thickness Dimension 2
+ insensitiveBorder Insensitive Pixmap Gray
+ internalHeight Height Dimension 2
+ internalWidth Width Dimension 4
+ justify Justify XtJustify XtJustifyCenter
+ label Label String NULL
+ mappedWhenManaged MappedWhenManaged Boolean True
+ menuName MenuName String "menu"
+ resize Resize Boolean True
+ sensitive Sensitive Boolean True
+ width Width Dimension text width
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define XtNmenuName "menuName"
+#define XtCMenuName "MenuName"
+
+extern WidgetClass menuButtonWidgetClass;
+
+typedef struct _MenuButtonClassRec *MenuButtonWidgetClass;
+typedef struct _MenuButtonRec *MenuButtonWidget;
+
+#endif /* _XawMenuButton_h */
diff --git a/libXaw/include/X11/Xaw/MultiSink.h b/libXaw/include/X11/Xaw/MultiSink.h
index 49ef1df2e..488609130 100644
--- a/libXaw/include/X11/Xaw/MultiSink.h
+++ b/libXaw/include/X11/Xaw/MultiSink.h
@@ -1,113 +1,110 @@
-/* $Xorg: MultiSink.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON is not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. OMRON makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL OMRON 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
- * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Li Yuhong OMRON Corporation
- */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/MultiSink.h,v 1.5 2001/01/17 19:42:27 dawes Exp $ */
-
-#ifndef _XawMultiSink_h
-#define _XawMultiSink_h
-
-/*
- * MultiSink Object
- */
-
-#include <X11/Xaw/TextSink.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- echo Output Boolean True
- displayNonprinting Output Boolean True
- fontSet FontSet XFontSet XtDefaultFontSet
-
-*/
-
-#define XtCOutput "Output"
-
-#define XtNdisplayNonprinting "displayNonprinting"
-#define XtNecho "echo"
-
-#ifndef XtNfontSet /*Sheeran, Omron KK, 93/03/04*/
-#define XtNfontSet "fontSet"
-#endif
-
-#ifndef XtCFontSet /*Sheeran, Omron KK, 93/03/04*/
-#define XtCFontSet "FontSet"
-#endif
-
-/* Class record constants */
-extern WidgetClass multiSinkObjectClass;
-
-typedef struct _MultiSinkClassRec *MultiSinkObjectClass;
-typedef struct _MultiSinkRec *MultiSinkObject;
-
-#endif /* _XawMultiSink_h */
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON is not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OMRON makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OMRON 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
+ * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Li Yuhong OMRON Corporation
+ */
+
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawMultiSink_h
+#define _XawMultiSink_h
+
+/*
+ * MultiSink Object
+ */
+
+#include <X11/Xaw/TextSink.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ echo Output Boolean True
+ displayNonprinting Output Boolean True
+ fontSet FontSet XFontSet XtDefaultFontSet
+
+*/
+
+#define XtCOutput "Output"
+
+#define XtNdisplayNonprinting "displayNonprinting"
+#define XtNecho "echo"
+
+#ifndef XtNfontSet /*Sheeran, Omron KK, 93/03/04*/
+#define XtNfontSet "fontSet"
+#endif
+
+#ifndef XtCFontSet /*Sheeran, Omron KK, 93/03/04*/
+#define XtCFontSet "FontSet"
+#endif
+
+/* Class record constants */
+extern WidgetClass multiSinkObjectClass;
+
+typedef struct _MultiSinkClassRec *MultiSinkObjectClass;
+typedef struct _MultiSinkRec *MultiSinkObject;
+
+#endif /* _XawMultiSink_h */
diff --git a/libXaw/include/X11/Xaw/MultiSinkP.h b/libXaw/include/X11/Xaw/MultiSinkP.h
index 537e0b12a..544536315 100644
--- a/libXaw/include/X11/Xaw/MultiSinkP.h
+++ b/libXaw/include/X11/Xaw/MultiSinkP.h
@@ -1,141 +1,138 @@
-/* $Xorg: MultiSinkP.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. OMRON make no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL OMRON 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
- * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Li Yuhong OMRON Corporation
- */
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/MultiSinkP.h,v 1.8 2001/01/17 19:42:28 dawes Exp $ */
-
-#ifndef _XawMultiSinkP_h
-#define _XawMultiSinkP_h
-
-#include <X11/Xfuncproto.h>
-
-/*
- * MultiSink Object Private Data
- */
-#include <X11/Xaw/TextSinkP.h>
-#include <X11/Xaw/MultiSink.h>
-
-/* new fields for the MultiSink object class */
-typedef struct _MultiSinkClassPart {
- XtPointer extension;
-} MultiSinkClassPart;
-
-/* Full class record declaration */
-typedef struct _MultiSinkClassRec {
- ObjectClassPart object_class;
- TextSinkClassPart text_sink_class;
- MultiSinkClassPart multi_sink_class;
-} MultiSinkClassRec;
-
-extern MultiSinkClassRec multiSinkClassRec;
-
-/* New fields for the MultiSink object record */
-typedef struct {
- /* resources */
- Boolean echo;
- Boolean display_nonprinting;
-
- /* private */
- GC normgc, invgc, xorgc;
- XawTextPosition cursor_position;
- XawTextInsertState laststate;
- short cursor_x, cursor_y; /* Cursor Location */
- XFontSet fontset; /* font set to draw */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} MultiSinkPart;
-
-/* Full instance record declaration */
-typedef struct _MultiSinkRec {
- ObjectPart object;
- TextSinkPart text_sink;
- MultiSinkPart multi_sink;
-} MultiSinkRec;
-
-/*
- * Semi-private functions
- * for use by other Xaw modules only
- */
-_XFUNCPROTOBEGIN
-
-void _XawMultiSinkPosToXY
-(
- Widget w,
- XawTextPosition pos,
- Position *x,
- Position *y
-);
-
-_XFUNCPROTOEND
-
-#endif /* _XawMultiSinkP_h */
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OMRON make no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OMRON 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
+ * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Li Yuhong OMRON Corporation
+ */
+
+
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawMultiSinkP_h
+#define _XawMultiSinkP_h
+
+#include <X11/Xfuncproto.h>
+
+/*
+ * MultiSink Object Private Data
+ */
+#include <X11/Xaw/TextSinkP.h>
+#include <X11/Xaw/MultiSink.h>
+
+/* new fields for the MultiSink object class */
+typedef struct _MultiSinkClassPart {
+ XtPointer extension;
+} MultiSinkClassPart;
+
+/* Full class record declaration */
+typedef struct _MultiSinkClassRec {
+ ObjectClassPart object_class;
+ TextSinkClassPart text_sink_class;
+ MultiSinkClassPart multi_sink_class;
+} MultiSinkClassRec;
+
+extern MultiSinkClassRec multiSinkClassRec;
+
+/* New fields for the MultiSink object record */
+typedef struct {
+ /* resources */
+ Boolean echo;
+ Boolean display_nonprinting;
+
+ /* private */
+ GC normgc, invgc, xorgc;
+ XawTextPosition cursor_position;
+ XawTextInsertState laststate;
+ short cursor_x, cursor_y; /* Cursor Location */
+ XFontSet fontset; /* font set to draw */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} MultiSinkPart;
+
+/* Full instance record declaration */
+typedef struct _MultiSinkRec {
+ ObjectPart object;
+ TextSinkPart text_sink;
+ MultiSinkPart multi_sink;
+} MultiSinkRec;
+
+/*
+ * Semi-private functions
+ * for use by other Xaw modules only
+ */
+_XFUNCPROTOBEGIN
+
+void _XawMultiSinkPosToXY
+(
+ Widget w,
+ XawTextPosition pos,
+ Position *x,
+ Position *y
+);
+
+_XFUNCPROTOEND
+
+#endif /* _XawMultiSinkP_h */
diff --git a/libXaw/include/X11/Xaw/MultiSrc.h b/libXaw/include/X11/Xaw/MultiSrc.h
index 00c27f6c7..07c8637d2 100644
--- a/libXaw/include/X11/Xaw/MultiSrc.h
+++ b/libXaw/include/X11/Xaw/MultiSrc.h
@@ -1,133 +1,130 @@
-/* $Xorg: MultiSrc.h,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. OMRON makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL OMRON 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
- * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Li Yuhong OMRON Corporation
- */
-
-/*
-
-Copyright 1989, 1991, 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/MultiSrc.h,v 1.6 2001/01/17 19:42:28 dawes Exp $ */
-
-/*
- * This file was modified from AsciiSrc.h.
- *
- * By Li Yuhong, Sept. 18, 1990
- */
-
-#ifndef _XawMultiSrc_h
-#define _XawMultiSrc_h
-
-#include <X11/Xaw/TextSrc.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- dataCompression DataCompression Boolean True
- length Length int (internal)
- pieceSize PieceSize int BUFSIZ
- string String String NULL
- type Type XawAsciiType XawAsciiString
- useStringInPlace UseStringInPlace Boolean False
-
-*/
-
-extern WidgetClass multiSrcObjectClass;
-
-typedef struct _MultiSrcClassRec *MultiSrcObjectClass;
-typedef struct _MultiSrcRec *MultiSrcObject;
-
-#define MultiSourceObjectClass MultiSrcObjectClass
-#define MultiSourceObject MultiSrcObject
-
-#define XtCDataCompression "DataCompression"
-#define XtCPieceSize "PieceSize"
-#define XtCType "Type"
-#define XtCUseStringInPlace "UseStringInPlace"
-
-#define XtNdataCompression "dataCompression"
-#define XtNpieceSize "pieceSize"
-#define XtNtype "type"
-#define XtNuseStringInPlace "useStringInPlace"
-
-#define XtRMultiType "MultiType"
-
-#define XtEstring "string"
-#define XtEfile "file"
-
-/************************************************************
- *
- * THESE ROUTINES ARE NOT PUBLIC: Source should call
- *
- * the AsciiSrc API which currently forwards requests here.
- *
- * future versions (like theres going to be an R7 Xaw!) may
- *
- * eliminate this file or at least these functions entirely.
- *
- ************************************************************/
-
-_XFUNCPROTOBEGIN
-
-void XawMultiSourceFreeString
-(
- Widget w
- );
-
-Bool _XawMultiSave
-(
- Widget w
-);
-
-Bool _XawMultiSaveAsFile
-(
- Widget w,
- _Xconst char *name
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawMultiSrc_h */
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OMRON makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OMRON 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
+ * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Li Yuhong OMRON Corporation
+ */
+
+/*
+
+Copyright 1989, 1991, 1994, 1998 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.
+
+*/
+
+/*
+ * This file was modified from AsciiSrc.h.
+ *
+ * By Li Yuhong, Sept. 18, 1990
+ */
+
+#ifndef _XawMultiSrc_h
+#define _XawMultiSrc_h
+
+#include <X11/Xaw/TextSrc.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ dataCompression DataCompression Boolean True
+ length Length int (internal)
+ pieceSize PieceSize int BUFSIZ
+ string String String NULL
+ type Type XawAsciiType XawAsciiString
+ useStringInPlace UseStringInPlace Boolean False
+
+*/
+
+extern WidgetClass multiSrcObjectClass;
+
+typedef struct _MultiSrcClassRec *MultiSrcObjectClass;
+typedef struct _MultiSrcRec *MultiSrcObject;
+
+#define MultiSourceObjectClass MultiSrcObjectClass
+#define MultiSourceObject MultiSrcObject
+
+#define XtCDataCompression "DataCompression"
+#define XtCPieceSize "PieceSize"
+#define XtCType "Type"
+#define XtCUseStringInPlace "UseStringInPlace"
+
+#define XtNdataCompression "dataCompression"
+#define XtNpieceSize "pieceSize"
+#define XtNtype "type"
+#define XtNuseStringInPlace "useStringInPlace"
+
+#define XtRMultiType "MultiType"
+
+#define XtEstring "string"
+#define XtEfile "file"
+
+/************************************************************
+ *
+ * THESE ROUTINES ARE NOT PUBLIC: Source should call
+ *
+ * the AsciiSrc API which currently forwards requests here.
+ *
+ * future versions (like theres going to be an R7 Xaw!) may
+ *
+ * eliminate this file or at least these functions entirely.
+ *
+ ************************************************************/
+
+_XFUNCPROTOBEGIN
+
+void XawMultiSourceFreeString
+(
+ Widget w
+ );
+
+Bool _XawMultiSave
+(
+ Widget w
+);
+
+Bool _XawMultiSaveAsFile
+(
+ Widget w,
+ _Xconst char *name
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawMultiSrc_h */
diff --git a/libXaw/include/X11/Xaw/MultiSrcP.h b/libXaw/include/X11/Xaw/MultiSrcP.h
index 49f7abc3a..a96473db0 100644
--- a/libXaw/include/X11/Xaw/MultiSrcP.h
+++ b/libXaw/include/X11/Xaw/MultiSrcP.h
@@ -1,182 +1,179 @@
-/* $Xorg: MultiSrcP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. OMRON make no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * OMRON DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL OMRON 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
- * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Li Yuhong OMRON Corporation
- */
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1991, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/MultiSrcP.h,v 1.8 2001/01/17 19:42:28 dawes Exp $ */
-
-/*
- * MultiSrcP.h - Private Header for Multi Text Source.
- *
- * This is the private header file for the Multi Text Source.
- * It is intended to be used with the Text widget, the simplest way to use
- * this text source is to use the MultiText Object.
- *
- * Date: June 29, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-/*
- * This file was changed from AsciiSrcP.h.
- *
- * By Li Yuhong, Sept. 18, 1990
- */
-
-#ifndef _XawMultiSrcP_h
-#define _XawMultiSrcP_h
-
-#include <X11/Xfuncproto.h>
-#include <X11/Xaw/TextSrcP.h>
-#include <X11/Xaw/MultiSrc.h>
-
-#ifdef L_tmpnam
-#define TMPSIZ L_tmpnam
-#else
-#ifdef PATH_MAX
-#define TMPSIZ PATH_MAX
-#else
-#define TMPSIZ 1024 /* bytes to allocate for tmpnam */
-#endif
-#endif
-
-typedef struct _MultiPiece { /* Piece of the text file of BUFSIZ allocated
- characters */
- wchar_t* text; /* The text in this buffer */
- XawTextPosition used; /* The number of characters of this buffer
- that have been used */
- struct _MultiPiece *prev, *next; /* linked list pointers */
-} MultiPiece;
-
-/* New fields for the MultiSrc object class */
-typedef struct _MultiSrcClassPart {
- XtPointer extension;
-} MultiSrcClassPart;
-
-/* Full class record */
-typedef struct _MultiSrcClassRec {
- ObjectClassPart object_class;
- TextSrcClassPart text_src_class;
- MultiSrcClassPart multi_src_class;
-} MultiSrcClassRec;
-
-extern MultiSrcClassRec multiSrcClassRec;
-
-/* New fields for the MultiSrc object */
-typedef struct _MultiSrcPart {
- /* resources */
- XIC ic; /* for X Input Method */
- XtPointer string; /* either the string, or the file name, depend-
- ing upon the `type'. ALWAYS IN MB FORMAT */
- XawAsciiType type; /* either string or disk */
- XawTextPosition piece_size; /* Size of text buffer for each piece */
- Boolean data_compression; /* compress to minimum memory automatically
- on save? */
-#ifdef OLDXAW
- XtCallbackList callback;
-#endif
- Boolean use_string_in_place;/* Use the string passed in place */
- int multi_length; /* length field for multi string emulation */
-
- /* private */
-
- Boolean is_tempfile; /* Is this a temporary file? */
-#ifdef OLDXAW
- Boolean changes;
-#endif
- Boolean allocated_string; /* Have I allocated the
- string in multi_src->string? */
- XawTextPosition length; /* length of file - IN CHARACTERS, NOT BYTES */
- MultiPiece *first_piece; /* first piece of the text */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} MultiSrcPart;
-
-/* Full instance record */
-typedef struct _MultiSrcRec {
- ObjectPart object;
- TextSrcPart text_src;
- MultiSrcPart multi_src;
-} MultiSrcRec;
-
-_XFUNCPROTOBEGIN
-
-void _XawMultiSourceFreeString
-(
- Widget w
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawMultiSrcP_h */
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OMRON make no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * OMRON DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OMRON 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
+ * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Li Yuhong OMRON Corporation
+ */
+
+
+/***********************************************************
+
+Copyright 1987, 1988, 1991, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * MultiSrcP.h - Private Header for Multi Text Source.
+ *
+ * This is the private header file for the Multi Text Source.
+ * It is intended to be used with the Text widget, the simplest way to use
+ * this text source is to use the MultiText Object.
+ *
+ * Date: June 29, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+/*
+ * This file was changed from AsciiSrcP.h.
+ *
+ * By Li Yuhong, Sept. 18, 1990
+ */
+
+#ifndef _XawMultiSrcP_h
+#define _XawMultiSrcP_h
+
+#include <X11/Xfuncproto.h>
+#include <X11/Xaw/TextSrcP.h>
+#include <X11/Xaw/MultiSrc.h>
+
+#ifdef L_tmpnam
+#define TMPSIZ L_tmpnam
+#else
+#ifdef PATH_MAX
+#define TMPSIZ PATH_MAX
+#else
+#define TMPSIZ 1024 /* bytes to allocate for tmpnam */
+#endif
+#endif
+
+typedef struct _MultiPiece { /* Piece of the text file of BUFSIZ allocated
+ characters */
+ wchar_t* text; /* The text in this buffer */
+ XawTextPosition used; /* The number of characters of this buffer
+ that have been used */
+ struct _MultiPiece *prev, *next; /* linked list pointers */
+} MultiPiece;
+
+/* New fields for the MultiSrc object class */
+typedef struct _MultiSrcClassPart {
+ XtPointer extension;
+} MultiSrcClassPart;
+
+/* Full class record */
+typedef struct _MultiSrcClassRec {
+ ObjectClassPart object_class;
+ TextSrcClassPart text_src_class;
+ MultiSrcClassPart multi_src_class;
+} MultiSrcClassRec;
+
+extern MultiSrcClassRec multiSrcClassRec;
+
+/* New fields for the MultiSrc object */
+typedef struct _MultiSrcPart {
+ /* resources */
+ XIC ic; /* for X Input Method */
+ XtPointer string; /* either the string, or the file name, depend-
+ ing upon the `type'. ALWAYS IN MB FORMAT */
+ XawAsciiType type; /* either string or disk */
+ XawTextPosition piece_size; /* Size of text buffer for each piece */
+ Boolean data_compression; /* compress to minimum memory automatically
+ on save? */
+#ifdef OLDXAW
+ XtCallbackList callback;
+#endif
+ Boolean use_string_in_place;/* Use the string passed in place */
+ int multi_length; /* length field for multi string emulation */
+
+ /* private */
+
+ Boolean is_tempfile; /* Is this a temporary file? */
+#ifdef OLDXAW
+ Boolean changes;
+#endif
+ Boolean allocated_string; /* Have I allocated the
+ string in multi_src->string? */
+ XawTextPosition length; /* length of file - IN CHARACTERS, NOT BYTES */
+ MultiPiece *first_piece; /* first piece of the text */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} MultiSrcPart;
+
+/* Full instance record */
+typedef struct _MultiSrcRec {
+ ObjectPart object;
+ TextSrcPart text_src;
+ MultiSrcPart multi_src;
+} MultiSrcRec;
+
+_XFUNCPROTOBEGIN
+
+void _XawMultiSourceFreeString
+(
+ Widget w
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawMultiSrcP_h */
diff --git a/libXaw/include/X11/Xaw/Paned.h b/libXaw/include/X11/Xaw/Paned.h
index aaa532030..e0b2e09d1 100644
--- a/libXaw/include/X11/Xaw/Paned.h
+++ b/libXaw/include/X11/Xaw/Paned.h
@@ -1,264 +1,258 @@
-/*
-* $Xorg: Paned.h,v 1.5 2001/02/09 02:03:45 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Paned.h,v 1.6 2001/01/17 19:42:28 dawes Exp $ */
-
-/*
- * Paned.h - Paned Composite Widget's public header file.
- *
- * Updated and significantly modifided from the Athena VPaned Widget.
- *
- * Date: March 1, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _XawPaned_h
-#define _XawPaned_h
-
-#include <X11/Intrinsic.h>
-#include <X11/Xmu/Converters.h>
-
-/* RESOURCES:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- betweenCursor Cursor Cursor **
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- cursor Cursor Cursor None
- destroyCallback Callback Pointer NULL
- height Height Dimension 0
- gripIndent GripIndent Position 16
- gripCursor Cursor Cursor **
- horizontalGripCursol Cursor Cursor sb_h_double_arrow
- horizontalBetweencursor Cursor Cursor sb_up_arrow
- internalBorderColor BorderColor Pixel XtDefaultForeground
- internalBorderWidth BorderWidth Position 1
- leftCursor Cursor Cursor sb_left_arrow
- lowerCursor Cursor Cursor sb_down_arrow
- mappedWhenManaged MappedWhenManaged Boolean True
- orientation Orientation XtOrientation XtorientVertical
- refigureMode Boolean Boolean On
- rightCursor Cursor Cursor sb_right_arrow
- sensitive Sensitive Boolean True
- upperCursor Cursor Cursor sb_up_arrow
- verticalBetweenCursor Cursor Cursor sb_left_arrow
- verticalGripCursor Cursor Cursor sb_v_double_arrow
- width Width Dimension 0
- x Position Position 0
- y Position Position 0
-
-** These resources now are set to the vertical or horizontal cursor
- depending upon orientation, by default. If a value is specified here
- then that cursor will be used reguardless of orientation.
-
-
-CONSTRAINT RESOURCES:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- allowResize Boolean Boolean False
- max Max Dimension unlimited
- min Min Dimension Grip Size
- preferredPaneSize PreferredPaneSize Dimension PANED_ASK_CHILD
- resizeToPreferred Boolean Boolean False
- showGrip ShowGrip Boolean True
- skipAdjust Boolean Boolean False
-
-*/
-
-#define PANED_ASK_CHILD 0
-#define PANED_GRIP_SIZE 0
-
-#define XtNallowResize "allowResize"
-#define XtNbetweenCursor "betweenCursor"
-#define XtNverticalBetweenCursor "verticalBetweenCursor"
-#define XtNhorizontalBetweenCursor "horizontalBetweenCursor"
-#define XtNgripCursor "gripCursor"
-#define XtNgripIndent "gripIndent"
-#define XtNhorizontalGripCursor "horizontalGripCursor"
-#define XtNinternalBorderColor "internalBorderColor"
-#define XtNinternalBorderWidth "internalBorderWidth"
-#define XtNleftCursor "leftCursor"
-#define XtNlowerCursor "lowerCursor"
-#define XtNrefigureMode "refigureMode"
-#define XtNposition "position"
-#define XtNmin "min"
-#define XtNmax "max"
-#define XtNpreferredPaneSize "preferredPaneSize"
-#define XtNresizeToPreferred "resizeToPreferred"
-#define XtNrightCursor "rightCursor"
-#define XtNshowGrip "showGrip"
-#define XtNskipAdjust "skipAdjust"
-#define XtNupperCursor "upperCursor"
-#define XtNverticalGripCursor "verticalGripCursor"
-
-#define XtCGripIndent "GripIndent"
-#define XtCMin "Min"
-#define XtCMax "Max"
-#define XtCPreferredPaneSize "PreferredPaneSize"
-#define XtCShowGrip "ShowGrip"
-
-/* Class record constant */
-extern WidgetClass panedWidgetClass;
-
-typedef struct _PanedClassRec *PanedWidgetClass;
-typedef struct _PanedRec *PanedWidget;
-
-/*
- * Public Procedures
- */
-
-_XFUNCPROTOBEGIN
-
-/*
- * Function:
- * XawPanedSetMinMax
- *
- * Parameters:
- * widget - widget that is a child of the Paned widget
- * min - new min and max size for the pane
- * max - ""
- *
- * Description:
- * Sets the min and max size for a pane.
- */
-void XawPanedSetMinMax
-(
- Widget w,
- int min,
- int max
- );
-
-/*
- * Function:
- * XawPanedGetMinMax
- *
- * Parameters:
- * widget - widget that is a child of the Paned widget
- * min - return the current min and max size for the pane
- * max - ""
- *
- * Description:
- * Gets the min and max size for a pane.
- */
-void XawPanedGetMinMax
-(
- Widget w,
- int *min_return,
- int *max_return
- );
-
-/*
- * Function:
- * XawPanedSetRefigureMode
- *
- * Parameters:
- * w - paned widget
- * mode - if False then inhibit refigure
- *
- * Description:
- * Allows a flag to be set the will inhibit the paned widgets
- * relayout routine.
- */
-void XawPanedSetRefigureMode
-(
- Widget w,
-#if NeedWidePrototypes
- int mode
-#else
- Boolean mode
-#endif
- );
-
-/*
- * Function:
- * XawPanedGetNumSub
- *
- * Parameters:
- * w - paned widget
- *
- * Returns:
- * Number of panes in the paned widget.
- */
-int XawPanedGetNumSub
-(
- Widget w
- );
-
-/*
- * Function:
- * XawPanedAllowResize
- *
- * Parameters:
- * widget - child of the paned widget
- *
- * Description:
- * Allows a flag to be set that determines if the paned widget will
- * allow geometry requests from this child
- */
-void XawPanedAllowResize
-(
- Widget w,
-#if NeedWidePrototypes
- int allow_resize
-#else
- Boolean allow_resize
-#endif
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawPaned_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * Paned.h - Paned Composite Widget's public header file.
+ *
+ * Updated and significantly modifided from the Athena VPaned Widget.
+ *
+ * Date: March 1, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _XawPaned_h
+#define _XawPaned_h
+
+#include <X11/Intrinsic.h>
+#include <X11/Xmu/Converters.h>
+
+/* RESOURCES:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ betweenCursor Cursor Cursor **
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ cursor Cursor Cursor None
+ destroyCallback Callback Pointer NULL
+ height Height Dimension 0
+ gripIndent GripIndent Position 16
+ gripCursor Cursor Cursor **
+ horizontalGripCursol Cursor Cursor sb_h_double_arrow
+ horizontalBetweencursor Cursor Cursor sb_up_arrow
+ internalBorderColor BorderColor Pixel XtDefaultForeground
+ internalBorderWidth BorderWidth Position 1
+ leftCursor Cursor Cursor sb_left_arrow
+ lowerCursor Cursor Cursor sb_down_arrow
+ mappedWhenManaged MappedWhenManaged Boolean True
+ orientation Orientation XtOrientation XtorientVertical
+ refigureMode Boolean Boolean On
+ rightCursor Cursor Cursor sb_right_arrow
+ sensitive Sensitive Boolean True
+ upperCursor Cursor Cursor sb_up_arrow
+ verticalBetweenCursor Cursor Cursor sb_left_arrow
+ verticalGripCursor Cursor Cursor sb_v_double_arrow
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+** These resources now are set to the vertical or horizontal cursor
+ depending upon orientation, by default. If a value is specified here
+ then that cursor will be used reguardless of orientation.
+
+
+CONSTRAINT RESOURCES:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ allowResize Boolean Boolean False
+ max Max Dimension unlimited
+ min Min Dimension Grip Size
+ preferredPaneSize PreferredPaneSize Dimension PANED_ASK_CHILD
+ resizeToPreferred Boolean Boolean False
+ showGrip ShowGrip Boolean True
+ skipAdjust Boolean Boolean False
+
+*/
+
+#define PANED_ASK_CHILD 0
+#define PANED_GRIP_SIZE 0
+
+#define XtNallowResize "allowResize"
+#define XtNbetweenCursor "betweenCursor"
+#define XtNverticalBetweenCursor "verticalBetweenCursor"
+#define XtNhorizontalBetweenCursor "horizontalBetweenCursor"
+#define XtNgripCursor "gripCursor"
+#define XtNgripIndent "gripIndent"
+#define XtNhorizontalGripCursor "horizontalGripCursor"
+#define XtNinternalBorderColor "internalBorderColor"
+#define XtNinternalBorderWidth "internalBorderWidth"
+#define XtNleftCursor "leftCursor"
+#define XtNlowerCursor "lowerCursor"
+#define XtNrefigureMode "refigureMode"
+#define XtNposition "position"
+#define XtNmin "min"
+#define XtNmax "max"
+#define XtNpreferredPaneSize "preferredPaneSize"
+#define XtNresizeToPreferred "resizeToPreferred"
+#define XtNrightCursor "rightCursor"
+#define XtNshowGrip "showGrip"
+#define XtNskipAdjust "skipAdjust"
+#define XtNupperCursor "upperCursor"
+#define XtNverticalGripCursor "verticalGripCursor"
+
+#define XtCGripIndent "GripIndent"
+#define XtCMin "Min"
+#define XtCMax "Max"
+#define XtCPreferredPaneSize "PreferredPaneSize"
+#define XtCShowGrip "ShowGrip"
+
+/* Class record constant */
+extern WidgetClass panedWidgetClass;
+
+typedef struct _PanedClassRec *PanedWidgetClass;
+typedef struct _PanedRec *PanedWidget;
+
+/*
+ * Public Procedures
+ */
+
+_XFUNCPROTOBEGIN
+
+/*
+ * Function:
+ * XawPanedSetMinMax
+ *
+ * Parameters:
+ * widget - widget that is a child of the Paned widget
+ * min - new min and max size for the pane
+ * max - ""
+ *
+ * Description:
+ * Sets the min and max size for a pane.
+ */
+void XawPanedSetMinMax
+(
+ Widget w,
+ int min,
+ int max
+ );
+
+/*
+ * Function:
+ * XawPanedGetMinMax
+ *
+ * Parameters:
+ * widget - widget that is a child of the Paned widget
+ * min - return the current min and max size for the pane
+ * max - ""
+ *
+ * Description:
+ * Gets the min and max size for a pane.
+ */
+void XawPanedGetMinMax
+(
+ Widget w,
+ int *min_return,
+ int *max_return
+ );
+
+/*
+ * Function:
+ * XawPanedSetRefigureMode
+ *
+ * Parameters:
+ * w - paned widget
+ * mode - if False then inhibit refigure
+ *
+ * Description:
+ * Allows a flag to be set the will inhibit the paned widgets
+ * relayout routine.
+ */
+void XawPanedSetRefigureMode
+(
+ Widget w,
+#if NeedWidePrototypes
+ int mode
+#else
+ Boolean mode
+#endif
+ );
+
+/*
+ * Function:
+ * XawPanedGetNumSub
+ *
+ * Parameters:
+ * w - paned widget
+ *
+ * Returns:
+ * Number of panes in the paned widget.
+ */
+int XawPanedGetNumSub
+(
+ Widget w
+ );
+
+/*
+ * Function:
+ * XawPanedAllowResize
+ *
+ * Parameters:
+ * widget - child of the paned widget
+ *
+ * Description:
+ * Allows a flag to be set that determines if the paned widget will
+ * allow geometry requests from this child
+ */
+void XawPanedAllowResize
+(
+ Widget w,
+#if NeedWidePrototypes
+ int allow_resize
+#else
+ Boolean allow_resize
+#endif
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawPaned_h */
diff --git a/libXaw/include/X11/Xaw/PanedP.h b/libXaw/include/X11/Xaw/PanedP.h
index a94b0f34d..99dd076fe 100644
--- a/libXaw/include/X11/Xaw/PanedP.h
+++ b/libXaw/include/X11/Xaw/PanedP.h
@@ -1,180 +1,176 @@
-/***********************************************************
-
- $Xorg: PanedP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
-
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/PanedP.h,v 1.7 2001/01/17 19:42:28 dawes Exp $ */
-
-/*
- * Updated and significantly modified from the Athena VPaned Widget.
- *
- * Date: March 1, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _XawPanedP_h
-#define _XawPanedP_h
-
-#include <X11/Xaw/Paned.h>
-
-/* New fields for the Paned widget class record */
-typedef struct _PanedClassPart {
- XtPointer extension;
-} PanedClassPart;
-
-/* Full Class record declaration */
-typedef struct _PanedClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ConstraintClassPart constraint_class;
- PanedClassPart paned_class;
-} PanedClassRec;
-
-extern PanedClassRec panedClassRec;
-
-/* Paned constraint record */
-typedef struct _PanedConstraintsPart {
- /* Resources */
- Dimension min; /* Minimum height */
- Dimension max; /* Maximum height */
- Boolean allow_resize; /* True if child resize requests are ok */
- Boolean show_grip; /* True if child will have grip below it,
- when it is not the bottom pane */
- Boolean skip_adjust; /* True if child's height should not be
- changed without explicit user action */
- int position; /* position location in Paned (relative to
- other children) ** NIY ** */
- Dimension preferred_size; /* The Preferred size of the pane.
- If this is zero then ask child for size*/
- Boolean resize_to_pref; /* resize this pane to its preferred size
- on a resize or change managed after
- realize */
-
- /* Private state */
- Position delta; /* Desired Location */
- Position olddelta; /* The last value of dy */
- Boolean paned_adjusted_me; /* Has the vpaned adjusted this widget w/o
- user interaction to make things fit? */
- Dimension wp_size; /* widget's preferred size */
- int size; /* the size the widget will actually get */
- Widget grip; /* The grip for this child */
-} PanedConstraintsPart, *Pane;
-
-typedef struct _PanedConstraintsRec {
- PanedConstraintsPart paned;
-} PanedConstraintsRec, *PanedConstraints;
-
-/*
- * The Pane Stack Structure
- */
-typedef struct _PaneStack {
- struct _PaneStack *next; /* The next element on the stack */
- Pane pane; /* The pane in this element on the stack */
- int start_size; /* The size of this element when it
- was pushed onto the stack */
-} PaneStack;
-
-/* New Fields for the Paned widget record */
-typedef struct {
- /* resources */
- Position grip_indent; /* Location of grips (offset
- from right margin) */
- Boolean refiguremode; /* Whether to refigure changes
- right now */
- XtTranslations grip_translations; /* grip translation table */
- Pixel internal_bp; /* color of internal borders */
- Dimension internal_bw; /* internal border width */
- XtOrientation orientation; /* Orientation of paned widget */
-
- Cursor cursor; /* Cursor for paned window */
- Cursor grip_cursor; /* inactive grip cursor */
- Cursor v_grip_cursor; /* inactive vert grip cursor */
- Cursor h_grip_cursor; /* inactive horiz grip cursor */
- Cursor adjust_this_cursor; /* active grip cursor: T */
- Cursor v_adjust_this_cursor; /* active vert grip cursor: T */
- Cursor h_adjust_this_cursor; /* active horiz grip cursor: T */
-
- /* vertical */
- Cursor adjust_upper_cursor; /* active grip cursor: U */
- Cursor adjust_lower_cursor; /* active grip cursor: D */
-
- /* horizontal */
- Cursor adjust_left_cursor; /* active grip cursor: U */
- Cursor adjust_right_cursor; /* active grip cursor: D */
-
- /* private */
- Boolean recursively_called; /* for ChangeManaged */
- Boolean resize_children_to_pref; /* override constrain resources
- and resize all children to
- preferred size */
- int start_loc; /* mouse origin when adjusting */
- Widget whichadd; /* Which pane to add changes to */
- Widget whichsub; /* Which pane to sub changes from */
- GC normgc; /* GC to use when drawing borders */
- GC invgc; /* GC to use when erasing borders */
- GC flipgc; /* GC to use when animating borders */
- int num_panes; /* count of managed panes */
- PaneStack *stack; /* The pane stack for this widget */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} PanedPart;
-
-/*
- * Full instance record declaration
- */
-typedef struct _PanedRec {
- CorePart core;
- CompositePart composite;
- ConstraintPart constraint;
- PanedPart paned;
-} PanedRec;
-
-#endif /* _XawPanedP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * Updated and significantly modified from the Athena VPaned Widget.
+ *
+ * Date: March 1, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _XawPanedP_h
+#define _XawPanedP_h
+
+#include <X11/Xaw/Paned.h>
+
+/* New fields for the Paned widget class record */
+typedef struct _PanedClassPart {
+ XtPointer extension;
+} PanedClassPart;
+
+/* Full Class record declaration */
+typedef struct _PanedClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ConstraintClassPart constraint_class;
+ PanedClassPart paned_class;
+} PanedClassRec;
+
+extern PanedClassRec panedClassRec;
+
+/* Paned constraint record */
+typedef struct _PanedConstraintsPart {
+ /* Resources */
+ Dimension min; /* Minimum height */
+ Dimension max; /* Maximum height */
+ Boolean allow_resize; /* True if child resize requests are ok */
+ Boolean show_grip; /* True if child will have grip below it,
+ when it is not the bottom pane */
+ Boolean skip_adjust; /* True if child's height should not be
+ changed without explicit user action */
+ int position; /* position location in Paned (relative to
+ other children) ** NIY ** */
+ Dimension preferred_size; /* The Preferred size of the pane.
+ If this is zero then ask child for size*/
+ Boolean resize_to_pref; /* resize this pane to its preferred size
+ on a resize or change managed after
+ realize */
+
+ /* Private state */
+ Position delta; /* Desired Location */
+ Position olddelta; /* The last value of dy */
+ Boolean paned_adjusted_me; /* Has the vpaned adjusted this widget w/o
+ user interaction to make things fit? */
+ Dimension wp_size; /* widget's preferred size */
+ int size; /* the size the widget will actually get */
+ Widget grip; /* The grip for this child */
+} PanedConstraintsPart, *Pane;
+
+typedef struct _PanedConstraintsRec {
+ PanedConstraintsPart paned;
+} PanedConstraintsRec, *PanedConstraints;
+
+/*
+ * The Pane Stack Structure
+ */
+typedef struct _PaneStack {
+ struct _PaneStack *next; /* The next element on the stack */
+ Pane pane; /* The pane in this element on the stack */
+ int start_size; /* The size of this element when it
+ was pushed onto the stack */
+} PaneStack;
+
+/* New Fields for the Paned widget record */
+typedef struct {
+ /* resources */
+ Position grip_indent; /* Location of grips (offset
+ from right margin) */
+ Boolean refiguremode; /* Whether to refigure changes
+ right now */
+ XtTranslations grip_translations; /* grip translation table */
+ Pixel internal_bp; /* color of internal borders */
+ Dimension internal_bw; /* internal border width */
+ XtOrientation orientation; /* Orientation of paned widget */
+
+ Cursor cursor; /* Cursor for paned window */
+ Cursor grip_cursor; /* inactive grip cursor */
+ Cursor v_grip_cursor; /* inactive vert grip cursor */
+ Cursor h_grip_cursor; /* inactive horiz grip cursor */
+ Cursor adjust_this_cursor; /* active grip cursor: T */
+ Cursor v_adjust_this_cursor; /* active vert grip cursor: T */
+ Cursor h_adjust_this_cursor; /* active horiz grip cursor: T */
+
+ /* vertical */
+ Cursor adjust_upper_cursor; /* active grip cursor: U */
+ Cursor adjust_lower_cursor; /* active grip cursor: D */
+
+ /* horizontal */
+ Cursor adjust_left_cursor; /* active grip cursor: U */
+ Cursor adjust_right_cursor; /* active grip cursor: D */
+
+ /* private */
+ Boolean recursively_called; /* for ChangeManaged */
+ Boolean resize_children_to_pref; /* override constrain resources
+ and resize all children to
+ preferred size */
+ int start_loc; /* mouse origin when adjusting */
+ Widget whichadd; /* Which pane to add changes to */
+ Widget whichsub; /* Which pane to sub changes from */
+ GC normgc; /* GC to use when drawing borders */
+ GC invgc; /* GC to use when erasing borders */
+ GC flipgc; /* GC to use when animating borders */
+ int num_panes; /* count of managed panes */
+ PaneStack *stack; /* The pane stack for this widget */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} PanedPart;
+
+/*
+ * Full instance record declaration
+ */
+typedef struct _PanedRec {
+ CorePart core;
+ CompositePart composite;
+ ConstraintPart constraint;
+ PanedPart paned;
+} PanedRec;
+
+#endif /* _XawPanedP_h */
diff --git a/libXaw/include/X11/Xaw/Panner.h b/libXaw/include/X11/Xaw/Panner.h
index 594e2eb47..15bad4c02 100644
--- a/libXaw/include/X11/Xaw/Panner.h
+++ b/libXaw/include/X11/Xaw/Panner.h
@@ -1,107 +1,105 @@
-/*
- * $Xorg: Panner.h,v 1.5 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/Panner.h,v 1.5 2001/01/17 19:42:28 dawes Exp $ */
-
-#ifndef _XawPanner_h
-#define _XawPanner_h
-
-#include <X11/Intrinsic.h>
-#include <X11/Xaw/Reports.h>
-
-/*****************************************************************************
- *
- * Panner Widget (subclass of Simple)
- *
- * This widget is used to represent navigation in a 2d coordinate system
- *
- * Resources:
- *
- * Name Class Type Default
- * ---- ----- ---- -------
- *
- * allowOff AllowOff Boolean FALSE
- * background Background Pixel XtDefaultBackground
- * backgroundStipple BackgroundStipple String NULL
- * canvasWidth CanvasWidth Dimension 0
- * canvasHeight CanvasHeight Dimension 0
- * defaultScale DefaultScale Dimension 8 percent
- * foreground Foreground Pixel XtDefaultBackground
- * internalSpace InternalSpace Dimension 4
- * lineWidth LineWidth Dimension 0
- * reportCallback ReportCallback XtCallbackList NULL
- * resize Resize Boolean TRUE
- * rubberBand RubberBand Boolean FALSE
- * shadowColor ShadowColor Pixel XtDefaultForeground
- * shadowThickness ShadowThickness Dimension 2
- * sliderX SliderX Position 0
- * sliderY SliderY Position 0
- * sliderWidth SliderWidth Dimension 0
- * sliderHeight SliderHeight Dimension 0
- *
- *****************************************************************************/
-
-#ifndef _XtStringDefs_h_
-#define XtNresize "resize"
-#define XtCResize "Resize"
-#endif
-
-#define XtNallowOff "allowOff"
-#define XtCAllowOff "AllowOff"
-#define XtNbackgroundStipple "backgroundStipple"
-#define XtCBackgroundStipple "BackgroundStipple"
-#define XtNdefaultScale "defaultScale"
-#define XtCDefaultScale "DefaultScale"
-#define XtNcanvasWidth "canvasWidth"
-#define XtCCanvasWidth "CanvasWidth"
-#define XtNcanvasHeight "canvasHeight"
-#define XtCCanvasHeight "CanvasHeight"
-#define XtNinternalSpace "internalSpace"
-#define XtCInternalSpace "InternalSpace"
-#define XtNlineWidth "lineWidth"
-#define XtCLineWidth "LineWidth"
-#define XtNrubberBand "rubberBand"
-#define XtCRubberBand "RubberBand"
-#define XtNshadowThickness "shadowThickness"
-#define XtCShadowThickness "ShadowThickness"
-#define XtNshadowColor "shadowColor"
-#define XtCShadowColor "ShadowColor"
-#define XtNsliderX "sliderX"
-#define XtCSliderX "SliderX"
-#define XtNsliderY "sliderY"
-#define XtCSliderY "SliderY"
-#define XtNsliderWidth "sliderWidth"
-#define XtCSliderWidth "SliderWidth"
-#define XtNsliderHeight "sliderHeight"
-#define XtCSliderHeight "SliderHeight"
-
-extern WidgetClass pannerWidgetClass;
-
-typedef struct _PannerClassRec *PannerWidgetClass;
-typedef struct _PannerRec *PannerWidget;
-
-#endif /* _XawPanner_h */
+/*
+ *
+Copyright 1989, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ */
+
+#ifndef _XawPanner_h
+#define _XawPanner_h
+
+#include <X11/Intrinsic.h>
+#include <X11/Xaw/Reports.h>
+
+/*****************************************************************************
+ *
+ * Panner Widget (subclass of Simple)
+ *
+ * This widget is used to represent navigation in a 2d coordinate system
+ *
+ * Resources:
+ *
+ * Name Class Type Default
+ * ---- ----- ---- -------
+ *
+ * allowOff AllowOff Boolean FALSE
+ * background Background Pixel XtDefaultBackground
+ * backgroundStipple BackgroundStipple String NULL
+ * canvasWidth CanvasWidth Dimension 0
+ * canvasHeight CanvasHeight Dimension 0
+ * defaultScale DefaultScale Dimension 8 percent
+ * foreground Foreground Pixel XtDefaultBackground
+ * internalSpace InternalSpace Dimension 4
+ * lineWidth LineWidth Dimension 0
+ * reportCallback ReportCallback XtCallbackList NULL
+ * resize Resize Boolean TRUE
+ * rubberBand RubberBand Boolean FALSE
+ * shadowColor ShadowColor Pixel XtDefaultForeground
+ * shadowThickness ShadowThickness Dimension 2
+ * sliderX SliderX Position 0
+ * sliderY SliderY Position 0
+ * sliderWidth SliderWidth Dimension 0
+ * sliderHeight SliderHeight Dimension 0
+ *
+ *****************************************************************************/
+
+#ifndef _XtStringDefs_h_
+#define XtNresize "resize"
+#define XtCResize "Resize"
+#endif
+
+#define XtNallowOff "allowOff"
+#define XtCAllowOff "AllowOff"
+#define XtNbackgroundStipple "backgroundStipple"
+#define XtCBackgroundStipple "BackgroundStipple"
+#define XtNdefaultScale "defaultScale"
+#define XtCDefaultScale "DefaultScale"
+#define XtNcanvasWidth "canvasWidth"
+#define XtCCanvasWidth "CanvasWidth"
+#define XtNcanvasHeight "canvasHeight"
+#define XtCCanvasHeight "CanvasHeight"
+#define XtNinternalSpace "internalSpace"
+#define XtCInternalSpace "InternalSpace"
+#define XtNlineWidth "lineWidth"
+#define XtCLineWidth "LineWidth"
+#define XtNrubberBand "rubberBand"
+#define XtCRubberBand "RubberBand"
+#define XtNshadowThickness "shadowThickness"
+#define XtCShadowThickness "ShadowThickness"
+#define XtNshadowColor "shadowColor"
+#define XtCShadowColor "ShadowColor"
+#define XtNsliderX "sliderX"
+#define XtCSliderX "SliderX"
+#define XtNsliderY "sliderY"
+#define XtCSliderY "SliderY"
+#define XtNsliderWidth "sliderWidth"
+#define XtCSliderWidth "SliderWidth"
+#define XtNsliderHeight "sliderHeight"
+#define XtCSliderHeight "SliderHeight"
+
+extern WidgetClass pannerWidgetClass;
+
+typedef struct _PannerClassRec *PannerWidgetClass;
+typedef struct _PannerRec *PannerWidget;
+
+#endif /* _XawPanner_h */
diff --git a/libXaw/include/X11/Xaw/PannerP.h b/libXaw/include/X11/Xaw/PannerP.h
index aacf2e26c..893f5ca74 100644
--- a/libXaw/include/X11/Xaw/PannerP.h
+++ b/libXaw/include/X11/Xaw/PannerP.h
@@ -1,108 +1,106 @@
-/*
- * $Xorg: PannerP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/PannerP.h,v 1.7 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifndef _XawPannerP_h
-#define _XawPannerP_h
-
-#include <X11/Xaw/Panner.h>
-#include <X11/Xaw/SimpleP.h>
-
-/* new fields in widget class */
-typedef struct {
- XtPointer extension;
-} PannerClassPart;
-
-/* Panner widget class */
-typedef struct _PannerClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- PannerClassPart panner_class;
-} PannerClassRec;
-
-/* new fields in widget */
-typedef struct {
- /* resources */
- XtCallbackList report_callbacks; /* callback/Callback */
- Boolean allow_off; /* allowOff/AllowOff */
- Boolean resize_to_pref; /* resizeToPreferred/Boolean */
- Pixel foreground; /* foreground/Foreground */
- Pixel shadow_color; /* shadowColor/ShadowColor */
- Dimension shadow_thickness; /* shadowThickness/ShadowThickness */
- Dimension default_scale; /* defaultScale/DefaultScale */
- Dimension line_width; /* lineWidth/LineWidth */
- Dimension canvas_width; /* canvasWidth/CanvasWidth */
- Dimension canvas_height; /* canvasHeight/CanvasHeight */
- Position slider_x; /* sliderX/SliderX */
- Position slider_y; /* sliderY/SliderY */
- Dimension slider_width; /* sliderWidth/SliderWidth */
- Dimension slider_height; /* sliderHeight/SliderHeight */
- Dimension internal_border; /* internalBorderWidth/BorderWidth */
- String stipple_name; /* backgroundStipple/BackgroundStipple
- */
- /* private */
- GC slider_gc; /* background of slider */
- GC shadow_gc; /* edge of slider and shadow */
- GC xor_gc; /* for doing XOR tmp graphics */
- double haspect, vaspect; /* aspect ratio of core to canvas */
- Boolean rubber_band; /* true = rubber band, false = move */
- struct {
- Boolean doing; /* tmp graphics in progress */
- Boolean showing; /* true if tmp graphics displayed */
- Position startx, starty; /* initial position of slider */
- Position dx, dy; /* offset loc for tmp graphics */
- Position x, y; /* location for tmp graphics */
- } tmp;
- Position knob_x, knob_y; /* real upper left of knob in canvas */
- Dimension knob_width, knob_height; /* real size of knob in canvas */
- Boolean shadow_valid; /* true if rects are valid */
- XRectangle shadow_rects[2]; /* location of shadows */
- Position last_x, last_y; /* previous location of knob */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} PannerPart;
-
-typedef struct _PannerRec {
- CorePart core;
- SimplePart simple;
- PannerPart panner;
-} PannerRec;
-
-#define PANNER_HSCALE(pw,val) ((pw)->panner.haspect * ((double)(val)))
-#define PANNER_VSCALE(pw,val) ((pw)->panner.vaspect * ((double)(val)))
-
-#define PANNER_DSCALE(pw,val) (Dimension) \
-((((unsigned long)(val)) * (unsigned long)pw->panner.default_scale) / 100L)
-
-#define PANNER_DEFAULT_SCALE 8 /* percent */
-#define PANNER_OUTOFRANGE -30000
-
-extern PannerClassRec pannerClassRec;
-
-#endif /* _XawPannerP_h */
+/*
+ *
+Copyright 1989, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ */
+
+#ifndef _XawPannerP_h
+#define _XawPannerP_h
+
+#include <X11/Xaw/Panner.h>
+#include <X11/Xaw/SimpleP.h>
+
+/* new fields in widget class */
+typedef struct {
+ XtPointer extension;
+} PannerClassPart;
+
+/* Panner widget class */
+typedef struct _PannerClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ PannerClassPart panner_class;
+} PannerClassRec;
+
+/* new fields in widget */
+typedef struct {
+ /* resources */
+ XtCallbackList report_callbacks; /* callback/Callback */
+ Boolean allow_off; /* allowOff/AllowOff */
+ Boolean resize_to_pref; /* resizeToPreferred/Boolean */
+ Pixel foreground; /* foreground/Foreground */
+ Pixel shadow_color; /* shadowColor/ShadowColor */
+ Dimension shadow_thickness; /* shadowThickness/ShadowThickness */
+ Dimension default_scale; /* defaultScale/DefaultScale */
+ Dimension line_width; /* lineWidth/LineWidth */
+ Dimension canvas_width; /* canvasWidth/CanvasWidth */
+ Dimension canvas_height; /* canvasHeight/CanvasHeight */
+ Position slider_x; /* sliderX/SliderX */
+ Position slider_y; /* sliderY/SliderY */
+ Dimension slider_width; /* sliderWidth/SliderWidth */
+ Dimension slider_height; /* sliderHeight/SliderHeight */
+ Dimension internal_border; /* internalBorderWidth/BorderWidth */
+ String stipple_name; /* backgroundStipple/BackgroundStipple
+ */
+ /* private */
+ GC slider_gc; /* background of slider */
+ GC shadow_gc; /* edge of slider and shadow */
+ GC xor_gc; /* for doing XOR tmp graphics */
+ double haspect, vaspect; /* aspect ratio of core to canvas */
+ Boolean rubber_band; /* true = rubber band, false = move */
+ struct {
+ Boolean doing; /* tmp graphics in progress */
+ Boolean showing; /* true if tmp graphics displayed */
+ Position startx, starty; /* initial position of slider */
+ Position dx, dy; /* offset loc for tmp graphics */
+ Position x, y; /* location for tmp graphics */
+ } tmp;
+ Position knob_x, knob_y; /* real upper left of knob in canvas */
+ Dimension knob_width, knob_height; /* real size of knob in canvas */
+ Boolean shadow_valid; /* true if rects are valid */
+ XRectangle shadow_rects[2]; /* location of shadows */
+ Position last_x, last_y; /* previous location of knob */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} PannerPart;
+
+typedef struct _PannerRec {
+ CorePart core;
+ SimplePart simple;
+ PannerPart panner;
+} PannerRec;
+
+#define PANNER_HSCALE(pw,val) ((pw)->panner.haspect * ((double)(val)))
+#define PANNER_VSCALE(pw,val) ((pw)->panner.vaspect * ((double)(val)))
+
+#define PANNER_DSCALE(pw,val) (Dimension) \
+((((unsigned long)(val)) * (unsigned long)pw->panner.default_scale) / 100L)
+
+#define PANNER_DEFAULT_SCALE 8 /* percent */
+#define PANNER_OUTOFRANGE -30000
+
+extern PannerClassRec pannerClassRec;
+
+#endif /* _XawPannerP_h */
diff --git a/libXaw/include/X11/Xaw/Porthole.h b/libXaw/include/X11/Xaw/Porthole.h
index 68274d886..fdf8dace9 100644
--- a/libXaw/include/X11/Xaw/Porthole.h
+++ b/libXaw/include/X11/Xaw/Porthole.h
@@ -1,63 +1,61 @@
-/*
- * $Xorg: Porthole.h,v 1.5 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1990, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/Porthole.h,v 1.5 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifndef _XawPorthole_h
-#define _XawPorthole_h
-
-#include <X11/Intrinsic.h>
-#include <X11/Xaw/Reports.h>
-
-/*****************************************************************************
- *
- * Porthole Widget (subclass of Composite)
- *
- * This widget is similar to a viewport without scrollbars. Child movement
- * is done by external panners or scrollbars.
- *
- * Parameters:
- *
- * Name Class Type Default
- * ---- ----- ---- -------
- *
- * background Background Pixel XtDefaultBackground
- * border BorderColor Pixel XtDefaultForeground
- * borderWidth BorderWidth Dimension 1
- * height Height Dimension 0
- * reportCallback ReportCallback Pointer NULL
- * width Width Dimension 0
- * x Position Position 0
- * y Position Position 0
- *
- *****************************************************************************/
-
-extern WidgetClass portholeWidgetClass;
-typedef struct _PortholeClassRec *PortholeWidgetClass;
-typedef struct _PortholeRec *PortholeWidget;
-
-#endif /* _XawPorthole_h */
+/*
+ *
+Copyright 1990, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ */
+
+#ifndef _XawPorthole_h
+#define _XawPorthole_h
+
+#include <X11/Intrinsic.h>
+#include <X11/Xaw/Reports.h>
+
+/*****************************************************************************
+ *
+ * Porthole Widget (subclass of Composite)
+ *
+ * This widget is similar to a viewport without scrollbars. Child movement
+ * is done by external panners or scrollbars.
+ *
+ * Parameters:
+ *
+ * Name Class Type Default
+ * ---- ----- ---- -------
+ *
+ * background Background Pixel XtDefaultBackground
+ * border BorderColor Pixel XtDefaultForeground
+ * borderWidth BorderWidth Dimension 1
+ * height Height Dimension 0
+ * reportCallback ReportCallback Pointer NULL
+ * width Width Dimension 0
+ * x Position Position 0
+ * y Position Position 0
+ *
+ *****************************************************************************/
+
+extern WidgetClass portholeWidgetClass;
+typedef struct _PortholeClassRec *PortholeWidgetClass;
+typedef struct _PortholeRec *PortholeWidget;
+
+#endif /* _XawPorthole_h */
diff --git a/libXaw/include/X11/Xaw/PortholeP.h b/libXaw/include/X11/Xaw/PortholeP.h
index 39dcbdc53..043fb51e8 100644
--- a/libXaw/include/X11/Xaw/PortholeP.h
+++ b/libXaw/include/X11/Xaw/PortholeP.h
@@ -1,64 +1,62 @@
-/*
- * $Xorg: PortholeP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1990, 1994, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/PortholeP.h,v 1.7 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifndef _XawPortholeP_h
-#define _XawPortholeP_h
-
-#include <X11/Xaw/Porthole.h>
-
-/* new fields in widget class */
-typedef struct {
- XtPointer extension;
-} PortholeClassPart;
-
-/* widget class */
-typedef struct _PortholeClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- PortholeClassPart porthole_class;
-} PortholeClassRec;
-
-/* new fields in widget */
-typedef struct {
- /* resources */
- XtCallbackList report_callbacks; /* callback/Callback */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} PortholePart;
-
-typedef struct _PortholeRec {
- CorePart core;
- CompositePart composite;
- PortholePart porthole;
-} PortholeRec;
-
-extern PortholeClassRec portholeClassRec;
-
-#endif /* _XawPortholeP_h */
+/*
+ *
+Copyright 1990, 1994, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ */
+
+#ifndef _XawPortholeP_h
+#define _XawPortholeP_h
+
+#include <X11/Xaw/Porthole.h>
+
+/* new fields in widget class */
+typedef struct {
+ XtPointer extension;
+} PortholeClassPart;
+
+/* widget class */
+typedef struct _PortholeClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ PortholeClassPart porthole_class;
+} PortholeClassRec;
+
+/* new fields in widget */
+typedef struct {
+ /* resources */
+ XtCallbackList report_callbacks; /* callback/Callback */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} PortholePart;
+
+typedef struct _PortholeRec {
+ CorePart core;
+ CompositePart composite;
+ PortholePart porthole;
+} PortholeRec;
+
+extern PortholeClassRec portholeClassRec;
+
+#endif /* _XawPortholeP_h */
diff --git a/libXaw/include/X11/Xaw/Repeater.h b/libXaw/include/X11/Xaw/Repeater.h
index cfb2c5313..86b192e59 100644
--- a/libXaw/include/X11/Xaw/Repeater.h
+++ b/libXaw/include/X11/Xaw/Repeater.h
@@ -1,75 +1,73 @@
-/*
- * $Xorg: Repeater.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/Repeater.h,v 1.5 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifndef _XawRepeater_h
-#define _XawRepeater_h
-
-#include <X11/Xaw/Command.h>
-
-/*****************************************************************************
- *
- * Repeater Widget (subclass of Command)
- *
- * This widget is a push button that repeatedly fires when held down
- *
- * Parameters:
- *
- * Name Class Type Default
- * ---- ----- ---- -------
- *
- * decay Decay int 5 milliseconds
- * flash Boolean Boolean FALSE
- * initialDelay Delay int 200 milliseconds
- * minimumDelay MinimumDelay int 10 milliseconds
- * repeatDelay Delay int 50 milliseconds
- * startCallback StartCallback XtCallbackList NULL
- * stopCallback StopCallback XtCallbackList NULL
- *
- *****************************************************************************/
-
-#define XtNdecay "decay"
-#define XtCDecay "Decay"
-#define XtNinitialDelay "initialDelay"
-#define XtCDelay "Delay"
-#define XtNminimumDelay "minimumDelay"
-#define XtCMinimumDelay "MinimumDelay"
-#define XtNrepeatDelay "repeatDelay"
-#define XtNflash "flash"
-#define XtNstartCallback "startCallback"
-#define XtCStartCallback "StartCallback"
-#define XtNstopCallback "stopCallback"
-#define XtCStopCallback "StopCallback"
-
-
-extern WidgetClass repeaterWidgetClass;
-
-typedef struct _RepeaterClassRec *RepeaterWidgetClass;
-typedef struct _RepeaterRec *RepeaterWidget;
-
-#endif /* _XawRepeater_h */
+/*
+ *
+Copyright 1989, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ */
+
+#ifndef _XawRepeater_h
+#define _XawRepeater_h
+
+#include <X11/Xaw/Command.h>
+
+/*****************************************************************************
+ *
+ * Repeater Widget (subclass of Command)
+ *
+ * This widget is a push button that repeatedly fires when held down
+ *
+ * Parameters:
+ *
+ * Name Class Type Default
+ * ---- ----- ---- -------
+ *
+ * decay Decay int 5 milliseconds
+ * flash Boolean Boolean FALSE
+ * initialDelay Delay int 200 milliseconds
+ * minimumDelay MinimumDelay int 10 milliseconds
+ * repeatDelay Delay int 50 milliseconds
+ * startCallback StartCallback XtCallbackList NULL
+ * stopCallback StopCallback XtCallbackList NULL
+ *
+ *****************************************************************************/
+
+#define XtNdecay "decay"
+#define XtCDecay "Decay"
+#define XtNinitialDelay "initialDelay"
+#define XtCDelay "Delay"
+#define XtNminimumDelay "minimumDelay"
+#define XtCMinimumDelay "MinimumDelay"
+#define XtNrepeatDelay "repeatDelay"
+#define XtNflash "flash"
+#define XtNstartCallback "startCallback"
+#define XtCStartCallback "StartCallback"
+#define XtNstopCallback "stopCallback"
+#define XtCStopCallback "StopCallback"
+
+
+extern WidgetClass repeaterWidgetClass;
+
+typedef struct _RepeaterClassRec *RepeaterWidgetClass;
+typedef struct _RepeaterRec *RepeaterWidget;
+
+#endif /* _XawRepeater_h */
diff --git a/libXaw/include/X11/Xaw/RepeaterP.h b/libXaw/include/X11/Xaw/RepeaterP.h
index 3ce0a498c..b2646e3e0 100644
--- a/libXaw/include/X11/Xaw/RepeaterP.h
+++ b/libXaw/include/X11/Xaw/RepeaterP.h
@@ -1,84 +1,82 @@
-/*
- * $Xorg: RepeaterP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/RepeaterP.h,v 1.7 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifndef _XawRepeaterP_h
-#define _XawRepeaterP_h
-
-#include <X11/Xaw/CommandP.h>
-#include <X11/Xaw/Repeater.h>
-
-/* new fields in widget class */
-typedef struct {
- XtPointer extension;
-} RepeaterClassPart;
-
-/* repeater widget class */
-typedef struct _RepeaterClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- LabelClassPart label_class;
- CommandClassPart command_class;
- RepeaterClassPart repeater_class;
-} RepeaterClassRec;
-
-typedef struct {
- /* resources */
- int initial_delay; /* initialDelay/Delay */
- int repeat_delay; /* repeatDelay/Delay */
- int minimum_delay; /* minimumDelay/MinimumDelay */
- int decay; /* decay to minimum delay */
- Boolean flash; /* flash/Boolean */
- XtCallbackList start_callbacks; /* startCallback/StartCallback */
- XtCallbackList stop_callbacks; /* stopCallback/StopCallback */
-
- /* private */
- int next_delay; /* next amount for timer */
- XtIntervalId timer; /* timer that will fire */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} RepeaterPart;
-
-typedef struct _RepeaterRec {
- CorePart core;
- SimplePart simple;
- LabelPart label;
- CommandPart command;
- RepeaterPart repeater;
-} RepeaterRec;
-
- /* milliseconds */
-#define REP_DEF_DECAY 5
-#define REP_DEF_INITIAL_DELAY 200
-#define REP_DEF_MINIMUM_DELAY 10
-#define REP_DEF_REPEAT_DELAY 50
-
-extern RepeaterClassRec repeaterClassRec;
-
-#endif /* _XawRepeaterP_h */
+/*
+ *
+Copyright 1989, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ */
+
+#ifndef _XawRepeaterP_h
+#define _XawRepeaterP_h
+
+#include <X11/Xaw/CommandP.h>
+#include <X11/Xaw/Repeater.h>
+
+/* new fields in widget class */
+typedef struct {
+ XtPointer extension;
+} RepeaterClassPart;
+
+/* repeater widget class */
+typedef struct _RepeaterClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ LabelClassPart label_class;
+ CommandClassPart command_class;
+ RepeaterClassPart repeater_class;
+} RepeaterClassRec;
+
+typedef struct {
+ /* resources */
+ int initial_delay; /* initialDelay/Delay */
+ int repeat_delay; /* repeatDelay/Delay */
+ int minimum_delay; /* minimumDelay/MinimumDelay */
+ int decay; /* decay to minimum delay */
+ Boolean flash; /* flash/Boolean */
+ XtCallbackList start_callbacks; /* startCallback/StartCallback */
+ XtCallbackList stop_callbacks; /* stopCallback/StopCallback */
+
+ /* private */
+ int next_delay; /* next amount for timer */
+ XtIntervalId timer; /* timer that will fire */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} RepeaterPart;
+
+typedef struct _RepeaterRec {
+ CorePart core;
+ SimplePart simple;
+ LabelPart label;
+ CommandPart command;
+ RepeaterPart repeater;
+} RepeaterRec;
+
+ /* milliseconds */
+#define REP_DEF_DECAY 5
+#define REP_DEF_INITIAL_DELAY 200
+#define REP_DEF_MINIMUM_DELAY 10
+#define REP_DEF_REPEAT_DELAY 50
+
+extern RepeaterClassRec repeaterClassRec;
+
+#endif /* _XawRepeaterP_h */
diff --git a/libXaw/include/X11/Xaw/Reports.h b/libXaw/include/X11/Xaw/Reports.h
index 33f18d187..c49834219 100644
--- a/libXaw/include/X11/Xaw/Reports.h
+++ b/libXaw/include/X11/Xaw/Reports.h
@@ -1,56 +1,55 @@
-/*
- * $Xorg: Reports.h,v 1.5 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1990, 1998 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.
- */
-
-#ifndef _Xaw_Reports_h
-#define _Xaw_Reports_h
-
-#include <X11/Intrinsic.h>
-
-/*
- * XawPannerReport - this structure is used by the reportCallback of the
- * Panner, Porthole, Viewport, and Scrollbar widgets to report its position.
- * All fields must be filled in, although the changed field may be used as
- * a hint as to which fields have been altered since the last report.
- */
-typedef struct {
- unsigned int changed; /* mask, see below */
- Position slider_x, slider_y; /* location of slider within outer */
- Dimension slider_width, slider_height; /* size of slider */
- Dimension canvas_width, canvas_height; /* size of canvas */
-} XawPannerReport;
-
-#define XawPRSliderX (1 << 0)
-#define XawPRSliderY (1 << 1)
-#define XawPRSliderWidth (1 << 2)
-#define XawPRSliderHeight (1 << 3)
-#define XawPRCanvasWidth (1 << 4)
-#define XawPRCanvasHeight (1 << 5)
-#define XawPRAll (63) /* union of above */
-
-#define XtNreportCallback "reportCallback"
-#define XtCReportCallback "reportCallback"
-
-#endif /* _Xaw_Reports_h */
+/*
+ *
+Copyright 1990, 1998 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.
+ */
+
+#ifndef _Xaw_Reports_h
+#define _Xaw_Reports_h
+
+#include <X11/Intrinsic.h>
+
+/*
+ * XawPannerReport - this structure is used by the reportCallback of the
+ * Panner, Porthole, Viewport, and Scrollbar widgets to report its position.
+ * All fields must be filled in, although the changed field may be used as
+ * a hint as to which fields have been altered since the last report.
+ */
+typedef struct {
+ unsigned int changed; /* mask, see below */
+ Position slider_x, slider_y; /* location of slider within outer */
+ Dimension slider_width, slider_height; /* size of slider */
+ Dimension canvas_width, canvas_height; /* size of canvas */
+} XawPannerReport;
+
+#define XawPRSliderX (1 << 0)
+#define XawPRSliderY (1 << 1)
+#define XawPRSliderWidth (1 << 2)
+#define XawPRSliderHeight (1 << 3)
+#define XawPRCanvasWidth (1 << 4)
+#define XawPRCanvasHeight (1 << 5)
+#define XawPRAll (63) /* union of above */
+
+#define XtNreportCallback "reportCallback"
+#define XtCReportCallback "reportCallback"
+
+#endif /* _Xaw_Reports_h */
diff --git a/libXaw/include/X11/Xaw/Scrollbar.h b/libXaw/include/X11/Xaw/Scrollbar.h
index c776d41e2..6d78f3983 100644
--- a/libXaw/include/X11/Xaw/Scrollbar.h
+++ b/libXaw/include/X11/Xaw/Scrollbar.h
@@ -1,137 +1,133 @@
-/* $Xorg: Scrollbar.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Scrollbar.h,v 1.6 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifndef _Scrollbar_h
-#define _Scrollbar_h
-
-/*
- * Scrollbar Widget
- */
-
-#include <X11/Xmu/Converters.h>
-#include <X11/Xfuncproto.h>
-
-/* Scrollbar resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- 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
- cursor Cursor Cursor None
- cursorName Cursor String NULL
- depth Depth int parent's depth
- destroyCallback Callback XtCallbackList NULL
- foreground Foreground Pixel XtDefaultForeground
- height Height Dimension length or thickness
- insensitiveBorder Insensitive Pixmap GreyPixmap
- jumpProc Callback XtCallbackList NULL
- length Length Dimension 1
- mappedWhenManaged MappedWhenManaged Boolean True
- minimumThumb MinimumThumb Dimension 7
- orientation Orientation XtOrientation XtorientVertical
- pointerColor Foreground Pixel XtDefaultForeground
- pointerColorBackground Background Pixel XtDefaultBackground
- screen Screen Screen 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_double_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 source or doc
- width Width Dimension thickness or length
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define XtCMinimumThumb "MinimumThumb"
-#define XtCShown "Shown"
-#define XtCTopOfThumb "TopOfThumb"
-
-#define XtNminimumThumb "minimumThumb"
-#define XtNtopOfThumb "topOfThumb"
-
-typedef struct _ScrollbarRec *ScrollbarWidget;
-typedef struct _ScrollbarClassRec *ScrollbarWidgetClass;
-
-extern WidgetClass scrollbarWidgetClass;
-
-_XFUNCPROTOBEGIN
-
-void XawScrollbarSetThumb
-(
- Widget scrollbar,
-#if NeedWidePrototypes
- double top,
- double shown
-#else
- float top,
- float shown
-#endif
- );
-
-_XFUNCPROTOEND
-
-#endif /* _Scrollbar_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _Scrollbar_h
+#define _Scrollbar_h
+
+/*
+ * Scrollbar Widget
+ */
+
+#include <X11/Xmu/Converters.h>
+#include <X11/Xfuncproto.h>
+
+/* Scrollbar resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ 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
+ cursor Cursor Cursor None
+ cursorName Cursor String NULL
+ depth Depth int parent's depth
+ destroyCallback Callback XtCallbackList NULL
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension length or thickness
+ insensitiveBorder Insensitive Pixmap GreyPixmap
+ jumpProc Callback XtCallbackList NULL
+ length Length Dimension 1
+ mappedWhenManaged MappedWhenManaged Boolean True
+ minimumThumb MinimumThumb Dimension 7
+ orientation Orientation XtOrientation XtorientVertical
+ pointerColor Foreground Pixel XtDefaultForeground
+ pointerColorBackground Background Pixel XtDefaultBackground
+ screen Screen Screen 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_double_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 source or doc
+ width Width Dimension thickness or length
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define XtCMinimumThumb "MinimumThumb"
+#define XtCShown "Shown"
+#define XtCTopOfThumb "TopOfThumb"
+
+#define XtNminimumThumb "minimumThumb"
+#define XtNtopOfThumb "topOfThumb"
+
+typedef struct _ScrollbarRec *ScrollbarWidget;
+typedef struct _ScrollbarClassRec *ScrollbarWidgetClass;
+
+extern WidgetClass scrollbarWidgetClass;
+
+_XFUNCPROTOBEGIN
+
+void XawScrollbarSetThumb
+(
+ Widget scrollbar,
+#if NeedWidePrototypes
+ double top,
+ double shown
+#else
+ float top,
+ float shown
+#endif
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _Scrollbar_h */
diff --git a/libXaw/include/X11/Xaw/ScrollbarP.h b/libXaw/include/X11/Xaw/ScrollbarP.h
index ec3af46f8..cf187b48f 100644
--- a/libXaw/include/X11/Xaw/ScrollbarP.h
+++ b/libXaw/include/X11/Xaw/ScrollbarP.h
@@ -1,109 +1,103 @@
-/*
- * $Xorg: ScrollbarP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- */
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/ScrollbarP.h,v 1.7 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifndef _ScrollbarP_h
-#define _ScrollbarP_h
-
-#include <X11/Xaw/Scrollbar.h>
-#include <X11/Xaw/SimpleP.h>
-
-typedef struct {
- /* resources */
- Pixel foreground; /* thumb foreground color */
- XtOrientation orientation; /* horizontal or vertical */
- XtCallbackList scrollProc; /* proportional scroll */
- XtCallbackList thumbProc; /* jump (to position) scroll */
- XtCallbackList jumpProc; /* same as thumbProc but pass data by ref */
- Pixmap thumb; /* thumb pixmap */
- Cursor upCursor; /* scroll up cursor */
- Cursor downCursor; /* scroll down cursor */
- Cursor leftCursor; /* scroll left cursor */
- Cursor rightCursor; /* scroll right cursor */
- Cursor verCursor; /* scroll vertical cursor */
- Cursor horCursor; /* scroll horizontal cursor */
- float top;
- float shown;
- Dimension length; /* either height or width */
- Dimension thickness; /* either width or height */
- Dimension min_thumb; /* minium size for the thumb */
-
- /* private */
- Cursor inactiveCursor; /* The normal cursor for scrollbar */
- char direction; /* a scroll has started; which direction */
- GC gc; /* a (shared) gc */
- Position topLoc; /* Pixel that corresponds to top */
- Dimension shownLength; /* Num pixels corresponding to shown */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} ScrollbarPart;
-
-typedef struct _ScrollbarRec {
- CorePart core;
- SimplePart simple;
- ScrollbarPart scrollbar;
-} ScrollbarRec;
-
-typedef struct {
- XtPointer extension;
-} ScrollbarClassPart;
-
-typedef struct _ScrollbarClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- ScrollbarClassPart scrollbar_class;
-} ScrollbarClassRec;
-
-extern ScrollbarClassRec scrollbarClassRec;
-
-#endif /* _ScrollbarP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _ScrollbarP_h
+#define _ScrollbarP_h
+
+#include <X11/Xaw/Scrollbar.h>
+#include <X11/Xaw/SimpleP.h>
+
+typedef struct {
+ /* resources */
+ Pixel foreground; /* thumb foreground color */
+ XtOrientation orientation; /* horizontal or vertical */
+ XtCallbackList scrollProc; /* proportional scroll */
+ XtCallbackList thumbProc; /* jump (to position) scroll */
+ XtCallbackList jumpProc; /* same as thumbProc but pass data by ref */
+ Pixmap thumb; /* thumb pixmap */
+ Cursor upCursor; /* scroll up cursor */
+ Cursor downCursor; /* scroll down cursor */
+ Cursor leftCursor; /* scroll left cursor */
+ Cursor rightCursor; /* scroll right cursor */
+ Cursor verCursor; /* scroll vertical cursor */
+ Cursor horCursor; /* scroll horizontal cursor */
+ float top;
+ float shown;
+ Dimension length; /* either height or width */
+ Dimension thickness; /* either width or height */
+ Dimension min_thumb; /* minium size for the thumb */
+
+ /* private */
+ Cursor inactiveCursor; /* The normal cursor for scrollbar */
+ char direction; /* a scroll has started; which direction */
+ GC gc; /* a (shared) gc */
+ Position topLoc; /* Pixel that corresponds to top */
+ Dimension shownLength; /* Num pixels corresponding to shown */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} ScrollbarPart;
+
+typedef struct _ScrollbarRec {
+ CorePart core;
+ SimplePart simple;
+ ScrollbarPart scrollbar;
+} ScrollbarRec;
+
+typedef struct {
+ XtPointer extension;
+} ScrollbarClassPart;
+
+typedef struct _ScrollbarClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ ScrollbarClassPart scrollbar_class;
+} ScrollbarClassRec;
+
+extern ScrollbarClassRec scrollbarClassRec;
+
+#endif /* _ScrollbarP_h */
diff --git a/libXaw/include/X11/Xaw/Simple.h b/libXaw/include/X11/Xaw/Simple.h
index 7ba9354b9..38338cdb3 100644
--- a/libXaw/include/X11/Xaw/Simple.h
+++ b/libXaw/include/X11/Xaw/Simple.h
@@ -1,116 +1,113 @@
-/* $Xorg: Simple.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Simple.h,v 1.8 2001/01/17 19:42:30 dawes Exp $ */
-
-#ifndef _Simple_h
-#define _Simple_h
-
-#include <X11/Xmu/Converters.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- cursor Cursor Cursor None
- cursorName Cursor String NULL
- destroyCallback Callback Pointer NULL
- displayList DisplayList XawDisplayList* NULL
- height Height Dimension 0
- insensitiveBorder Insensitive Pixmap Gray
- mappedWhenManaged MappedWhenManaged Boolean True
- pointerColor Foreground Pixel XtDefaultForeground
- pointerColorBackground Background Pixel XtDefaultBackground
- sensitive Sensitive Boolean True
- tip Tip String NULL
- width Width Dimension 0
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define XtNcursor "cursor"
-#define XtNcursorName "cursorName"
-#define XtNinsensitiveBorder "insensitiveBorder"
-
-#define XtCInsensitive "Insensitive"
-
-#ifndef XtCInternational
-#define XtCInternational "International"
-#endif
-
-#ifndef XtNinternational
-#define XtNinternational "international"
-#endif
-
-#ifndef OLDXAW
-#ifndef XawNdisplayList
-#define XawNdisplayList "displayList"
-#endif
-
-#ifndef XawCDisplayList
-#define XawCDisplayList "DisplayList"
-#endif
-
-#ifndef XawRDisplayList
-#define XawRDisplayList "XawDisplayList"
-#endif
-
-#define XtNtip "tip"
-#define XtCTip "Tip"
-#endif /* OLDXAW */
-
-typedef struct _SimpleClassRec *SimpleWidgetClass;
-typedef struct _SimpleRec *SimpleWidget;
-
-extern WidgetClass simpleWidgetClass;
-
-#endif /* _Simple_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _Simple_h
+#define _Simple_h
+
+#include <X11/Xmu/Converters.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ cursor Cursor Cursor None
+ cursorName Cursor String NULL
+ destroyCallback Callback Pointer NULL
+ displayList DisplayList XawDisplayList* NULL
+ height Height Dimension 0
+ insensitiveBorder Insensitive Pixmap Gray
+ mappedWhenManaged MappedWhenManaged Boolean True
+ pointerColor Foreground Pixel XtDefaultForeground
+ pointerColorBackground Background Pixel XtDefaultBackground
+ sensitive Sensitive Boolean True
+ tip Tip String NULL
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define XtNcursor "cursor"
+#define XtNcursorName "cursorName"
+#define XtNinsensitiveBorder "insensitiveBorder"
+
+#define XtCInsensitive "Insensitive"
+
+#ifndef XtCInternational
+#define XtCInternational "International"
+#endif
+
+#ifndef XtNinternational
+#define XtNinternational "international"
+#endif
+
+#ifndef OLDXAW
+#ifndef XawNdisplayList
+#define XawNdisplayList "displayList"
+#endif
+
+#ifndef XawCDisplayList
+#define XawCDisplayList "DisplayList"
+#endif
+
+#ifndef XawRDisplayList
+#define XawRDisplayList "XawDisplayList"
+#endif
+
+#define XtNtip "tip"
+#define XtCTip "Tip"
+#endif /* OLDXAW */
+
+typedef struct _SimpleClassRec *SimpleWidgetClass;
+typedef struct _SimpleRec *SimpleWidget;
+
+extern WidgetClass simpleWidgetClass;
+
+#endif /* _Simple_h */
diff --git a/libXaw/include/X11/Xaw/SimpleMenP.h b/libXaw/include/X11/Xaw/SimpleMenP.h
index 46102059e..d93e3588b 100644
--- a/libXaw/include/X11/Xaw/SimpleMenP.h
+++ b/libXaw/include/X11/Xaw/SimpleMenP.h
@@ -1,101 +1,99 @@
-/*
- * $Xorg: SimpleMenP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- *
- */
-/* $XFree86: xc/lib/Xaw/SimpleMenP.h,v 1.12 2001/01/17 19:42:30 dawes Exp $ */
-
-/*
- * SimpleMenuP.h - Private Header file for SimpleMenu widget.
- *
- * Date: April 3, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _SimpleMenuP_h
-#define _SimpleMenuP_h
-
-#include <X11/Xaw/SimpleMenu.h>
-#include <X11/Xaw/SmeP.h>
-#include <X11/ShellP.h>
-#include <X11/Xaw/XawInit.h>
-
-typedef struct {
- XtPointer extension; /* For future needs */
-} SimpleMenuClassPart;
-
-typedef struct _SimpleMenuClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ShellClassPart shell_class;
- OverrideShellClassPart override_shell_class;
- SimpleMenuClassPart simpleMenu_class;
-} SimpleMenuClassRec;
-
-extern SimpleMenuClassRec simpleMenuClassRec;
-
-typedef struct _SimpleMenuPart {
- /* resources */
- String label_string; /* The string for the label or NULL */
- SmeObject label; /* If label_string is non-NULL then this is
- the label widget */
- WidgetClass label_class; /* Widget Class of the menu label object */
- Dimension top_margin; /* Top and bottom margins */
- Dimension bottom_margin;
- Dimension row_height; /* height of each row (menu entry) */
- Cursor cursor; /* The menu's cursor */
- SmeObject popup_entry; /* The entry to position the cursor on for
- when using XawPositionSimpleMenu */
- Boolean menu_on_screen; /* Force the menus to be fully on the screen*/
- int backing_store; /* What type of backing store to use */
-
- /* private */
- Boolean recursive_set_values; /* contain a possible infinite loop */
- Boolean menu_width; /* If true then force width to remain
- core.width */
- Boolean menu_height; /* Just like menu_width, but for height */
- SmeObject entry_set; /* The entry that is currently set or
- highlighted */
-#ifndef OLDXAW
- Dimension left_margin;
- Dimension right_margin;
- XawDisplayList *display_list;
- Widget sub_menu;
- unsigned char state;
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} SimpleMenuPart;
-
-typedef struct _SimpleMenuRec {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
- OverrideShellPart override;
- SimpleMenuPart simple_menu;
-} SimpleMenuRec;
-
-#endif /* _SimpleMenuP_h */
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ *
+ */
+
+/*
+ * SimpleMenuP.h - Private Header file for SimpleMenu widget.
+ *
+ * Date: April 3, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _SimpleMenuP_h
+#define _SimpleMenuP_h
+
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeP.h>
+#include <X11/ShellP.h>
+#include <X11/Xaw/XawInit.h>
+
+typedef struct {
+ XtPointer extension; /* For future needs */
+} SimpleMenuClassPart;
+
+typedef struct _SimpleMenuClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ShellClassPart shell_class;
+ OverrideShellClassPart override_shell_class;
+ SimpleMenuClassPart simpleMenu_class;
+} SimpleMenuClassRec;
+
+extern SimpleMenuClassRec simpleMenuClassRec;
+
+typedef struct _SimpleMenuPart {
+ /* resources */
+ String label_string; /* The string for the label or NULL */
+ SmeObject label; /* If label_string is non-NULL then this is
+ the label widget */
+ WidgetClass label_class; /* Widget Class of the menu label object */
+ Dimension top_margin; /* Top and bottom margins */
+ Dimension bottom_margin;
+ Dimension row_height; /* height of each row (menu entry) */
+ Cursor cursor; /* The menu's cursor */
+ SmeObject popup_entry; /* The entry to position the cursor on for
+ when using XawPositionSimpleMenu */
+ Boolean menu_on_screen; /* Force the menus to be fully on the screen*/
+ int backing_store; /* What type of backing store to use */
+
+ /* private */
+ Boolean recursive_set_values; /* contain a possible infinite loop */
+ Boolean menu_width; /* If true then force width to remain
+ core.width */
+ Boolean menu_height; /* Just like menu_width, but for height */
+ SmeObject entry_set; /* The entry that is currently set or
+ highlighted */
+#ifndef OLDXAW
+ Dimension left_margin;
+ Dimension right_margin;
+ XawDisplayList *display_list;
+ Widget sub_menu;
+ unsigned char state;
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} SimpleMenuPart;
+
+typedef struct _SimpleMenuRec {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+ OverrideShellPart override;
+ SimpleMenuPart simple_menu;
+} SimpleMenuRec;
+
+#endif /* _SimpleMenuP_h */
diff --git a/libXaw/include/X11/Xaw/SimpleMenu.h b/libXaw/include/X11/Xaw/SimpleMenu.h
index 0ee689683..73233fc2c 100644
--- a/libXaw/include/X11/Xaw/SimpleMenu.h
+++ b/libXaw/include/X11/Xaw/SimpleMenu.h
@@ -1,173 +1,171 @@
-/*
- * $Xorg: SimpleMenu.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- *
- * Author: Chris D. Peterson, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/SimpleMenu.h,v 1.7 2001/01/17 19:42:30 dawes Exp $ */
-
-/*
- * SimpleMenu.h - Public Header file for SimpleMenu widget.
- *
- * This is the public header file for the Athena SimpleMenu widget.
- * It is intended to provide one pane pulldown and popup menus within
- * the framework of the X Toolkit. As the name implies it is a first and
- * by no means complete implementation of menu code. It does not attempt to
- * fill the needs of all applications, but does allow a resource oriented
- * interface to menus.
- *
- * Date: April 3, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _SimpleMenu_h
-#define _SimpleMenu_h
-
-#include <X11/Shell.h>
-#include <X11/Xmu/Converters.h>
-
-/*
- * SimpleMenu widget
- */
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- backgroundPixmap BackgroundPixmap Pixmap None
- borderColor BorderColor Pixel XtDefaultForeground
- borderPixmap BorderPixmap Pixmap None
- borderWidth BorderWidth Dimension 1
- bottomMargin VerticalMargins Dimension VerticalSpace
- columnWidth ColumnWidth Dimension Width of widest text
- cursor Cursor Cursor None
- destroyCallback Callback Pointer NULL
- displayList DisplayList XawDisplayList* NULL
- height Height Dimension 0
- label Label String NULL (No label)
- labelClass LabelClass Pointer smeBSBObjectClass
- leftMargin HorizontalMargins Dimension 0
- mappedWhenManaged MappedWhenManaged Boolean True
- rightMargin HorizontalMargins Dimension 0
- rowHeight RowHeight Dimension Height of Font
- sensitive Sensitive Boolean True
- topMargin VerticalMargins Dimension VerticalSpace
- width Width Dimension 0
- x Position Position 0
- y Position Position 0
-
-*/
-
-typedef struct _SimpleMenuClassRec* SimpleMenuWidgetClass;
-typedef struct _SimpleMenuRec* SimpleMenuWidget;
-
-extern WidgetClass simpleMenuWidgetClass;
-
-#define XtNcursor "cursor"
-#define XtNbottomMargin "bottomMargin"
-#define XtNcolumnWidth "columnWidth"
-#define XtNlabelClass "labelClass"
-#define XtNmenuOnScreen "menuOnScreen"
-#define XtNpopupOnEntry "popupOnEntry"
-#define XtNrowHeight "rowHeight"
-#define XtNtopMargin "topMargin"
-#define XtNleftMargin "leftMargin"
-#define XtNrightMargin "rightMargin"
-
-#define XtCColumnWidth "ColumnWidth"
-#define XtCLabelClass "LabelClass"
-#define XtCMenuOnScreen "MenuOnScreen"
-#define XtCPopupOnEntry "PopupOnEntry"
-#define XtCRowHeight "RowHeight"
-
-#define XtCVerticalMargins "VerticalMargins"
-
-#ifndef OLDXAW
-#define XtCHorizontalMargins "HorizontalMargins"
-#define XawNdisplayList "displayList"
-#define XawCDisplayList "DisplayList"
-#define XawRDisplayList "XawDisplayList"
-#endif
-
-/*
- * Public Functions
- */
-
-_XFUNCPROTOBEGIN
-
-/*
- * Function:
- * XawSimpleMenuAddGlobalActions
- *
- * Parameters:
- * app_con - appcontext
- *
- * Description:
- * Adds the global actions to the simple menu widget.
- */
-void XawSimpleMenuAddGlobalActions
-(
- XtAppContext app_con
- );
-
-/*
- * Function:
- * XawSimpleMenuGetActiveEntry
- *
- * Parameters:
- * w - smw widget
- *
- * Description:
- * Gets the currently active (set) entry.
- *
- * Returns:
- * The currently set entry or NULL if none is set
- */
-Widget XawSimpleMenuGetActiveEntry
-(
- Widget w
- );
-
-/*
- * Function:
- * XawSimpleMenuClearActiveEntry
- *
- * Parameters:
- * w - smw widget
- *
- * Description:
- * Unsets the currently active (set) entry.
- */
-void XawSimpleMenuClearActiveEntry
-(
- Widget w
-);
-
-_XFUNCPROTOEND
-
-#endif /* _SimpleMenu_h */
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ *
+ * Author: Chris D. Peterson, MIT X Consortium
+ */
+
+/*
+ * SimpleMenu.h - Public Header file for SimpleMenu widget.
+ *
+ * This is the public header file for the Athena SimpleMenu widget.
+ * It is intended to provide one pane pulldown and popup menus within
+ * the framework of the X Toolkit. As the name implies it is a first and
+ * by no means complete implementation of menu code. It does not attempt to
+ * fill the needs of all applications, but does allow a resource oriented
+ * interface to menus.
+ *
+ * Date: April 3, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _SimpleMenu_h
+#define _SimpleMenu_h
+
+#include <X11/Shell.h>
+#include <X11/Xmu/Converters.h>
+
+/*
+ * SimpleMenu widget
+ */
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ backgroundPixmap BackgroundPixmap Pixmap None
+ borderColor BorderColor Pixel XtDefaultForeground
+ borderPixmap BorderPixmap Pixmap None
+ borderWidth BorderWidth Dimension 1
+ bottomMargin VerticalMargins Dimension VerticalSpace
+ columnWidth ColumnWidth Dimension Width of widest text
+ cursor Cursor Cursor None
+ destroyCallback Callback Pointer NULL
+ displayList DisplayList XawDisplayList* NULL
+ height Height Dimension 0
+ label Label String NULL (No label)
+ labelClass LabelClass Pointer smeBSBObjectClass
+ leftMargin HorizontalMargins Dimension 0
+ mappedWhenManaged MappedWhenManaged Boolean True
+ rightMargin HorizontalMargins Dimension 0
+ rowHeight RowHeight Dimension Height of Font
+ sensitive Sensitive Boolean True
+ topMargin VerticalMargins Dimension VerticalSpace
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+typedef struct _SimpleMenuClassRec* SimpleMenuWidgetClass;
+typedef struct _SimpleMenuRec* SimpleMenuWidget;
+
+extern WidgetClass simpleMenuWidgetClass;
+
+#define XtNcursor "cursor"
+#define XtNbottomMargin "bottomMargin"
+#define XtNcolumnWidth "columnWidth"
+#define XtNlabelClass "labelClass"
+#define XtNmenuOnScreen "menuOnScreen"
+#define XtNpopupOnEntry "popupOnEntry"
+#define XtNrowHeight "rowHeight"
+#define XtNtopMargin "topMargin"
+#define XtNleftMargin "leftMargin"
+#define XtNrightMargin "rightMargin"
+
+#define XtCColumnWidth "ColumnWidth"
+#define XtCLabelClass "LabelClass"
+#define XtCMenuOnScreen "MenuOnScreen"
+#define XtCPopupOnEntry "PopupOnEntry"
+#define XtCRowHeight "RowHeight"
+
+#define XtCVerticalMargins "VerticalMargins"
+
+#ifndef OLDXAW
+#define XtCHorizontalMargins "HorizontalMargins"
+#define XawNdisplayList "displayList"
+#define XawCDisplayList "DisplayList"
+#define XawRDisplayList "XawDisplayList"
+#endif
+
+/*
+ * Public Functions
+ */
+
+_XFUNCPROTOBEGIN
+
+/*
+ * Function:
+ * XawSimpleMenuAddGlobalActions
+ *
+ * Parameters:
+ * app_con - appcontext
+ *
+ * Description:
+ * Adds the global actions to the simple menu widget.
+ */
+void XawSimpleMenuAddGlobalActions
+(
+ XtAppContext app_con
+ );
+
+/*
+ * Function:
+ * XawSimpleMenuGetActiveEntry
+ *
+ * Parameters:
+ * w - smw widget
+ *
+ * Description:
+ * Gets the currently active (set) entry.
+ *
+ * Returns:
+ * The currently set entry or NULL if none is set
+ */
+Widget XawSimpleMenuGetActiveEntry
+(
+ Widget w
+ );
+
+/*
+ * Function:
+ * XawSimpleMenuClearActiveEntry
+ *
+ * Parameters:
+ * w - smw widget
+ *
+ * Description:
+ * Unsets the currently active (set) entry.
+ */
+void XawSimpleMenuClearActiveEntry
+(
+ Widget w
+);
+
+_XFUNCPROTOEND
+
+#endif /* _SimpleMenu_h */
diff --git a/libXaw/include/X11/Xaw/SimpleP.h b/libXaw/include/X11/Xaw/SimpleP.h
index f2fa3fa22..34d218e25 100644
--- a/libXaw/include/X11/Xaw/SimpleP.h
+++ b/libXaw/include/X11/Xaw/SimpleP.h
@@ -1,102 +1,98 @@
-/***********************************************************
-
- $Xorg: SimpleP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
-
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/SimpleP.h,v 1.12 2001/12/14 19:54:43 dawes Exp $ */
-
-#ifndef _SimpleP_h
-#define _SimpleP_h
-
-#include <X11/Xfuncproto.h>
-
-#include <X11/Xaw/Simple.h>
-
-_XFUNCPROTOBEGIN
-
-#include <X11/Xaw/XawInit.h>
-
-typedef struct {
- Bool (*change_sensitive)(Widget);
-#ifndef OLDXAW
- XtPointer extension;
-#endif
-} SimpleClassPart;
-
-#define XtInheritChangeSensitive ((Bool (*)(Widget))_XtInherit)
-
-typedef struct _SimpleClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
-} SimpleClassRec;
-
-extern SimpleClassRec simpleClassRec;
-
-typedef struct {
- /* resources */
- Cursor cursor;
- Pixmap insensitive_border;
- String cursor_name; /* cursor specified by name */
- Pixel pointer_fg, pointer_bg; /* Pointer colors */
- Boolean international;
-
- /* private */
-#ifndef OLDXAW
- XawDisplayList *display_list;
- String tip;
- XtPointer pad[3]; /* for future use and keep binary compatability */
-#endif
-} SimplePart;
-
-typedef struct _SimpleRec {
- CorePart core;
- SimplePart simple;
-} SimpleRec;
-
-_XFUNCPROTOEND
-
-#endif /* _SimpleP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _SimpleP_h
+#define _SimpleP_h
+
+#include <X11/Xfuncproto.h>
+
+#include <X11/Xaw/Simple.h>
+
+_XFUNCPROTOBEGIN
+
+#include <X11/Xaw/XawInit.h>
+
+typedef struct {
+ Bool (*change_sensitive)(Widget);
+#ifndef OLDXAW
+ XtPointer extension;
+#endif
+} SimpleClassPart;
+
+#define XtInheritChangeSensitive ((Bool (*)(Widget))_XtInherit)
+
+typedef struct _SimpleClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+} SimpleClassRec;
+
+extern SimpleClassRec simpleClassRec;
+
+typedef struct {
+ /* resources */
+ Cursor cursor;
+ Pixmap insensitive_border;
+ String cursor_name; /* cursor specified by name */
+ Pixel pointer_fg, pointer_bg; /* Pointer colors */
+ Boolean international;
+
+ /* private */
+#ifndef OLDXAW
+ XawDisplayList *display_list;
+ String tip;
+ XtPointer pad[3]; /* for future use and keep binary compatability */
+#endif
+} SimplePart;
+
+typedef struct _SimpleRec {
+ CorePart core;
+ SimplePart simple;
+} SimpleRec;
+
+_XFUNCPROTOEND
+
+#endif /* _SimpleP_h */
diff --git a/libXaw/include/X11/Xaw/Sme.h b/libXaw/include/X11/Xaw/Sme.h
index fb87b0073..a333eb9ee 100644
--- a/libXaw/include/X11/Xaw/Sme.h
+++ b/libXaw/include/X11/Xaw/Sme.h
@@ -1,73 +1,71 @@
-/*
- * $Xorg: Sme.h,v 1.5 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- */
-/* $XFree86: xc/lib/Xaw/Sme.h,v 1.5 2001/01/17 19:42:31 dawes Exp $ */
-
-/*
- * This is the public header file for the Athena Sme object.
- * It is intended to be used with the simple menu widget.
- *
- * Date: April 3, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _Sme_h
-#define _Sme_h
-
-#include <X11/Intrinsic.h>
-#include <X11/RectObj.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- callback Callback Pointer NULL
- destroyCallback Callback Pointer NULL
- height Height Dimension 0
- sensitive Sensitive Boolean True
- width Width Dimension 0
- x Position Position 0
- y Position Position 0
-
-*/
-
-#ifndef XtCInternational
-#define XtCInternational "International"
-#endif
-
-#ifndef XtNinternational
-#define XtNinternational "international"
-#endif
-
-
-typedef struct _SmeClassRec *SmeObjectClass;
-typedef struct _SmeRec *SmeObject;
-
-extern WidgetClass smeObjectClass;
-
-#endif /* _Sme_h */
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ */
+
+/*
+ * This is the public header file for the Athena Sme object.
+ * It is intended to be used with the simple menu widget.
+ *
+ * Date: April 3, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _Sme_h
+#define _Sme_h
+
+#include <X11/Intrinsic.h>
+#include <X11/RectObj.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ callback Callback Pointer NULL
+ destroyCallback Callback Pointer NULL
+ height Height Dimension 0
+ sensitive Sensitive Boolean True
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#ifndef XtCInternational
+#define XtCInternational "International"
+#endif
+
+#ifndef XtNinternational
+#define XtNinternational "international"
+#endif
+
+
+typedef struct _SmeClassRec *SmeObjectClass;
+typedef struct _SmeRec *SmeObject;
+
+extern WidgetClass smeObjectClass;
+
+#endif /* _Sme_h */
diff --git a/libXaw/include/X11/Xaw/SmeBSB.h b/libXaw/include/X11/Xaw/SmeBSB.h
index 094b558c3..c145886f4 100644
--- a/libXaw/include/X11/Xaw/SmeBSB.h
+++ b/libXaw/include/X11/Xaw/SmeBSB.h
@@ -1,98 +1,96 @@
-/*
- * $Xorg: SmeBSB.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- */
-/* $XFree86: xc/lib/Xaw/SmeBSB.h,v 1.6 2001/01/17 19:42:31 dawes Exp $ */
-
-/*
- * SmeBSB.h - Public Header file for SmeBSB object.
- *
- * This is the public header file for the Athena BSB Sme object.
- * It is intended to be used with the simple menu widget. This object
- * provides bitmap - string - bitmap style entries.
- *
- * Date: April 3, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _SmeBSB_h
-#define _SmeBSB_h
-
-#include <X11/Xmu/Converters.h>
-#include <X11/Xaw/Sme.h>
-
-/* BSB Menu Entry Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- callback Callback Callback NULL
- destroyCallback Callback Pointer NULL
- font Font XFontStruct * XtDefaultFont
- foreground Foreground Pixel XtDefaultForeground
- height Height Dimension 0
- label Label String Name of entry
- leftBitmap LeftBitmap Pixmap None
- leftMargin HorizontalMargins Dimension 4
- menuName MenuName String NULL
- rightBitmap RightBitmap Pixmap None
- rightMargin HorizontalMargins Dimension 4
- sensitive Sensitive Boolean True
- vertSpace VertSpace int 25
- width Width Dimension 0
- x Position Position 0
- y Position Position 0
-
-*/
-
-typedef struct _SmeBSBClassRec *SmeBSBObjectClass;
-typedef struct _SmeBSBRec *SmeBSBObject;
-
-extern WidgetClass smeBSBObjectClass;
-
-#define XtNleftBitmap "leftBitmap"
-#define XtNleftMargin "leftMargin"
-#define XtNrightBitmap "rightBitmap"
-#define XtNrightMargin "rightMargin"
-#define XtNvertSpace "vertSpace"
-
-#define XtNmenuName "menuName"
-#define XtCMenuName "MenuName"
-
-#ifndef XtNfontSet
-#define XtNfontSet "fontSet"
-#endif
-
-#ifndef XtCFontSet
-#define XtCFontSet "FontSet"
-#endif
-
-#define XtCLeftBitmap "LeftBitmap"
-#define XtCHorizontalMargins "HorizontalMargins"
-#define XtCRightBitmap "RightBitmap"
-#define XtCVertSpace "VertSpace"
-
-#endif /* _SmeBSB_h */
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ */
+
+/*
+ * SmeBSB.h - Public Header file for SmeBSB object.
+ *
+ * This is the public header file for the Athena BSB Sme object.
+ * It is intended to be used with the simple menu widget. This object
+ * provides bitmap - string - bitmap style entries.
+ *
+ * Date: April 3, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _SmeBSB_h
+#define _SmeBSB_h
+
+#include <X11/Xmu/Converters.h>
+#include <X11/Xaw/Sme.h>
+
+/* BSB Menu Entry Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ callback Callback Callback NULL
+ destroyCallback Callback Pointer NULL
+ font Font XFontStruct * XtDefaultFont
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension 0
+ label Label String Name of entry
+ leftBitmap LeftBitmap Pixmap None
+ leftMargin HorizontalMargins Dimension 4
+ menuName MenuName String NULL
+ rightBitmap RightBitmap Pixmap None
+ rightMargin HorizontalMargins Dimension 4
+ sensitive Sensitive Boolean True
+ vertSpace VertSpace int 25
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+typedef struct _SmeBSBClassRec *SmeBSBObjectClass;
+typedef struct _SmeBSBRec *SmeBSBObject;
+
+extern WidgetClass smeBSBObjectClass;
+
+#define XtNleftBitmap "leftBitmap"
+#define XtNleftMargin "leftMargin"
+#define XtNrightBitmap "rightBitmap"
+#define XtNrightMargin "rightMargin"
+#define XtNvertSpace "vertSpace"
+
+#define XtNmenuName "menuName"
+#define XtCMenuName "MenuName"
+
+#ifndef XtNfontSet
+#define XtNfontSet "fontSet"
+#endif
+
+#ifndef XtCFontSet
+#define XtCFontSet "FontSet"
+#endif
+
+#define XtCLeftBitmap "LeftBitmap"
+#define XtCHorizontalMargins "HorizontalMargins"
+#define XtCRightBitmap "RightBitmap"
+#define XtCVertSpace "VertSpace"
+
+#endif /* _SmeBSB_h */
diff --git a/libXaw/include/X11/Xaw/SmeBSBP.h b/libXaw/include/X11/Xaw/SmeBSBP.h
index 6b263e7a8..03247d072 100644
--- a/libXaw/include/X11/Xaw/SmeBSBP.h
+++ b/libXaw/include/X11/Xaw/SmeBSBP.h
@@ -1,94 +1,92 @@
-/*
- * $Xorg: SmeBSBP.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- *
- * Author: Chris D. Peterson, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/SmeBSBP.h,v 1.8 2001/01/17 19:42:31 dawes Exp $ */
-
-#ifndef _XawSmeBSBP_h
-#define _XawSmeBSBP_h
-
-/*
- * Sme Object Private Data
- */
-#include <X11/Xaw/SmeP.h>
-#include <X11/Xaw/SmeBSB.h>
-
-typedef struct _SmeBSBClassPart {
- XtPointer extension;
-} SmeBSBClassPart;
-
-/* Full class record declaration */
-typedef struct _SmeBSBClassRec {
- RectObjClassPart rect_class;
- SmeClassPart sme_class;
- SmeBSBClassPart sme_bsb_class;
-} SmeBSBClassRec;
-
-extern SmeBSBClassRec smeBSBClassRec;
-
-/* New fields for the Sme Object record */
-typedef struct {
- /* resources */
- String label; /* The entry label */
- int vert_space; /* extra vert space to leave, as a
- percentage of the font height of
- the label */
- Pixmap left_bitmap, right_bitmap; /* bitmaps to show */
- Dimension left_margin, right_margin;/* left and right margins */
- Pixel foreground; /* foreground color */
- XFontStruct *font; /* The font to show label in */
- XFontSet fontset; /* or fontset */
- XtJustify justify; /* Justification for the label. */
-
- /* private */
- Boolean set_values_area_cleared; /* do we need to unhighlight? */
- GC norm_gc; /* noral color gc */
- GC rev_gc; /* reverse color gc */
- GC norm_gray_gc; /* Normal color (grayed out) gc */
- GC invert_gc; /* gc for flipping colors */
- Dimension left_bitmap_width; /* size of each bitmap */
- Dimension left_bitmap_height;
- Dimension right_bitmap_width;
- Dimension right_bitmap_height;
-
-#ifndef OLDXAW
- /* new resources */
- String menu_name; /* name of nested sub menu or NULL */
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} SmeBSBPart;
-
-/*
- * Full instance record declaration
- */
-typedef struct _SmeBSBRec {
- ObjectPart object;
- RectObjPart rectangle;
- SmePart sme;
- SmeBSBPart sme_bsb;
-} SmeBSBRec;
-
-#endif /* _XawSmeBSBP_h */
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ *
+ * Author: Chris D. Peterson, MIT X Consortium
+ */
+
+#ifndef _XawSmeBSBP_h
+#define _XawSmeBSBP_h
+
+/*
+ * Sme Object Private Data
+ */
+#include <X11/Xaw/SmeP.h>
+#include <X11/Xaw/SmeBSB.h>
+
+typedef struct _SmeBSBClassPart {
+ XtPointer extension;
+} SmeBSBClassPart;
+
+/* Full class record declaration */
+typedef struct _SmeBSBClassRec {
+ RectObjClassPart rect_class;
+ SmeClassPart sme_class;
+ SmeBSBClassPart sme_bsb_class;
+} SmeBSBClassRec;
+
+extern SmeBSBClassRec smeBSBClassRec;
+
+/* New fields for the Sme Object record */
+typedef struct {
+ /* resources */
+ String label; /* The entry label */
+ int vert_space; /* extra vert space to leave, as a
+ percentage of the font height of
+ the label */
+ Pixmap left_bitmap, right_bitmap; /* bitmaps to show */
+ Dimension left_margin, right_margin;/* left and right margins */
+ Pixel foreground; /* foreground color */
+ XFontStruct *font; /* The font to show label in */
+ XFontSet fontset; /* or fontset */
+ XtJustify justify; /* Justification for the label. */
+
+ /* private */
+ Boolean set_values_area_cleared; /* do we need to unhighlight? */
+ GC norm_gc; /* noral color gc */
+ GC rev_gc; /* reverse color gc */
+ GC norm_gray_gc; /* Normal color (grayed out) gc */
+ GC invert_gc; /* gc for flipping colors */
+ Dimension left_bitmap_width; /* size of each bitmap */
+ Dimension left_bitmap_height;
+ Dimension right_bitmap_width;
+ Dimension right_bitmap_height;
+
+#ifndef OLDXAW
+ /* new resources */
+ String menu_name; /* name of nested sub menu or NULL */
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} SmeBSBPart;
+
+/*
+ * Full instance record declaration
+ */
+typedef struct _SmeBSBRec {
+ ObjectPart object;
+ RectObjPart rectangle;
+ SmePart sme;
+ SmeBSBPart sme_bsb;
+} SmeBSBRec;
+
+#endif /* _XawSmeBSBP_h */
diff --git a/libXaw/include/X11/Xaw/SmeLine.h b/libXaw/include/X11/Xaw/SmeLine.h
index 7c9d4e41a..737f1f586 100644
--- a/libXaw/include/X11/Xaw/SmeLine.h
+++ b/libXaw/include/X11/Xaw/SmeLine.h
@@ -1,71 +1,69 @@
-/*
- * $Xorg: SmeLine.h,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1998 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.
- *
- */
-/* $XFree86: xc/lib/Xaw/SmeLine.h,v 1.5 2001/01/17 19:42:31 dawes Exp $ */
-
-/*
- * This is the public header file for the Athena SmeLine object.
- * It is intended to be used with the simple menu widget.
- *
- * Date: April 3, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _SmeLine_h
-#define _SmeLine_h
-
-#include <X11/Xaw/Sme.h>
-#include <X11/Xmu/Converters.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- callback Callback Pointer NULL
- destroyCallback Callback Pointer NULL
- height Height Dimension 0
- sensitive Sensitive Boolean True
- width Width Dimension 0
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define XtCLineWidth "LineWidth"
-#define XtCStipple "Stipple"
-
-#define XtNlineWidth "lineWidth"
-#define XtNstipple "stipple"
-
-typedef struct _SmeLineClassRec *SmeLineObjectClass;
-typedef struct _SmeLineRec *SmeLineObject;
-
-extern WidgetClass smeLineObjectClass;
-
-#endif /* _SmeLine_h */
+/*
+ *
+Copyright 1989, 1998 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.
+ *
+ */
+
+/*
+ * This is the public header file for the Athena SmeLine object.
+ * It is intended to be used with the simple menu widget.
+ *
+ * Date: April 3, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _SmeLine_h
+#define _SmeLine_h
+
+#include <X11/Xaw/Sme.h>
+#include <X11/Xmu/Converters.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ callback Callback Pointer NULL
+ destroyCallback Callback Pointer NULL
+ height Height Dimension 0
+ sensitive Sensitive Boolean True
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define XtCLineWidth "LineWidth"
+#define XtCStipple "Stipple"
+
+#define XtNlineWidth "lineWidth"
+#define XtNstipple "stipple"
+
+typedef struct _SmeLineClassRec *SmeLineObjectClass;
+typedef struct _SmeLineRec *SmeLineObject;
+
+extern WidgetClass smeLineObjectClass;
+
+#endif /* _SmeLine_h */
diff --git a/libXaw/include/X11/Xaw/SmeLineP.h b/libXaw/include/X11/Xaw/SmeLineP.h
index 7102d03f9..0f9fa7076 100644
--- a/libXaw/include/X11/Xaw/SmeLineP.h
+++ b/libXaw/include/X11/Xaw/SmeLineP.h
@@ -1,75 +1,73 @@
-/*
- * $Xorg: SmeLineP.h,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $
- *
-Copyright 1989, 1998 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.
- *
- * Author: Chris D. Peterson, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/SmeLineP.h,v 1.7 2001/01/17 19:42:31 dawes Exp $ */
-
-#ifndef _XawSmeLineP_h
-#define _XawSmeLineP_h
-
-/*
- * SmeLine Widget Private Data
- */
-#include <X11/Xaw/SmeP.h>
-#include <X11/Xaw/SmeLine.h>
-
-/* New fields for the SmeLine widget class */
-typedef struct _SmeLineClassPart {
- XtPointer extension;
-} SmeLineClassPart;
-
-/* Full class record */
-typedef struct _SmeLineClassRec {
- RectObjClassPart rect_class;
- SmeClassPart sme_class;
- SmeLineClassPart sme_line_class;
-} SmeLineClassRec;
-
-extern SmeLineClassRec smeLineClassRec;
-
-/* New fields for the SmeLine widget */
-typedef struct {
- /* resources */
- Pixel foreground; /* Foreground color */
- Pixmap stipple; /* Line Stipple */
- Dimension line_width; /* Width of the line */
-
- /* private */
- GC gc; /* Graphics context for drawing line */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} SmeLinePart;
-
-/* Full instance record */
-typedef struct _SmeLineRec {
- ObjectPart object;
- RectObjPart rectangle;
- SmePart sme;
- SmeLinePart sme_line;
-} SmeLineRec;
-
-#endif /* _XawSmeLineP_h */
+/*
+ *
+Copyright 1989, 1998 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.
+ *
+ * Author: Chris D. Peterson, MIT X Consortium
+ */
+
+#ifndef _XawSmeLineP_h
+#define _XawSmeLineP_h
+
+/*
+ * SmeLine Widget Private Data
+ */
+#include <X11/Xaw/SmeP.h>
+#include <X11/Xaw/SmeLine.h>
+
+/* New fields for the SmeLine widget class */
+typedef struct _SmeLineClassPart {
+ XtPointer extension;
+} SmeLineClassPart;
+
+/* Full class record */
+typedef struct _SmeLineClassRec {
+ RectObjClassPart rect_class;
+ SmeClassPart sme_class;
+ SmeLineClassPart sme_line_class;
+} SmeLineClassRec;
+
+extern SmeLineClassRec smeLineClassRec;
+
+/* New fields for the SmeLine widget */
+typedef struct {
+ /* resources */
+ Pixel foreground; /* Foreground color */
+ Pixmap stipple; /* Line Stipple */
+ Dimension line_width; /* Width of the line */
+
+ /* private */
+ GC gc; /* Graphics context for drawing line */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} SmeLinePart;
+
+/* Full instance record */
+typedef struct _SmeLineRec {
+ ObjectPart object;
+ RectObjPart rectangle;
+ SmePart sme;
+ SmeLinePart sme_line;
+} SmeLineRec;
+
+#endif /* _XawSmeLineP_h */
diff --git a/libXaw/include/X11/Xaw/SmeP.h b/libXaw/include/X11/Xaw/SmeP.h
index 94342fffd..8999e752f 100644
--- a/libXaw/include/X11/Xaw/SmeP.h
+++ b/libXaw/include/X11/Xaw/SmeP.h
@@ -1,90 +1,88 @@
-/*
- * $Xorg: SmeP.h,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- */
-/* $XFree86: xc/lib/Xaw/SmeP.h,v 1.8 2001/12/14 19:54:43 dawes Exp $ */
-
-/*
- * This is the private header file for the Athena Sme object.
- * This object is intended to be used with the simple menu widget.
- *
- * Date: April 3, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifndef _XawSmeP_h
-#define _XawSmeP_h
-
-/*
- * Sme Widget Private Data
- */
-#include <X11/Xfuncproto.h>
-
-#include <X11/Xaw/Sme.h>
-
-_XFUNCPROTOBEGIN
-
-/* New fields for the Sme widget class */
-typedef struct _SmeClassPart {
- XtWidgetProc highlight;
- XtWidgetProc unhighlight;
- XtWidgetProc notify;
- XtPointer extension;
-} SmeClassPart;
-
-/* Full class record */
-typedef struct _SmeClassRec {
- RectObjClassPart rect_class;
- SmeClassPart sme_class;
-} SmeClassRec;
-
-extern SmeClassRec smeClassRec;
-
-/* New fields for the Sme widget */
-typedef struct {
- /* resources */
- XtCallbackList callbacks;
- Boolean international;
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} SmePart;
-
-/* Full instance record */
-typedef struct _SmeRec {
- ObjectPart object;
- RectObjPart rectangle;
- SmePart sme;
-} SmeRec;
-
-#define XtInheritHighlight ((XtWidgetProc)_XtInherit)
-#define XtInheritUnhighlight XtInheritHighlight
-#define XtInheritNotify XtInheritHighlight
-
-_XFUNCPROTOEND
-
-#endif /* _XawSmeP_h */
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ */
+
+/*
+ * This is the private header file for the Athena Sme object.
+ * This object is intended to be used with the simple menu widget.
+ *
+ * Date: April 3, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifndef _XawSmeP_h
+#define _XawSmeP_h
+
+/*
+ * Sme Widget Private Data
+ */
+#include <X11/Xfuncproto.h>
+
+#include <X11/Xaw/Sme.h>
+
+_XFUNCPROTOBEGIN
+
+/* New fields for the Sme widget class */
+typedef struct _SmeClassPart {
+ XtWidgetProc highlight;
+ XtWidgetProc unhighlight;
+ XtWidgetProc notify;
+ XtPointer extension;
+} SmeClassPart;
+
+/* Full class record */
+typedef struct _SmeClassRec {
+ RectObjClassPart rect_class;
+ SmeClassPart sme_class;
+} SmeClassRec;
+
+extern SmeClassRec smeClassRec;
+
+/* New fields for the Sme widget */
+typedef struct {
+ /* resources */
+ XtCallbackList callbacks;
+ Boolean international;
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} SmePart;
+
+/* Full instance record */
+typedef struct _SmeRec {
+ ObjectPart object;
+ RectObjPart rectangle;
+ SmePart sme;
+} SmeRec;
+
+#define XtInheritHighlight ((XtWidgetProc)_XtInherit)
+#define XtInheritUnhighlight XtInheritHighlight
+#define XtInheritNotify XtInheritHighlight
+
+_XFUNCPROTOEND
+
+#endif /* _XawSmeP_h */
diff --git a/libXaw/include/X11/Xaw/StripCharP.h b/libXaw/include/X11/Xaw/StripCharP.h
index 50ed74c98..2fad7f980 100644
--- a/libXaw/include/X11/Xaw/StripCharP.h
+++ b/libXaw/include/X11/Xaw/StripCharP.h
@@ -1,110 +1,104 @@
-/*
-* $Xorg: StripCharP.h,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/StripCharP.h,v 1.7 2001/01/17 19:42:32 dawes Exp $ */
-
-#ifndef _XawStripChartP_h
-#define _XawStripChartP_h
-
-#include <X11/Xaw/StripChart.h>
-#include <X11/Xaw/SimpleP.h>
-
-#define NO_GCS 0
-#define FOREGROUND (1 << 0)
-#define HIGHLIGHT (1 << 1)
-#define ALL_GCS (FOREGROUND | HIGHLIGHT)
-
-/* new fields for the stripChart widget */
-typedef struct {
- /* resources */
- Pixel fgpixel; /* color index for graph */
- Pixel hipixel; /* color index for lines */
- GC fgGC; /* graphics context for fgpixel */
- GC hiGC; /* graphics context for hipixel */
-
- /* private */
- int update; /* update frequence */
- int scale; /* scale factor */
- int min_scale; /* smallest scale factor */
- int interval; /* data point interval */
- XPoint *points; /* Poly point for repairing graph lines */
- double max_value; /* Max Value in window */
- double valuedata[2048]; /* record of data points */
- XtIntervalId interval_id;
- XtCallbackList get_value; /* proc to call to fetch load pt */
- int jump_val; /* Amount to jump on each scroll */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} StripChartPart;
-
-/* instance record declaration */
-typedef struct _StripChartRec {
- CorePart core;
- SimplePart simple;
- StripChartPart strip_chart;
-} StripChartRec;
-
-/* new fields for the StripChart widget class record */
-typedef struct {
- XtPointer extension;
-} StripChartClassPart;
-
-/* class record declaration */
-typedef struct _StripChartClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- StripChartClassPart strip_chart_class;
-} StripChartClassRec;
-
-extern StripChartClassRec stripChartClassRec;
-
-#endif /* _XawStripChartP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawStripChartP_h
+#define _XawStripChartP_h
+
+#include <X11/Xaw/StripChart.h>
+#include <X11/Xaw/SimpleP.h>
+
+#define NO_GCS 0
+#define FOREGROUND (1 << 0)
+#define HIGHLIGHT (1 << 1)
+#define ALL_GCS (FOREGROUND | HIGHLIGHT)
+
+/* new fields for the stripChart widget */
+typedef struct {
+ /* resources */
+ Pixel fgpixel; /* color index for graph */
+ Pixel hipixel; /* color index for lines */
+ GC fgGC; /* graphics context for fgpixel */
+ GC hiGC; /* graphics context for hipixel */
+
+ /* private */
+ int update; /* update frequence */
+ int scale; /* scale factor */
+ int min_scale; /* smallest scale factor */
+ int interval; /* data point interval */
+ XPoint *points; /* Poly point for repairing graph lines */
+ double max_value; /* Max Value in window */
+ double valuedata[2048]; /* record of data points */
+ XtIntervalId interval_id;
+ XtCallbackList get_value; /* proc to call to fetch load pt */
+ int jump_val; /* Amount to jump on each scroll */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} StripChartPart;
+
+/* instance record declaration */
+typedef struct _StripChartRec {
+ CorePart core;
+ SimplePart simple;
+ StripChartPart strip_chart;
+} StripChartRec;
+
+/* new fields for the StripChart widget class record */
+typedef struct {
+ XtPointer extension;
+} StripChartClassPart;
+
+/* class record declaration */
+typedef struct _StripChartClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ StripChartClassPart strip_chart_class;
+} StripChartClassRec;
+
+extern StripChartClassRec stripChartClassRec;
+
+#endif /* _XawStripChartP_h */
diff --git a/libXaw/include/X11/Xaw/StripChart.h b/libXaw/include/X11/Xaw/StripChart.h
index b6c6f212a..e36e11e1f 100644
--- a/libXaw/include/X11/Xaw/StripChart.h
+++ b/libXaw/include/X11/Xaw/StripChart.h
@@ -1,119 +1,116 @@
-/* $Xorg: StripChart.h,v 1.5 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/StripChart.h,v 1.5 2001/01/17 19:42:32 dawes Exp $ */
-
-#ifndef _XawStripChart_h
-#define _XawStripChart_h
-
-#include <X11/Intrinsic.h>
-
-/***********************************************************************
- *
- * StripChart Widget
- *
- ***********************************************************************/
-
-/* StripChart resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- 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
- cursor Cursor Cursor None
- cursorName Cursor String NULL
- depth Depth int 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
- jumpScroll JumpScroll int 1/2 width
- mappedWhenManaged MappedWhenManaged Boolean True
- minScale Scale int 1
- pointerColor Foreground Pixel XtDefaultForeground
- pointerColorBackground Background Pixel XtDefaultBackground
- screen Screen Screen parent's screen
- sensitive Sensitive Boolean True
- translations Translations TranslationTable NULL
- update Interval int 10 (seconds)
- width Width Dimension 120
- x Position Position 0
- y Position Position 0
-
-*/
-
-#define DEFAULT_JUMP -1
-
-#ifndef _XtStringDefs_h_
-#define XtNhighlight "highlight"
-#define XtNupdate "update"
-#endif
-
-#define XtCJumpScroll "JumpScroll"
-#define XtCScale "Scale"
-
-#define XtNgetValue "getValue"
-#define XtNjumpScroll "jumpScroll"
-#define XtNminScale "minScale"
-#define XtNscale "scale"
-#define XtNvmunix "vmunix"
-
-typedef struct _StripChartRec *StripChartWidget;
-typedef struct _StripChartClassRec *StripChartWidgetClass;
-
-extern WidgetClass stripChartWidgetClass;
-
-#endif /* _XawStripChart_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawStripChart_h
+#define _XawStripChart_h
+
+#include <X11/Intrinsic.h>
+
+/***********************************************************************
+ *
+ * StripChart Widget
+ *
+ ***********************************************************************/
+
+/* StripChart resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ 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
+ cursor Cursor Cursor None
+ cursorName Cursor String NULL
+ depth Depth int 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
+ jumpScroll JumpScroll int 1/2 width
+ mappedWhenManaged MappedWhenManaged Boolean True
+ minScale Scale int 1
+ pointerColor Foreground Pixel XtDefaultForeground
+ pointerColorBackground Background Pixel XtDefaultBackground
+ screen Screen Screen parent's screen
+ sensitive Sensitive Boolean True
+ translations Translations TranslationTable NULL
+ update Interval int 10 (seconds)
+ width Width Dimension 120
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#define DEFAULT_JUMP -1
+
+#ifndef _XtStringDefs_h_
+#define XtNhighlight "highlight"
+#define XtNupdate "update"
+#endif
+
+#define XtCJumpScroll "JumpScroll"
+#define XtCScale "Scale"
+
+#define XtNgetValue "getValue"
+#define XtNjumpScroll "jumpScroll"
+#define XtNminScale "minScale"
+#define XtNscale "scale"
+#define XtNvmunix "vmunix"
+
+typedef struct _StripChartRec *StripChartWidget;
+typedef struct _StripChartClassRec *StripChartWidgetClass;
+
+extern WidgetClass stripChartWidgetClass;
+
+#endif /* _XawStripChart_h */
diff --git a/libXaw/include/X11/Xaw/Template.c b/libXaw/include/X11/Xaw/Template.c
index 9c3763b52..c563b302f 100644
--- a/libXaw/include/X11/Xaw/Template.c
+++ b/libXaw/include/X11/Xaw/Template.c
@@ -1,198 +1,195 @@
-/* $Xorg: Template.c,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/*
-
-Copyright 1987, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/Template.c,v 1.8 2001/08/01 00:44:39 tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xaw/TemplateP.h>
-
-/*
- * Class Methods
- */
-static void TemplateInitialize(Widget, Widget, ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static Bool TemplateFunction(TemplateWidget, int, int, Bool);
-
-/*
- * Actions
- */
-static void TemplateAction(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(TemplateRec, template.field)
-static XtResource resources[] = {
-/*{
- name,
- class,
- type,
- size,
- offset,
- default_type,
- default_addr
- },*/
- {
- XtNtemplateResource,
- XtCTemplateResource,
- XtRTemplateResource,
- sizeof(char*),
- offset(resource),
- XtRString,
- (XtPointer)"default"
- },
-};
-#undef offset
-
-static XtActionsRec actions[] =
-{
- /*{name, procedure},*/
- {"template", TemplateAction},
-};
-
-static char translations[] =
-"<Key>:" "template()\n"
-;
-
-#define Superclass (&widgetClassRec)
-TemplateClassRec templateClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Template", /* class_name */
- sizeof(TemplateRec), /* widget_size */
- NULL, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- TemplateInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- actions, /* actions */
- XtNumber(actions), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- NULL, /* resize */
- NULL, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- translations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* template */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass templateWidgetClass = (WidgetClass)&templateClassRec;
-
-/*
- * Implementation
- */
-/*
- * Function:
- * TemplateInitialize
- *
- * Parameters:
- * request - requested widget
- * w - the widget
- * args - arguments
- * num_args - number of arguments
- *
- * Description:
- * Initializes widget instance.
- */
-/*ARGSUSED*/
-static void
-TemplateInitialize(Widget request, Widget w, ArgList args, Cardinal *num_args)
-{
- TemplateWidget tw = (TemplateWidget)w;
-
- tw->template.private = NULL;
-}
-
-/*
- * Function:
- * TemplateFunction
- *
- * Parameters:
- * tw - template widget
- * x - x coordinate
- * y - y coordinate
- * force - force action
- *
- * Description:
- * This function does nothing.
- *
- * Return:
- * Parameter force
- */
-/*ARGSUSED*/
-static Bool
-TemplateFunction(TemplateWidget tw, int x, int y, Bool force)
-{
- return (force);
-}
-
-/*
- * Function:
- * TemplateAction
- *
- * Parameters:
- * w - template widget
- * event - event that caused this action
- * params - parameters
- * num_params - number of parameters
- *
- * Description:
- * This function does nothing.
- */
-/*ARGSUSED*/
-static void
-TemplateAction(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
-}
+/*
+
+Copyright 1987, 1998 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.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/TemplateP.h>
+
+/*
+ * Class Methods
+ */
+static void TemplateInitialize(Widget, Widget, ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static Bool TemplateFunction(TemplateWidget, int, int, Bool);
+
+/*
+ * Actions
+ */
+static void TemplateAction(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(TemplateRec, template.field)
+static XtResource resources[] = {
+/*{
+ name,
+ class,
+ type,
+ size,
+ offset,
+ default_type,
+ default_addr
+ },*/
+ {
+ XtNtemplateResource,
+ XtCTemplateResource,
+ XtRTemplateResource,
+ sizeof(char*),
+ offset(resource),
+ XtRString,
+ (XtPointer)"default"
+ },
+};
+#undef offset
+
+static XtActionsRec actions[] =
+{
+ /*{name, procedure},*/
+ {"template", TemplateAction},
+};
+
+static char translations[] =
+"<Key>:" "template()\n"
+;
+
+#define Superclass (&widgetClassRec)
+TemplateClassRec templateClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Template", /* class_name */
+ sizeof(TemplateRec), /* widget_size */
+ NULL, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ TemplateInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ NULL, /* resize */
+ NULL, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ translations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* template */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass templateWidgetClass = (WidgetClass)&templateClassRec;
+
+/*
+ * Implementation
+ */
+/*
+ * Function:
+ * TemplateInitialize
+ *
+ * Parameters:
+ * request - requested widget
+ * w - the widget
+ * args - arguments
+ * num_args - number of arguments
+ *
+ * Description:
+ * Initializes widget instance.
+ */
+/*ARGSUSED*/
+static void
+TemplateInitialize(Widget request, Widget w, ArgList args, Cardinal *num_args)
+{
+ TemplateWidget tw = (TemplateWidget)w;
+
+ tw->template.private = NULL;
+}
+
+/*
+ * Function:
+ * TemplateFunction
+ *
+ * Parameters:
+ * tw - template widget
+ * x - x coordinate
+ * y - y coordinate
+ * force - force action
+ *
+ * Description:
+ * This function does nothing.
+ *
+ * Return:
+ * Parameter force
+ */
+/*ARGSUSED*/
+static Bool
+TemplateFunction(TemplateWidget tw, int x, int y, Bool force)
+{
+ return (force);
+}
+
+/*
+ * Function:
+ * TemplateAction
+ *
+ * Parameters:
+ * w - template widget
+ * event - event that caused this action
+ * params - parameters
+ * num_params - number of parameters
+ *
+ * Description:
+ * This function does nothing.
+ */
+/*ARGSUSED*/
+static void
+TemplateAction(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+}
diff --git a/libXaw/include/X11/Xaw/Template.h b/libXaw/include/X11/Xaw/Template.h
index 5ec0974cf..a46ac32bc 100644
--- a/libXaw/include/X11/Xaw/Template.h
+++ b/libXaw/include/X11/Xaw/Template.h
@@ -1,70 +1,67 @@
-/* $Xorg: Template.h,v 1.5 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/*
-
-Copyright 1987, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/Template.h,v 1.5 2001/01/17 19:42:32 dawes Exp $ */
-
-#ifndef _Template_h
-#define _Template_h
-
-#include <X11/Intrinsic.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 <X11/StringDefs.h> */
-#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 */
+/*
+
+Copyright 1987, 1998 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.
+
+*/
+
+#ifndef _Template_h
+#define _Template_h
+
+#include <X11/Intrinsic.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 <X11/StringDefs.h> */
+#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 */
diff --git a/libXaw/include/X11/Xaw/TemplateP.h b/libXaw/include/X11/Xaw/TemplateP.h
index f3e3d67d5..f61a059ab 100644
--- a/libXaw/include/X11/Xaw/TemplateP.h
+++ b/libXaw/include/X11/Xaw/TemplateP.h
@@ -1,68 +1,65 @@
-/* $Xorg: TemplateP.h,v 1.5 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/*
-
-Copyright 1987, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/TemplateP.h,v 1.6 2001/01/17 19:42:32 dawes Exp $ */
-
-#ifndef _TemplateP_h
-#define _TemplateP_h
-
-#include <X11/Xaw/Template.h>
-
-/* include superclass private header file */
-#include <X11/CoreP.h>
-
-/* define unique representation types not found in <X11/StringDefs.h> */
-#define XtRTemplateResource "TemplateResource"
-
-typedef struct {
- XtPointer extension;
-} TemplateClassPart;
-
-typedef struct _TemplateClassRec {
- CoreClassPart core_class;
- TemplateClassPart template_class;
-} TemplateClassRec;
-
-extern TemplateClassRec templateClassRec;
-
-typedef struct {
- /* resources */
- char* resource;
- /* private */
- char *private;
-} TemplatePart;
-
-typedef struct _TemplateRec {
- CorePart core;
-#if defined(__cplusplus) || defined(c_plusplus)
- TemplatePart c_template;
-#else
- TemplatePart template;
-#endif
-} TemplateRec;
-
-#endif /* _TemplateP_h */
+/*
+
+Copyright 1987, 1998 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.
+
+*/
+
+#ifndef _TemplateP_h
+#define _TemplateP_h
+
+#include <X11/Xaw/Template.h>
+
+/* include superclass private header file */
+#include <X11/CoreP.h>
+
+/* define unique representation types not found in <X11/StringDefs.h> */
+#define XtRTemplateResource "TemplateResource"
+
+typedef struct {
+ XtPointer extension;
+} TemplateClassPart;
+
+typedef struct _TemplateClassRec {
+ CoreClassPart core_class;
+ TemplateClassPart template_class;
+} TemplateClassRec;
+
+extern TemplateClassRec templateClassRec;
+
+typedef struct {
+ /* resources */
+ char* resource;
+ /* private */
+ char *private;
+} TemplatePart;
+
+typedef struct _TemplateRec {
+ CorePart core;
+#if defined(__cplusplus) || defined(c_plusplus)
+ TemplatePart c_template;
+#else
+ TemplatePart template;
+#endif
+} TemplateRec;
+
+#endif /* _TemplateP_h */
diff --git a/libXaw/include/X11/Xaw/Text.h b/libXaw/include/X11/Xaw/Text.h
index af80ffcdb..1f9b04915 100644
--- a/libXaw/include/X11/Xaw/Text.h
+++ b/libXaw/include/X11/Xaw/Text.h
@@ -1,373 +1,370 @@
-/* $Xorg: Text.h,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Text.h,v 1.14 2001/01/17 19:42:34 dawes Exp $ */
-
-#ifndef _XawText_h
-#define _XawText_h
-
-#include <X11/Xaw/Simple.h>
-
-/*
-
- Class: textWidgetClass
- Class Name: Text
- Superclass: Simple
-
- Resources added by the Text widget:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- autoFill AutoFill Boolean False
- bottomMargin Margin Position 2
- displayPosition TextPosition XawTextPosition 0
- insertPosition TextPosition XawTextPosition 0
- justify JustifyMode JustifyMode left
- leftColumn Column Column 0
- rightColumn Column Column 0
- leftMargin Margin Position 2
- rightMargin Margin Position 4
- positionCallback Callback Callback NULL
- scrollHorizontal Scroll Boolean False
- scrollVertical Scroll Boolean False
- selectTypes SelectTypes Pointer see documentation
- textSink TextSink Widget NULL
- textSource TextSource Widget NULL
- topMargin Margin Position 2
- unrealizeCallback Callback Callback NULL
- wrap Wrap XawTextWrapMode XawTextWrapNever
-
-*/
-
-typedef long XawTextPosition;
-
-#ifndef notdef
-typedef enum {
- XawtextScrollNever,
- XawtextScrollWhenNeeded,
- XawtextScrollAlways
-} XawTextScrollMode;
-
-typedef enum {
- XawtextResizeNever,
- XawtextResizeWidth,
- XawtextResizeHeight,
- XawtextResizeBoth
-} XawTextResizeMode;
-#endif
-
-typedef enum {
- XawtextWrapNever,
- XawtextWrapLine,
- XawtextWrapWord
-} XawTextWrapMode;
-
-typedef enum {
- XawsdLeft,
- XawsdRight
-} XawTextScanDirection;
-
-typedef enum {
- XawtextRead,
- XawtextAppend,
- XawtextEdit
-} XawTextEditType;
-
-typedef enum {
- XawselectNull,
- XawselectPosition,
- XawselectChar,
- XawselectWord,
- XawselectLine,
- XawselectParagraph,
- XawselectAll,
- XawselectAlphaNumeric
-} XawTextSelectType;
-
-typedef enum {
- XawjustifyLeft,
- XawjustifyRight,
- XawjustifyCenter,
- XawjustifyFull
-} XawTextJustifyMode;
-
-typedef struct {
- int firstPos;
- int length;
- char *ptr;
- unsigned long format;
-} XawTextBlock, *XawTextBlockPtr;
-
-#ifndef OLDXAW
-typedef struct {
- int line_number;
- int column_number;
- XawTextPosition insert_position;
- XawTextPosition last_position;
- Boolean overwrite_mode;
-} XawTextPositionInfo;
-
-typedef struct {
- XawTextPosition left, right;
- XawTextBlock *block;
-} XawTextPropertyInfo;
-
-typedef struct _XawTextAnchor XawTextAnchor;
-typedef struct _XawTextEntity XawTextEntity;
-typedef struct _XawTextProperty XawTextProperty;
-typedef struct _XawTextPropertyList XawTextPropertyList;
-#endif
-
-#include <X11/Xaw/TextSink.h>
-#include <X11/Xaw/TextSrc.h>
-
-#define XtEtextScrollNever "never"
-#define XtEtextScrollWhenNeeded "whenneeded"
-#define XtEtextScrollAlways "always"
-#define XtEtextResizeNever "never"
-#define XtEtextResizeWidth "width"
-#define XtEtextResizeHeight "height"
-#define XtEtextResizeBoth "both"
-
-#define XtEtextWrapNever "never"
-#define XtEtextWrapLine "line"
-#define XtEtextWrapWord "word"
-
-#define XtNautoFill "autoFill"
-#define XtNbottomMargin "bottomMargin"
-#define XtNdialogHOffset "dialogHOffset"
-#define XtNdialogVOffset "dialogVOffset"
-#define XtNdisplayCaret "displayCaret"
-#define XtNdisplayPosition "displayPosition"
-#define XtNleftMargin "leftMargin"
-#define XtNrightMargin "rightMargin"
-#define XtNpositionCallback "positionCallback"
-#define XtNscrollVertical "scrollVertical"
-#define XtNscrollHorizontal "scrollHorizontal"
-#define XtNselectTypes "selectTypes"
-#define XtNtopMargin "topMargin"
-#define XtNwrap "wrap"
-
-#define XtCColumn "Column"
-#define XtNleftColumn "leftColumn"
-#define XtNrightColumn "rightColumn"
-
-#define XtCJustifyMode XtCJustify
-#define XtNjustifyMode XtNjustify
-#define XtEtextJustifyLeft "left"
-#define XtEtextJustifyRight "right"
-#define XtEtextJustifyCenter "center"
-#define XtEtextJustifyFull "full"
-
-#define XtCAutoFill "AutoFill"
-#define XtCSelectTypes "SelectTypes"
-#define XtCWrap "Wrap"
-#ifndef notdef
-#define XtCScroll "Scroll"
-#endif
-
-#ifndef _XtStringDefs_h_
-#define XtNinsertPosition "insertPosition"
-#ifndef notdef
-#define XtNresize "resize"
-#define XtCResize "Resize"
-#endif
-#define XtNselection "selection"
-#endif
-
-/* return Error code for XawTextSearch */
-#define XawTextSearchError (-12345L)
-
-/* return codes from XawTextReplace */
-#define XawReplaceError -1
-#define XawEditDone 0
-#define XawEditError 1
-#define XawPositionError 2
-
-/* XrmQuark is not unsigned long */
-#define XawTextFormat(tw,fmt) ((unsigned long)_XawTextFormat(tw) == (fmt))
-
-extern unsigned long FMT8BIT;
-extern unsigned long XawFmt8Bit;
-extern unsigned long XawFmtWide;
-
-extern WidgetClass textWidgetClass;
-
-typedef struct _TextClassRec *TextWidgetClass;
-typedef struct _TextRec *TextWidget;
-
-_XFUNCPROTOBEGIN
-
-XrmQuark _XawTextFormat
-(
- TextWidget tw
- );
-
-void XawTextDisplay
-(
- Widget w
- );
-
-void XawTextEnableRedisplay
-(
- Widget w
- );
-
-void XawTextDisableRedisplay
-(
- Widget w
- );
-
-void XawTextSetSelectionArray
-(
- Widget w,
- XawTextSelectType *sarray
- );
-
-void XawTextGetSelectionPos
-(
- Widget w,
- XawTextPosition *begin_return,
- XawTextPosition *end_return
- );
-
-void XawTextSetSource
-(
- Widget w,
- Widget source,
- XawTextPosition top
- );
-
-int XawTextReplace
-(
- Widget w,
- XawTextPosition start,
- XawTextPosition end,
- XawTextBlock *text
- );
-
-XawTextPosition XawTextTopPosition
-(
- Widget w
- );
-
-XawTextPosition XawTextLastPosition
-(
- Widget w
- );
-
-void XawTextSetInsertionPoint
-(
- Widget w,
- XawTextPosition position
- );
-
-XawTextPosition XawTextGetInsertionPoint
-(
- Widget w
- );
-
-void XawTextUnsetSelection
-(
- Widget w
- );
-
-void XawTextSetSelection
-(
- Widget w,
- XawTextPosition left,
- XawTextPosition right
- );
-
-void XawTextInvalidate
-(
- Widget w,
- XawTextPosition from,
- XawTextPosition to
-);
-
-Widget XawTextGetSource
-(
- Widget w
- );
-
-Widget XawTextGetSink
-(
- Widget w
- );
-
-XawTextPosition XawTextSearch
-(
- Widget w,
-#if NeedWidePrototypes
- int dir,
-#else
- XawTextScanDirection dir,
-#endif
- XawTextBlock *text
- );
-
-void XawTextDisplayCaret
-(
- Widget w,
-#if NeedWidePrototypes
- int visible
-#else
- Boolean visible
-#endif
- );
-
-_XFUNCPROTOEND
-
-/*
- * For R3 compatability only
- */
-#include <X11/Xaw/AsciiSrc.h>
-#include <X11/Xaw/AsciiSink.h>
-
-#endif /* _XawText_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawText_h
+#define _XawText_h
+
+#include <X11/Xaw/Simple.h>
+
+/*
+
+ Class: textWidgetClass
+ Class Name: Text
+ Superclass: Simple
+
+ Resources added by the Text widget:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ autoFill AutoFill Boolean False
+ bottomMargin Margin Position 2
+ displayPosition TextPosition XawTextPosition 0
+ insertPosition TextPosition XawTextPosition 0
+ justify JustifyMode JustifyMode left
+ leftColumn Column Column 0
+ rightColumn Column Column 0
+ leftMargin Margin Position 2
+ rightMargin Margin Position 4
+ positionCallback Callback Callback NULL
+ scrollHorizontal Scroll Boolean False
+ scrollVertical Scroll Boolean False
+ selectTypes SelectTypes Pointer see documentation
+ textSink TextSink Widget NULL
+ textSource TextSource Widget NULL
+ topMargin Margin Position 2
+ unrealizeCallback Callback Callback NULL
+ wrap Wrap XawTextWrapMode XawTextWrapNever
+
+*/
+
+typedef long XawTextPosition;
+
+#ifndef notdef
+typedef enum {
+ XawtextScrollNever,
+ XawtextScrollWhenNeeded,
+ XawtextScrollAlways
+} XawTextScrollMode;
+
+typedef enum {
+ XawtextResizeNever,
+ XawtextResizeWidth,
+ XawtextResizeHeight,
+ XawtextResizeBoth
+} XawTextResizeMode;
+#endif
+
+typedef enum {
+ XawtextWrapNever,
+ XawtextWrapLine,
+ XawtextWrapWord
+} XawTextWrapMode;
+
+typedef enum {
+ XawsdLeft,
+ XawsdRight
+} XawTextScanDirection;
+
+typedef enum {
+ XawtextRead,
+ XawtextAppend,
+ XawtextEdit
+} XawTextEditType;
+
+typedef enum {
+ XawselectNull,
+ XawselectPosition,
+ XawselectChar,
+ XawselectWord,
+ XawselectLine,
+ XawselectParagraph,
+ XawselectAll,
+ XawselectAlphaNumeric
+} XawTextSelectType;
+
+typedef enum {
+ XawjustifyLeft,
+ XawjustifyRight,
+ XawjustifyCenter,
+ XawjustifyFull
+} XawTextJustifyMode;
+
+typedef struct {
+ int firstPos;
+ int length;
+ char *ptr;
+ unsigned long format;
+} XawTextBlock, *XawTextBlockPtr;
+
+#ifndef OLDXAW
+typedef struct {
+ int line_number;
+ int column_number;
+ XawTextPosition insert_position;
+ XawTextPosition last_position;
+ Boolean overwrite_mode;
+} XawTextPositionInfo;
+
+typedef struct {
+ XawTextPosition left, right;
+ XawTextBlock *block;
+} XawTextPropertyInfo;
+
+typedef struct _XawTextAnchor XawTextAnchor;
+typedef struct _XawTextEntity XawTextEntity;
+typedef struct _XawTextProperty XawTextProperty;
+typedef struct _XawTextPropertyList XawTextPropertyList;
+#endif
+
+#include <X11/Xaw/TextSink.h>
+#include <X11/Xaw/TextSrc.h>
+
+#define XtEtextScrollNever "never"
+#define XtEtextScrollWhenNeeded "whenneeded"
+#define XtEtextScrollAlways "always"
+#define XtEtextResizeNever "never"
+#define XtEtextResizeWidth "width"
+#define XtEtextResizeHeight "height"
+#define XtEtextResizeBoth "both"
+
+#define XtEtextWrapNever "never"
+#define XtEtextWrapLine "line"
+#define XtEtextWrapWord "word"
+
+#define XtNautoFill "autoFill"
+#define XtNbottomMargin "bottomMargin"
+#define XtNdialogHOffset "dialogHOffset"
+#define XtNdialogVOffset "dialogVOffset"
+#define XtNdisplayCaret "displayCaret"
+#define XtNdisplayPosition "displayPosition"
+#define XtNleftMargin "leftMargin"
+#define XtNrightMargin "rightMargin"
+#define XtNpositionCallback "positionCallback"
+#define XtNscrollVertical "scrollVertical"
+#define XtNscrollHorizontal "scrollHorizontal"
+#define XtNselectTypes "selectTypes"
+#define XtNtopMargin "topMargin"
+#define XtNwrap "wrap"
+
+#define XtCColumn "Column"
+#define XtNleftColumn "leftColumn"
+#define XtNrightColumn "rightColumn"
+
+#define XtCJustifyMode XtCJustify
+#define XtNjustifyMode XtNjustify
+#define XtEtextJustifyLeft "left"
+#define XtEtextJustifyRight "right"
+#define XtEtextJustifyCenter "center"
+#define XtEtextJustifyFull "full"
+
+#define XtCAutoFill "AutoFill"
+#define XtCSelectTypes "SelectTypes"
+#define XtCWrap "Wrap"
+#ifndef notdef
+#define XtCScroll "Scroll"
+#endif
+
+#ifndef _XtStringDefs_h_
+#define XtNinsertPosition "insertPosition"
+#ifndef notdef
+#define XtNresize "resize"
+#define XtCResize "Resize"
+#endif
+#define XtNselection "selection"
+#endif
+
+/* return Error code for XawTextSearch */
+#define XawTextSearchError (-12345L)
+
+/* return codes from XawTextReplace */
+#define XawReplaceError -1
+#define XawEditDone 0
+#define XawEditError 1
+#define XawPositionError 2
+
+/* XrmQuark is not unsigned long */
+#define XawTextFormat(tw,fmt) ((unsigned long)_XawTextFormat(tw) == (fmt))
+
+extern unsigned long FMT8BIT;
+extern unsigned long XawFmt8Bit;
+extern unsigned long XawFmtWide;
+
+extern WidgetClass textWidgetClass;
+
+typedef struct _TextClassRec *TextWidgetClass;
+typedef struct _TextRec *TextWidget;
+
+_XFUNCPROTOBEGIN
+
+XrmQuark _XawTextFormat
+(
+ TextWidget tw
+ );
+
+void XawTextDisplay
+(
+ Widget w
+ );
+
+void XawTextEnableRedisplay
+(
+ Widget w
+ );
+
+void XawTextDisableRedisplay
+(
+ Widget w
+ );
+
+void XawTextSetSelectionArray
+(
+ Widget w,
+ XawTextSelectType *sarray
+ );
+
+void XawTextGetSelectionPos
+(
+ Widget w,
+ XawTextPosition *begin_return,
+ XawTextPosition *end_return
+ );
+
+void XawTextSetSource
+(
+ Widget w,
+ Widget source,
+ XawTextPosition top
+ );
+
+int XawTextReplace
+(
+ Widget w,
+ XawTextPosition start,
+ XawTextPosition end,
+ XawTextBlock *text
+ );
+
+XawTextPosition XawTextTopPosition
+(
+ Widget w
+ );
+
+XawTextPosition XawTextLastPosition
+(
+ Widget w
+ );
+
+void XawTextSetInsertionPoint
+(
+ Widget w,
+ XawTextPosition position
+ );
+
+XawTextPosition XawTextGetInsertionPoint
+(
+ Widget w
+ );
+
+void XawTextUnsetSelection
+(
+ Widget w
+ );
+
+void XawTextSetSelection
+(
+ Widget w,
+ XawTextPosition left,
+ XawTextPosition right
+ );
+
+void XawTextInvalidate
+(
+ Widget w,
+ XawTextPosition from,
+ XawTextPosition to
+);
+
+Widget XawTextGetSource
+(
+ Widget w
+ );
+
+Widget XawTextGetSink
+(
+ Widget w
+ );
+
+XawTextPosition XawTextSearch
+(
+ Widget w,
+#if NeedWidePrototypes
+ int dir,
+#else
+ XawTextScanDirection dir,
+#endif
+ XawTextBlock *text
+ );
+
+void XawTextDisplayCaret
+(
+ Widget w,
+#if NeedWidePrototypes
+ int visible
+#else
+ Boolean visible
+#endif
+ );
+
+_XFUNCPROTOEND
+
+/*
+ * For R3 compatability only
+ */
+#include <X11/Xaw/AsciiSrc.h>
+#include <X11/Xaw/AsciiSink.h>
+
+#endif /* _XawText_h */
diff --git a/libXaw/include/X11/Xaw/TextP.h b/libXaw/include/X11/Xaw/TextP.h
index d058e8bd3..a22f11e60 100644
--- a/libXaw/include/X11/Xaw/TextP.h
+++ b/libXaw/include/X11/Xaw/TextP.h
@@ -1,323 +1,317 @@
-/*
-* $Xorg: TextP.h,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/TextP.h,v 3.21 2001/12/14 19:54:44 dawes Exp $ */
-
-#ifndef _XawTextP_h
-#define _XawTextP_h
-
-#include <X11/Xfuncproto.h>
-
-#include <X11/Xaw/Text.h>
-#include <X11/Xaw/SimpleP.h>
-
-_XFUNCPROTOBEGIN
-
-#define MAXCUT 30000 /* Maximum number of characters that can be cut */
-
-#define XawTextGetLastPosition(ctx) \
- XawTextSourceScan((ctx)->text.source, 0, \
- XawstAll, XawsdRight, 1, True)
-#define GETLASTPOS XawTextGetLastPosition(ctx)
-
-#define zeroPosition ((XawTextPosition)0)
-
-extern XtActionsRec _XawTextActionsTable[];
-extern Cardinal _XawTextActionsTableCount;
-
-extern char _XawDefaultTextTranslations[];
-
-#define XawLF 0x0a
-#define XawCR 0x0d
-#define XawTAB 0x09
-#define XawBS 0x08
-#define XawSP 0x20
-#define XawDEL 0x7f
-#define XawESC 0x1b
-#define XawBSLASH '\\'
-
-/* constants that subclasses may want to know */
-#define DEFAULT_TEXT_HEIGHT ((Dimension)~0)
-#define DEFAULT_TAB_SIZE 8
-
-/* displayable text management data structures */
-typedef struct {
- XawTextPosition position;
- Position y;
-#ifndef OLDXAW
- unsigned int textWidth;
-#else
- Dimension textWidth;
-#endif
-} XawTextLineTableEntry, *XawTextLineTableEntryPtr;
-
-typedef struct {
- XawTextPosition left, right;
- XawTextSelectType type;
- Atom *selections;
- int atom_count;
- int array_size;
-} XawTextSelection;
-
-typedef struct _XawTextSelectionSalt {
- struct _XawTextSelectionSalt *next;
- XawTextSelection s;
- /*
- * The element "contents" stores the CT string which is gotten in the
- * function _XawTextSaltAwaySelection()
- */
- char *contents;
- int length;
-} XawTextSelectionSalt;
-
-#ifndef OLDXAW
-typedef struct _XawTextKillRing {
- struct _XawTextKillRing *next;
- char *contents;
- int length;
- unsigned refcount;
- unsigned long format;
-} XawTextKillRing;
-
-extern XawTextKillRing *xaw_text_kill_ring;
-#endif
-
-/* Line Tables are n+1 long - last position displayed is in last lt entry */
-typedef struct {
- XawTextPosition top; /* Top of the displayed text */
- int lines; /* How many lines in this table */
-#ifndef OLDXAW
- int base_line; /* line number of first entry */
-#endif
- XawTextLineTableEntry *info; /* A dynamic array, one entry per line */
-} XawTextLineTable, *XawTextLineTablePtr;
-
-typedef struct _XawTextMargin {
- Position left, right, top, bottom;
-} XawTextMargin;
-
-typedef struct _XmuScanline XmuTextUpdate;
-
-#define VMargins(ctx) ((ctx)->text.margin.top + (ctx)->text.margin.bottom)
-#define HMargins(ctx) ((ctx)->text.left_margin + (ctx)->text.margin.right)
-#define RVMargins(ctx) ((ctx)->text.r_margin.top + (ctx)->text.r_margin.bottom)
-#define RHMargins(ctx) ((ctx)->text.r_margin.left + (ctx)->text.r_margin.right)
-
-#define IsPositionVisible(ctx, pos) \
-(pos >= ctx->text.lt.info[0].position && \
- pos < ctx->text.lt.info[ctx->text.lt.lines].position)
-
-/*
- * Search & Replace data structure
- */
-struct SearchAndReplace {
- Boolean selection_changed; /* flag so that the selection cannot be
- changed out from underneath query-replace.*/
- Widget search_popup; /* The poppup widget that allows searches.*/
- Widget label1; /* The label widgets for the search window. */
- Widget label2;
- Widget left_toggle; /* The left search toggle radioGroup. */
- Widget right_toggle; /* The right search toggle radioGroup. */
- Widget rep_label; /* The Replace label string. */
- Widget rep_text; /* The Replace text field. */
- Widget search_text; /* The Search text field. */
- Widget rep_one; /* The Replace one button. */
- Widget rep_all; /* The Replace all button. */
-#ifndef OLDXAW
- Widget case_sensitive; /* The "Case Sensitive" toggle */
-#endif
-};
-
-/* New fields for the Text widget class record */
-typedef struct {
- XtPointer extension;
-} TextClassPart;
-
-/* Full class record declaration */
-typedef struct _TextClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- TextClassPart text_class;
-} TextClassRec;
-
-extern TextClassRec textClassRec;
-
-/* New fields for the Text widget record */
-typedef struct _TextPart {
- /* resources */
- Widget source, sink;
- XawTextPosition insertPos;
- XawTextSelection s;
- XawTextSelectType *sarray; /* Array to cycle for selections */
- XawTextSelectionSalt *salt; /* salted away selections */
- int left_margin;
- int dialog_horiz_offset, dialog_vert_offset; /* position for popup dialog */
- Boolean display_caret; /* insertion pt visible iff T */
- Boolean auto_fill; /* Auto fill mode? */
- XawTextScrollMode scroll_vert, scroll_horiz;
- XawTextWrapMode wrap; /* The type of wrapping */
- XawTextResizeMode resize;
- XawTextMargin r_margin; /* The real margins */
-#ifndef OLDXAW
- XtCallbackList position_callbacks;
-#else
- XtPointer pad1;
-#endif
-
- /* private state */
- XawTextMargin margin; /* The current margins */
- XawTextLineTable lt;
- XawTextScanDirection extendDir;
- XawTextSelection origSel; /* the selection being modified */
- Time lasttime; /* timestamp of last processed action */
- Time time; /* time of last key or button action */
- Position ev_x, ev_y; /* x, y coords for key or button action */
- Widget vbar, hbar; /* The scroll bars (none = NULL) */
- struct SearchAndReplace *search; /* Search and replace structure */
- Widget file_insert; /* The file insert popup widget */
- XmuTextUpdate *update; /* Position intervals to update */
-#ifndef OLDXAW
- int line_number;
- short column_number;
- unsigned char kill_ring;
- Boolean selection_state;
-#else
- XtPointer pad2;
- int pad3;
-#endif
- int from_left; /* Cursor position */
- XawTextPosition lastPos; /* Last position of source */
- GC gc;
- Boolean showposition; /* True if we need to show the position */
- Boolean hasfocus; /* TRUE if we currently have input focus*/
- Boolean update_disabled; /* TRUE if display updating turned off */
- Boolean clear_to_eol; /* Clear to eol when painting text? */
- XawTextPosition old_insert; /* Last insertPos for batched updates */
- short mult; /* Multiplier */
-#ifndef OLDXAW
- XawTextKillRing *kill_ring_ptr;
-#else
- XtPointer pad4;
-#endif
-
- /* private state, shared w/Source and Sink */
- Boolean redisplay_needed; /* in SetValues */
- XawTextSelectionSalt *salt2; /* salted away selections */
-
-#ifndef OLDXAW
- char numeric;
- char source_changed;
- Boolean overwrite; /* Overwrite mode */
-
- /* new resources and states, for text edition
- * Note: a fixed width font is required for these resources/states.
- */
- short left_column, right_column;
- XawTextJustifyMode justify;
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} TextPart;
-
-#define XtRWrapMode "WrapMode"
-#define XtRScrollMode "ScrollMode"
-#define XtRResizeMode "ResizeMode"
-#define XtRJustifyMode "JustifyMode"
-
-/* full instance record */
-typedef struct _TextRec {
- CorePart core;
- SimplePart simple;
- TextPart text;
-} TextRec;
-
-/*
- * Semi-private functions
- * for use by other Xaw modules only
- */
-void _XawTextBuildLineTable
-(
- TextWidget ctx,
- XawTextPosition top_pos,
- _XtBoolean force_rebuild
- );
-
-char *_XawTextGetSTRING
-(
- TextWidget ctx,
- XawTextPosition left,
- XawTextPosition right
- );
-
-void _XawTextSaltAwaySelection
-(
- TextWidget ctx,
- Atom *selections,
- int num_atoms
- );
-
-void _XawTextPosToXY
-(
- Widget w,
- XawTextPosition pos,
- Position *x,
- Position *y
- );
-
-void _XawTextNeedsUpdating
-(
- TextWidget ctx,
- XawTextPosition left,
- XawTextPosition right
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawTextP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawTextP_h
+#define _XawTextP_h
+
+#include <X11/Xfuncproto.h>
+
+#include <X11/Xaw/Text.h>
+#include <X11/Xaw/SimpleP.h>
+
+_XFUNCPROTOBEGIN
+
+#define MAXCUT 30000 /* Maximum number of characters that can be cut */
+
+#define XawTextGetLastPosition(ctx) \
+ XawTextSourceScan((ctx)->text.source, 0, \
+ XawstAll, XawsdRight, 1, True)
+#define GETLASTPOS XawTextGetLastPosition(ctx)
+
+#define zeroPosition ((XawTextPosition)0)
+
+extern XtActionsRec _XawTextActionsTable[];
+extern Cardinal _XawTextActionsTableCount;
+
+extern char _XawDefaultTextTranslations[];
+
+#define XawLF 0x0a
+#define XawCR 0x0d
+#define XawTAB 0x09
+#define XawBS 0x08
+#define XawSP 0x20
+#define XawDEL 0x7f
+#define XawESC 0x1b
+#define XawBSLASH '\\'
+
+/* constants that subclasses may want to know */
+#define DEFAULT_TEXT_HEIGHT ((Dimension)~0)
+#define DEFAULT_TAB_SIZE 8
+
+/* displayable text management data structures */
+typedef struct {
+ XawTextPosition position;
+ Position y;
+#ifndef OLDXAW
+ unsigned int textWidth;
+#else
+ Dimension textWidth;
+#endif
+} XawTextLineTableEntry, *XawTextLineTableEntryPtr;
+
+typedef struct {
+ XawTextPosition left, right;
+ XawTextSelectType type;
+ Atom *selections;
+ int atom_count;
+ int array_size;
+} XawTextSelection;
+
+typedef struct _XawTextSelectionSalt {
+ struct _XawTextSelectionSalt *next;
+ XawTextSelection s;
+ /*
+ * The element "contents" stores the CT string which is gotten in the
+ * function _XawTextSaltAwaySelection()
+ */
+ char *contents;
+ int length;
+} XawTextSelectionSalt;
+
+#ifndef OLDXAW
+typedef struct _XawTextKillRing {
+ struct _XawTextKillRing *next;
+ char *contents;
+ int length;
+ unsigned refcount;
+ unsigned long format;
+} XawTextKillRing;
+
+extern XawTextKillRing *xaw_text_kill_ring;
+#endif
+
+/* Line Tables are n+1 long - last position displayed is in last lt entry */
+typedef struct {
+ XawTextPosition top; /* Top of the displayed text */
+ int lines; /* How many lines in this table */
+#ifndef OLDXAW
+ int base_line; /* line number of first entry */
+#endif
+ XawTextLineTableEntry *info; /* A dynamic array, one entry per line */
+} XawTextLineTable, *XawTextLineTablePtr;
+
+typedef struct _XawTextMargin {
+ Position left, right, top, bottom;
+} XawTextMargin;
+
+typedef struct _XmuScanline XmuTextUpdate;
+
+#define VMargins(ctx) ((ctx)->text.margin.top + (ctx)->text.margin.bottom)
+#define HMargins(ctx) ((ctx)->text.left_margin + (ctx)->text.margin.right)
+#define RVMargins(ctx) ((ctx)->text.r_margin.top + (ctx)->text.r_margin.bottom)
+#define RHMargins(ctx) ((ctx)->text.r_margin.left + (ctx)->text.r_margin.right)
+
+#define IsPositionVisible(ctx, pos) \
+(pos >= ctx->text.lt.info[0].position && \
+ pos < ctx->text.lt.info[ctx->text.lt.lines].position)
+
+/*
+ * Search & Replace data structure
+ */
+struct SearchAndReplace {
+ Boolean selection_changed; /* flag so that the selection cannot be
+ changed out from underneath query-replace.*/
+ Widget search_popup; /* The poppup widget that allows searches.*/
+ Widget label1; /* The label widgets for the search window. */
+ Widget label2;
+ Widget left_toggle; /* The left search toggle radioGroup. */
+ Widget right_toggle; /* The right search toggle radioGroup. */
+ Widget rep_label; /* The Replace label string. */
+ Widget rep_text; /* The Replace text field. */
+ Widget search_text; /* The Search text field. */
+ Widget rep_one; /* The Replace one button. */
+ Widget rep_all; /* The Replace all button. */
+#ifndef OLDXAW
+ Widget case_sensitive; /* The "Case Sensitive" toggle */
+#endif
+};
+
+/* New fields for the Text widget class record */
+typedef struct {
+ XtPointer extension;
+} TextClassPart;
+
+/* Full class record declaration */
+typedef struct _TextClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ TextClassPart text_class;
+} TextClassRec;
+
+extern TextClassRec textClassRec;
+
+/* New fields for the Text widget record */
+typedef struct _TextPart {
+ /* resources */
+ Widget source, sink;
+ XawTextPosition insertPos;
+ XawTextSelection s;
+ XawTextSelectType *sarray; /* Array to cycle for selections */
+ XawTextSelectionSalt *salt; /* salted away selections */
+ int left_margin;
+ int dialog_horiz_offset, dialog_vert_offset; /* position for popup dialog */
+ Boolean display_caret; /* insertion pt visible iff T */
+ Boolean auto_fill; /* Auto fill mode? */
+ XawTextScrollMode scroll_vert, scroll_horiz;
+ XawTextWrapMode wrap; /* The type of wrapping */
+ XawTextResizeMode resize;
+ XawTextMargin r_margin; /* The real margins */
+#ifndef OLDXAW
+ XtCallbackList position_callbacks;
+#else
+ XtPointer pad1;
+#endif
+
+ /* private state */
+ XawTextMargin margin; /* The current margins */
+ XawTextLineTable lt;
+ XawTextScanDirection extendDir;
+ XawTextSelection origSel; /* the selection being modified */
+ Time lasttime; /* timestamp of last processed action */
+ Time time; /* time of last key or button action */
+ Position ev_x, ev_y; /* x, y coords for key or button action */
+ Widget vbar, hbar; /* The scroll bars (none = NULL) */
+ struct SearchAndReplace *search; /* Search and replace structure */
+ Widget file_insert; /* The file insert popup widget */
+ XmuTextUpdate *update; /* Position intervals to update */
+#ifndef OLDXAW
+ int line_number;
+ short column_number;
+ unsigned char kill_ring;
+ Boolean selection_state;
+#else
+ XtPointer pad2;
+ int pad3;
+#endif
+ int from_left; /* Cursor position */
+ XawTextPosition lastPos; /* Last position of source */
+ GC gc;
+ Boolean showposition; /* True if we need to show the position */
+ Boolean hasfocus; /* TRUE if we currently have input focus*/
+ Boolean update_disabled; /* TRUE if display updating turned off */
+ Boolean clear_to_eol; /* Clear to eol when painting text? */
+ XawTextPosition old_insert; /* Last insertPos for batched updates */
+ short mult; /* Multiplier */
+#ifndef OLDXAW
+ XawTextKillRing *kill_ring_ptr;
+#else
+ XtPointer pad4;
+#endif
+
+ /* private state, shared w/Source and Sink */
+ Boolean redisplay_needed; /* in SetValues */
+ XawTextSelectionSalt *salt2; /* salted away selections */
+
+#ifndef OLDXAW
+ char numeric;
+ char source_changed;
+ Boolean overwrite; /* Overwrite mode */
+
+ /* new resources and states, for text edition
+ * Note: a fixed width font is required for these resources/states.
+ */
+ short left_column, right_column;
+ XawTextJustifyMode justify;
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} TextPart;
+
+#define XtRWrapMode "WrapMode"
+#define XtRScrollMode "ScrollMode"
+#define XtRResizeMode "ResizeMode"
+#define XtRJustifyMode "JustifyMode"
+
+/* full instance record */
+typedef struct _TextRec {
+ CorePart core;
+ SimplePart simple;
+ TextPart text;
+} TextRec;
+
+/*
+ * Semi-private functions
+ * for use by other Xaw modules only
+ */
+void _XawTextBuildLineTable
+(
+ TextWidget ctx,
+ XawTextPosition top_pos,
+ _XtBoolean force_rebuild
+ );
+
+char *_XawTextGetSTRING
+(
+ TextWidget ctx,
+ XawTextPosition left,
+ XawTextPosition right
+ );
+
+void _XawTextSaltAwaySelection
+(
+ TextWidget ctx,
+ Atom *selections,
+ int num_atoms
+ );
+
+void _XawTextPosToXY
+(
+ Widget w,
+ XawTextPosition pos,
+ Position *x,
+ Position *y
+ );
+
+void _XawTextNeedsUpdating
+(
+ TextWidget ctx,
+ XawTextPosition left,
+ XawTextPosition right
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawTextP_h */
diff --git a/libXaw/include/X11/Xaw/TextSink.h b/libXaw/include/X11/Xaw/TextSink.h
index 291b9600d..f49a02bbf 100644
--- a/libXaw/include/X11/Xaw/TextSink.h
+++ b/libXaw/include/X11/Xaw/TextSink.h
@@ -1,364 +1,359 @@
-/*
- * $Xorg: TextSink.h,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $
- */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/TextSink.h,v 1.9 2001/01/17 19:42:35 dawes Exp $ */
-
-#ifndef _XawTextSink_h
-#define _XawTextSink_h
-
-#include <X11/Xaw/Text.h>
-
-/***********************************************************************
- *
- * TextSink Object
- *
- ***********************************************************************/
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- font Font XFontStruct * XtDefaultFont
- foreground Foreground Pixel XtDefaultForeground
- background Background Pixel XtDefaultBackground
- cursorColor Color Pixel XtDefaultForeground
-*/
-
-/* Class record constants */
-
-extern WidgetClass textSinkObjectClass;
-
-typedef struct _TextSinkClassRec *TextSinkObjectClass;
-typedef struct _TextSinkRec *TextSinkObject;
-
-typedef enum {XawisOn, XawisOff} XawTextInsertState;
-
-#ifndef OLDXAW
-#ifndef XtNcursorColor
-#define XtNcursorColor "cursorColor"
-#endif
-
-#define XawNtextProperties "textProperties"
-#define XawCTextProperties "TextProperties"
-#define XawRTextProperties "XawTextProperties"
-#endif
-
-/*
- * Public Functions
- */
-_XFUNCPROTOBEGIN
-
-/*
- * Function:
- * XawTextSinkDisplayText
- *
- * Parameters:
- * w - the TextSink Object
- * x - location to start drawing text
- * y - ""
- * pos1 - location of starting and ending points in the text buffer
- * pos2 - ""
- * highlight - hightlight this text?
- *
- * Description:
- * Stub function that in subclasses will display text.
- *
- * Note:
- * This function doesn't actually display anything, it is only a place
- * holder.
- */
-void XawTextSinkDisplayText
-(
- Widget w,
-#if NeedWidePrototypes
- int x,
- int y,
-#else
- Position x,
- Position y,
-#endif
- XawTextPosition pos1,
- XawTextPosition pos2,
-#if NeedWidePrototypes
- int highlight
-#else
- Boolean highlight
-#endif
- );
-
-/*
- * Function:
- * XawTextSinkInsertCursor
- *
- * Parameters:
- * w - the TextSink Object.
- * x - location for the cursor.
- * y - ""
- * state - whether to turn the cursor on, or off
- *
- * Description:
- * Places the InsertCursor.
- *
- * Note:
- * This function doesn't actually display anything, it is only a place
- * holder.
- */
-void XawTextSinkInsertCursor
-(
- Widget w,
-#if NeedWidePrototypes
- int x,
- int y,
- int state
-#else
- Position x,
- Position y,
- XawTextInsertState state
-#endif
- );
-
-/*
- * Function:
- * XawTextSinkClearToBackground
- *
- * Parameters:
- * w - TextSink Object
- * x - location of area to clear
- * y - ""
- * width - size of area to clear
- * height - ""
- *
- * Description:
- * Clears a region of the sink to the background color.
- *
- * Note:
- * This function doesn't actually display anything, it is only a place
- * holder.
- */
-void XawTextSinkClearToBackground
-(
- Widget w,
-#if NeedWidePrototypes
- int x,
- int y,
- unsigned int width,
- unsigned int height
-#else
- Position x,
- Position y,
- Dimension width,
- Dimension height
-#endif
- );
-
-/*
- * Function:
- * XawTextSinkFindPosition
- *
- * Parameters:
- * w - TextSink Object
- * fromPos - reference position
- * fromX - reference location
- * width - width of section to paint text
- * stopAtWordBreak - returned position is a word break?
- * resPos - Position to return
- * resWidth - Width actually used
- * resHeight - Height actually used
- *
- * Description:
- * Finds a position in the text.
- */
-void XawTextSinkFindPosition
-(
- Widget w,
- XawTextPosition fromPos,
- int fromX,
- int width,
-#if NeedWidePrototypes
- int stopAtWordBreak,
-#else
- Boolean stopAtWordBreak,
-#endif
- XawTextPosition* pos_return,
- int *width_return,
- int *height_return
- );
-
-/*
- * Function:
- * XawTextSinkFindDistance
- *
- * Parameters:
- * w - TextSink Object
- * fromPos - starting Position
- * fromX - x location of starting Position
- * toPos - end Position
- * resWidth - Distance between fromPos and toPos
- * resPos - Acutal toPos used
- * resHeight - Height required by this text
- *
- * Description:
- * Find the Pixel Distance between two text Positions.
- */
-void XawTextSinkFindDistance
-(
- Widget w,
- XawTextPosition fromPos,
- int fromX,
- XawTextPosition toPos,
- int *width_return,
- XawTextPosition *pos_return,
- int *height_return
- );
-
-/*
- * Function:
- * XawTextSinkResolve
- *
- * Parameters:
- * w - TextSink Object
- * pos - reference Position
- * fromx - reference Location
- * width - width to move
- * resPos - resulting position
- *
- * Description:
- * Resloves a location to a position.
- */
-void XawTextSinkResolve
-(
- Widget w,
- XawTextPosition fromPos,
- int fromX,
- int width,
- XawTextPosition *pos_return
- );
-
-/*
- * Function:
- * XawTextSinkMaxLines
- *
- * Parameters:
- * w - TextSink Object
- * height - height to fit lines into
- *
- * Returns:
- * Number of lines that will fit
- *
- * Description:
- * Finds the Maximum number of lines that will fit in a given height.
- */
-int XawTextSinkMaxLines
-(
- Widget w,
-#if NeedWidePrototypes
- unsigned int height
-#else
- Dimension height
-#endif
- );
-
-/*
- * Function:
- * XawTextSinkMaxHeight
- *
- * Parameters:
- * w - TextSink Object
- * lines - number of lines
- *
- * Returns:
- * Height
- *
- * Description:
- * Finds the Minium height that will contain a given number lines.
- */
-int XawTextSinkMaxHeight
-(
- Widget w,
- int lines
-);
-
-/*
- * Function:
- * XawTextSinkSetTabs
- *
- * Parameters:
- * w - TextSink Object
- * tab_count - number of tabs in the list
- * tabs - text positions of the tabs
- * Description:
- * Sets the Tab stops.
- */
-void XawTextSinkSetTabs
-(
- Widget w,
- int tab_count,
- int *tabs
-);
-
-/*
- * Function:
- * XawTextSinkGetCursorBounds
- *
- * Parameters:
- * w - TextSink Object
- * rect - X rectance containing the cursor bounds
- * Description:
- * Finds the bounding box for the insert curor (caret).
- */
-void XawTextSinkGetCursorBounds
-(
- Widget w,
- XRectangle *rect_return
-);
-
-_XFUNCPROTOEND
-
-#endif /* _XawTextSink_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawTextSink_h
+#define _XawTextSink_h
+
+#include <X11/Xaw/Text.h>
+
+/***********************************************************************
+ *
+ * TextSink Object
+ *
+ ***********************************************************************/
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ font Font XFontStruct * XtDefaultFont
+ foreground Foreground Pixel XtDefaultForeground
+ background Background Pixel XtDefaultBackground
+ cursorColor Color Pixel XtDefaultForeground
+*/
+
+/* Class record constants */
+
+extern WidgetClass textSinkObjectClass;
+
+typedef struct _TextSinkClassRec *TextSinkObjectClass;
+typedef struct _TextSinkRec *TextSinkObject;
+
+typedef enum {XawisOn, XawisOff} XawTextInsertState;
+
+#ifndef OLDXAW
+#ifndef XtNcursorColor
+#define XtNcursorColor "cursorColor"
+#endif
+
+#define XawNtextProperties "textProperties"
+#define XawCTextProperties "TextProperties"
+#define XawRTextProperties "XawTextProperties"
+#endif
+
+/*
+ * Public Functions
+ */
+_XFUNCPROTOBEGIN
+
+/*
+ * Function:
+ * XawTextSinkDisplayText
+ *
+ * Parameters:
+ * w - the TextSink Object
+ * x - location to start drawing text
+ * y - ""
+ * pos1 - location of starting and ending points in the text buffer
+ * pos2 - ""
+ * highlight - hightlight this text?
+ *
+ * Description:
+ * Stub function that in subclasses will display text.
+ *
+ * Note:
+ * This function doesn't actually display anything, it is only a place
+ * holder.
+ */
+void XawTextSinkDisplayText
+(
+ Widget w,
+#if NeedWidePrototypes
+ int x,
+ int y,
+#else
+ Position x,
+ Position y,
+#endif
+ XawTextPosition pos1,
+ XawTextPosition pos2,
+#if NeedWidePrototypes
+ int highlight
+#else
+ Boolean highlight
+#endif
+ );
+
+/*
+ * Function:
+ * XawTextSinkInsertCursor
+ *
+ * Parameters:
+ * w - the TextSink Object.
+ * x - location for the cursor.
+ * y - ""
+ * state - whether to turn the cursor on, or off
+ *
+ * Description:
+ * Places the InsertCursor.
+ *
+ * Note:
+ * This function doesn't actually display anything, it is only a place
+ * holder.
+ */
+void XawTextSinkInsertCursor
+(
+ Widget w,
+#if NeedWidePrototypes
+ int x,
+ int y,
+ int state
+#else
+ Position x,
+ Position y,
+ XawTextInsertState state
+#endif
+ );
+
+/*
+ * Function:
+ * XawTextSinkClearToBackground
+ *
+ * Parameters:
+ * w - TextSink Object
+ * x - location of area to clear
+ * y - ""
+ * width - size of area to clear
+ * height - ""
+ *
+ * Description:
+ * Clears a region of the sink to the background color.
+ *
+ * Note:
+ * This function doesn't actually display anything, it is only a place
+ * holder.
+ */
+void XawTextSinkClearToBackground
+(
+ Widget w,
+#if NeedWidePrototypes
+ int x,
+ int y,
+ unsigned int width,
+ unsigned int height
+#else
+ Position x,
+ Position y,
+ Dimension width,
+ Dimension height
+#endif
+ );
+
+/*
+ * Function:
+ * XawTextSinkFindPosition
+ *
+ * Parameters:
+ * w - TextSink Object
+ * fromPos - reference position
+ * fromX - reference location
+ * width - width of section to paint text
+ * stopAtWordBreak - returned position is a word break?
+ * resPos - Position to return
+ * resWidth - Width actually used
+ * resHeight - Height actually used
+ *
+ * Description:
+ * Finds a position in the text.
+ */
+void XawTextSinkFindPosition
+(
+ Widget w,
+ XawTextPosition fromPos,
+ int fromX,
+ int width,
+#if NeedWidePrototypes
+ int stopAtWordBreak,
+#else
+ Boolean stopAtWordBreak,
+#endif
+ XawTextPosition* pos_return,
+ int *width_return,
+ int *height_return
+ );
+
+/*
+ * Function:
+ * XawTextSinkFindDistance
+ *
+ * Parameters:
+ * w - TextSink Object
+ * fromPos - starting Position
+ * fromX - x location of starting Position
+ * toPos - end Position
+ * resWidth - Distance between fromPos and toPos
+ * resPos - Acutal toPos used
+ * resHeight - Height required by this text
+ *
+ * Description:
+ * Find the Pixel Distance between two text Positions.
+ */
+void XawTextSinkFindDistance
+(
+ Widget w,
+ XawTextPosition fromPos,
+ int fromX,
+ XawTextPosition toPos,
+ int *width_return,
+ XawTextPosition *pos_return,
+ int *height_return
+ );
+
+/*
+ * Function:
+ * XawTextSinkResolve
+ *
+ * Parameters:
+ * w - TextSink Object
+ * pos - reference Position
+ * fromx - reference Location
+ * width - width to move
+ * resPos - resulting position
+ *
+ * Description:
+ * Resloves a location to a position.
+ */
+void XawTextSinkResolve
+(
+ Widget w,
+ XawTextPosition fromPos,
+ int fromX,
+ int width,
+ XawTextPosition *pos_return
+ );
+
+/*
+ * Function:
+ * XawTextSinkMaxLines
+ *
+ * Parameters:
+ * w - TextSink Object
+ * height - height to fit lines into
+ *
+ * Returns:
+ * Number of lines that will fit
+ *
+ * Description:
+ * Finds the Maximum number of lines that will fit in a given height.
+ */
+int XawTextSinkMaxLines
+(
+ Widget w,
+#if NeedWidePrototypes
+ unsigned int height
+#else
+ Dimension height
+#endif
+ );
+
+/*
+ * Function:
+ * XawTextSinkMaxHeight
+ *
+ * Parameters:
+ * w - TextSink Object
+ * lines - number of lines
+ *
+ * Returns:
+ * Height
+ *
+ * Description:
+ * Finds the Minium height that will contain a given number lines.
+ */
+int XawTextSinkMaxHeight
+(
+ Widget w,
+ int lines
+);
+
+/*
+ * Function:
+ * XawTextSinkSetTabs
+ *
+ * Parameters:
+ * w - TextSink Object
+ * tab_count - number of tabs in the list
+ * tabs - text positions of the tabs
+ * Description:
+ * Sets the Tab stops.
+ */
+void XawTextSinkSetTabs
+(
+ Widget w,
+ int tab_count,
+ int *tabs
+);
+
+/*
+ * Function:
+ * XawTextSinkGetCursorBounds
+ *
+ * Parameters:
+ * w - TextSink Object
+ * rect - X rectance containing the cursor bounds
+ * Description:
+ * Finds the bounding box for the insert curor (caret).
+ */
+void XawTextSinkGetCursorBounds
+(
+ Widget w,
+ XRectangle *rect_return
+);
+
+_XFUNCPROTOEND
+
+#endif /* _XawTextSink_h */
diff --git a/libXaw/include/X11/Xaw/TextSinkP.h b/libXaw/include/X11/Xaw/TextSinkP.h
index 6cc873328..7c86d4b4f 100644
--- a/libXaw/include/X11/Xaw/TextSinkP.h
+++ b/libXaw/include/X11/Xaw/TextSinkP.h
@@ -1,306 +1,300 @@
-/*
-* $Xorg: TextSinkP.h,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/TextSinkP.h,v 1.11 2001/01/17 19:42:35 dawes Exp $ */
-
-#ifndef _XawTextSinkP_h
-#define _XawTextSinkP_h
-
-/*
- * TextSink Object Private Data
- */
-#include <X11/Xaw/TextSink.h>
-#include <X11/Xaw/TextP.h> /* This sink works with the Text widget */
-#include <X11/Xaw/TextSrcP.h> /* This sink works with the Text Source */
-#include <X11/Xmu/Xmu.h>
-
-#ifndef OLDXAW
-/* font/fontset defined? */
-#define XAW_TPROP_FONT (1<<0)
-#define XAW_TPROP_FONTSET (1<<1)
-
-/* extra attributes */
-#define XAW_TPROP_FOREGROUND (1<<2)
-#define XAW_TPROP_BACKGROUND (1<<3)
-#define XAW_TPROP_FPIXMAP (1<<4)
-#define XAW_TPROP_BPIXMAP (1<<5)
-#define XAW_TPROP_UNDERLINE (1<<6)
-#define XAW_TPROP_OVERSTRIKE (1<<7)
-#define XAW_TPROP_SUBSCRIPT (1<<8)
-#define XAW_TPROP_SUPERSCRIPT (1<<9)
-
-/* xlfd attributes */
-#define XAW_TPROP_FOUNDRY (1<<0)
-#define XAW_TPROP_FAMILY (1<<1)
-#define XAW_TPROP_WEIGHT (1<<2)
-#define XAW_TPROP_SLANT (1<<3)
-#define XAW_TPROP_SETWIDTH (1<<4)
-#define XAW_TPROP_ADDSTYLE (1<<5)
-#define XAW_TPROP_PIXELSIZE (1<<6)
-#define XAW_TPROP_POINTSIZE (1<<7)
-#define XAW_TPROP_RESX (1<<8)
-#define XAW_TPROP_RESY (1<<9)
-#define XAW_TPROP_SPACING (1<<10)
-#define XAW_TPROP_AVGWIDTH (1<<11)
-#define XAW_TPROP_REGISTRY (1<<12)
-#define XAW_TPROP_ENCODING (1<<13)
-struct _XawTextProperty { /* to be extended/modified */
- XrmQuark identifier, code;
- unsigned long mask;
- XFontStruct *font;
- XFontSet fontset;
- Pixel foreground, background;
- Pixmap foreground_pixmap, background_pixmap;
- XrmQuark xlfd;
-
- unsigned long xlfd_mask;
- XrmQuark foundry, family, weight, slant, setwidth, addstyle, pixel_size,
- point_size, res_x, res_y, spacing, avgwidth, registry, encoding;
-
- short underline_position, underline_thickness;
-};
-
-struct _XawTextPropertyList {
- XrmQuark identifier;
- Screen *screen;
- Colormap colormap;
- int depth;
- XawTextProperty **properties;
- Cardinal num_properties;
- XawTextPropertyList *next;
-};
-
-typedef struct _XawTextPaintStruct XawTextPaintStruct;
-struct _XawTextPaintStruct {
- XawTextPaintStruct *next;
- int x, y, width;
- char *text; /* formatted text */
- Cardinal length; /* length of text */
- XawTextProperty *property;
- int max_ascent, max_descent;
- XmuArea *backtabs;
- Boolean highlight;
-};
-
-typedef struct {
- XmuArea *clip, *hightabs; /* clip list */
- XawTextPaintStruct *paint, *bearings; /* drawing information */
-} XawTextPaintList;
-
-typedef struct {
- XtPointer next_extension;
- XrmQuark record_type;
- long version;
- Cardinal record_size;
- Bool (*BeginPaint)(Widget);
- void (*PreparePaint)(Widget, int, int,
- XawTextPosition, XawTextPosition, Bool);
- void (*DoPaint)(Widget);
- Bool (*EndPaint)(Widget);
-} TextSinkExtRec, *TextSinkExt;
-#endif
-
-typedef void (*_XawSinkDisplayTextProc)
- (Widget, int, int, XawTextPosition, XawTextPosition, Bool);
-
-typedef void (*_XawSinkInsertCursorProc)
- (Widget, int, int, XawTextInsertState);
-
-typedef void (*_XawSinkClearToBackgroundProc)
- (Widget, int, int, unsigned int, unsigned int);
-
-typedef void (*_XawSinkFindPositionProc)
- (Widget, XawTextPosition, int, int, Bool, XawTextPosition*, int*, int*);
-
-typedef void (*_XawSinkFindDistanceProc)
- (Widget, XawTextPosition, int, XawTextPosition, int*,
- XawTextPosition*, int*);
-
-typedef void (*_XawSinkResolveProc)
- (Widget, XawTextPosition, int, int, XawTextPosition*);
-
-typedef int (*_XawSinkMaxLinesProc)
- (Widget, unsigned int);
-
-typedef int (*_XawSinkMaxHeightProc)
- (Widget, int);
-
-typedef void (*_XawSinkSetTabsProc)
- (Widget, int, short*);
-
-typedef void (*_XawSinkGetCursorBoundsProc)
- (Widget, XRectangle*);
-
-typedef struct _TextSinkClassPart {
- _XawSinkDisplayTextProc DisplayText;
- _XawSinkInsertCursorProc InsertCursor;
- _XawSinkClearToBackgroundProc ClearToBackground;
- _XawSinkFindPositionProc FindPosition;
- _XawSinkFindDistanceProc FindDistance;
- _XawSinkResolveProc Resolve;
- _XawSinkMaxLinesProc MaxLines;
- _XawSinkMaxHeightProc MaxHeight;
- _XawSinkSetTabsProc SetTabs;
- _XawSinkGetCursorBoundsProc GetCursorBounds;
-#ifndef OLDXAW
- TextSinkExt extension;
-#endif
-} TextSinkClassPart;
-
-/* Full class record */
-typedef struct _TextSinkClassRec {
- ObjectClassPart object_class;
- TextSinkClassPart text_sink_class;
-} TextSinkClassRec;
-
-extern TextSinkClassRec textSinkClassRec;
-
-/* New fields for the TextSink object */
-typedef struct {
- /* resources */
- Pixel foreground; /* Foreground color */
- Pixel background; /* Background color */
-
- /* private */
- Position *tabs; /* The tab stops as pixel values */
- short *char_tabs; /* The tabs stops as character values */
- int tab_count; /* number of items in tabs */
-
-#ifndef OLDXAW
- /* more resources */
- Pixel cursor_color;
- XawTextPropertyList *properties;
- XawTextPaintList *paint;
- XtPointer pad[2]; /* for future use and keep binary compatability */
-#endif
-} TextSinkPart;
-
-/* Full instance record */
-typedef struct _TextSinkRec {
- ObjectPart object;
- TextSinkPart text_sink;
-} TextSinkRec;
-
-/* Semi private routines */
-#ifndef OLDXAW
-XawTextPropertyList *XawTextSinkConvertPropertyList
-(
- String name,
- String spec,
- Screen *screen,
- Colormap Colormap,
- int depth
- );
-
-XawTextProperty *XawTextSinkGetProperty
-(
- Widget w,
- XrmQuark property
- );
-
-XawTextProperty *XawTextSinkCopyProperty
-(
- Widget w,
- XrmQuark property
- );
-
-XawTextProperty *XawTextSinkAddProperty
-(
- Widget w,
- XawTextProperty *property
- );
-
-XawTextProperty *XawTextSinkCombineProperty
-(
- Widget w,
- XawTextProperty *result_in_out,
- XawTextProperty *property,
- Bool override
- );
-
-Bool XawTextSinkBeginPaint
-(
- Widget w
- );
-
-void XawTextSinkPreparePaint
-(
- Widget w,
- int y,
- int line,
- XawTextPosition from,
- XawTextPosition to,
- Bool highlight
-);
-
-void XawTextSinkDoPaint
-(
- Widget w
- );
-
-Bool XawTextSinkEndPaint
-(
- Widget w
- );
-#endif
-
-#define XtInheritDisplayText ((_XawSinkDisplayTextProc)_XtInherit)
-#define XtInheritInsertCursor ((_XawSinkInsertCursorProc)_XtInherit)
-#define XtInheritClearToBackground ((_XawSinkClearToBackgroundProc)_XtInherit)
-#define XtInheritFindPosition ((_XawSinkFindPositionProc)_XtInherit)
-#define XtInheritFindDistance ((_XawSinkFindDistanceProc)_XtInherit)
-#define XtInheritResolve ((_XawSinkResolveProc)_XtInherit)
-#define XtInheritMaxLines ((_XawSinkMaxLinesProc)_XtInherit)
-#define XtInheritMaxHeight ((_XawSinkMaxHeightProc)_XtInherit)
-#define XtInheritSetTabs ((_XawSinkSetTabsProc)_XtInherit)
-#define XtInheritGetCursorBounds ((_XawSinkGetCursorBoundsProc)_XtInherit)
-
-#endif /* _XawTextSinkP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawTextSinkP_h
+#define _XawTextSinkP_h
+
+/*
+ * TextSink Object Private Data
+ */
+#include <X11/Xaw/TextSink.h>
+#include <X11/Xaw/TextP.h> /* This sink works with the Text widget */
+#include <X11/Xaw/TextSrcP.h> /* This sink works with the Text Source */
+#include <X11/Xmu/Xmu.h>
+
+#ifndef OLDXAW
+/* font/fontset defined? */
+#define XAW_TPROP_FONT (1<<0)
+#define XAW_TPROP_FONTSET (1<<1)
+
+/* extra attributes */
+#define XAW_TPROP_FOREGROUND (1<<2)
+#define XAW_TPROP_BACKGROUND (1<<3)
+#define XAW_TPROP_FPIXMAP (1<<4)
+#define XAW_TPROP_BPIXMAP (1<<5)
+#define XAW_TPROP_UNDERLINE (1<<6)
+#define XAW_TPROP_OVERSTRIKE (1<<7)
+#define XAW_TPROP_SUBSCRIPT (1<<8)
+#define XAW_TPROP_SUPERSCRIPT (1<<9)
+
+/* xlfd attributes */
+#define XAW_TPROP_FOUNDRY (1<<0)
+#define XAW_TPROP_FAMILY (1<<1)
+#define XAW_TPROP_WEIGHT (1<<2)
+#define XAW_TPROP_SLANT (1<<3)
+#define XAW_TPROP_SETWIDTH (1<<4)
+#define XAW_TPROP_ADDSTYLE (1<<5)
+#define XAW_TPROP_PIXELSIZE (1<<6)
+#define XAW_TPROP_POINTSIZE (1<<7)
+#define XAW_TPROP_RESX (1<<8)
+#define XAW_TPROP_RESY (1<<9)
+#define XAW_TPROP_SPACING (1<<10)
+#define XAW_TPROP_AVGWIDTH (1<<11)
+#define XAW_TPROP_REGISTRY (1<<12)
+#define XAW_TPROP_ENCODING (1<<13)
+struct _XawTextProperty { /* to be extended/modified */
+ XrmQuark identifier, code;
+ unsigned long mask;
+ XFontStruct *font;
+ XFontSet fontset;
+ Pixel foreground, background;
+ Pixmap foreground_pixmap, background_pixmap;
+ XrmQuark xlfd;
+
+ unsigned long xlfd_mask;
+ XrmQuark foundry, family, weight, slant, setwidth, addstyle, pixel_size,
+ point_size, res_x, res_y, spacing, avgwidth, registry, encoding;
+
+ short underline_position, underline_thickness;
+};
+
+struct _XawTextPropertyList {
+ XrmQuark identifier;
+ Screen *screen;
+ Colormap colormap;
+ int depth;
+ XawTextProperty **properties;
+ Cardinal num_properties;
+ XawTextPropertyList *next;
+};
+
+typedef struct _XawTextPaintStruct XawTextPaintStruct;
+struct _XawTextPaintStruct {
+ XawTextPaintStruct *next;
+ int x, y, width;
+ char *text; /* formatted text */
+ Cardinal length; /* length of text */
+ XawTextProperty *property;
+ int max_ascent, max_descent;
+ XmuArea *backtabs;
+ Boolean highlight;
+};
+
+typedef struct {
+ XmuArea *clip, *hightabs; /* clip list */
+ XawTextPaintStruct *paint, *bearings; /* drawing information */
+} XawTextPaintList;
+
+typedef struct {
+ XtPointer next_extension;
+ XrmQuark record_type;
+ long version;
+ Cardinal record_size;
+ Bool (*BeginPaint)(Widget);
+ void (*PreparePaint)(Widget, int, int,
+ XawTextPosition, XawTextPosition, Bool);
+ void (*DoPaint)(Widget);
+ Bool (*EndPaint)(Widget);
+} TextSinkExtRec, *TextSinkExt;
+#endif
+
+typedef void (*_XawSinkDisplayTextProc)
+ (Widget, int, int, XawTextPosition, XawTextPosition, Bool);
+
+typedef void (*_XawSinkInsertCursorProc)
+ (Widget, int, int, XawTextInsertState);
+
+typedef void (*_XawSinkClearToBackgroundProc)
+ (Widget, int, int, unsigned int, unsigned int);
+
+typedef void (*_XawSinkFindPositionProc)
+ (Widget, XawTextPosition, int, int, Bool, XawTextPosition*, int*, int*);
+
+typedef void (*_XawSinkFindDistanceProc)
+ (Widget, XawTextPosition, int, XawTextPosition, int*,
+ XawTextPosition*, int*);
+
+typedef void (*_XawSinkResolveProc)
+ (Widget, XawTextPosition, int, int, XawTextPosition*);
+
+typedef int (*_XawSinkMaxLinesProc)
+ (Widget, unsigned int);
+
+typedef int (*_XawSinkMaxHeightProc)
+ (Widget, int);
+
+typedef void (*_XawSinkSetTabsProc)
+ (Widget, int, short*);
+
+typedef void (*_XawSinkGetCursorBoundsProc)
+ (Widget, XRectangle*);
+
+typedef struct _TextSinkClassPart {
+ _XawSinkDisplayTextProc DisplayText;
+ _XawSinkInsertCursorProc InsertCursor;
+ _XawSinkClearToBackgroundProc ClearToBackground;
+ _XawSinkFindPositionProc FindPosition;
+ _XawSinkFindDistanceProc FindDistance;
+ _XawSinkResolveProc Resolve;
+ _XawSinkMaxLinesProc MaxLines;
+ _XawSinkMaxHeightProc MaxHeight;
+ _XawSinkSetTabsProc SetTabs;
+ _XawSinkGetCursorBoundsProc GetCursorBounds;
+#ifndef OLDXAW
+ TextSinkExt extension;
+#endif
+} TextSinkClassPart;
+
+/* Full class record */
+typedef struct _TextSinkClassRec {
+ ObjectClassPart object_class;
+ TextSinkClassPart text_sink_class;
+} TextSinkClassRec;
+
+extern TextSinkClassRec textSinkClassRec;
+
+/* New fields for the TextSink object */
+typedef struct {
+ /* resources */
+ Pixel foreground; /* Foreground color */
+ Pixel background; /* Background color */
+
+ /* private */
+ Position *tabs; /* The tab stops as pixel values */
+ short *char_tabs; /* The tabs stops as character values */
+ int tab_count; /* number of items in tabs */
+
+#ifndef OLDXAW
+ /* more resources */
+ Pixel cursor_color;
+ XawTextPropertyList *properties;
+ XawTextPaintList *paint;
+ XtPointer pad[2]; /* for future use and keep binary compatability */
+#endif
+} TextSinkPart;
+
+/* Full instance record */
+typedef struct _TextSinkRec {
+ ObjectPart object;
+ TextSinkPart text_sink;
+} TextSinkRec;
+
+/* Semi private routines */
+#ifndef OLDXAW
+XawTextPropertyList *XawTextSinkConvertPropertyList
+(
+ String name,
+ String spec,
+ Screen *screen,
+ Colormap Colormap,
+ int depth
+ );
+
+XawTextProperty *XawTextSinkGetProperty
+(
+ Widget w,
+ XrmQuark property
+ );
+
+XawTextProperty *XawTextSinkCopyProperty
+(
+ Widget w,
+ XrmQuark property
+ );
+
+XawTextProperty *XawTextSinkAddProperty
+(
+ Widget w,
+ XawTextProperty *property
+ );
+
+XawTextProperty *XawTextSinkCombineProperty
+(
+ Widget w,
+ XawTextProperty *result_in_out,
+ XawTextProperty *property,
+ Bool override
+ );
+
+Bool XawTextSinkBeginPaint
+(
+ Widget w
+ );
+
+void XawTextSinkPreparePaint
+(
+ Widget w,
+ int y,
+ int line,
+ XawTextPosition from,
+ XawTextPosition to,
+ Bool highlight
+);
+
+void XawTextSinkDoPaint
+(
+ Widget w
+ );
+
+Bool XawTextSinkEndPaint
+(
+ Widget w
+ );
+#endif
+
+#define XtInheritDisplayText ((_XawSinkDisplayTextProc)_XtInherit)
+#define XtInheritInsertCursor ((_XawSinkInsertCursorProc)_XtInherit)
+#define XtInheritClearToBackground ((_XawSinkClearToBackgroundProc)_XtInherit)
+#define XtInheritFindPosition ((_XawSinkFindPositionProc)_XtInherit)
+#define XtInheritFindDistance ((_XawSinkFindDistanceProc)_XtInherit)
+#define XtInheritResolve ((_XawSinkResolveProc)_XtInherit)
+#define XtInheritMaxLines ((_XawSinkMaxLinesProc)_XtInherit)
+#define XtInheritMaxHeight ((_XawSinkMaxHeightProc)_XtInherit)
+#define XtInheritSetTabs ((_XawSinkSetTabsProc)_XtInherit)
+#define XtInheritGetCursorBounds ((_XawSinkGetCursorBoundsProc)_XtInherit)
+
+#endif /* _XawTextSinkP_h */
diff --git a/libXaw/include/X11/Xaw/TextSrc.h b/libXaw/include/X11/Xaw/TextSrc.h
index 817132d48..7042d9139 100644
--- a/libXaw/include/X11/Xaw/TextSrc.h
+++ b/libXaw/include/X11/Xaw/TextSrc.h
@@ -1,280 +1,275 @@
-/*
- * $Xorg: TextSrc.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $
- */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/TextSrc.h,v 1.11 2001/01/17 19:42:35 dawes Exp $ */
-
-#ifndef _XawTextSrc_h
-#define _XawTextSrc_h
-
-#include <X11/Xaw/Text.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- callback Callback Callback NULL
- editType EditType XawTextEditType XawtextRead
- enableUndo Undo Boolean False
- sourceChanged Changed Boolean False
-
-*/
-
-/* Class record constants */
-extern WidgetClass textSrcObjectClass;
-
-typedef struct _TextSrcClassRec *TextSrcObjectClass;
-typedef struct _TextSrcRec *TextSrcObject;
-
-typedef enum {
- XawstPositions,
- XawstWhiteSpace,
- XawstEOL,
- XawstParagraph,
- XawstAll,
- XawstAlphaNumeric
- } XawTextScanType;
-
-typedef enum {
- Normal,
- Selected
-} highlightType;
-
-typedef enum {
- XawsmTextSelect,
- XawsmTextExtend
-} XawTextSelectionMode;
-
-typedef enum {
- XawactionStart,
- XawactionAdjust,
- XawactionEnd
-} XawTextSelectionAction;
-
-#define XawTextReadError -1
-#define XawTextScanError -1
-
-#ifndef OLDXAW
-#define XtNenableUndo "enableUndo"
-#define XtCUndo "Undo"
-
-#define XtNsourceChanged "sourceChanged"
-#define XtCChanged "Changed"
-
-#define XtNpropertyCallback "propertyCallback"
-#endif
-
-/*
- * Public Functions
- */
-_XFUNCPROTOBEGIN
-
-/*
- * Function:
- * XawTextSourceRead
- *
- * Parameters:
- * w - TextSrc Object
- * pos - position of the text to retreive
- * text - text block that will contain returned text
- * length - maximum number of characters to read
- *
- * Description:
- * This function reads the source.
- *
- * Returns:
- * The number of characters read into the buffer
- */
-XawTextPosition XawTextSourceRead
-(
- Widget w,
- XawTextPosition pos,
- XawTextBlock *text_return,
- int length
- );
-
-/*
- * Function:
- * XawTextSourceReplace
- *
- * Parameters:
- * src - Text Source Object
- * startPos - ends of text that will be removed
- * endPos - ""
- * text - new text to be inserted into buffer at startPos
- *
- * Description:
- * Replaces a block of text with new text
- *
- * Returns:
- * XawEditError or XawEditDone
- */
-int XawTextSourceReplace
-(
- Widget w,
- XawTextPosition start,
- XawTextPosition end,
- XawTextBlock *text
- );
-
-/*
- * Function:
- * XawTextSourceScan
- *
- * Parameters:
- * w - TextSrc Object
- * position - position to start scanning
- * type - type of thing to scan for
- * dir - direction to scan
- * count - which occurance if this thing to search for
- * include - whether or not to include the character found in
- * the position that is returned.
- *
- * Description:
- * Scans the text source for the number and type of item specified.
- *
- * Returns:
- * The position of the text
- */
-XawTextPosition XawTextSourceScan
-(
- Widget w,
- XawTextPosition position,
-#if NeedWidePrototypes
- int type,
- int dir,
- int count,
- int include
-#else
- XawTextScanType type,
- XawTextScanDirection dir,
- int count,
- Boolean include
-#endif
- );
-
-/*
- * Function:
- * XawTextSourceSearch
- *
- * Parameters:
- * w - TextSource Object
- * position - position to start scanning
- * dir - direction to search
- * text - the text block to search for
- *
- * Description:
- * Searchs the text source for the text block passed.
- *
- * Returns:
- * The position of the text we are searching for or XawTextSearchError
- */
-XawTextPosition XawTextSourceSearch
-(
- Widget w,
- XawTextPosition position,
-#if NeedWidePrototypes
- int dir,
-#else
- XawTextScanDirection dir,
-#endif
- XawTextBlock *text
- );
-
-/*
- * Function:
- * XawTextSourceConvertSelection
- *
- * Parameters:
- * w - TextSrc object
- * selection - current selection atom
- * target - current target atom
- * type - type to conver the selection to
- * value - return value that has been converted
- * length - ""
- * format - format of the returned value
- *
- * Returns:
- * True if the selection has been converted
- */
-Boolean XawTextSourceConvertSelection
-(
- Widget w,
- Atom *selection,
- Atom *target,
- Atom *type,
- XtPointer *value_return,
- unsigned long *length_return,
- int *format_return
- );
-
-/*
- * Function:
- * XawTextSourceSetSelection
- *
- * Parameters:
- * w - TextSrc object
- * left - bounds of the selection
- * right - ""
- * selection - selection atom
- *
- * Description:
- * Allows special setting of the selection.
- */
-void XawTextSourceSetSelection
-(
- Widget w,
- XawTextPosition start,
- XawTextPosition end,
- Atom selection
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawTextSrc_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawTextSrc_h
+#define _XawTextSrc_h
+
+#include <X11/Xaw/Text.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ callback Callback Callback NULL
+ editType EditType XawTextEditType XawtextRead
+ enableUndo Undo Boolean False
+ sourceChanged Changed Boolean False
+
+*/
+
+/* Class record constants */
+extern WidgetClass textSrcObjectClass;
+
+typedef struct _TextSrcClassRec *TextSrcObjectClass;
+typedef struct _TextSrcRec *TextSrcObject;
+
+typedef enum {
+ XawstPositions,
+ XawstWhiteSpace,
+ XawstEOL,
+ XawstParagraph,
+ XawstAll,
+ XawstAlphaNumeric
+ } XawTextScanType;
+
+typedef enum {
+ Normal,
+ Selected
+} highlightType;
+
+typedef enum {
+ XawsmTextSelect,
+ XawsmTextExtend
+} XawTextSelectionMode;
+
+typedef enum {
+ XawactionStart,
+ XawactionAdjust,
+ XawactionEnd
+} XawTextSelectionAction;
+
+#define XawTextReadError -1
+#define XawTextScanError -1
+
+#ifndef OLDXAW
+#define XtNenableUndo "enableUndo"
+#define XtCUndo "Undo"
+
+#define XtNsourceChanged "sourceChanged"
+#define XtCChanged "Changed"
+
+#define XtNpropertyCallback "propertyCallback"
+#endif
+
+/*
+ * Public Functions
+ */
+_XFUNCPROTOBEGIN
+
+/*
+ * Function:
+ * XawTextSourceRead
+ *
+ * Parameters:
+ * w - TextSrc Object
+ * pos - position of the text to retreive
+ * text - text block that will contain returned text
+ * length - maximum number of characters to read
+ *
+ * Description:
+ * This function reads the source.
+ *
+ * Returns:
+ * The number of characters read into the buffer
+ */
+XawTextPosition XawTextSourceRead
+(
+ Widget w,
+ XawTextPosition pos,
+ XawTextBlock *text_return,
+ int length
+ );
+
+/*
+ * Function:
+ * XawTextSourceReplace
+ *
+ * Parameters:
+ * src - Text Source Object
+ * startPos - ends of text that will be removed
+ * endPos - ""
+ * text - new text to be inserted into buffer at startPos
+ *
+ * Description:
+ * Replaces a block of text with new text
+ *
+ * Returns:
+ * XawEditError or XawEditDone
+ */
+int XawTextSourceReplace
+(
+ Widget w,
+ XawTextPosition start,
+ XawTextPosition end,
+ XawTextBlock *text
+ );
+
+/*
+ * Function:
+ * XawTextSourceScan
+ *
+ * Parameters:
+ * w - TextSrc Object
+ * position - position to start scanning
+ * type - type of thing to scan for
+ * dir - direction to scan
+ * count - which occurance if this thing to search for
+ * include - whether or not to include the character found in
+ * the position that is returned.
+ *
+ * Description:
+ * Scans the text source for the number and type of item specified.
+ *
+ * Returns:
+ * The position of the text
+ */
+XawTextPosition XawTextSourceScan
+(
+ Widget w,
+ XawTextPosition position,
+#if NeedWidePrototypes
+ int type,
+ int dir,
+ int count,
+ int include
+#else
+ XawTextScanType type,
+ XawTextScanDirection dir,
+ int count,
+ Boolean include
+#endif
+ );
+
+/*
+ * Function:
+ * XawTextSourceSearch
+ *
+ * Parameters:
+ * w - TextSource Object
+ * position - position to start scanning
+ * dir - direction to search
+ * text - the text block to search for
+ *
+ * Description:
+ * Searchs the text source for the text block passed.
+ *
+ * Returns:
+ * The position of the text we are searching for or XawTextSearchError
+ */
+XawTextPosition XawTextSourceSearch
+(
+ Widget w,
+ XawTextPosition position,
+#if NeedWidePrototypes
+ int dir,
+#else
+ XawTextScanDirection dir,
+#endif
+ XawTextBlock *text
+ );
+
+/*
+ * Function:
+ * XawTextSourceConvertSelection
+ *
+ * Parameters:
+ * w - TextSrc object
+ * selection - current selection atom
+ * target - current target atom
+ * type - type to conver the selection to
+ * value - return value that has been converted
+ * length - ""
+ * format - format of the returned value
+ *
+ * Returns:
+ * True if the selection has been converted
+ */
+Boolean XawTextSourceConvertSelection
+(
+ Widget w,
+ Atom *selection,
+ Atom *target,
+ Atom *type,
+ XtPointer *value_return,
+ unsigned long *length_return,
+ int *format_return
+ );
+
+/*
+ * Function:
+ * XawTextSourceSetSelection
+ *
+ * Parameters:
+ * w - TextSrc object
+ * left - bounds of the selection
+ * right - ""
+ * selection - selection atom
+ *
+ * Description:
+ * Allows special setting of the selection.
+ */
+void XawTextSourceSetSelection
+(
+ Widget w,
+ XawTextPosition start,
+ XawTextPosition end,
+ Atom selection
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawTextSrc_h */
diff --git a/libXaw/include/X11/Xaw/TextSrcP.h b/libXaw/include/X11/Xaw/TextSrcP.h
index e26557b90..c338bc02c 100644
--- a/libXaw/include/X11/Xaw/TextSrcP.h
+++ b/libXaw/include/X11/Xaw/TextSrcP.h
@@ -1,264 +1,258 @@
-/*
-* $Xorg: TextSrcP.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $
-*/
-
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/TextSrcP.h,v 1.14 2001/12/14 19:54:45 dawes Exp $ */
-
-#ifndef _XawTextSrcP_h
-#define _XawTextSrcP_h
-
-/*
- * TextSrc Object Private Data
- */
-#include <X11/Xfuncproto.h>
-
-#include <X11/Xaw/TextSrc.h>
-#include <X11/Xaw/TextP.h> /* This source works with the Text widget */
-
-_XFUNCPROTOBEGIN
-
-#ifndef OLDXAW
-struct _XawTextAnchor {
- XawTextPosition position;
- XawTextEntity *entities, *cache;
-};
-
-#define XAW_TENTF_HIDE 0x0001
-#define XAW_TENTF_READ 0x0002
-#define XAW_TENTF_REPLACE 0x0004
-struct _XawTextEntity {
- short type;
- short flags;
- XawTextEntity *next;
- XtPointer data;
- XawTextPosition offset; /* from the anchor */
- Cardinal length;
- XrmQuark property;
-};
-#endif
-
-#if 0 /* no longer used */
-/* New fields for the TextSrc object class */
-typedef struct {
- XtPointer next_extension;
- XrmQuark record_type;
- long version;
- Cardinal record_size;
- int (*Input)();
-} TextSrcExtRec, *TextSrcExt;
-#endif
-
-typedef XawTextPosition (*_XawSrcReadProc)
- (Widget, XawTextPosition, XawTextBlock*, int);
-
-typedef int (*_XawSrcReplaceProc)
- (Widget, XawTextPosition, XawTextPosition, XawTextBlock*);
-
-typedef XawTextPosition (*_XawSrcScanProc)
- (Widget, XawTextPosition, XawTextScanType, XawTextScanDirection,
- int, Bool);
-
-typedef XawTextPosition (*_XawSrcSearchProc)
- (Widget, XawTextPosition, XawTextScanDirection, XawTextBlock*);
-
-typedef void (*_XawSrcSetSelectionProc)
- (Widget, XawTextPosition, XawTextPosition, Atom);
-
-typedef Boolean (*_XawSrcConvertSelectionProc)
- (Widget, Atom*, Atom*, Atom*, XtPointer*, unsigned long*, int*);
-
-typedef struct _TextSrcClassPart {
- _XawSrcReadProc Read;
- _XawSrcReplaceProc Replace;
- _XawSrcScanProc Scan;
- _XawSrcSearchProc Search;
- _XawSrcSetSelectionProc SetSelection;
- _XawSrcConvertSelectionProc ConvertSelection;
-#ifndef OLDXAW
- XtPointer extension;
-#endif
-} TextSrcClassPart;
-
-/* Full class record */
-typedef struct _TextSrcClassRec {
- ObjectClassPart object_class;
- TextSrcClassPart textSrc_class;
-} TextSrcClassRec;
-
-extern TextSrcClassRec textSrcClassRec;
-
-#ifndef OLDXAW
-typedef struct _XawTextUndo XawTextUndo;
-#endif
-
-/* New fields for the TextSrc object */
-typedef struct {
- /* resources */
- XawTextEditType edit_mode;
- XrmQuark text_format; /* 2 formats: FMT8BIT for Ascii
- FMTWIDE for ISO 10646 */
-#ifndef OLDXAW
- XtCallbackList callback; /* A callback list to call when the
- source is changed */
- Boolean changed;
- Boolean enable_undo;
-
- /* private state */
- Boolean undo_state; /* to protect undo manipulation */
- XawTextUndo *undo;
- WidgetList text; /* TextWidget's using this source */
- Cardinal num_text;
- XtCallbackList property_callback;
- XawTextAnchor **anchors;
- int num_anchors;
- XtPointer pad[1]; /* for future use and keep binary compatability */
-#endif
-} TextSrcPart;
-
-/* Full instance record */
-typedef struct _TextSrcRec {
- ObjectPart object;
- TextSrcPart textSrc;
-} TextSrcRec;
-
-/*
- * Semiprivate declarations of functions used in other modules
- */
-char* _XawTextWCToMB
-(
- Display *display,
- wchar_t *wstr,
- int *len_in_out
- );
-
-wchar_t* _XawTextMBToWC
-(
- Display *display,
- char *str,
- int *len_in_out
- );
-
-#ifndef OLDXAW
-XawTextAnchor *XawTextSourceAddAnchor
-(
- Widget source,
- XawTextPosition position
- );
-
-XawTextAnchor *XawTextSourceFindAnchor
-(
- Widget source,
- XawTextPosition position
- );
-
-XawTextAnchor *XawTextSourceNextAnchor
-(
- Widget source,
- XawTextAnchor *anchor
- );
-
-XawTextAnchor *XawTextSourcePrevAnchor
-(
- Widget source,
- XawTextAnchor *anchor
- );
-
-XawTextAnchor *XawTextSourceRemoveAnchor
-(
- Widget source,
- XawTextAnchor *anchor
- );
-
-Bool XawTextSourceAnchorAndEntity
-(
- Widget w,
- XawTextPosition position,
- XawTextAnchor **anchor_return,
- XawTextEntity **entity_return
- );
-
-XawTextEntity *XawTextSourceAddEntity
-(
- Widget source,
- int type,
- int flags,
- XtPointer data,
- XawTextPosition position,
- Cardinal length,
- XrmQuark property
- );
-
-void XawTextSourceClearEntities
-(
- Widget w,
- XawTextPosition left,
- XawTextPosition right
- );
-#endif
-
-#if 0 /* no longer used */
-typedef XawTextPosition (*_XawTextPositionFunc)();
-#endif
-
-#define XtInheritInput ((_XawTextPositionFunc)_XtInherit)
-#define XtInheritRead ((_XawSrcReadProc)_XtInherit)
-#define XtInheritReplace ((_XawSrcReplaceProc)_XtInherit)
-#define XtInheritScan ((_XawSrcScanProc)_XtInherit)
-#define XtInheritSearch ((_XawSrcSearchProc)_XtInherit)
-#define XtInheritSetSelection ((_XawSrcSetSelectionProc)_XtInherit)
-#define XtInheritConvertSelection ((_XawSrcConvertSelectionProc)_XtInherit)
-#if 0
-#define XtTextSrcExtVersion 1
-#define XtTextSrcExtTypeString "XT_TEXTSRC_EXT"
-#endif
-
-_XFUNCPROTOEND
-
-#endif /* _XawTextSrcP_h */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifndef _XawTextSrcP_h
+#define _XawTextSrcP_h
+
+/*
+ * TextSrc Object Private Data
+ */
+#include <X11/Xfuncproto.h>
+
+#include <X11/Xaw/TextSrc.h>
+#include <X11/Xaw/TextP.h> /* This source works with the Text widget */
+
+_XFUNCPROTOBEGIN
+
+#ifndef OLDXAW
+struct _XawTextAnchor {
+ XawTextPosition position;
+ XawTextEntity *entities, *cache;
+};
+
+#define XAW_TENTF_HIDE 0x0001
+#define XAW_TENTF_READ 0x0002
+#define XAW_TENTF_REPLACE 0x0004
+struct _XawTextEntity {
+ short type;
+ short flags;
+ XawTextEntity *next;
+ XtPointer data;
+ XawTextPosition offset; /* from the anchor */
+ Cardinal length;
+ XrmQuark property;
+};
+#endif
+
+#if 0 /* no longer used */
+/* New fields for the TextSrc object class */
+typedef struct {
+ XtPointer next_extension;
+ XrmQuark record_type;
+ long version;
+ Cardinal record_size;
+ int (*Input)();
+} TextSrcExtRec, *TextSrcExt;
+#endif
+
+typedef XawTextPosition (*_XawSrcReadProc)
+ (Widget, XawTextPosition, XawTextBlock*, int);
+
+typedef int (*_XawSrcReplaceProc)
+ (Widget, XawTextPosition, XawTextPosition, XawTextBlock*);
+
+typedef XawTextPosition (*_XawSrcScanProc)
+ (Widget, XawTextPosition, XawTextScanType, XawTextScanDirection,
+ int, Bool);
+
+typedef XawTextPosition (*_XawSrcSearchProc)
+ (Widget, XawTextPosition, XawTextScanDirection, XawTextBlock*);
+
+typedef void (*_XawSrcSetSelectionProc)
+ (Widget, XawTextPosition, XawTextPosition, Atom);
+
+typedef Boolean (*_XawSrcConvertSelectionProc)
+ (Widget, Atom*, Atom*, Atom*, XtPointer*, unsigned long*, int*);
+
+typedef struct _TextSrcClassPart {
+ _XawSrcReadProc Read;
+ _XawSrcReplaceProc Replace;
+ _XawSrcScanProc Scan;
+ _XawSrcSearchProc Search;
+ _XawSrcSetSelectionProc SetSelection;
+ _XawSrcConvertSelectionProc ConvertSelection;
+#ifndef OLDXAW
+ XtPointer extension;
+#endif
+} TextSrcClassPart;
+
+/* Full class record */
+typedef struct _TextSrcClassRec {
+ ObjectClassPart object_class;
+ TextSrcClassPart textSrc_class;
+} TextSrcClassRec;
+
+extern TextSrcClassRec textSrcClassRec;
+
+#ifndef OLDXAW
+typedef struct _XawTextUndo XawTextUndo;
+#endif
+
+/* New fields for the TextSrc object */
+typedef struct {
+ /* resources */
+ XawTextEditType edit_mode;
+ XrmQuark text_format; /* 2 formats: FMT8BIT for Ascii
+ FMTWIDE for ISO 10646 */
+#ifndef OLDXAW
+ XtCallbackList callback; /* A callback list to call when the
+ source is changed */
+ Boolean changed;
+ Boolean enable_undo;
+
+ /* private state */
+ Boolean undo_state; /* to protect undo manipulation */
+ XawTextUndo *undo;
+ WidgetList text; /* TextWidget's using this source */
+ Cardinal num_text;
+ XtCallbackList property_callback;
+ XawTextAnchor **anchors;
+ int num_anchors;
+ XtPointer pad[1]; /* for future use and keep binary compatability */
+#endif
+} TextSrcPart;
+
+/* Full instance record */
+typedef struct _TextSrcRec {
+ ObjectPart object;
+ TextSrcPart textSrc;
+} TextSrcRec;
+
+/*
+ * Semiprivate declarations of functions used in other modules
+ */
+char* _XawTextWCToMB
+(
+ Display *display,
+ wchar_t *wstr,
+ int *len_in_out
+ );
+
+wchar_t* _XawTextMBToWC
+(
+ Display *display,
+ char *str,
+ int *len_in_out
+ );
+
+#ifndef OLDXAW
+XawTextAnchor *XawTextSourceAddAnchor
+(
+ Widget source,
+ XawTextPosition position
+ );
+
+XawTextAnchor *XawTextSourceFindAnchor
+(
+ Widget source,
+ XawTextPosition position
+ );
+
+XawTextAnchor *XawTextSourceNextAnchor
+(
+ Widget source,
+ XawTextAnchor *anchor
+ );
+
+XawTextAnchor *XawTextSourcePrevAnchor
+(
+ Widget source,
+ XawTextAnchor *anchor
+ );
+
+XawTextAnchor *XawTextSourceRemoveAnchor
+(
+ Widget source,
+ XawTextAnchor *anchor
+ );
+
+Bool XawTextSourceAnchorAndEntity
+(
+ Widget w,
+ XawTextPosition position,
+ XawTextAnchor **anchor_return,
+ XawTextEntity **entity_return
+ );
+
+XawTextEntity *XawTextSourceAddEntity
+(
+ Widget source,
+ int type,
+ int flags,
+ XtPointer data,
+ XawTextPosition position,
+ Cardinal length,
+ XrmQuark property
+ );
+
+void XawTextSourceClearEntities
+(
+ Widget w,
+ XawTextPosition left,
+ XawTextPosition right
+ );
+#endif
+
+#if 0 /* no longer used */
+typedef XawTextPosition (*_XawTextPositionFunc)();
+#endif
+
+#define XtInheritInput ((_XawTextPositionFunc)_XtInherit)
+#define XtInheritRead ((_XawSrcReadProc)_XtInherit)
+#define XtInheritReplace ((_XawSrcReplaceProc)_XtInherit)
+#define XtInheritScan ((_XawSrcScanProc)_XtInherit)
+#define XtInheritSearch ((_XawSrcSearchProc)_XtInherit)
+#define XtInheritSetSelection ((_XawSrcSetSelectionProc)_XtInherit)
+#define XtInheritConvertSelection ((_XawSrcConvertSelectionProc)_XtInherit)
+#if 0
+#define XtTextSrcExtVersion 1
+#define XtTextSrcExtTypeString "XT_TEXTSRC_EXT"
+#endif
+
+_XFUNCPROTOEND
+
+#endif /* _XawTextSrcP_h */
diff --git a/libXaw/include/X11/Xaw/Tip.h b/libXaw/include/X11/Xaw/Tip.h
index f5b8d9be5..d3c1da5ad 100644
--- a/libXaw/include/X11/Xaw/Tip.h
+++ b/libXaw/include/X11/Xaw/Tip.h
@@ -1,120 +1,118 @@
-/*
- * Copyright (c) 1999 by The XFree86 Project, 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 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.
- *
- * Author: Paulo César Pereira de Andrade
- */
-
-/* $XFree86$ */
-
-#ifndef _XawTip_h
-#define _XawTip_h
-
-/*
- * Tip Widget
- */
-
-#include <X11/Xaw/Simple.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background Pixel XtDefaultBackground
- backgroundPixmap BackgroundPixmap Pixmap XtUnspecifiedPixmap
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- bottomMargin VerticalMargins Dimension 2
- destroyCallback Callback XtCallbackList NULL
- displayList DisplayList XawDisplayList* NULL
- font Font XFontStruct* XtDefaultFont
- foreground Foreground Pixel XtDefaultForeground
- height Height Dimension text height
- leftMargin HorizontalMargins Dimension 6
- rightMargin HorizontalMargins Dimension 6
- timeout Timeout Int 500
- topMargin VerticalMargins Dimension 2
- width Width Dimension text width
- x Position Position 0
- y Position Position 0
-
-*/
-
-typedef struct _TipClassRec *TipWidgetClass;
-typedef struct _TipRec *TipWidget;
-
-extern WidgetClass tipWidgetClass;
-
-#define XtNbottomMargin "bottomMargin"
-#define XawNdisplayList "displayList"
-#define XtNencoding "encoding"
-#define XtNleftMargin "leftMargin"
-#define XtNrightMargin "rightMargin"
-#define XtNtimeout "timeout"
-#define XtNtopMargin "topMargin"
-#define XtNtip "tip"
-
-#define XawCDisplayList "DisplayList"
-#define XtCHorizontalMargins "HorizontalMargins"
-#define XtCTimeout "Timeout"
-#define XtCVerticalMargins "VerticalMargins"
-#define XtCTip "Tip"
-
-#define XawRDisplayList "XawDisplayList"
-
-/*
- * Public Functions
- */
-/*
- * Function:
- * XawTipEnable
- *
- * Parameters:
- * w - widget
- *
- * Description:
- * Enables the tip event handler for this widget.
- */
-void XawTipEnable
-(
- Widget w
- );
-
-/*
- * Function:
- * XawTipEnable
- *
- * Parameters:
- * w - widget
- *
- * Description:
- * Disables the tip event handler for this widget.
- */
-void XawTipDisable
-(
- Widget w
- );
-
-#endif /* _XawTip_h */
+/*
+ * Copyright (c) 1999 by The XFree86 Project, 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 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.
+ *
+ * Author: Paulo César Pereira de Andrade
+ */
+
+#ifndef _XawTip_h
+#define _XawTip_h
+
+/*
+ * Tip Widget
+ */
+
+#include <X11/Xaw/Simple.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ backgroundPixmap BackgroundPixmap Pixmap XtUnspecifiedPixmap
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ bottomMargin VerticalMargins Dimension 2
+ destroyCallback Callback XtCallbackList NULL
+ displayList DisplayList XawDisplayList* NULL
+ font Font XFontStruct* XtDefaultFont
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension text height
+ leftMargin HorizontalMargins Dimension 6
+ rightMargin HorizontalMargins Dimension 6
+ timeout Timeout Int 500
+ topMargin VerticalMargins Dimension 2
+ width Width Dimension text width
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+typedef struct _TipClassRec *TipWidgetClass;
+typedef struct _TipRec *TipWidget;
+
+extern WidgetClass tipWidgetClass;
+
+#define XtNbottomMargin "bottomMargin"
+#define XawNdisplayList "displayList"
+#define XtNencoding "encoding"
+#define XtNleftMargin "leftMargin"
+#define XtNrightMargin "rightMargin"
+#define XtNtimeout "timeout"
+#define XtNtopMargin "topMargin"
+#define XtNtip "tip"
+
+#define XawCDisplayList "DisplayList"
+#define XtCHorizontalMargins "HorizontalMargins"
+#define XtCTimeout "Timeout"
+#define XtCVerticalMargins "VerticalMargins"
+#define XtCTip "Tip"
+
+#define XawRDisplayList "XawDisplayList"
+
+/*
+ * Public Functions
+ */
+/*
+ * Function:
+ * XawTipEnable
+ *
+ * Parameters:
+ * w - widget
+ *
+ * Description:
+ * Enables the tip event handler for this widget.
+ */
+void XawTipEnable
+(
+ Widget w
+ );
+
+/*
+ * Function:
+ * XawTipEnable
+ *
+ * Parameters:
+ * w - widget
+ *
+ * Description:
+ * Disables the tip event handler for this widget.
+ */
+void XawTipDisable
+(
+ Widget w
+ );
+
+#endif /* _XawTip_h */
diff --git a/libXaw/include/X11/Xaw/TipP.h b/libXaw/include/X11/Xaw/TipP.h
index 2b9e12619..f72f20a97 100644
--- a/libXaw/include/X11/Xaw/TipP.h
+++ b/libXaw/include/X11/Xaw/TipP.h
@@ -1,77 +1,75 @@
-/*
- * Copyright (c) 1999 by The XFree86 Project, 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 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.
- *
- * Author: Paulo César Pereira de Andrade
- */
-
-/* $XFree86$ */
-
-#ifndef _XawTipP_h
-#define _XawTipP_h
-
-#include <X11/Xaw/Tip.h>
-#include <X11/CoreP.h>
-#include <X11/Xaw/XawInit.h>
-
-typedef struct {
- XtPointer extension;
-} TipClassPart;
-
-typedef struct _TipClassRec {
- CoreClassPart core_class;
- TipClassPart tip_class;
-} TipClassRec;
-
-extern TipClassRec tipClassRec;
-
-typedef struct _TipPart {
- /* resources */
- Pixel foreground;
- XFontStruct *font;
- XFontSet fontset;
- Dimension top_margin;
- Dimension bottom_margin;
- Dimension left_margin;
- Dimension right_margin;
- int backing_store;
- int timeout;
- XawDisplayList *display_list;
-
- /* private */
- GC gc;
- XtIntervalId timer;
- String label;
- Boolean international;
- unsigned char encoding;
- XtPointer pad[4];
-} TipPart;
-
-typedef struct _TipRec {
- CorePart core;
- TipPart tip;
-} TipRec;
-
-#endif /* _XawTipP_h */
+/*
+ * Copyright (c) 1999 by The XFree86 Project, 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 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.
+ *
+ * Author: Paulo César Pereira de Andrade
+ */
+
+#ifndef _XawTipP_h
+#define _XawTipP_h
+
+#include <X11/Xaw/Tip.h>
+#include <X11/CoreP.h>
+#include <X11/Xaw/XawInit.h>
+
+typedef struct {
+ XtPointer extension;
+} TipClassPart;
+
+typedef struct _TipClassRec {
+ CoreClassPart core_class;
+ TipClassPart tip_class;
+} TipClassRec;
+
+extern TipClassRec tipClassRec;
+
+typedef struct _TipPart {
+ /* resources */
+ Pixel foreground;
+ XFontStruct *font;
+ XFontSet fontset;
+ Dimension top_margin;
+ Dimension bottom_margin;
+ Dimension left_margin;
+ Dimension right_margin;
+ int backing_store;
+ int timeout;
+ XawDisplayList *display_list;
+
+ /* private */
+ GC gc;
+ XtIntervalId timer;
+ String label;
+ Boolean international;
+ unsigned char encoding;
+ XtPointer pad[4];
+} TipPart;
+
+typedef struct _TipRec {
+ CorePart core;
+ TipPart tip;
+} TipRec;
+
+#endif /* _XawTipP_h */
diff --git a/libXaw/include/X11/Xaw/Toggle.h b/libXaw/include/X11/Xaw/Toggle.h
index 4858961f2..5a2ce041b 100644
--- a/libXaw/include/X11/Xaw/Toggle.h
+++ b/libXaw/include/X11/Xaw/Toggle.h
@@ -1,181 +1,179 @@
-/*
- * $Xorg: Toggle.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- */
-/* $XFree86: xc/lib/Xaw/Toggle.h,v 1.5 2001/01/17 19:42:35 dawes Exp $ */
-
-/*
- * ToggleP.h - Private definitions for Toggle widget
- *
- * Author: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- *
- * Date: January 12, 1989
- */
-
-#ifndef _XawToggle_h
-#define _XawToggle_h
-
-#include <X11/Xaw/Command.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- radioGroup RadioGroup Widget NULL +
- radioData RadioData Pointer (XPointer) Widget ++
- state State Boolean Off
-
- background Background Pixel XtDefaultBackground
- bitmap Pixmap Pixmap None
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- callback Callback Pointer NULL
- cursor Cursor Cursor None
- destroyCallback Callback Pointer NULL
- displayList DisplayList XawDisplayList* NULL
- font Font XFontStructx* XtDefaultFont
- foreground Foreground Pixel XtDefaultForeground
- height Height Dimension text height
- highlightThickness Thickness Dimension 2
- insensitiveBorder Insensitive Pixmap Gray
- internalHeight Height Dimension 2
- internalWidth Width Dimension 4
- justify Justify XtJustify XtJustifyCenter
- label Label String NULL
- mappedWhenManaged MappedWhenManaged Boolean True
- resize Resize Boolean True
- sensitive Sensitive Boolean True
- width Width Dimension text width
- x Position Position 0
- y Position Position 0
-
-+ To use the toggle as a radio toggle button, set this resource to point to
- any other widget in the radio group.
-
-++ This is the data returned from a call to XtToggleGetCurrent, by default
- this is set to the name of toggle widget.
-
-*/
-
-/*
- * These should be in StringDefs.h but aren't so we will define
- * them here if they are needed
- */
-#define XtCWidget "Widget"
-#define XtCState "State"
-#define XtCRadioGroup "RadioGroup"
-#define XtCRadioData "RadioData"
-
-#ifndef _XtStringDefs_h_
-#define XtRWidget "Widget"
-#endif
-
-#define XtNstate "state"
-#define XtNradioGroup "radioGroup"
-#define XtNradioData "radioData"
-
-extern WidgetClass toggleWidgetClass;
-
-typedef struct _ToggleClassRec *ToggleWidgetClass;
-typedef struct _ToggleRec *ToggleWidget;
-
-/*
- * Public Functions
- */
-
-_XFUNCPROTOBEGIN
-
-/*
- * Function:
- * XawToggleChangeRadioGroup
- *
- * Parameters:
- * w - toggle widget to change lists
- * radio_group - any widget in the new list
- *
- * Description:
- * Allows a toggle widget to change radio lists.
- */
-void XawToggleChangeRadioGroup
-(
- Widget w,
- Widget radio_group
- );
-
-/*
- * Function:
- * XawToggleGetCurrent
- *
- * Parameters:
- * radio_group - any toggle widget in the toggle list
- *
- * Description:
- * Returns the RadioData associated with the toggle
- * widget that is currently active in a toggle list.
- * Returns:
- * The XtNradioData associated with the toggle widget
- */
-
-XtPointer XawToggleGetCurrent
-(
- Widget radio_group
- );
-
-/*
- * Function:
- * XawToggleSetCurrent
- *
- * Parameters:
- * radio_group - any toggle widget in the toggle list
- * radio_data - radio data of the toggle widget to set
- *
- * Description:
- * Sets the Toggle widget associated with the radio_data specified.
- */
-void XawToggleSetCurrent
-(
- Widget radio_group,
- XtPointer radio_data
- );
-
-/*
- * Function:
- * XawToggleUnsetCurrent
- *
- * Parameters:
- * radio_group - any toggle widget in the toggle list
- *
- * Description:
- * Unsets all Toggles in the radio_group specified.
- */
-void XawToggleUnsetCurrent
-(
- Widget radio_group
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawToggle_h */
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ */
+
+/*
+ * ToggleP.h - Private definitions for Toggle widget
+ *
+ * Author: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ *
+ * Date: January 12, 1989
+ */
+
+#ifndef _XawToggle_h
+#define _XawToggle_h
+
+#include <X11/Xaw/Command.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ radioGroup RadioGroup Widget NULL +
+ radioData RadioData Pointer (XPointer) Widget ++
+ state State Boolean Off
+
+ background Background Pixel XtDefaultBackground
+ bitmap Pixmap Pixmap None
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ callback Callback Pointer NULL
+ cursor Cursor Cursor None
+ destroyCallback Callback Pointer NULL
+ displayList DisplayList XawDisplayList* NULL
+ font Font XFontStructx* XtDefaultFont
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension text height
+ highlightThickness Thickness Dimension 2
+ insensitiveBorder Insensitive Pixmap Gray
+ internalHeight Height Dimension 2
+ internalWidth Width Dimension 4
+ justify Justify XtJustify XtJustifyCenter
+ label Label String NULL
+ mappedWhenManaged MappedWhenManaged Boolean True
+ resize Resize Boolean True
+ sensitive Sensitive Boolean True
+ width Width Dimension text width
+ x Position Position 0
+ y Position Position 0
+
++ To use the toggle as a radio toggle button, set this resource to point to
+ any other widget in the radio group.
+
+++ This is the data returned from a call to XtToggleGetCurrent, by default
+ this is set to the name of toggle widget.
+
+*/
+
+/*
+ * These should be in StringDefs.h but aren't so we will define
+ * them here if they are needed
+ */
+#define XtCWidget "Widget"
+#define XtCState "State"
+#define XtCRadioGroup "RadioGroup"
+#define XtCRadioData "RadioData"
+
+#ifndef _XtStringDefs_h_
+#define XtRWidget "Widget"
+#endif
+
+#define XtNstate "state"
+#define XtNradioGroup "radioGroup"
+#define XtNradioData "radioData"
+
+extern WidgetClass toggleWidgetClass;
+
+typedef struct _ToggleClassRec *ToggleWidgetClass;
+typedef struct _ToggleRec *ToggleWidget;
+
+/*
+ * Public Functions
+ */
+
+_XFUNCPROTOBEGIN
+
+/*
+ * Function:
+ * XawToggleChangeRadioGroup
+ *
+ * Parameters:
+ * w - toggle widget to change lists
+ * radio_group - any widget in the new list
+ *
+ * Description:
+ * Allows a toggle widget to change radio lists.
+ */
+void XawToggleChangeRadioGroup
+(
+ Widget w,
+ Widget radio_group
+ );
+
+/*
+ * Function:
+ * XawToggleGetCurrent
+ *
+ * Parameters:
+ * radio_group - any toggle widget in the toggle list
+ *
+ * Description:
+ * Returns the RadioData associated with the toggle
+ * widget that is currently active in a toggle list.
+ * Returns:
+ * The XtNradioData associated with the toggle widget
+ */
+
+XtPointer XawToggleGetCurrent
+(
+ Widget radio_group
+ );
+
+/*
+ * Function:
+ * XawToggleSetCurrent
+ *
+ * Parameters:
+ * radio_group - any toggle widget in the toggle list
+ * radio_data - radio data of the toggle widget to set
+ *
+ * Description:
+ * Sets the Toggle widget associated with the radio_data specified.
+ */
+void XawToggleSetCurrent
+(
+ Widget radio_group,
+ XtPointer radio_data
+ );
+
+/*
+ * Function:
+ * XawToggleUnsetCurrent
+ *
+ * Parameters:
+ * radio_group - any toggle widget in the toggle list
+ *
+ * Description:
+ * Unsets all Toggles in the radio_group specified.
+ */
+void XawToggleUnsetCurrent
+(
+ Widget radio_group
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawToggle_h */
diff --git a/libXaw/include/X11/Xaw/ToggleP.h b/libXaw/include/X11/Xaw/ToggleP.h
index c1477379d..af2b5dcb7 100644
--- a/libXaw/include/X11/Xaw/ToggleP.h
+++ b/libXaw/include/X11/Xaw/ToggleP.h
@@ -1,95 +1,92 @@
-/* $Xorg: ToggleP.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/*
-
-Copyright 1989, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/ToggleP.h,v 1.7 2001/01/17 19:42:35 dawes Exp $ */
-
-/*
- * Author: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- *
- * Date: January 12, 1989
- *
- */
-
-#ifndef _XawToggleP_h
-#define _XawToggleP_h
-
-#include <X11/Xaw/Toggle.h>
-#include <X11/Xaw/CommandP.h>
-
-/*
- * Toggle Widget Private Data
- */
-#define streq(a, b) (strcmp((a), (b)) == 0)
-
-typedef struct _RadioGroup {
- struct _RadioGroup *prev, *next; /* Pointers to other elements in group */
- Widget widget; /* Widget corrosponding to this element */
-} RadioGroup;
-
-/* New fields for the Toggle widget class */
-typedef struct _ToggleClass {
- XtActionProc Set;
- XtActionProc Unset;
- XtPointer extension;
-} ToggleClassPart;
-
-/* class record declaration */
-typedef struct _ToggleClassRec {
- CoreClassPart core_class;
- SimpleClassPart simple_class;
- LabelClassPart label_class;
- CommandClassPart command_class;
- ToggleClassPart toggle_class;
-} ToggleClassRec;
-
-extern ToggleClassRec toggleClassRec;
-
-/* New fields for the Toggle widget */
-typedef struct {
- /* resources */
- Widget widget;
- XtPointer radio_data;
-
- /* private */
- RadioGroup *radio_group;
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} TogglePart;
-
-/* Full widget declaration */
-typedef struct _ToggleRec {
- CorePart core;
- SimplePart simple;
- LabelPart label;
- CommandPart command;
- TogglePart toggle;
-} ToggleRec;
-
-#endif /* _XawToggleP_h */
+/*
+
+Copyright 1989, 1998 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.
+
+*/
+
+/*
+ * Author: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ *
+ * Date: January 12, 1989
+ *
+ */
+
+#ifndef _XawToggleP_h
+#define _XawToggleP_h
+
+#include <X11/Xaw/Toggle.h>
+#include <X11/Xaw/CommandP.h>
+
+/*
+ * Toggle Widget Private Data
+ */
+#define streq(a, b) (strcmp((a), (b)) == 0)
+
+typedef struct _RadioGroup {
+ struct _RadioGroup *prev, *next; /* Pointers to other elements in group */
+ Widget widget; /* Widget corrosponding to this element */
+} RadioGroup;
+
+/* New fields for the Toggle widget class */
+typedef struct _ToggleClass {
+ XtActionProc Set;
+ XtActionProc Unset;
+ XtPointer extension;
+} ToggleClassPart;
+
+/* class record declaration */
+typedef struct _ToggleClassRec {
+ CoreClassPart core_class;
+ SimpleClassPart simple_class;
+ LabelClassPart label_class;
+ CommandClassPart command_class;
+ ToggleClassPart toggle_class;
+} ToggleClassRec;
+
+extern ToggleClassRec toggleClassRec;
+
+/* New fields for the Toggle widget */
+typedef struct {
+ /* resources */
+ Widget widget;
+ XtPointer radio_data;
+
+ /* private */
+ RadioGroup *radio_group;
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} TogglePart;
+
+/* Full widget declaration */
+typedef struct _ToggleRec {
+ CorePart core;
+ SimplePart simple;
+ LabelPart label;
+ CommandPart command;
+ TogglePart toggle;
+} ToggleRec;
+
+#endif /* _XawToggleP_h */
diff --git a/libXaw/include/X11/Xaw/Tree.h b/libXaw/include/X11/Xaw/Tree.h
index ae0990aa5..63d0931ce 100644
--- a/libXaw/include/X11/Xaw/Tree.h
+++ b/libXaw/include/X11/Xaw/Tree.h
@@ -1,138 +1,135 @@
-/*
- * $Xorg: Tree.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $
- *
-
-Copyright 1990, 1994, 1998 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.
-
- * Copyright 1989 Prentice Hall
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose and without fee is hereby granted, provided that the above
- * copyright notice appear in all copies and that both the copyright notice
- * and this permission notice appear in supporting documentation.
- *
- * Prentice Hall and the authors disclaim all warranties with regard
- * to this software, including all implied warranties of merchantability and
- * fitness. In no event shall Prentice Hall or the authors be liable
- * for any special, indirect or cosequential 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.
- *
- * Authors: Jim Fulton, MIT X Consortium,
- * based on a version by Douglas Young, Prentice Hall
- *
- * This widget is based on the Tree widget described on pages 397-419 of
- * Douglas Young's book "The X Window System, Programming and Applications
- * with Xt OSF/Motif Edition." The layout code has been rewritten to use
- * additional blank space to make the structure of the graph easier to see
- * as well as to support vertical trees.
- */
-/* $XFree86: xc/lib/Xaw/Tree.h,v 1.6 2001/01/17 19:42:35 dawes Exp $ */
-
-
-#ifndef _XawTree_h
-#define _XawTree_h
-
-#include <X11/Xmu/Converters.h>
-
-/******************************************************************************
- *
- * Tree Widget (subclass of ConstraintClass)
- *
- ******************************************************************************
- *
- * Parameters:
- *
- * Name Class Type Default
- * ---- ----- ---- -------
- *
- * autoReconfigure AutoReconfigure Boolean FALSE
- * background Background Pixel XtDefaultBackground
- * foreground Foreground Pixel XtDefaultForeground
- * gravity Gravity XtGravity West
- * hSpace HSpace Dimension 20
- * lineWidth LineWidth Dimension 0
- * vSpace VSpace Dimension 6
- *
- *
- * Constraint Resources attached to children:
- *
- * treeGC TreeGC GC NULL
- * treeParent TreeParent Widget NULL
- *
- *
- *****************************************************************************/
-
- /* new instance field names */
-#ifndef _XtStringDefs_h_
-#define XtNhSpace "hSpace"
-#define XtNvSpace "vSpace"
-#define XtCHSpace "HSpace"
-#define XtCVSpace "VSpace"
-#endif
-
-#define XtNautoReconfigure "autoReconfigure"
-#define XtNlineWidth "lineWidth"
-#define XtNtreeGC "treeGC"
-#define XtNtreeParent "treeParent"
-#define XtNgravity "gravity"
-
- /* new class field names */
-#define XtCAutoReconfigure "AutoReconfigure"
-#define XtCLineWidth "LineWidth"
-#define XtCTreeGC "TreeGC"
-#define XtCTreeParent "TreeParent"
-#define XtCGravity "Gravity"
-
-#define XtRGC "GC"
-
-#ifndef OLDXAW
-#ifndef XawNdisplayList
-#define XawNdisplayList "displayList"
-#endif
-
-#ifndef XawCDisplayList
-#define XawCDisplayList "DisplayList"
-#endif
-
-#ifndef XawRDisplayList
-#define XawRDisplayList "XawDisplayList"
-#endif
-#endif
- /* external declarations */
-extern WidgetClass treeWidgetClass;
-
-typedef struct _TreeClassRec *TreeWidgetClass;
-typedef struct _TreeRec *TreeWidget;
-
-_XFUNCPROTOBEGIN
-
-void XawTreeForceLayout
-(
- Widget tree
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawTree_h */
+/*
+ *
+
+Copyright 1990, 1994, 1998 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.
+
+ * Copyright 1989 Prentice Hall
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation.
+ *
+ * Prentice Hall and the authors disclaim all warranties with regard
+ * to this software, including all implied warranties of merchantability and
+ * fitness. In no event shall Prentice Hall or the authors be liable
+ * for any special, indirect or cosequential 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.
+ *
+ * Authors: Jim Fulton, MIT X Consortium,
+ * based on a version by Douglas Young, Prentice Hall
+ *
+ * This widget is based on the Tree widget described on pages 397-419 of
+ * Douglas Young's book "The X Window System, Programming and Applications
+ * with Xt OSF/Motif Edition." The layout code has been rewritten to use
+ * additional blank space to make the structure of the graph easier to see
+ * as well as to support vertical trees.
+ */
+
+#ifndef _XawTree_h
+#define _XawTree_h
+
+#include <X11/Xmu/Converters.h>
+
+/******************************************************************************
+ *
+ * Tree Widget (subclass of ConstraintClass)
+ *
+ ******************************************************************************
+ *
+ * Parameters:
+ *
+ * Name Class Type Default
+ * ---- ----- ---- -------
+ *
+ * autoReconfigure AutoReconfigure Boolean FALSE
+ * background Background Pixel XtDefaultBackground
+ * foreground Foreground Pixel XtDefaultForeground
+ * gravity Gravity XtGravity West
+ * hSpace HSpace Dimension 20
+ * lineWidth LineWidth Dimension 0
+ * vSpace VSpace Dimension 6
+ *
+ *
+ * Constraint Resources attached to children:
+ *
+ * treeGC TreeGC GC NULL
+ * treeParent TreeParent Widget NULL
+ *
+ *
+ *****************************************************************************/
+
+ /* new instance field names */
+#ifndef _XtStringDefs_h_
+#define XtNhSpace "hSpace"
+#define XtNvSpace "vSpace"
+#define XtCHSpace "HSpace"
+#define XtCVSpace "VSpace"
+#endif
+
+#define XtNautoReconfigure "autoReconfigure"
+#define XtNlineWidth "lineWidth"
+#define XtNtreeGC "treeGC"
+#define XtNtreeParent "treeParent"
+#define XtNgravity "gravity"
+
+ /* new class field names */
+#define XtCAutoReconfigure "AutoReconfigure"
+#define XtCLineWidth "LineWidth"
+#define XtCTreeGC "TreeGC"
+#define XtCTreeParent "TreeParent"
+#define XtCGravity "Gravity"
+
+#define XtRGC "GC"
+
+#ifndef OLDXAW
+#ifndef XawNdisplayList
+#define XawNdisplayList "displayList"
+#endif
+
+#ifndef XawCDisplayList
+#define XawCDisplayList "DisplayList"
+#endif
+
+#ifndef XawRDisplayList
+#define XawRDisplayList "XawDisplayList"
+#endif
+#endif
+ /* external declarations */
+extern WidgetClass treeWidgetClass;
+
+typedef struct _TreeClassRec *TreeWidgetClass;
+typedef struct _TreeRec *TreeWidget;
+
+_XFUNCPROTOBEGIN
+
+void XawTreeForceLayout
+(
+ Widget tree
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawTree_h */
diff --git a/libXaw/include/X11/Xaw/TreeP.h b/libXaw/include/X11/Xaw/TreeP.h
index 00e59c0a4..5d1c8d423 100644
--- a/libXaw/include/X11/Xaw/TreeP.h
+++ b/libXaw/include/X11/Xaw/TreeP.h
@@ -1,141 +1,137 @@
-/*
- * $Xorg: TreeP.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $
- *
-
-Copyright 1990, 1998 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.
-
- * Copyright 1989 Prentice Hall
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose and without fee is hereby granted, provided that the above
- * copyright notice appear in all copies and that both the copyright notice
- * and this permission notice appear in supporting documentation.
- *
- * Prentice Hall and the authors disclaim all warranties with regard
- * to this software, including all implied warranties of merchantability and
- * fitness. In no event shall Prentice Hall or the authors be liable
- * for any special, indirect or cosequential 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.
- *
- * Authors: Jim Fulton, MIT X Consortium,
- * based on a version by Douglas Young, Prentice Hall
- *
- * This widget is based on the Tree widget described on pages 397-419 of
- * Douglas Young's book "The X Window System, Programming and Applications
- * with Xt OSF/Motif Edition." The layout code has been rewritten to use
- * additional blank space to make the structure of the graph easier to see
- * as well as to support vertical trees.
- */
-/* $XFree86: xc/lib/Xaw/TreeP.h,v 1.6 2001/01/17 19:42:35 dawes Exp $ */
-
-
-#ifndef _XawTreeP_h
-#define _XawTreeP_h
-
-#include <X11/Xaw/Tree.h>
-
-typedef struct _TreeClassPart {
- XtPointer extension;
-} TreeClassPart;
-
-typedef struct _TreeClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ConstraintClassPart constraint_class;
- TreeClassPart tree_class;
-} TreeClassRec;
-
-extern TreeClassRec treeClassRec;
-
-typedef struct {
- /* fields available through resources */
- Dimension hpad; /* hSpace/HSpace */
- Dimension vpad; /* vSpace/VSpace */
- Dimension line_width; /* lineWidth/LineWidth */
- Pixel foreground; /* foreground/Foreground */
- XtGravity gravity; /* gravity/Gravity */
- Boolean auto_reconfigure; /* autoReconfigure/AutoReconfigure */
- /* private fields */
- GC gc; /* used to draw lines */
- Widget tree_root; /* hidden root off all children */
- Dimension *largest; /* list of largest per depth */
- int n_largest; /* number of elements in largest */
- Dimension maxwidth, maxheight; /* for shrink wrapping */
-#ifndef OLDXAW
- XawDisplayList *display_list;
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} TreePart;
-
-
-typedef struct _TreeRec {
- CorePart core;
- CompositePart composite;
- ConstraintPart constraint;
- TreePart tree;
-} TreeRec;
-
-
-/*
- * structure attached to all children
- */
-typedef struct _TreeConstraintsPart {
- /* resources */
- Widget parent; /* treeParent/TreeParent */
- GC gc; /* treeGC/TreeGC */
- /* private data */
- Widget *children;
- int n_children;
- int max_children;
- Dimension bbsubwidth, bbsubheight; /* bounding box of sub tree */
- Dimension bbwidth, bbheight; /* bounding box including node */
- Position x, y;
-#ifndef OLDXAW
- XtPointer pad[2]; /* leave some space for future optimizations, and
- * keep binary compatability
- */
-#endif
-} TreeConstraintsPart;
-
-typedef struct _TreeConstraintsRec {
- TreeConstraintsPart tree;
-} TreeConstraintsRec, *TreeConstraints;
-
-
-/*
- * useful macros
- */
-
-#define TREE_CONSTRAINT(w) \
- ((TreeConstraints)((w)->core.constraints))
-
-#define TREE_INITIAL_DEPTH 10 /* for allocating largest array */
-#define TREE_HORIZONTAL_DEFAULT_SPACING 20
-#define TREE_VERTICAL_DEFAULT_SPACING 6
-
-#endif /* _XawTreeP_h */
-
-
-
+/*
+
+Copyright 1990, 1998 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.
+
+ * Copyright 1989 Prentice Hall
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation.
+ *
+ * Prentice Hall and the authors disclaim all warranties with regard
+ * to this software, including all implied warranties of merchantability and
+ * fitness. In no event shall Prentice Hall or the authors be liable
+ * for any special, indirect or cosequential 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.
+ *
+ * Authors: Jim Fulton, MIT X Consortium,
+ * based on a version by Douglas Young, Prentice Hall
+ *
+ * This widget is based on the Tree widget described on pages 397-419 of
+ * Douglas Young's book "The X Window System, Programming and Applications
+ * with Xt OSF/Motif Edition." The layout code has been rewritten to use
+ * additional blank space to make the structure of the graph easier to see
+ * as well as to support vertical trees.
+ */
+
+#ifndef _XawTreeP_h
+#define _XawTreeP_h
+
+#include <X11/Xaw/Tree.h>
+
+typedef struct _TreeClassPart {
+ XtPointer extension;
+} TreeClassPart;
+
+typedef struct _TreeClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ConstraintClassPart constraint_class;
+ TreeClassPart tree_class;
+} TreeClassRec;
+
+extern TreeClassRec treeClassRec;
+
+typedef struct {
+ /* fields available through resources */
+ Dimension hpad; /* hSpace/HSpace */
+ Dimension vpad; /* vSpace/VSpace */
+ Dimension line_width; /* lineWidth/LineWidth */
+ Pixel foreground; /* foreground/Foreground */
+ XtGravity gravity; /* gravity/Gravity */
+ Boolean auto_reconfigure; /* autoReconfigure/AutoReconfigure */
+ /* private fields */
+ GC gc; /* used to draw lines */
+ Widget tree_root; /* hidden root off all children */
+ Dimension *largest; /* list of largest per depth */
+ int n_largest; /* number of elements in largest */
+ Dimension maxwidth, maxheight; /* for shrink wrapping */
+#ifndef OLDXAW
+ XawDisplayList *display_list;
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} TreePart;
+
+
+typedef struct _TreeRec {
+ CorePart core;
+ CompositePart composite;
+ ConstraintPart constraint;
+ TreePart tree;
+} TreeRec;
+
+
+/*
+ * structure attached to all children
+ */
+typedef struct _TreeConstraintsPart {
+ /* resources */
+ Widget parent; /* treeParent/TreeParent */
+ GC gc; /* treeGC/TreeGC */
+ /* private data */
+ Widget *children;
+ int n_children;
+ int max_children;
+ Dimension bbsubwidth, bbsubheight; /* bounding box of sub tree */
+ Dimension bbwidth, bbheight; /* bounding box including node */
+ Position x, y;
+#ifndef OLDXAW
+ XtPointer pad[2]; /* leave some space for future optimizations, and
+ * keep binary compatability
+ */
+#endif
+} TreeConstraintsPart;
+
+typedef struct _TreeConstraintsRec {
+ TreeConstraintsPart tree;
+} TreeConstraintsRec, *TreeConstraints;
+
+
+/*
+ * useful macros
+ */
+
+#define TREE_CONSTRAINT(w) \
+ ((TreeConstraints)((w)->core.constraints))
+
+#define TREE_INITIAL_DEPTH 10 /* for allocating largest array */
+#define TREE_HORIZONTAL_DEFAULT_SPACING 20
+#define TREE_VERTICAL_DEFAULT_SPACING 6
+
+#endif /* _XawTreeP_h */
+
+
+
diff --git a/libXaw/include/X11/Xaw/VendorEP.h b/libXaw/include/X11/Xaw/VendorEP.h
index dc85b3644..ba073bc15 100644
--- a/libXaw/include/X11/Xaw/VendorEP.h
+++ b/libXaw/include/X11/Xaw/VendorEP.h
@@ -1,84 +1,81 @@
-/* $Xorg: VendorEP.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. OMRON makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * OMRON 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 TORTUOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Author: Seiji Kuwari OMRON Corporation
- * kuwa@omron.co.jp
- * kuwa%omron.co.jp@uunet.uu.net
- */
-
-/*
-
-Copyright 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/VendorEP.h,v 1.5 2001/01/17 19:42:36 dawes Exp $ */
-
-#ifndef _VendorEP_h
-#define _VendorEP_h
-
-#include <X11/Xaw/XawImP.h>
-
-typedef struct {
- XtPointer extension;
-} XawVendorShellExtClassPart;
-
-typedef struct _VendorShellExtClassRec {
- ObjectClassPart object_class;
- XawVendorShellExtClassPart vendor_shell_ext_class;
-} XawVendorShellExtClassRec;
-
-typedef struct {
- Widget parent;
- XawImPart im;
- XawIcPart ic;
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} XawVendorShellExtPart;
-
-typedef struct XawVendorShellExtRec {
- ObjectPart object;
- XawVendorShellExtPart vendor_ext;
-} XawVendorShellExtRec, *XawVendorShellExtWidget;
-
-#endif /* _VendorEP_h */
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. OMRON makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * OMRON 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 TORTUOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * Author: Seiji Kuwari OMRON Corporation
+ * kuwa@omron.co.jp
+ * kuwa%omron.co.jp@uunet.uu.net
+ */
+
+/*
+
+Copyright 1994, 1998 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.
+
+*/
+
+#ifndef _VendorEP_h
+#define _VendorEP_h
+
+#include <X11/Xaw/XawImP.h>
+
+typedef struct {
+ XtPointer extension;
+} XawVendorShellExtClassPart;
+
+typedef struct _VendorShellExtClassRec {
+ ObjectClassPart object_class;
+ XawVendorShellExtClassPart vendor_shell_ext_class;
+} XawVendorShellExtClassRec;
+
+typedef struct {
+ Widget parent;
+ XawImPart im;
+ XawIcPart ic;
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} XawVendorShellExtPart;
+
+typedef struct XawVendorShellExtRec {
+ ObjectPart object;
+ XawVendorShellExtPart vendor_ext;
+} XawVendorShellExtRec, *XawVendorShellExtWidget;
+
+#endif /* _VendorEP_h */
diff --git a/libXaw/include/X11/Xaw/Viewport.h b/libXaw/include/X11/Xaw/Viewport.h
index a4b678c83..142b9c8f5 100644
--- a/libXaw/include/X11/Xaw/Viewport.h
+++ b/libXaw/include/X11/Xaw/Viewport.h
@@ -1,121 +1,118 @@
-/* $Xorg: Viewport.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/************************************************************
-
-Copyright 1987, 1994, 1998 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.
-
-
-Copyright 1987 by 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 name of Digital 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.
-
-********************************************************/
-/* $XFree86: xc/lib/Xaw/Viewport.h,v 1.6 2001/01/17 19:42:36 dawes Exp $ */
-
-#ifndef _XawViewport_h
-#define _XawViewport_h
-
-#include <X11/Xaw/Form.h>
-#include <X11/Xaw/Reports.h>
-
-/* Resources:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- allowHoriz Boolean Boolean False
- allowVert Boolean Boolean False
- background Background Pixel XtDefaultBackground
- border BorderColor Pixel XtDefaultForeground
- borderWidth BorderWidth Dimension 1
- destroyCallback Callback Pointer NULL
- forceBars Boolean Boolean False
- height Height Dimension 0
- mappedWhenManaged MappedWhenManaged Boolean True
- reportCallback ReportCallback Pointer NULL
- sensitive Sensitive Boolean True
- useBottom Boolean Boolean False
- useRight Boolean Boolean False
- width Width Dimension 0
- x Position Position 0
- y Position Position 0
-
-*/
-
-#ifndef _XtStringDefs_h_
-#define XtNforceBars "forceBars"
-#define XtNallowHoriz "allowHoriz"
-#define XtNallowVert "allowVert"
-#define XtNuseBottom "useBottom"
-#define XtNuseRight "useRight"
-#endif
-
-extern WidgetClass viewportWidgetClass;
-
-typedef struct _ViewportClassRec *ViewportWidgetClass;
-typedef struct _ViewportRec *ViewportWidget;
-
-_XFUNCPROTOBEGIN
-
-void XawViewportSetLocation
-(
- Widget gw,
-#if NeedWidePrototypes
- double xoff,
- double yoff
-#else
- float xoff,
- float yoff
-#endif
- );
-
-void XawViewportSetCoordinates
-(
- Widget gw,
-#if NeedWidePrototypes
- int x,
- int y
-#else
- Position x,
- Position y
-#endif
- );
-
-_XFUNCPROTOEND
-
-#endif /* _XawViewport_h */
+/************************************************************
+
+Copyright 1987, 1994, 1998 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.
+
+
+Copyright 1987 by 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 name of Digital 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.
+
+********************************************************/
+
+#ifndef _XawViewport_h
+#define _XawViewport_h
+
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Reports.h>
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ allowHoriz Boolean Boolean False
+ allowVert Boolean Boolean False
+ background Background Pixel XtDefaultBackground
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ destroyCallback Callback Pointer NULL
+ forceBars Boolean Boolean False
+ height Height Dimension 0
+ mappedWhenManaged MappedWhenManaged Boolean True
+ reportCallback ReportCallback Pointer NULL
+ sensitive Sensitive Boolean True
+ useBottom Boolean Boolean False
+ useRight Boolean Boolean False
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+#ifndef _XtStringDefs_h_
+#define XtNforceBars "forceBars"
+#define XtNallowHoriz "allowHoriz"
+#define XtNallowVert "allowVert"
+#define XtNuseBottom "useBottom"
+#define XtNuseRight "useRight"
+#endif
+
+extern WidgetClass viewportWidgetClass;
+
+typedef struct _ViewportClassRec *ViewportWidgetClass;
+typedef struct _ViewportRec *ViewportWidget;
+
+_XFUNCPROTOBEGIN
+
+void XawViewportSetLocation
+(
+ Widget gw,
+#if NeedWidePrototypes
+ double xoff,
+ double yoff
+#else
+ float xoff,
+ float yoff
+#endif
+ );
+
+void XawViewportSetCoordinates
+(
+ Widget gw,
+#if NeedWidePrototypes
+ int x,
+ int y
+#else
+ Position x,
+ Position y
+#endif
+ );
+
+_XFUNCPROTOEND
+
+#endif /* _XawViewport_h */
diff --git a/libXaw/include/X11/Xaw/ViewportP.h b/libXaw/include/X11/Xaw/ViewportP.h
index 9de6eaed8..1be7e3936 100644
--- a/libXaw/include/X11/Xaw/ViewportP.h
+++ b/libXaw/include/X11/Xaw/ViewportP.h
@@ -1,109 +1,107 @@
-/*
- * $Xorg: ViewportP.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $
- * Private declarations for ViewportWidgetClass
- */
-
-/************************************************************
-
-Copyright 1987, 1998 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.
-
-
-Copyright 1987 by 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 name of Digital 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.
-
-********************************************************/
-/* $XFree86: xc/lib/Xaw/ViewportP.h,v 1.7 2001/01/17 19:42:36 dawes Exp $ */
-
-#ifndef _ViewportP_h
-#define _ViewportP_h
-
-#include <X11/Xaw/Viewport.h>
-#include <X11/Xaw/FormP.h>
-
-typedef struct {
- XtPointer extension;
-} ViewportClassPart;
-
-typedef struct _ViewportClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ConstraintClassPart constraint_class;
- FormClassPart form_class;
- ViewportClassPart viewport_class;
-} ViewportClassRec;
-
-extern ViewportClassRec viewportClassRec;
-
-typedef struct _ViewportPart {
- /* resources */
- Boolean forcebars; /* Whether we should always display
- the selected scrollbars */
- Boolean allowhoriz; /* Whether we allow horizontal scrollbars */
- Boolean allowvert; /* Whether we allow vertical scrollbars */
- Boolean usebottom; /* True if horiz bars appear at bottom */
- Boolean useright; /* True if vert bars appear at right */
- XtCallbackList report_callbacks;/* when size/position changes */
-
- /* private */
- Widget clip, child; /* The clipping and (scrolled) child widgets */
- Widget horiz_bar, vert_bar; /* What scrollbars we currently have */
-#ifndef OLDXAW
- XtPointer pad[4]; /* for future use and keep binary compatability */
-#endif
-} ViewportPart;
-
-typedef struct _ViewportRec {
- CorePart core;
- CompositePart composite;
- ConstraintPart constraint;
- FormPart form;
- ViewportPart viewport;
-} ViewportRec;
-
-typedef struct {
- Bool reparented; /* True if child has been re-parented */
-} ViewportConstraintsPart;
-
-typedef struct _ViewportConstraintsRec {
- FormConstraintsPart form;
- ViewportConstraintsPart viewport;
-} ViewportConstraintsRec, *ViewportConstraints;
-
-#endif /* _ViewportP_h */
+/*
+ * Private declarations for ViewportWidgetClass
+ */
+
+/************************************************************
+
+Copyright 1987, 1998 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.
+
+
+Copyright 1987 by 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 name of Digital 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.
+
+********************************************************/
+
+#ifndef _ViewportP_h
+#define _ViewportP_h
+
+#include <X11/Xaw/Viewport.h>
+#include <X11/Xaw/FormP.h>
+
+typedef struct {
+ XtPointer extension;
+} ViewportClassPart;
+
+typedef struct _ViewportClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ConstraintClassPart constraint_class;
+ FormClassPart form_class;
+ ViewportClassPart viewport_class;
+} ViewportClassRec;
+
+extern ViewportClassRec viewportClassRec;
+
+typedef struct _ViewportPart {
+ /* resources */
+ Boolean forcebars; /* Whether we should always display
+ the selected scrollbars */
+ Boolean allowhoriz; /* Whether we allow horizontal scrollbars */
+ Boolean allowvert; /* Whether we allow vertical scrollbars */
+ Boolean usebottom; /* True if horiz bars appear at bottom */
+ Boolean useright; /* True if vert bars appear at right */
+ XtCallbackList report_callbacks;/* when size/position changes */
+
+ /* private */
+ Widget clip, child; /* The clipping and (scrolled) child widgets */
+ Widget horiz_bar, vert_bar; /* What scrollbars we currently have */
+#ifndef OLDXAW
+ XtPointer pad[4]; /* for future use and keep binary compatability */
+#endif
+} ViewportPart;
+
+typedef struct _ViewportRec {
+ CorePart core;
+ CompositePart composite;
+ ConstraintPart constraint;
+ FormPart form;
+ ViewportPart viewport;
+} ViewportRec;
+
+typedef struct {
+ Bool reparented; /* True if child has been re-parented */
+} ViewportConstraintsPart;
+
+typedef struct _ViewportConstraintsRec {
+ FormConstraintsPart form;
+ ViewportConstraintsPart viewport;
+} ViewportConstraintsRec, *ViewportConstraints;
+
+#endif /* _ViewportP_h */
diff --git a/libXaw/include/X11/Xaw/XawImP.h b/libXaw/include/X11/Xaw/XawImP.h
index e36f5050f..546b7b777 100644
--- a/libXaw/include/X11/Xaw/XawImP.h
+++ b/libXaw/include/X11/Xaw/XawImP.h
@@ -1,213 +1,210 @@
-/* $Xorg: XawImP.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. OMRON makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * OMRON 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 TORTUOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Author: Seiji Kuwari OMRON Corporation
- * kuwa@omron.co.jp
- * kuwa%omron.co.jp@uunet.uu.net
- */
-
-/*
-
-Copyright 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/XawImP.h,v 3.8 2001/01/17 19:42:36 dawes Exp $ */
-
-#ifndef _XawImP_h
-#define _XawImP_h
-
-#define XtNinputMethod "inputMethod"
-#define XtCInputMethod "InputMethod"
-#define XtNpreeditType "preeditType"
-#define XtCPreeditType "PreeditType"
-#define XtNopenIm "openIm"
-#define XtCOpenIm "OpenIm"
-#define XtNsharedIc "sharedIc"
-#define XtCSharedIc "SharedIc"
-
-#include <X11/Xaw/Text.h>
-
-#define CIICFocus (1 << 0)
-#define CIFontSet (1 << 1)
-#define CIFg (1 << 2)
-#define CIBg (1 << 3)
-#define CIBgPixmap (1 << 4)
-#define CICursorP (1 << 5)
-#define CILineS (1 << 6)
-
-typedef struct _XawImPart {
- XIM xim;
- XrmResourceList resources;
- Cardinal num_resources;
- Boolean open_im;
- Boolean initialized;
- Dimension area_height;
- String input_method;
- String preedit_type;
-} XawImPart;
-
-typedef struct _XawIcTablePart {
- Widget widget;
- XIC xic;
- XIMStyle input_style;
- unsigned long flg;
- unsigned long prev_flg;
- Boolean ic_focused;
- XFontSet font_set;
- Pixel foreground;
- Pixel background;
- Pixmap bg_pixmap;
- XawTextPosition cursor_position;
- unsigned long line_spacing;
- Boolean openic_error;
- struct _XawIcTablePart *next;
-} XawIcTablePart, *XawIcTableList;
-
-typedef struct _XawIcPart {
- XIMStyle input_style;
- Boolean shared_ic;
- XawIcTableList shared_ic_table;
- XawIcTableList current_ic_table;
- XawIcTableList ic_table;
-} XawIcPart;
-
-typedef struct _contextDataRec {
- Widget parent;
- Widget ve;
-} contextDataRec;
-
-typedef struct _contextErrDataRec {
- Widget widget;
- XIM xim;
-} contextErrDataRec;
-
-void _XawImResizeVendorShell
-(
- Widget w
- );
-
-Dimension _XawImGetShellHeight
-(
- Widget w
-);
-
-void _XawImRealize
-(
- Widget w
- );
-
-void _XawImInitialize
-(
- Widget w,
- Widget ext
- );
-
-void _XawImReconnect
-(
- Widget w
- );
-
-void _XawImRegister
-(
- Widget w
- );
-
-void _XawImUnregister
-(
- Widget w
- );
-
-void _XawImSetValues
-(
- Widget w,
- ArgList args,
- Cardinal num_args
- );
-
-void _XawImSetFocusValues
-(
- Widget w,
- ArgList args,
- Cardinal num_args
-);
-
-void _XawImUnsetFocus
-(
- Widget w
- );
-
-int _XawImWcLookupString
-(
- Widget w,
- XKeyPressedEvent *event,
- wchar_t *buffer_return,
- int bytes_buffer,
- KeySym *keysym_return
- );
-
-int _XawLookupString
-(
- Widget w,
- XKeyEvent *event,
- char *buffer_return,
- int buffer_size,
- KeySym *keysym_return
- );
-
-int _XawImGetImAreaHeight
-(
- Widget w
- );
-
-void _XawImCallVendorShellExtResize
-(
- Widget w
- );
-
-void _XawImDestroy
-(
- Widget w,
- Widget ext
- );
-
-#endif /* _XawImP_h */
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. OMRON makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * OMRON 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 TORTUOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * Author: Seiji Kuwari OMRON Corporation
+ * kuwa@omron.co.jp
+ * kuwa%omron.co.jp@uunet.uu.net
+ */
+
+/*
+
+Copyright 1994, 1998 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.
+
+*/
+
+#ifndef _XawImP_h
+#define _XawImP_h
+
+#define XtNinputMethod "inputMethod"
+#define XtCInputMethod "InputMethod"
+#define XtNpreeditType "preeditType"
+#define XtCPreeditType "PreeditType"
+#define XtNopenIm "openIm"
+#define XtCOpenIm "OpenIm"
+#define XtNsharedIc "sharedIc"
+#define XtCSharedIc "SharedIc"
+
+#include <X11/Xaw/Text.h>
+
+#define CIICFocus (1 << 0)
+#define CIFontSet (1 << 1)
+#define CIFg (1 << 2)
+#define CIBg (1 << 3)
+#define CIBgPixmap (1 << 4)
+#define CICursorP (1 << 5)
+#define CILineS (1 << 6)
+
+typedef struct _XawImPart {
+ XIM xim;
+ XrmResourceList resources;
+ Cardinal num_resources;
+ Boolean open_im;
+ Boolean initialized;
+ Dimension area_height;
+ String input_method;
+ String preedit_type;
+} XawImPart;
+
+typedef struct _XawIcTablePart {
+ Widget widget;
+ XIC xic;
+ XIMStyle input_style;
+ unsigned long flg;
+ unsigned long prev_flg;
+ Boolean ic_focused;
+ XFontSet font_set;
+ Pixel foreground;
+ Pixel background;
+ Pixmap bg_pixmap;
+ XawTextPosition cursor_position;
+ unsigned long line_spacing;
+ Boolean openic_error;
+ struct _XawIcTablePart *next;
+} XawIcTablePart, *XawIcTableList;
+
+typedef struct _XawIcPart {
+ XIMStyle input_style;
+ Boolean shared_ic;
+ XawIcTableList shared_ic_table;
+ XawIcTableList current_ic_table;
+ XawIcTableList ic_table;
+} XawIcPart;
+
+typedef struct _contextDataRec {
+ Widget parent;
+ Widget ve;
+} contextDataRec;
+
+typedef struct _contextErrDataRec {
+ Widget widget;
+ XIM xim;
+} contextErrDataRec;
+
+void _XawImResizeVendorShell
+(
+ Widget w
+ );
+
+Dimension _XawImGetShellHeight
+(
+ Widget w
+);
+
+void _XawImRealize
+(
+ Widget w
+ );
+
+void _XawImInitialize
+(
+ Widget w,
+ Widget ext
+ );
+
+void _XawImReconnect
+(
+ Widget w
+ );
+
+void _XawImRegister
+(
+ Widget w
+ );
+
+void _XawImUnregister
+(
+ Widget w
+ );
+
+void _XawImSetValues
+(
+ Widget w,
+ ArgList args,
+ Cardinal num_args
+ );
+
+void _XawImSetFocusValues
+(
+ Widget w,
+ ArgList args,
+ Cardinal num_args
+);
+
+void _XawImUnsetFocus
+(
+ Widget w
+ );
+
+int _XawImWcLookupString
+(
+ Widget w,
+ XKeyPressedEvent *event,
+ wchar_t *buffer_return,
+ int bytes_buffer,
+ KeySym *keysym_return
+ );
+
+int _XawLookupString
+(
+ Widget w,
+ XKeyEvent *event,
+ char *buffer_return,
+ int buffer_size,
+ KeySym *keysym_return
+ );
+
+int _XawImGetImAreaHeight
+(
+ Widget w
+ );
+
+void _XawImCallVendorShellExtResize
+(
+ Widget w
+ );
+
+void _XawImDestroy
+(
+ Widget w,
+ Widget ext
+ );
+
+#endif /* _XawImP_h */
diff --git a/libXaw/include/X11/Xaw/XawInit.h b/libXaw/include/X11/Xaw/XawInit.h
index 1953f616c..7d2cee138 100644
--- a/libXaw/include/X11/Xaw/XawInit.h
+++ b/libXaw/include/X11/Xaw/XawInit.h
@@ -1,64 +1,62 @@
-/* $Xorg: XawInit.h,v 1.5 2001/02/09 02:03:47 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 The Open Group
-Copyright 2003-2004 Roland Mainz <roland.mainz@nrubsig.org>
-
-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.
- */
-/* $XFree86: xc/lib/Xaw/XawInit.h,v 1.12 2001/01/17 19:42:36 dawes Exp $ */
-
-/* $XdotOrg: xc/lib/Xaw/XawInit.h,v 1.2 2004/04/23 18:43:38 eich Exp $ */
-#ifndef _XawInit_h
-#define _XawInit_h
-
-#define XawVendor XVENDORNAMESHORT
-
-#ifdef OLDXAW
-#define XawVersion 6700002L
-#else
-#define XawVersion 7000002L
-
-typedef struct _XawDL XawDisplayList;
-#endif /* OLDXAW */
-
-#include <X11/Xfuncproto.h>
-
-_XFUNCPROTOBEGIN
-
-void XawInitializeWidgetSet(void);
-#ifndef OLDXAW
-void XawInitializeDefaultConverters(void);
-#endif
-
-extern Widget XawOpenApplication(
- XtAppContext *app_context_return,
- Display *dpy,
- Screen *screen,
- String application_name,
- String application_class,
- WidgetClass widget_class,
- int *argc,
- String *argv
-);
-
-_XFUNCPROTOEND
-
-#endif /* _XawInit_h */
+/*
+ *
+Copyright 1989, 1994, 1998 The Open Group
+Copyright 2003-2004 Roland Mainz <roland.mainz@nrubsig.org>
+
+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.
+ */
+#ifndef _XawInit_h
+#define _XawInit_h
+
+#define XawVendor XVENDORNAMESHORT
+
+#ifdef OLDXAW
+#define XawVersion 6700002L
+#else
+#define XawVersion 7000002L
+
+typedef struct _XawDL XawDisplayList;
+#endif /* OLDXAW */
+
+#include <X11/Intrinsic.h>
+#include <X11/Xfuncproto.h>
+
+_XFUNCPROTOBEGIN
+
+void XawInitializeWidgetSet(void);
+#ifndef OLDXAW
+void XawInitializeDefaultConverters(void);
+#endif
+
+extern Widget XawOpenApplication(
+ XtAppContext *app_context_return,
+ Display *dpy,
+ Screen *screen,
+ String application_name,
+ String application_class,
+ WidgetClass widget_class,
+ int *argc,
+ String *argv
+);
+
+_XFUNCPROTOEND
+
+#endif /* _XawInit_h */
diff --git a/libXaw/install-sh b/libXaw/install-sh
deleted file mode 100644
index 6781b987b..000000000
--- a/libXaw/install-sh
+++ /dev/null
@@ -1,520 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2009-04-28.21; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 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 CONNEC-
-# TION 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 deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" "" $nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
- doit_exec=exec
-else
- doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
- test "$posix_glob" != "?" || {
- if (set -f) 2>/dev/null; then
- posix_glob=
- else
- posix_glob=:
- fi
- }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve the last data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -s $stripprog installed files.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *' '* | *'
-'* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -s) stripcmd=$stripprog;;
-
- -t) dst_arg=$2
- shift;;
-
- -T) no_target_directory=true;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- trap '(exit $?); exit' 1 2 13 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dst_arg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dst=$dstdir/`basename "$src"`
- dstdir_status=0
- else
- # Prefer dirname, but fall back on a substitute if dirname fails.
- dstdir=`
- (dirname "$dst") 2>/dev/null ||
- expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$dst" : 'X\(//\)[^/]' \| \
- X"$dst" : 'X\(//\)$' \| \
- X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
- echo X"$dst" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'
- `
-
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writeable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/d" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
- fi
- trap '' 0;;
- esac;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # The umask is ridiculous, or mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- -*) prefix='./';;
- *) prefix='';;
- esac
-
- eval "$initialize_posix_glob"
-
- oIFS=$IFS
- IFS=/
- $posix_glob set -f
- set fnord $dstdir
- shift
- $posix_glob set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test -z "$d" && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask=$mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
- eval "$initialize_posix_glob" &&
- $posix_glob set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- $posix_glob set +f &&
-
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/libXaw/ltmain.sh b/libXaw/ltmain.sh
deleted file mode 100644
index 27d498a08..000000000
--- a/libXaw/ltmain.sh
+++ /dev/null
@@ -1,6956 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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.
-
-basename="s,^.*/,,g"
-
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
-
-# The name of this program:
-progname=`echo "$progpath" | $SED $basename`
-modename="$progname"
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.5.26
-TIMESTAMP=" (1.1220.2.492 2008/01/30 06:40:56)"
-
-# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
-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
- # 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
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell, and then maybe $echo will work.
- exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit $EXIT_SUCCESS
-fi
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
- # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
- SP2NL='tr \040 \012'
- NL2SP='tr \015\012 \040\040'
- ;;
- *) # EBCDIC based system
- SP2NL='tr \100 \n'
- NL2SP='tr \r\n \100\100'
- ;;
-esac
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-lt_env=
-for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-do
- eval "if test \"\${$lt_var+set}\" = set; then
- save_$lt_var=\$$lt_var
- lt_env=\"$lt_var=\$$lt_var \$lt_env\"
- $lt_var=C
- export $lt_var
- fi"
-done
-
-if test -n "$lt_env"; then
- lt_env="env $lt_env"
-fi
-
-# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS=" $lt_nl"
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- $echo "$modename: not configured to build any kind of library" 1>&2
- $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit $EXIT_FAILURE
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-duplicate_deps=no
-preserve_args=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
-
-#####################################
-# Shell function definitions:
-# This seems to be the best place for them
-
-# func_mktempdir [string]
-# Make a temporary directory that won't clash with other running
-# libtool processes, and avoids race conditions if possible. If
-# given, STRING is the basename for that directory.
-func_mktempdir ()
-{
- my_template="${TMPDIR-/tmp}/${1-$progname}"
-
- if test "$run" = ":"; then
- # Return a directory name, but don't create it in dry-run mode
- my_tmpdir="${my_template}-$$"
- else
-
- # If mktemp works, use that first and foremost
- my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
-
- if test ! -d "$my_tmpdir"; then
- # Failing that, at least try and use $RANDOM to avoid a race
- my_tmpdir="${my_template}-${RANDOM-0}$$"
-
- save_mktempdir_umask=`umask`
- umask 0077
- $mkdir "$my_tmpdir"
- umask $save_mktempdir_umask
- fi
-
- # If we're not in dry-run mode, bomb out on failure
- test -d "$my_tmpdir" || {
- $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
- exit $EXIT_FAILURE
- }
- fi
-
- $echo "X$my_tmpdir" | $Xsed
-}
-
-
-# func_win32_libid arg
-# return the library type of file 'arg'
-#
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-func_win32_libid ()
-{
- win32_libid_type="unknown"
- win32_fileres=`file -L $1 2>/dev/null`
- case $win32_fileres in
- *ar\ archive\ import\ library*) # definitely import
- win32_libid_type="x86 archive import"
- ;;
- *ar\ archive*) # could be an import, or static
- if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
- $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
- win32_nmres=`eval $NM -f posix -A $1 | \
- $SED -n -e '1,100{
- / I /{
- s,.*,import,
- p
- q
- }
- }'`
- case $win32_nmres in
- import*) win32_libid_type="x86 archive import";;
- *) win32_libid_type="x86 archive static";;
- esac
- fi
- ;;
- *DLL*)
- win32_libid_type="x86 DLL"
- ;;
- *executable*) # but shell scripts are "executable" too...
- case $win32_fileres in
- *MS\ Windows\ PE\ Intel*)
- win32_libid_type="x86 DLL"
- ;;
- esac
- ;;
- esac
- $echo $win32_libid_type
-}
-
-
-# func_infer_tag arg
-# Infer tagged configuration to use if any are available and
-# if one wasn't chosen via the "--tag" command line option.
-# Only attempt this if the compiler in the base compile
-# command doesn't match the default compiler.
-# arg is usually of the form 'gcc ...'
-func_infer_tag ()
-{
- if test -n "$available_tags" && test -z "$tagname"; then
- CC_quoted=
- for arg in $CC; do
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- CC_quoted="$CC_quoted $arg"
- done
- case $@ in
- # Blanks in the command may have been stripped by the calling shell,
- # but not from the CC environment variable when configure was run.
- " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
- # Blanks at the start of $base_compile will cause this to fail
- # if we don't check for them as well.
- *)
- for z in $available_tags; do
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
- # Evaluate the configuration.
- eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
- CC_quoted=
- for arg in $CC; do
- # Double-quote args containing other shell metacharacters.
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- CC_quoted="$CC_quoted $arg"
- done
- case "$@ " in
- " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
- # The compiler in the base compile command matches
- # the one in the tagged configuration.
- # Assume this is the tagged configuration we want.
- tagname=$z
- break
- ;;
- esac
- fi
- done
- # If $tagname still isn't set, then no tagged configuration
- # was found and let the user know that the "--tag" command
- # line option must be used.
- if test -z "$tagname"; then
- $echo "$modename: unable to infer tagged configuration"
- $echo "$modename: specify a tag with \`--tag'" 1>&2
- exit $EXIT_FAILURE
-# else
-# $echo "$modename: using $tagname tagged configuration"
- fi
- ;;
- esac
- fi
-}
-
-
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
-{
- f_ex_an_ar_dir="$1"; shift
- f_ex_an_ar_oldlib="$1"
-
- $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
- $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
- if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
- exit $EXIT_FAILURE
- fi
-}
-
-# func_extract_archives gentop oldlib ...
-func_extract_archives ()
-{
- my_gentop="$1"; shift
- my_oldlibs=${1+"$@"}
- my_oldobjs=""
- my_xlib=""
- my_xabs=""
- my_xdir=""
- my_status=""
-
- $show "${rm}r $my_gentop"
- $run ${rm}r "$my_gentop"
- $show "$mkdir $my_gentop"
- $run $mkdir "$my_gentop"
- my_status=$?
- if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
- exit $my_status
- fi
-
- for my_xlib in $my_oldlibs; do
- # Extract the objects.
- case $my_xlib in
- [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
- *) my_xabs=`pwd`"/$my_xlib" ;;
- esac
- my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
- my_xlib_u=$my_xlib
- while :; do
- case " $extracted_archives " in
- *" $my_xlib_u "*)
- extracted_serial=`expr $extracted_serial + 1`
- my_xlib_u=lt$extracted_serial-$my_xlib ;;
- *) break ;;
- esac
- done
- extracted_archives="$extracted_archives $my_xlib_u"
- my_xdir="$my_gentop/$my_xlib_u"
-
- $show "${rm}r $my_xdir"
- $run ${rm}r "$my_xdir"
- $show "$mkdir $my_xdir"
- $run $mkdir "$my_xdir"
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
- exit $exit_status
- fi
- case $host in
- *-darwin*)
- $show "Extracting $my_xabs"
- # Do not bother doing anything if just a dry run
- if test -z "$run"; then
- darwin_orig_dir=`pwd`
- cd $my_xdir || exit $?
- darwin_archive=$my_xabs
- darwin_curdir=`pwd`
- darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
- darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
- if test -n "$darwin_arches"; then
- darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
- darwin_arch=
- $show "$darwin_base_archive has multiple architectures $darwin_arches"
- for darwin_arch in $darwin_arches ; do
- mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
- cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- func_extract_an_archive "`pwd`" "${darwin_base_archive}"
- cd "$darwin_curdir"
- $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
- done # $darwin_arches
- ## Okay now we have a bunch of thin objects, gotta fatten them up :)
- darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
- darwin_file=
- darwin_files=
- for darwin_file in $darwin_filelist; do
- darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
- lipo -create -output "$darwin_file" $darwin_files
- done # $darwin_filelist
- ${rm}r unfat-$$
- cd "$darwin_orig_dir"
- else
- cd "$darwin_orig_dir"
- func_extract_an_archive "$my_xdir" "$my_xabs"
- fi # $darwin_arches
- fi # $run
- ;;
- *)
- func_extract_an_archive "$my_xdir" "$my_xabs"
- ;;
- esac
- my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
- done
- func_extract_archives_result="$my_oldobjs"
-}
-# End of Shell function definitions
-#####################################
-
-# Darwin sucks
-eval std_shrext=\"$shrext_cmds\"
-
-disable_libs=no
-
-# Parse our command line options once, thoroughly.
-while test "$#" -gt 0
-do
- arg="$1"
- shift
-
- case $arg in
- -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- execute_dlfiles)
- execute_dlfiles="$execute_dlfiles $arg"
- ;;
- tag)
- tagname="$arg"
- preserve_args="${preserve_args}=$arg"
-
- # Check whether tagname contains only valid characters
- case $tagname in
- *[!-_A-Za-z0-9,/]*)
- $echo "$progname: invalid tag name: $tagname" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- case $tagname in
- CC)
- # Don't test for the "default" C tag, as we know, it's there, but
- # not specially marked.
- ;;
- *)
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
- taglist="$taglist $tagname"
- # Evaluate the configuration.
- eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
- else
- $echo "$progname: ignoring unknown tag $tagname" 1>&2
- fi
- ;;
- esac
- ;;
- *)
- eval "$prev=\$arg"
- ;;
- esac
-
- prev=
- prevopt=
- continue
- fi
-
- # Have we seen a non-optional argument yet?
- case $arg in
- --help)
- show_help=yes
- ;;
-
- --version)
- echo "\
-$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- exit $?
- ;;
-
- --config)
- ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
- # Now print the configurations for the tags.
- for tagname in $taglist; do
- ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
- done
- exit $?
- ;;
-
- --debug)
- $echo "$progname: enabling shell trace mode"
- set -x
- preserve_args="$preserve_args $arg"
- ;;
-
- --dry-run | -n)
- run=:
- ;;
-
- --features)
- $echo "host: $host"
- if test "$build_libtool_libs" = yes; then
- $echo "enable shared libraries"
- else
- $echo "disable shared libraries"
- fi
- if test "$build_old_libs" = yes; then
- $echo "enable static libraries"
- else
- $echo "disable static libraries"
- fi
- exit $?
- ;;
-
- --finish) mode="finish" ;;
-
- --mode) prevopt="--mode" prev=mode ;;
- --mode=*) mode="$optarg" ;;
-
- --preserve-dup-deps) duplicate_deps="yes" ;;
-
- --quiet | --silent)
- show=:
- preserve_args="$preserve_args $arg"
- ;;
-
- --tag)
- prevopt="--tag"
- prev=tag
- preserve_args="$preserve_args --tag"
- ;;
- --tag=*)
- set tag "$optarg" ${1+"$@"}
- shift
- prev=tag
- preserve_args="$preserve_args --tag"
- ;;
-
- -dlopen)
- prevopt="-dlopen"
- prev=execute_dlfiles
- ;;
-
- -*)
- $echo "$modename: unrecognized option \`$arg'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
-
- *)
- nonopt="$arg"
- break
- ;;
- esac
-done
-
-if test -n "$prevopt"; then
- $echo "$modename: option \`$prevopt' requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
-fi
-
-case $disable_libs in
-no)
- ;;
-shared)
- build_libtool_libs=no
- build_old_libs=yes
- ;;
-static)
- build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
- ;;
-esac
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end. This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-if test -z "$show_help"; then
-
- # Infer the operation mode.
- if test -z "$mode"; then
- $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
- $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
- case $nonopt in
- *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
- mode=link
- for arg
- do
- case $arg in
- -c)
- mode=compile
- break
- ;;
- esac
- done
- ;;
- *db | *dbx | *strace | *truss)
- mode=execute
- ;;
- *install*|cp|mv)
- mode=install
- ;;
- *rm)
- mode=uninstall
- ;;
- *)
- # If we have no mode, but dlfiles were specified, then do execute mode.
- test -n "$execute_dlfiles" && mode=execute
-
- # Just use the default operation mode.
- if test -z "$mode"; then
- if test -n "$nonopt"; then
- $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- else
- $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- fi
- fi
- ;;
- esac
- fi
-
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$execute_dlfiles" && test "$mode" != execute; then
- $echo "$modename: unrecognized option \`-dlopen'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Change the help message to a mode-specific one.
- generic_help="$help"
- help="Try \`$modename --help --mode=$mode' for more information."
-
- # These modes are in order of execution frequency so that they run quickly.
- case $mode in
- # libtool compile mode
- compile)
- modename="$modename: compile"
- # Get the compilation command and the source file.
- base_compile=
- srcfile="$nonopt" # always keep a non-empty value in "srcfile"
- suppress_opt=yes
- suppress_output=
- arg_mode=normal
- libobj=
- later=
-
- for arg
- do
- case $arg_mode in
- arg )
- # do not "continue". Instead, add this to base_compile
- lastarg="$arg"
- arg_mode=normal
- ;;
-
- target )
- libobj="$arg"
- arg_mode=normal
- continue
- ;;
-
- normal )
- # Accept any command-line options.
- case $arg in
- -o)
- if test -n "$libobj" ; then
- $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- exit $EXIT_FAILURE
- fi
- arg_mode=target
- continue
- ;;
-
- -static | -prefer-pic | -prefer-non-pic)
- later="$later $arg"
- continue
- ;;
-
- -no-suppress)
- suppress_opt=no
- continue
- ;;
-
- -Xcompiler)
- arg_mode=arg # the next one goes into the "base_compile" arg list
- continue # The current "srcfile" will either be retained or
- ;; # replaced later. I would guess that would be a bug.
-
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
- lastarg=
- save_ifs="$IFS"; IFS=','
- for arg in $args; do
- IFS="$save_ifs"
-
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- lastarg="$lastarg $arg"
- done
- IFS="$save_ifs"
- lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-
- # Add the arguments to base_compile.
- base_compile="$base_compile $lastarg"
- continue
- ;;
-
- * )
- # Accept the current argument as the source file.
- # The previous "srcfile" becomes the current argument.
- #
- lastarg="$srcfile"
- srcfile="$arg"
- ;;
- esac # case $arg
- ;;
- esac # case $arg_mode
-
- # Aesthetically quote the previous argument.
- lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
- case $lastarg in
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, and some SunOS ksh mistreat backslash-escaping
- # in scan sets (worked around with variable expansion),
- # and furthermore cannot handle '|' '&' '(' ')' in scan sets
- # at all, so we specify them separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- lastarg="\"$lastarg\""
- ;;
- esac
-
- base_compile="$base_compile $lastarg"
- done # for arg
-
- case $arg_mode in
- arg)
- $echo "$modename: you must specify an argument for -Xcompile"
- exit $EXIT_FAILURE
- ;;
- target)
- $echo "$modename: you must specify a target with \`-o'" 1>&2
- exit $EXIT_FAILURE
- ;;
- *)
- # Get the name of the library object.
- [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
- ;;
- esac
-
- # Recognize several different file suffixes.
- # If the user specifies -o file.o, it is replaced with file.lo
- xform='[cCFSifmso]'
- case $libobj in
- *.ada) xform=ada ;;
- *.adb) xform=adb ;;
- *.ads) xform=ads ;;
- *.asm) xform=asm ;;
- *.c++) xform=c++ ;;
- *.cc) xform=cc ;;
- *.ii) xform=ii ;;
- *.class) xform=class ;;
- *.cpp) xform=cpp ;;
- *.cxx) xform=cxx ;;
- *.[fF][09]?) xform=[fF][09]. ;;
- *.for) xform=for ;;
- *.java) xform=java ;;
- *.obj) xform=obj ;;
- *.sx) xform=sx ;;
- esac
-
- libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
- case $libobj in
- *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
- *)
- $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- func_infer_tag $base_compile
-
- for arg in $later; do
- case $arg in
- -static)
- build_old_libs=yes
- continue
- ;;
-
- -prefer-pic)
- pic_mode=yes
- continue
- ;;
-
- -prefer-non-pic)
- pic_mode=no
- continue
- ;;
- esac
- done
-
- qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
- case $qlibobj in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qlibobj="\"$qlibobj\"" ;;
- esac
- test "X$libobj" != "X$qlibobj" \
- && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \
- && $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
- objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir=
- else
- xdir=$xdir/
- fi
- lobj=${xdir}$objdir/$objname
-
- if test -z "$base_compile"; then
- $echo "$modename: you must specify a compilation command" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Delete any leftover library objects.
- if test "$build_old_libs" = yes; then
- removelist="$obj $lobj $libobj ${libobj}T"
- else
- removelist="$lobj $libobj ${libobj}T"
- fi
-
- $run $rm $removelist
- trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-
- # On Cygwin there's no "real" PIC flag so we must build both object types
- case $host_os in
- cygwin* | mingw* | pw32* | os2*)
- pic_mode=default
- ;;
- esac
- if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
- # non-PIC code in shared libraries is not supported
- pic_mode=default
- fi
-
- # Calculate the filename of the output object if compiler does
- # not support -o with -c
- if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
- lockfile="$output_obj.lock"
- removelist="$removelist $output_obj $lockfile"
- trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
- else
- output_obj=
- need_locks=no
- lockfile=
- fi
-
- # Lock this critical section if it is needed
- # We use this script file to make the link, it avoids creating a new file
- if test "$need_locks" = yes; then
- until $run ln "$progpath" "$lockfile" 2>/dev/null; do
- $show "Waiting for $lockfile to be removed"
- sleep 2
- done
- elif test "$need_locks" = warn; then
- if test -f "$lockfile"; then
- $echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
- $echo "$srcfile" > "$lockfile"
- fi
-
- if test -n "$fix_srcfile_path"; then
- eval srcfile=\"$fix_srcfile_path\"
- fi
- qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
- case $qsrcfile in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qsrcfile="\"$qsrcfile\"" ;;
- esac
-
- $run $rm "$libobj" "${libobj}T"
-
- # Create a libtool object file (analogous to a ".la" file),
- # but don't create it if we're doing a dry run.
- test -z "$run" && cat > ${libobj}T <<EOF
-# $libobj - a libtool object file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-EOF
-
- # Only build a PIC object if we are building libtool libraries.
- if test "$build_libtool_libs" = yes; then
- # Without this assignment, base_compile gets emptied.
- fbsd_hideous_sh_bug=$base_compile
-
- if test "$pic_mode" != no; then
- command="$base_compile $qsrcfile $pic_flag"
- else
- # Don't build PIC code
- command="$base_compile $qsrcfile"
- fi
-
- if test ! -d "${xdir}$objdir"; then
- $show "$mkdir ${xdir}$objdir"
- $run $mkdir ${xdir}$objdir
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
- exit $exit_status
- fi
- fi
-
- if test -z "$output_obj"; then
- # Place PIC objects in $objdir
- command="$command -o $lobj"
- fi
-
- $run $rm "$lobj" "$output_obj"
-
- $show "$command"
- if $run eval $lt_env "$command"; then :
- else
- test -n "$output_obj" && $run $rm $removelist
- exit $EXIT_FAILURE
- fi
-
- if test "$need_locks" = warn &&
- test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
-
- # Just move the object if needed, then go on to compile the next one
- if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
- $show "$mv $output_obj $lobj"
- if $run $mv $output_obj $lobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Append the name of the PIC object to the libtool object file.
- test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object='$objdir/$objname'
-
-EOF
-
- # Allow error messages only from the first compilation.
- if test "$suppress_opt" = yes; then
- suppress_output=' >/dev/null 2>&1'
- fi
- else
- # No PIC object so indicate it doesn't exist in the libtool
- # object file.
- test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object=none
-
-EOF
- fi
-
- # Only build a position-dependent object if we build old libraries.
- if test "$build_old_libs" = yes; then
- if test "$pic_mode" != yes; then
- # Don't build PIC code
- command="$base_compile $qsrcfile"
- else
- command="$base_compile $qsrcfile $pic_flag"
- fi
- if test "$compiler_c_o" = yes; then
- command="$command -o $obj"
- fi
-
- # Suppress compiler output if we already did a PIC compilation.
- command="$command$suppress_output"
- $run $rm "$obj" "$output_obj"
- $show "$command"
- if $run eval $lt_env "$command"; then :
- else
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
-
- if test "$need_locks" = warn &&
- test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
-
- # Just move the object if needed
- if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
- $show "$mv $output_obj $obj"
- if $run $mv $output_obj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Append the name of the non-PIC object the libtool object file.
- # Only append if the libtool object file exists.
- test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object='$objname'
-
-EOF
- else
- # Append the name of the non-PIC object the libtool object file.
- # Only append if the libtool object file exists.
- test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object=none
-
-EOF
- fi
-
- $run $mv "${libobj}T" "${libobj}"
-
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- $run $rm "$lockfile"
- fi
-
- exit $EXIT_SUCCESS
- ;;
-
- # libtool link mode
- link | relink)
- modename="$modename: link"
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- # It is impossible to link a dll without this setting, and
- # we shouldn't force the makefile maintainer to figure out
- # which system we are compiling for in order to pass an extra
- # flag for every libtool invocation.
- # allow_undefined=no
-
- # FIXME: Unfortunately, there are problems with the above when trying
- # to make a dll which has undefined symbols, in which case not
- # even a static library is built. For now, we need to specify
- # -no-undefined on the libtool link line when we can be certain
- # that all symbols are satisfied, otherwise we get a static library.
- allow_undefined=yes
- ;;
- *)
- allow_undefined=yes
- ;;
- esac
- libtool_args="$nonopt"
- base_compile="$nonopt $@"
- compile_command="$nonopt"
- finalize_command="$nonopt"
-
- compile_rpath=
- finalize_rpath=
- compile_shlibpath=
- finalize_shlibpath=
- convenience=
- old_convenience=
- deplibs=
- old_deplibs=
- compiler_flags=
- linker_flags=
- dllsearchpath=
- lib_search_path=`pwd`
- inst_prefix_dir=
-
- avoid_version=no
- dlfiles=
- dlprefiles=
- dlself=no
- export_dynamic=no
- export_symbols=
- export_symbols_regex=
- generated=
- libobjs=
- ltlibs=
- module=no
- no_install=no
- objs=
- non_pic_objects=
- notinst_path= # paths that contain not-installed libtool libraries
- precious_files_regex=
- prefer_static_libs=no
- preload=no
- prev=
- prevarg=
- release=
- rpath=
- xrpath=
- perm_rpath=
- temp_rpath=
- thread_safe=no
- vinfo=
- vinfo_number=no
- single_module="${wl}-single_module"
-
- func_infer_tag $base_compile
-
- # We need to know -static, to get the right output filenames.
- for arg
- do
- case $arg in
- -all-static | -static | -static-libtool-libs)
- case $arg in
- -all-static)
- if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
- fi
- if test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=yes
- ;;
- -static)
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=built
- ;;
- -static-libtool-libs)
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=yes
- ;;
- esac
- build_libtool_libs=no
- build_old_libs=yes
- break
- ;;
- esac
- done
-
- # See if our shared archives depend on static archives.
- test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
- # Go through the arguments, transforming them on the way.
- while test "$#" -gt 0; do
- arg="$1"
- shift
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
- ;;
- *) qarg=$arg ;;
- esac
- libtool_args="$libtool_args $qarg"
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- output)
- compile_command="$compile_command @OUTPUT@"
- finalize_command="$finalize_command @OUTPUT@"
- ;;
- esac
-
- case $prev in
- dlfiles|dlprefiles)
- if test "$preload" = no; then
- # Add the symbol object into the linking commands.
- compile_command="$compile_command @SYMFILE@"
- finalize_command="$finalize_command @SYMFILE@"
- preload=yes
- fi
- case $arg in
- *.la | *.lo) ;; # We handle these cases below.
- force)
- if test "$dlself" = no; then
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- self)
- if test "$prev" = dlprefiles; then
- dlself=yes
- elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
- dlself=yes
- else
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- *)
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- else
- dlprefiles="$dlprefiles $arg"
- fi
- prev=
- continue
- ;;
- esac
- ;;
- expsyms)
- export_symbols="$arg"
- if test ! -f "$arg"; then
- $echo "$modename: symbol file \`$arg' does not exist"
- exit $EXIT_FAILURE
- fi
- prev=
- continue
- ;;
- expsyms_regex)
- export_symbols_regex="$arg"
- prev=
- continue
- ;;
- inst_prefix)
- inst_prefix_dir="$arg"
- prev=
- continue
- ;;
- precious_regex)
- precious_files_regex="$arg"
- prev=
- continue
- ;;
- release)
- release="-$arg"
- prev=
- continue
- ;;
- objectlist)
- if test -f "$arg"; then
- save_arg=$arg
- moreargs=
- for fil in `cat $save_arg`
- do
-# moreargs="$moreargs $fil"
- arg=$fil
- # A libtool-controlled object.
-
- # Check to see that this really is a libtool object.
- if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- # If there is no directory component, then add one.
- case $arg in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- if test -z "$pic_object" || \
- test -z "$non_pic_object" ||
- test "$pic_object" = none && \
- test "$non_pic_object" = none; then
- $echo "$modename: cannot find name of object for \`$arg'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- if test "$pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- pic_object="$xdir$pic_object"
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
- prev=
- fi
-
- # A PIC object.
- libobjs="$libobjs $pic_object"
- arg="$pic_object"
- fi
-
- # Non-PIC object.
- if test "$non_pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- non_pic_object="$xdir$non_pic_object"
-
- # A standard non-PIC object
- non_pic_objects="$non_pic_objects $non_pic_object"
- if test -z "$pic_object" || test "$pic_object" = none ; then
- arg="$non_pic_object"
- fi
- else
- # If the PIC object exists, use it instead.
- # $xdir was prepended to $pic_object above.
- non_pic_object="$pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
- fi
- else
- # Only an error if not doing a dry-run.
- if test -z "$run"; then
- $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
- exit $EXIT_FAILURE
- else
- # Dry-run case.
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
- non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
- libobjs="$libobjs $pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
- fi
- fi
- done
- else
- $echo "$modename: link input file \`$save_arg' does not exist"
- exit $EXIT_FAILURE
- fi
- arg=$save_arg
- prev=
- continue
- ;;
- rpath | xrpath)
- # We need an absolute path.
- case $arg in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- if test "$prev" = rpath; then
- case "$rpath " in
- *" $arg "*) ;;
- *) rpath="$rpath $arg" ;;
- esac
- else
- case "$xrpath " in
- *" $arg "*) ;;
- *) xrpath="$xrpath $arg" ;;
- esac
- fi
- prev=
- continue
- ;;
- xcompiler)
- compiler_flags="$compiler_flags $qarg"
- prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
- continue
- ;;
- xlinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $wl$qarg"
- prev=
- compile_command="$compile_command $wl$qarg"
- finalize_command="$finalize_command $wl$qarg"
- continue
- ;;
- xcclinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $qarg"
- prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
- continue
- ;;
- shrext)
- shrext_cmds="$arg"
- prev=
- continue
- ;;
- darwin_framework|darwin_framework_skip)
- test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- prev=
- continue
- ;;
- *)
- eval "$prev=\"\$arg\""
- prev=
- continue
- ;;
- esac
- fi # test -n "$prev"
-
- prevarg="$arg"
-
- case $arg in
- -all-static)
- if test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
- continue
- ;;
-
- -allow-undefined)
- # FIXME: remove this flag sometime in the future.
- $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- continue
- ;;
-
- -avoid-version)
- avoid_version=yes
- continue
- ;;
-
- -dlopen)
- prev=dlfiles
- continue
- ;;
-
- -dlpreopen)
- prev=dlprefiles
- continue
- ;;
-
- -export-dynamic)
- export_dynamic=yes
- continue
- ;;
-
- -export-symbols | -export-symbols-regex)
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: more than one -exported-symbols argument is not allowed"
- exit $EXIT_FAILURE
- fi
- if test "X$arg" = "X-export-symbols"; then
- prev=expsyms
- else
- prev=expsyms_regex
- fi
- continue
- ;;
-
- -framework|-arch|-isysroot)
- case " $CC " in
- *" ${arg} ${1} "* | *" ${arg} ${1} "*)
- prev=darwin_framework_skip ;;
- *) compiler_flags="$compiler_flags $arg"
- prev=darwin_framework ;;
- esac
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- continue
- ;;
-
- -inst-prefix-dir)
- prev=inst_prefix
- continue
- ;;
-
- # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
- # so, if we see these flags be careful not to treat them like -L
- -L[A-Z][A-Z]*:*)
- case $with_gcc/$host in
- no/*-*-irix* | /*-*-irix*)
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- ;;
- esac
- continue
- ;;
-
- -L*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
- absdir="$dir"
- notinst_path="$notinst_path $dir"
- fi
- dir="$absdir"
- ;;
- esac
- case "$deplibs " in
- *" -L$dir "*) ;;
- *)
- deplibs="$deplibs -L$dir"
- lib_search_path="$lib_search_path $dir"
- ;;
- esac
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
- case :$dllsearchpath: in
- *":$dir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dir";;
- esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
- esac
- ;;
- esac
- continue
- ;;
-
- -l*)
- if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
- # These systems don't actually have a C or math library (as such)
- continue
- ;;
- *-*-os2*)
- # These systems don't actually have a C library (as such)
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc due to us having libc/libc_r.
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C and math libraries are in the System framework
- deplibs="$deplibs -framework System"
- continue
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
- # Causes problems with __ctype
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
- # Compiler inserts libc in the correct place for threads to work
- test "X$arg" = "X-lc" && continue
- ;;
- esac
- elif test "X$arg" = "X-lc_r"; then
- case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc_r directly, use -pthread flag.
- continue
- ;;
- esac
- fi
- deplibs="$deplibs $arg"
- continue
- ;;
-
- # Tru64 UNIX uses -model [arg] to determine the layout of C++
- # classes, name mangling, and exception handling.
- -model)
- compile_command="$compile_command $arg"
- compiler_flags="$compiler_flags $arg"
- finalize_command="$finalize_command $arg"
- prev=xcompiler
- continue
- ;;
-
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
- compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- continue
- ;;
-
- -multi_module)
- single_module="${wl}-multi_module"
- continue
- ;;
-
- -module)
- module=yes
- continue
- ;;
-
- # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
- # -r[0-9][0-9]* specifies the processor on the SGI compiler
- # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
- # +DA*, +DD* enable 64-bit mode on the HP compiler
- # -q* pass through compiler args for the IBM compiler
- # -m* pass through architecture-specific compiler args for GCC
- # -m*, -t[45]*, -txscale* pass through architecture-specific
- # compiler args for GCC
- # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
- # -F/path gives path to uninstalled frameworks, gcc on darwin
- # @file GCC response files
- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
-
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- compiler_flags="$compiler_flags $arg"
- continue
- ;;
-
- -shrext)
- prev=shrext
- continue
- ;;
-
- -no-fast-install)
- fast_install=no
- continue
- ;;
-
- -no-install)
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
- # The PATH hackery in wrapper scripts is required on Windows
- # and Darwin in order for the loader to find any dlls it needs.
- $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
- $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
- fast_install=no
- ;;
- *) no_install=yes ;;
- esac
- continue
- ;;
-
- -no-undefined)
- allow_undefined=no
- continue
- ;;
-
- -objectlist)
- prev=objectlist
- continue
- ;;
-
- -o) prev=output ;;
-
- -precious-files-regex)
- prev=precious_regex
- continue
- ;;
-
- -release)
- prev=release
- continue
- ;;
-
- -rpath)
- prev=rpath
- continue
- ;;
-
- -R)
- prev=xrpath
- continue
- ;;
-
- -R*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- continue
- ;;
-
- -static | -static-libtool-libs)
- # The effects of -static are defined in a previous loop.
- # We used to do the same as -all-static on platforms that
- # didn't have a PIC flag, but the assumption that the effects
- # would be equivalent was wrong. It would break on at least
- # Digital Unix and AIX.
- continue
- ;;
-
- -thread-safe)
- thread_safe=yes
- continue
- ;;
-
- -version-info)
- prev=vinfo
- continue
- ;;
- -version-number)
- prev=vinfo
- vinfo_number=yes
- continue
- ;;
-
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
- arg=
- save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $flag"
- done
- IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
- ;;
-
- -Wl,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
- arg=
- save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $wl$flag"
- linker_flags="$linker_flags $flag"
- done
- IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
- ;;
-
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
-
- -Xlinker)
- prev=xlinker
- continue
- ;;
-
- -XCClinker)
- prev=xcclinker
- continue
- ;;
-
- # Some other compiler flag.
- -* | +*)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- ;;
-
- *.$objext)
- # A standard object.
- objs="$objs $arg"
- ;;
-
- *.lo)
- # A libtool-controlled object.
-
- # Check to see that this really is a libtool object.
- if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- # If there is no directory component, then add one.
- case $arg in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- if test -z "$pic_object" || \
- test -z "$non_pic_object" ||
- test "$pic_object" = none && \
- test "$non_pic_object" = none; then
- $echo "$modename: cannot find name of object for \`$arg'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- if test "$pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- pic_object="$xdir$pic_object"
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
- prev=
- fi
-
- # A PIC object.
- libobjs="$libobjs $pic_object"
- arg="$pic_object"
- fi
-
- # Non-PIC object.
- if test "$non_pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- non_pic_object="$xdir$non_pic_object"
-
- # A standard non-PIC object
- non_pic_objects="$non_pic_objects $non_pic_object"
- if test -z "$pic_object" || test "$pic_object" = none ; then
- arg="$non_pic_object"
- fi
- else
- # If the PIC object exists, use it instead.
- # $xdir was prepended to $pic_object above.
- non_pic_object="$pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
- fi
- else
- # Only an error if not doing a dry-run.
- if test -z "$run"; then
- $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
- exit $EXIT_FAILURE
- else
- # Dry-run case.
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
- non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
- libobjs="$libobjs $pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
- fi
- fi
- ;;
-
- *.$libext)
- # An archive.
- deplibs="$deplibs $arg"
- old_deplibs="$old_deplibs $arg"
- continue
- ;;
-
- *.la)
- # A libtool-controlled library.
-
- if test "$prev" = dlfiles; then
- # This library was specified with -dlopen.
- dlfiles="$dlfiles $arg"
- prev=
- elif test "$prev" = dlprefiles; then
- # The library was specified with -dlpreopen.
- dlprefiles="$dlprefiles $arg"
- prev=
- else
- deplibs="$deplibs $arg"
- fi
- continue
- ;;
-
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- ;;
- esac # arg
-
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
- done # argument parsing loop
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
-
- oldlibs=
- # calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
- libobjs_save="$libobjs"
-
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
- else
- shlib_search_path=
- fi
- eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
- # Create the object directory.
- if test ! -d "$output_objdir"; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
- exit $exit_status
- fi
- fi
-
- # Determine the type of output
- case $output in
- "")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
- *.$libext) linkmode=oldlib ;;
- *.lo | *.$objext) linkmode=obj ;;
- *.la) linkmode=lib ;;
- *) linkmode=prog ;; # Anything else should be a program.
- esac
-
- case $host in
- *cygwin* | *mingw* | *pw32*)
- # don't eliminate duplications in $postdeps and $predeps
- duplicate_compiler_generated_deps=yes
- ;;
- *)
- duplicate_compiler_generated_deps=$duplicate_deps
- ;;
- esac
- specialdeplibs=
-
- libs=
- # Find all interdependent deplibs by searching for libraries
- # that are linked more than once (e.g. -la -lb -la)
- for deplib in $deplibs; do
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- libs="$libs $deplib"
- done
-
- if test "$linkmode" = lib; then
- libs="$predeps $libs $compiler_lib_search_path $postdeps"
-
- # Compute libraries that are listed more than once in $predeps
- # $postdeps and mark them as special (i.e., whose duplicates are
- # not to be eliminated).
- pre_post_deps=
- if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
- for pre_post_dep in $predeps $postdeps; do
- case "$pre_post_deps " in
- *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
- esac
- pre_post_deps="$pre_post_deps $pre_post_dep"
- done
- fi
- pre_post_deps=
- fi
-
- deplibs=
- newdependency_libs=
- newlib_search_path=
- need_relink=no # whether we're linking any uninstalled libtool libraries
- notinst_deplibs= # not-installed libtool libraries
- case $linkmode in
- lib)
- passes="conv link"
- for file in $dlfiles $dlprefiles; do
- case $file in
- *.la) ;;
- *)
- $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- done
- ;;
- prog)
- compile_deplibs=
- finalize_deplibs=
- alldeplibs=no
- newdlfiles=
- newdlprefiles=
- passes="conv scan dlopen dlpreopen link"
- ;;
- *) passes="conv"
- ;;
- esac
- for pass in $passes; do
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan"; then
- libs="$deplibs"
- deplibs=
- fi
- if test "$linkmode" = prog; then
- case $pass in
- dlopen) libs="$dlfiles" ;;
- dlpreopen) libs="$dlprefiles" ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
- esac
- fi
- if test "$pass" = dlopen; then
- # Collect dlpreopened libraries
- save_deplibs="$deplibs"
- deplibs=
- fi
- for deplib in $libs; do
- lib=
- found=no
- case $deplib in
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- compiler_flags="$compiler_flags $deplib"
- fi
- continue
- ;;
- -l*)
- if test "$linkmode" != lib && test "$linkmode" != prog; then
- $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
- continue
- fi
- name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
- if test "$linkmode" = lib; then
- searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
- else
- searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
- fi
- for searchdir in $searchdirs; do
- for search_ext in .la $std_shrext .so .a; do
- # Search the libtool library
- lib="$searchdir/lib${name}${search_ext}"
- if test -f "$lib"; then
- if test "$search_ext" = ".la"; then
- found=yes
- else
- found=no
- fi
- break 2
- fi
- done
- done
- if test "$found" != yes; then
- # deplib doesn't seem to be a libtool library
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- else # deplib is a libtool library
- # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
- # We need to do some special things here, and not later.
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $deplib "*)
- if (${SED} -e '2q' $lib |
- grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- library_names=
- old_library=
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- for l in $old_library $library_names; do
- ll="$l"
- done
- if test "X$ll" = "X$old_library" ; then # only static version available
- found=no
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
- lib=$ladir/$old_library
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- fi
- fi
- ;;
- *) ;;
- esac
- fi
- fi
- ;; # -l
- -L*)
- case $linkmode in
- lib)
- deplibs="$deplib $deplibs"
- test "$pass" = conv && continue
- newdependency_libs="$deplib $newdependency_libs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- ;;
- prog)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- if test "$pass" = scan; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- ;;
- *)
- $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
- ;;
- esac # linkmode
- continue
- ;; # -L
- -R*)
- if test "$pass" = link; then
- dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- # Make sure the xrpath contains only unique directories.
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- fi
- deplibs="$deplib $deplibs"
- continue
- ;;
- *.la) lib="$deplib" ;;
- *.$libext)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- case $linkmode in
- lib)
- valid_a_lib=no
- case $deplibs_check_method in
- match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- if eval $echo \"$deplib\" 2>/dev/null \
- | $SED 10q \
- | $EGREP "$match_pattern_regex" > /dev/null; then
- valid_a_lib=yes
- fi
- ;;
- pass_all)
- valid_a_lib=yes
- ;;
- esac
- if test "$valid_a_lib" != yes; then
- $echo
- $echo "*** Warning: Trying to link with static lib archive $deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because the file extensions .$libext of this argument makes me believe"
- $echo "*** that it is just a static archive that I should not used here."
- else
- $echo
- $echo "*** Warning: Linking the shared library $output against the"
- $echo "*** static library $deplib is not portable!"
- deplibs="$deplib $deplibs"
- fi
- continue
- ;;
- prog)
- if test "$pass" != link; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- continue
- ;;
- esac # linkmode
- ;; # *.$libext
- *.lo | *.$objext)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- elif test "$linkmode" = prog; then
- if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlopen support or we're linking statically,
- # we need to preload.
- newdlprefiles="$newdlprefiles $deplib"
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- newdlfiles="$newdlfiles $deplib"
- fi
- fi
- continue
- ;;
- %DEPLIBS%)
- alldeplibs=yes
- continue
- ;;
- esac # case $deplib
- if test "$found" = yes || test -f "$lib"; then :
- else
- $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
-
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
-
- dlname=
- dlopen=
- dlpreopen=
- libdir=
- library_names=
- old_library=
- # If the library was installed with an old release of libtool,
- # it will not redefine variables installed, or shouldnotlink
- installed=yes
- shouldnotlink=no
- avoidtemprpath=
-
-
- # Read the .la file
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
-
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan" ||
- { test "$linkmode" != prog && test "$linkmode" != lib; }; then
- test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
- fi
-
- if test "$pass" = conv; then
- # Only check for convenience libraries
- deplibs="$lib $deplibs"
- if test -z "$libdir"; then
- if test -z "$old_library"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
- # It is a libtool convenience library, so add in its objects.
- convenience="$convenience $ladir/$objdir/$old_library"
- old_convenience="$old_convenience $ladir/$objdir/$old_library"
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
- elif test "$linkmode" != prog && test "$linkmode" != lib; then
- $echo "$modename: \`$lib' is not a convenience library" 1>&2
- exit $EXIT_FAILURE
- fi
- continue
- fi # $pass = conv
-
-
- # Get the name of the library we link against.
- linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
- if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # This library was specified with -dlopen.
- if test "$pass" = dlopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
- if test -z "$dlname" ||
- test "$dlopen_support" != yes ||
- test "$build_libtool_libs" = no; then
- # If there is no dlname, no dlopen support or we're linking
- # statically, we need to preload. We also need to preload any
- # dependent libraries so libltdl's deplib preloader doesn't
- # bomb out in the load deplibs phase.
- dlprefiles="$dlprefiles $lib $dependency_libs"
- else
- newdlfiles="$newdlfiles $lib"
- fi
- continue
- fi # $pass = dlopen
-
- # We need an absolute path.
- case $ladir in
- [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
- *)
- abs_ladir=`cd "$ladir" && pwd`
- if test -z "$abs_ladir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- abs_ladir="$ladir"
- fi
- ;;
- esac
- laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-
- # Find the relevant object directory and library name.
- if test "X$installed" = Xyes; then
- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- $echo "$modename: warning: library \`$lib' was moved." 1>&2
- dir="$ladir"
- absdir="$abs_ladir"
- libdir="$abs_ladir"
- else
- dir="$libdir"
- absdir="$libdir"
- fi
- test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
- else
- if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- dir="$ladir"
- absdir="$abs_ladir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
- else
- dir="$ladir/$objdir"
- absdir="$abs_ladir/$objdir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
- fi
- fi # $installed = yes
- name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-
- # This library was specified with -dlpreopen.
- if test "$pass" = dlpreopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- newdlprefiles="$newdlprefiles $dir/$old_library"
- # Otherwise, use the dlname, so that lt_dlopen finds it.
- elif test -n "$dlname"; then
- newdlprefiles="$newdlprefiles $dir/$dlname"
- else
- newdlprefiles="$newdlprefiles $dir/$linklib"
- fi
- fi # $pass = dlpreopen
-
- if test -z "$libdir"; then
- # Link the convenience library
- if test "$linkmode" = lib; then
- deplibs="$dir/$old_library $deplibs"
- elif test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$dir/$old_library $compile_deplibs"
- finalize_deplibs="$dir/$old_library $finalize_deplibs"
- else
- deplibs="$lib $deplibs" # used for prog,scan pass
- fi
- continue
- fi
-
-
- if test "$linkmode" = prog && test "$pass" != link; then
- newlib_search_path="$newlib_search_path $ladir"
- deplibs="$lib $deplibs"
-
- linkalldeplibs=no
- if test "$link_all_deplibs" != no || test -z "$library_names" ||
- test "$build_libtool_libs" = no; then
- linkalldeplibs=yes
- fi
-
- tmp_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
- esac
- # Need to link against all dependency_libs?
- if test "$linkalldeplibs" = yes; then
- deplibs="$deplib $deplibs"
- else
- # Need to hardcode shared library paths
- # or/and link against static libraries
- newdependency_libs="$deplib $newdependency_libs"
- fi
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done # for deplib
- continue
- fi # $linkmode = prog...
-
- if test "$linkmode,$pass" = "prog,link"; then
- if test -n "$library_names" &&
- { { test "$prefer_static_libs" = no ||
- test "$prefer_static_libs,$installed" = "built,yes"; } ||
- test -z "$old_library"; }; then
- # We need to hardcode the library path
- if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *" $absdir "*) ;;
- *) temp_rpath="$temp_rpath $absdir" ;;
- esac
- fi
-
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
- fi # $linkmode,$pass = prog,link...
-
- if test "$alldeplibs" = yes &&
- { test "$deplibs_check_method" = pass_all ||
- { test "$build_libtool_libs" = yes &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
- fi
-
- link_static=no # Whether the deplib will be linked statically
- use_static_libs=$prefer_static_libs
- if test "$use_static_libs" = built && test "$installed" = yes ; then
- use_static_libs=no
- fi
- if test -n "$library_names" &&
- { test "$use_static_libs" = no || test -z "$old_library"; }; then
- if test "$installed" = no; then
- notinst_deplibs="$notinst_deplibs $lib"
- need_relink=yes
- fi
- # This is a shared library
-
- # Warn about portability, can't link against -module's on
- # some systems (darwin)
- if test "$shouldnotlink" = yes && test "$pass" = link ; then
- $echo
- if test "$linkmode" = prog; then
- $echo "*** Warning: Linking the executable $output against the loadable module"
- else
- $echo "*** Warning: Linking the shared library $output against the loadable module"
- fi
- $echo "*** $linklib is not portable!"
- fi
- if test "$linkmode" = lib &&
- test "$hardcode_into_libs" = yes; then
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
- fi
-
- if test -n "$old_archive_from_expsyms_cmds"; then
- # figure out the soname
- set dummy $library_names
- realname="$2"
- shift; shift
- libname=`eval \\$echo \"$libname_spec\"`
- # use dlname if we got it. it's perfectly good, no?
- if test -n "$dlname"; then
- soname="$dlname"
- elif test -n "$soname_spec"; then
- # bleh windows
- case $host in
- *cygwin* | mingw*)
- major=`expr $current - $age`
- versuffix="-$major"
- ;;
- esac
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
-
- # Make a new name for the extract_expsyms_cmds to use
- soroot="$soname"
- soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
- newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
-
- # If the library has no export list, then create one now
- if test -f "$output_objdir/$soname-def"; then :
- else
- $show "extracting exported symbol list from \`$soname'"
- save_ifs="$IFS"; IFS='~'
- cmds=$extract_expsyms_cmds
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Create $newlib
- if test -f "$output_objdir/$newlib"; then :; else
- $show "generating import library for \`$soname'"
- save_ifs="$IFS"; IFS='~'
- cmds=$old_archive_from_expsyms_cmds
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
- # make sure the library variables are pointing to the new library
- dir=$output_objdir
- linklib=$newlib
- fi # test -n "$old_archive_from_expsyms_cmds"
-
- if test "$linkmode" = prog || test "$mode" != relink; then
- add_shlibpath=
- add_dir=
- add=
- lib_linked=yes
- case $hardcode_action in
- immediate | unsupported)
- if test "$hardcode_direct" = no; then
- add="$dir/$linklib"
- case $host in
- *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
- *-*-sysv4*uw2*) add_dir="-L$dir" ;;
- *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
- *-*-unixware7*) add_dir="-L$dir" ;;
- *-*-darwin* )
- # if the lib is a module then we can not link against
- # it, someone is ignoring the new warnings I added
- if /usr/bin/file -L $add 2> /dev/null |
- $EGREP ": [^:]* bundle" >/dev/null ; then
- $echo "** Warning, lib $linklib is a module, not a shared library"
- if test -z "$old_library" ; then
- $echo
- $echo "** And there doesn't seem to be a static archive available"
- $echo "** The link will probably fail, sorry"
- else
- add="$dir/$old_library"
- fi
- fi
- esac
- elif test "$hardcode_minus_L" = no; then
- case $host in
- *-*-sunos*) add_shlibpath="$dir" ;;
- esac
- add_dir="-L$dir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- relink)
- if test "$hardcode_direct" = yes; then
- add="$dir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$dir"
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- *) lib_linked=no ;;
- esac
-
- if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit $EXIT_FAILURE
- fi
-
- if test -n "$add_shlibpath"; then
- case :$compile_shlibpath: in
- *":$add_shlibpath:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
- esac
- fi
- if test "$linkmode" = prog; then
- test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
- test -n "$add" && compile_deplibs="$add $compile_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- if test "$hardcode_direct" != yes && \
- test "$hardcode_minus_L" != yes && \
- test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- fi
- fi
- fi
-
- if test "$linkmode" = prog || test "$mode" = relink; then
- add_shlibpath=
- add_dir=
- add=
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
- add="$libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$libdir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- add="-l$name"
- elif test "$hardcode_automatic" = yes; then
- if test -n "$inst_prefix_dir" &&
- test -f "$inst_prefix_dir$libdir/$linklib" ; then
- add="$inst_prefix_dir$libdir/$linklib"
- else
- add="$libdir/$linklib"
- fi
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- add_dir="-L$libdir"
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
- add="-l$name"
- fi
-
- if test "$linkmode" = prog; then
- test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
- test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- fi
- fi
- elif test "$linkmode" = prog; then
- # Here we assume that one of hardcode_direct or hardcode_minus_L
- # is not unsupported. This is valid on all known static and
- # shared platforms.
- if test "$hardcode_direct" != unsupported; then
- test -n "$old_library" && linklib="$old_library"
- compile_deplibs="$dir/$linklib $compile_deplibs"
- finalize_deplibs="$dir/$linklib $finalize_deplibs"
- else
- compile_deplibs="-l$name -L$dir $compile_deplibs"
- finalize_deplibs="-l$name -L$dir $finalize_deplibs"
- fi
- elif test "$build_libtool_libs" = yes; then
- # Not a shared library
- if test "$deplibs_check_method" != pass_all; then
- # We're trying link a shared library against a static one
- # but the system doesn't support it.
-
- # Just print a warning and add the library to dependency_libs so
- # that the program can be linked against the static library.
- $echo
- $echo "*** Warning: This system can not link to static lib archive $lib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have."
- if test "$module" = yes; then
- $echo "*** But as you try to build a module library, libtool will still create "
- $echo "*** a static module, that should work as long as the dlopening application"
- $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
- if test -z "$global_symbol_pipe"; then
- $echo
- $echo "*** However, this would only work if libtool was able to extract symbol"
- $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- $echo "*** not find such a program. So, this module is probably useless."
- $echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- else
- deplibs="$dir/$old_library $deplibs"
- link_static=yes
- fi
- fi # link shared/static library?
-
- if test "$linkmode" = lib; then
- if test -n "$dependency_libs" &&
- { test "$hardcode_into_libs" != yes ||
- test "$build_old_libs" = yes ||
- test "$link_static" = yes; }; then
- # Extract -R from dependency_libs
- temp_deplibs=
- for libdir in $dependency_libs; do
- case $libdir in
- -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
- case " $xrpath " in
- *" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
- esac;;
- *) temp_deplibs="$temp_deplibs $libdir";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
-
- newlib_search_path="$newlib_search_path $absdir"
- # Link against this library
- test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
- # ... and its dependency_libs
- tmp_libs=
- for deplib in $dependency_libs; do
- newdependency_libs="$deplib $newdependency_libs"
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
-
- if test "$link_all_deplibs" != no; then
- # Add the search paths of all dependency libraries
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) path="$deplib" ;;
- *.la)
- dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$deplib" && dir="."
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- absdir="$dir"
- fi
- ;;
- esac
- if grep "^installed=no" $deplib > /dev/null; then
- path="$absdir/$objdir"
- else
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- if test "$absdir" != "$libdir"; then
- $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
- fi
- path="$absdir"
- fi
- depdepl=
- case $host in
- *-*-darwin*)
- # we do not want to link against static libs,
- # but need to link against shared
- eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
- eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -n "$deplibrary_names" ; then
- for tmp in $deplibrary_names ; do
- depdepl=$tmp
- done
- if test -f "$deplibdir/$depdepl" ; then
- depdepl="$deplibdir/$depdepl"
- elif test -f "$path/$depdepl" ; then
- depdepl="$path/$depdepl"
- else
- # Can't find it, oh well...
- depdepl=
- fi
- # do not add paths which are already there
- case " $newlib_search_path " in
- *" $path "*) ;;
- *) newlib_search_path="$newlib_search_path $path";;
- esac
- fi
- path=""
- ;;
- *)
- path="-L$path"
- ;;
- esac
- ;;
- -l*)
- case $host in
- *-*-darwin*)
- # Again, we only want to link against shared libraries
- eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
- for tmp in $newlib_search_path ; do
- if test -f "$tmp/lib$tmp_libs.dylib" ; then
- eval depdepl="$tmp/lib$tmp_libs.dylib"
- break
- fi
- done
- path=""
- ;;
- *) continue ;;
- esac
- ;;
- *) continue ;;
- esac
- case " $deplibs " in
- *" $path "*) ;;
- *) deplibs="$path $deplibs" ;;
- esac
- case " $deplibs " in
- *" $depdepl "*) ;;
- *) deplibs="$depdepl $deplibs" ;;
- esac
- done
- fi # link_all_deplibs != no
- fi # linkmode = lib
- done # for deplib in $libs
- dependency_libs="$newdependency_libs"
- if test "$pass" = dlpreopen; then
- # Link the dlpreopened libraries before other libraries
- for deplib in $save_deplibs; do
- deplibs="$deplib $deplibs"
- done
- fi
- if test "$pass" != dlopen; then
- if test "$pass" != conv; then
- # Make sure lib_search_path contains only unique directories.
- lib_search_path=
- for dir in $newlib_search_path; do
- case "$lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir" ;;
- esac
- done
- newlib_search_path=
- fi
-
- if test "$linkmode,$pass" != "prog,link"; then
- vars="deplibs"
- else
- vars="compile_deplibs finalize_deplibs"
- fi
- for var in $vars dependency_libs; do
- # Add libraries to $var in reverse order
- eval tmp_libs=\"\$$var\"
- new_libs=
- for deplib in $tmp_libs; do
- # FIXME: Pedantically, this is the right thing to do, so
- # that some nasty dependency loop isn't accidentally
- # broken:
- #new_libs="$deplib $new_libs"
- # Pragmatically, this seems to cause very few problems in
- # practice:
- case $deplib in
- -L*) new_libs="$deplib $new_libs" ;;
- -R*) ;;
- *)
- # And here is the reason: when a library appears more
- # than once as an explicit dependence of a library, or
- # is implicitly linked in more than once by the
- # compiler, it is considered special, and multiple
- # occurrences thereof are not removed. Compare this
- # with having the same library being listed as a
- # dependency of multiple other libraries: in this case,
- # we know (pedantically, we assume) the library does not
- # need to be listed more than once, so we keep only the
- # last copy. This is not always right, but it is rare
- # enough that we require users that really mean to play
- # such unportable linking tricks to link the library
- # using -Wl,-lname, so that libtool does not consider it
- # for duplicate removal.
- case " $specialdeplibs " in
- *" $deplib "*) new_libs="$deplib $new_libs" ;;
- *)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$deplib $new_libs" ;;
- esac
- ;;
- esac
- ;;
- esac
- done
- tmp_libs=
- for deplib in $new_libs; do
- case $deplib in
- -L*)
- case " $tmp_libs " in
- *" $deplib "*) ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- done
- eval $var=\"$tmp_libs\"
- done # for var
- fi
- # Last step: remove runtime libs from dependency_libs
- # (they stay in deplibs)
- tmp_libs=
- for i in $dependency_libs ; do
- case " $predeps $postdeps $compiler_lib_search_path " in
- *" $i "*)
- i=""
- ;;
- esac
- if test -n "$i" ; then
- tmp_libs="$tmp_libs $i"
- fi
- done
- dependency_libs=$tmp_libs
- done # for pass
- if test "$linkmode" = prog; then
- dlfiles="$newdlfiles"
- dlprefiles="$newdlprefiles"
- fi
-
- case $linkmode in
- oldlib)
- case " $deplibs" in
- *\ -l* | *\ -L*)
- $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;;
- esac
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
- fi
-
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
- fi
-
- # Now set the variables for building old libraries.
- build_libtool_libs=no
- oldlibs="$output"
- objs="$objs$old_deplibs"
- ;;
-
- lib)
- # Make sure we only generate libraries of the form `libNAME.la'.
- case $outputname in
- lib*)
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
- eval shared_ext=\"$shrext_cmds\"
- eval libname=\"$libname_spec\"
- ;;
- *)
- if test "$module" = no; then
- $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
- if test "$need_lib_prefix" != no; then
- # Add the "lib" prefix for modules if required
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- eval shared_ext=\"$shrext_cmds\"
- eval libname=\"$libname_spec\"
- else
- libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- fi
- ;;
- esac
-
- if test -n "$objs"; then
- if test "$deplibs_check_method" != pass_all; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
- exit $EXIT_FAILURE
- else
- $echo
- $echo "*** Warning: Linking the shared library $output against the non-libtool"
- $echo "*** objects $objs is not portable!"
- libobjs="$libobjs $objs"
- fi
- fi
-
- if test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
- fi
-
- set dummy $rpath
- if test "$#" -gt 2; then
- $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
- fi
- install_libdir="$2"
-
- oldlibs=
- if test -z "$rpath"; then
- if test "$build_libtool_libs" = yes; then
- # Building a libtool convenience library.
- # Some compilers have problems with a `.al' extension so
- # convenience libraries should have the same extension an
- # archive normally would.
- oldlibs="$output_objdir/$libname.$libext $oldlibs"
- build_libtool_libs=convenience
- build_old_libs=yes
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- fi
- else
-
- # Parse the version information argument.
- save_ifs="$IFS"; IFS=':'
- set dummy $vinfo 0 0 0
- IFS="$save_ifs"
-
- if test -n "$8"; then
- $echo "$modename: too many parameters to \`-version-info'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # convert absolute version numbers to libtool ages
- # this retains compatibility with .la files and attempts
- # to make the code below a bit more comprehensible
-
- case $vinfo_number in
- yes)
- number_major="$2"
- number_minor="$3"
- number_revision="$4"
- #
- # There are really only two kinds -- those that
- # use the current revision as the major version
- # and those that subtract age and use age as
- # a minor version. But, then there is irix
- # which has an extra 1 added just for fun
- #
- case $version_type in
- darwin|linux|osf|windows|none)
- current=`expr $number_major + $number_minor`
- age="$number_minor"
- revision="$number_revision"
- ;;
- freebsd-aout|freebsd-elf|sunos)
- current="$number_major"
- revision="$number_minor"
- age="0"
- ;;
- irix|nonstopux)
- current=`expr $number_major + $number_minor`
- age="$number_minor"
- revision="$number_minor"
- lt_irix_increment=no
- ;;
- esac
- ;;
- no)
- current="$2"
- revision="$3"
- age="$4"
- ;;
- esac
-
- # Check that each of the things are valid numbers.
- case $current in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- case $revision in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- case $age in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- if test "$age" -gt "$current"; then
- $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Calculate the version variables.
- major=
- versuffix=
- verstring=
- case $version_type in
- none) ;;
-
- darwin)
- # Like Linux, but with the current version available in
- # verstring for coding it into the library header
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- # Darwin ld doesn't like 0 for these options...
- minor_current=`expr $current + 1`
- xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
- verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
- ;;
-
- freebsd-aout)
- major=".$current"
- versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
- major=".$current"
- versuffix=".$current";
- ;;
-
- irix | nonstopux)
- if test "X$lt_irix_increment" = "Xno"; then
- major=`expr $current - $age`
- else
- major=`expr $current - $age + 1`
- fi
- case $version_type in
- nonstopux) verstring_prefix=nonstopux ;;
- *) verstring_prefix=sgi ;;
- esac
- verstring="$verstring_prefix$major.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$revision
- while test "$loop" -ne 0; do
- iface=`expr $revision - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring_prefix$major.$iface:$verstring"
- done
-
- # Before this point, $major must not contain `.'.
- major=.$major
- versuffix="$major.$revision"
- ;;
-
- linux)
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- ;;
-
- osf)
- major=.`expr $current - $age`
- versuffix=".$current.$age.$revision"
- verstring="$current.$age.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$age
- while test "$loop" -ne 0; do
- iface=`expr $current - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring:${iface}.0"
- done
-
- # Make executables depend on our current version.
- verstring="$verstring:${current}.0"
- ;;
-
- sunos)
- major=".$current"
- versuffix=".$current.$revision"
- ;;
-
- windows)
- # Use '-' rather than '.', since we only want one
- # extension on DOS 8.3 filesystems.
- major=`expr $current - $age`
- versuffix="-$major"
- ;;
-
- *)
- $echo "$modename: unknown library version type \`$version_type'" 1>&2
- $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- # Clear the version info if we defaulted, and they specified a release.
- if test -z "$vinfo" && test -n "$release"; then
- major=
- case $version_type in
- darwin)
- # we can't check for "0.0" in archive_cmds due to quoting
- # problems, so we reset it completely
- verstring=
- ;;
- *)
- verstring="0.0"
- ;;
- esac
- if test "$need_version" = no; then
- versuffix=
- else
- versuffix=".0.0"
- fi
- fi
-
- # Remove version info from name if versioning should be avoided
- if test "$avoid_version" = yes && test "$need_version" = no; then
- major=
- versuffix=
- verstring=""
- fi
-
- # Check to see if the archive will have undefined symbols.
- if test "$allow_undefined" = yes; then
- if test "$allow_undefined_flag" = unsupported; then
- $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
- build_libtool_libs=no
- build_old_libs=yes
- fi
- else
- # Don't allow undefined symbols.
- allow_undefined_flag="$no_undefined_flag"
- fi
- fi
-
- if test "$mode" != relink; then
- # Remove our outputs, but don't remove object files since they
- # may have been created when compiling PIC objects.
- removelist=
- tempremovelist=`$echo "$output_objdir/*"`
- for p in $tempremovelist; do
- case $p in
- *.$objext)
- ;;
- $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
- if test "X$precious_files_regex" != "X"; then
- if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
- then
- continue
- fi
- fi
- removelist="$removelist $p"
- ;;
- *) ;;
- esac
- done
- if test -n "$removelist"; then
- $show "${rm}r $removelist"
- $run ${rm}r $removelist
- fi
- fi
-
- # Now set the variables for building old libraries.
- if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
- # Transform .lo files to .o files.
- oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
- fi
-
- # Eliminate all temporary directories.
- #for path in $notinst_path; do
- # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
- # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
- # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
- #done
-
- if test -n "$xrpath"; then
- # If the user specified any rpath flags, then add them.
- temp_xrpath=
- for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
- fi
-
- # Make sure dlfiles contains only unique files that won't be dlpreopened
- old_dlfiles="$dlfiles"
- dlfiles=
- for lib in $old_dlfiles; do
- case " $dlprefiles $dlfiles " in
- *" $lib "*) ;;
- *) dlfiles="$dlfiles $lib" ;;
- esac
- done
-
- # Make sure dlprefiles contains only unique files
- old_dlprefiles="$dlprefiles"
- dlprefiles=
- for lib in $old_dlprefiles; do
- case "$dlprefiles " in
- *" $lib "*) ;;
- *) dlprefiles="$dlprefiles $lib" ;;
- esac
- done
-
- if test "$build_libtool_libs" = yes; then
- if test -n "$rpath"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
- # these systems don't actually have a c library (as such)!
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C library is in the System framework
- deplibs="$deplibs -framework System"
- ;;
- *-*-netbsd*)
- # Don't link with libc until the a.out ld.so is fixed.
- ;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc due to us having libc/libc_r.
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
- # Causes problems with __ctype
- ;;
- *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
- # Compiler inserts libc in the correct place for threads to work
- ;;
- *)
- # Add libc to deplibs on all other systems if necessary.
- if test "$build_libtool_need_lc" = "yes"; then
- deplibs="$deplibs -lc"
- fi
- ;;
- esac
- fi
-
- # Transform deplibs into only deplibs that can be linked in shared.
- name_save=$name
- libname_save=$libname
- release_save=$release
- versuffix_save=$versuffix
- major_save=$major
- # I'm not sure if I'm treating the release correctly. I think
- # release should show up in the -l (ie -lgmp5) so we don't want to
- # add it in twice. Is that correct?
- release=""
- versuffix=""
- major=""
- newdeplibs=
- droppeddeps=no
- case $deplibs_check_method in
- pass_all)
- # Don't check for shared/static. Everything works.
- # This might be a little naive. We might want to check
- # whether the library exists or not. But this is on
- # osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behavior.
- newdeplibs=$deplibs
- ;;
- test_compile)
- # This code stresses the "libraries are programs" paradigm to its
- # limits. Maybe even breaks it. We compile a program, linking it
- # against the deplibs as a proxy for the library. Then we can check
- # whether they linked in statically or dynamically with ldd.
- $rm conftest.c
- cat > conftest.c <<EOF
- int main() { return 0; }
-EOF
- $rm conftest
- if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
- ldd_output=`ldd conftest`
- for i in $deplibs; do
- name=`expr $i : '-l\(.*\)'`
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $i "*)
- newdeplibs="$newdeplibs $i"
- i=""
- ;;
- esac
- fi
- if test -n "$i" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- $echo
- $echo "*** Warning: dynamic linker does not accept needed library $i."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which I believe you do not have"
- $echo "*** because a test_compile did reveal that the linker did not use it for"
- $echo "*** its dynamic dependency list that programs get resolved with at runtime."
- fi
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- else
- # Error occurred in the first compile. Let's try to salvage
- # the situation: Compile a separate program for each library.
- for i in $deplibs; do
- name=`expr $i : '-l\(.*\)'`
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
- $rm conftest
- if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
- ldd_output=`ldd conftest`
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $i "*)
- newdeplibs="$newdeplibs $i"
- i=""
- ;;
- esac
- fi
- if test -n "$i" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- $echo
- $echo "*** Warning: dynamic linker does not accept needed library $i."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because a test_compile did reveal that the linker did not use this one"
- $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
- fi
- fi
- else
- droppeddeps=yes
- $echo
- $echo "*** Warning! Library $i is needed by this library but I was not able to"
- $echo "*** make it link in! You will probably need to install it or some"
- $echo "*** library that it depends on before this library will be fully"
- $echo "*** functional. Installing it before continuing would be even better."
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- fi
- ;;
- file_magic*)
- set dummy $deplibs_check_method
- file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- for a_deplib in $deplibs; do
- name=`expr $a_deplib : '-l\(.*\)'`
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- ;;
- esac
- fi
- if test -n "$a_deplib" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- # Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null \
- | grep " -> " >/dev/null; then
- continue
- fi
- # The statement above tries to avoid entering an
- # endless loop below, in case of cyclic links.
- # We might still enter an endless loop, since a link
- # loop can be closed while we follow links,
- # but so what?
- potlib="$potent_lib"
- while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
- case $potliblink in
- [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
- esac
- done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- | ${SED} 10q \
- | $EGREP "$file_magic_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- fi
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- $echo
- $echo "*** Warning: linker path does not have real file for library $a_deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib" ; then
- $echo "*** with $libname but no candidates were found. (...for file magic test)"
- else
- $echo "*** with $libname and none of the candidates passed a file format test"
- $echo "*** using a file magic. Last file checked: $potlib"
- fi
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- for a_deplib in $deplibs; do
- name=`expr $a_deplib : '-l\(.*\)'`
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- ;;
- esac
- fi
- if test -n "$a_deplib" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- potlib="$potent_lib" # see symlink-check above in file_magic test
- if eval $echo \"$potent_lib\" 2>/dev/null \
- | ${SED} 10q \
- | $EGREP "$match_pattern_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- fi
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- $echo
- $echo "*** Warning: linker path does not have real file for library $a_deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib" ; then
- $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
- else
- $echo "*** with $libname and none of the candidates passed a file format test"
- $echo "*** using a regex pattern. Last file checked: $potlib"
- fi
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- none | unknown | *)
- newdeplibs=""
- tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- -e 's/ -[LR][^ ]*//g'`
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- for i in $predeps $postdeps ; do
- # can't use Xsed below, because $i might contain '/'
- tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
- done
- fi
- if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
- | grep . >/dev/null; then
- $echo
- if test "X$deplibs_check_method" = "Xnone"; then
- $echo "*** Warning: inter-library dependencies are not supported in this platform."
- else
- $echo "*** Warning: inter-library dependencies are not known to be supported."
- fi
- $echo "*** All declared inter-library dependencies are being dropped."
- droppeddeps=yes
- fi
- ;;
- esac
- versuffix=$versuffix_save
- major=$major_save
- release=$release_save
- libname=$libname_save
- name=$name_save
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
- ;;
- esac
-
- if test "$droppeddeps" = yes; then
- if test "$module" = yes; then
- $echo
- $echo "*** Warning: libtool could not satisfy all declared inter-library"
- $echo "*** dependencies of module $libname. Therefore, libtool will create"
- $echo "*** a static module, that should work as long as the dlopening"
- $echo "*** application is linked with the -dlopen flag."
- if test -z "$global_symbol_pipe"; then
- $echo
- $echo "*** However, this would only work if libtool was able to extract symbol"
- $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- $echo "*** not find such a program. So, this module is probably useless."
- $echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- else
- $echo "*** The inter-library dependencies that have been dropped here will be"
- $echo "*** automatically added whenever a program is linked with this library"
- $echo "*** or is declared to -dlopen it."
-
- if test "$allow_undefined" = no; then
- $echo
- $echo "*** Since this library must not contain undefined symbols,"
- $echo "*** because either the platform does not support them or"
- $echo "*** it was explicitly requested with -no-undefined,"
- $echo "*** libtool will only create a static version of it."
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- fi
- fi
- # Done checking deplibs!
- deplibs=$newdeplibs
- fi
-
-
- # move library search paths that coincide with paths to not yet
- # installed libraries to the beginning of the library search list
- new_libs=
- for path in $notinst_path; do
- case " $new_libs " in
- *" -L$path/$objdir "*) ;;
- *)
- case " $deplibs " in
- *" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
- esac
- ;;
- esac
- done
- for deplib in $deplibs; do
- case $deplib in
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- done
- deplibs="$new_libs"
-
-
- # All the library-specific variables (install_libdir is set above).
- library_names=
- old_library=
- dlname=
-
- # Test again, we may have decided not to build it any more
- if test "$build_libtool_libs" = yes; then
- if test "$hardcode_into_libs" = yes; then
- # Hardcode the library paths
- hardcode_libdirs=
- dep_rpath=
- rpath="$finalize_rpath"
- test "$mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- dep_rpath="$dep_rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- if test -n "$hardcode_libdir_flag_spec_ld"; then
- case $archive_cmds in
- *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;;
- *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;;
- esac
- else
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
- fi
- if test -n "$runpath_var" && test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
- fi
- test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
- fi
-
- shlibpath="$finalize_shlibpath"
- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
- if test -n "$shlibpath"; then
- eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
- fi
-
- # Get the real and link names of the library.
- eval shared_ext=\"$shrext_cmds\"
- eval library_names=\"$library_names_spec\"
- set dummy $library_names
- realname="$2"
- shift; shift
-
- if test -n "$soname_spec"; then
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
- if test -z "$dlname"; then
- dlname=$soname
- fi
-
- lib="$output_objdir/$realname"
- linknames=
- for link
- do
- linknames="$linknames $link"
- done
-
- # Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- $show "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- cmds=$export_symbols_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- if len=`expr "X$cmd" : ".*"` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- $show "$cmd"
- $run eval "$cmd" || exit $?
- skipped_export=false
- else
- # The command line is too long to execute in one step.
- $show "using reloadable object file for export list..."
- skipped_export=:
- # Break out early, otherwise skipped_export may be
- # set to false by a later but shorter cmd.
- break
- fi
- done
- IFS="$save_ifs"
- if test -n "$export_symbols_regex"; then
- $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- $run eval '$mv "${export_symbols}T" "$export_symbols"'
- fi
- fi
- fi
-
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
- fi
-
- tmp_deplibs=
- for test_deplib in $deplibs; do
- case " $convenience " in
- *" $test_deplib "*) ;;
- *)
- tmp_deplibs="$tmp_deplibs $test_deplib"
- ;;
- esac
- done
- deplibs="$tmp_deplibs"
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $convenience
- libobjs="$libobjs $func_extract_archives_result"
- fi
- fi
-
- if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- eval flag=\"$thread_safe_flag_spec\"
- linker_flags="$linker_flags $flag"
- fi
-
- # Make a backup of the uninstalled library when relinking
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
- fi
-
- # Do each of the archive commands.
- if test "$module" = yes && test -n "$module_cmds" ; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
- eval test_cmds=\"$module_expsym_cmds\"
- cmds=$module_expsym_cmds
- else
- eval test_cmds=\"$module_cmds\"
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval test_cmds=\"$archive_expsym_cmds\"
- cmds=$archive_expsym_cmds
- else
- eval test_cmds=\"$archive_cmds\"
- cmds=$archive_cmds
- fi
- fi
-
- if test "X$skipped_export" != "X:" &&
- len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- :
- else
- # The command line is too long to link in one step, link piecewise.
- $echo "creating reloadable object files..."
-
- # Save the value of $output and $libobjs because we want to
- # use them later. If we have whole_archive_flag_spec, we
- # want to use save_libobjs as it was before
- # whole_archive_flag_spec was expanded, because we can't
- # assume the linker understands whole_archive_flag_spec.
- # This may have to be revisited, in case too many
- # convenience libraries get linked in and end up exceeding
- # the spec.
- if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
- fi
- save_output=$output
- output_la=`$echo "X$output" | $Xsed -e "$basename"`
-
- # Clear the reloadable object creation command queue and
- # initialize k to one.
- test_cmds=
- concat_cmds=
- objlist=
- delfiles=
- last_robj=
- k=1
- output=$output_objdir/$output_la-${k}.$objext
- # Loop over the list of objects to be linked.
- for obj in $save_libobjs
- do
- eval test_cmds=\"$reload_cmds $objlist $last_robj\"
- if test "X$objlist" = X ||
- { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
- test "$len" -le "$max_cmd_len"; }; then
- objlist="$objlist $obj"
- else
- # The command $test_cmds is almost too long, add a
- # command to the queue.
- if test "$k" -eq 1 ; then
- # The first file doesn't have a previous command to add.
- eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
- else
- # All subsequent reloadable object files will link in
- # the last one created.
- eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
- fi
- last_robj=$output_objdir/$output_la-${k}.$objext
- k=`expr $k + 1`
- output=$output_objdir/$output_la-${k}.$objext
- objlist=$obj
- len=1
- fi
- done
- # Handle the remaining objects by creating one last
- # reloadable object file. All subsequent reloadable object
- # files will link in the last one created.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
- if ${skipped_export-false}; then
- $show "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- libobjs=$output
- # Append the command to create the export file.
- eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
- fi
-
- # Set up a command to remove the reloadable object files
- # after they are used.
- i=0
- while test "$i" -lt "$k"
- do
- i=`expr $i + 1`
- delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
- done
-
- $echo "creating a temporary reloadable object file: $output"
-
- # Loop through the commands generated above and execute them.
- save_ifs="$IFS"; IFS='~'
- for cmd in $concat_cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- libobjs=$output
- # Restore the value of output.
- output=$save_output
-
- if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- fi
- # Expand the library linking commands again to reset the
- # value of $libobjs for piecewise linking.
-
- # Do each of the archive commands.
- if test "$module" = yes && test -n "$module_cmds" ; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
- cmds=$module_expsym_cmds
- else
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- cmds=$archive_expsym_cmds
- else
- cmds=$archive_cmds
- fi
- fi
-
- # Append the command to remove the reloadable object files
- # to the just-reset $cmds.
- eval cmds=\"\$cmds~\$rm $delfiles\"
- fi
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
- fi
-
- exit $lt_exit
- }
- done
- IFS="$save_ifs"
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
-
- if test -n "$convenience"; then
- if test -z "$whole_archive_flag_spec"; then
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- fi
- fi
-
- exit $EXIT_SUCCESS
- fi
-
- # Create links to the real library.
- for linkname in $linknames; do
- if test "$realname" != "$linkname"; then
- $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
- fi
- done
-
- # If -module or -export-dynamic was specified, set the dlname.
- if test "$module" = yes || test "$export_dynamic" = yes; then
- # On all known operating systems, these are identical.
- dlname="$soname"
- fi
- fi
- ;;
-
- obj)
- case " $deplibs" in
- *\ -l* | *\ -L*)
- $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;;
- esac
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
- fi
-
- case $output in
- *.lo)
- if test -n "$objs$old_deplibs"; then
- $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- exit $EXIT_FAILURE
- fi
- libobj="$output"
- obj=`$echo "X$output" | $Xsed -e "$lo2o"`
- ;;
- *)
- libobj=
- obj="$output"
- ;;
- esac
-
- # Delete the old objects.
- $run $rm $obj $libobj
-
- # Objects from convenience libraries. This assumes
- # single-version convenience libraries. Whenever we create
- # different ones for PIC/non-PIC, this we'll have to duplicate
- # the extraction.
- reload_conv_objs=
- gentop=
- # reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec and hope we can get by with
- # turning comma into space..
- wl=
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
- reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
- else
- gentop="$output_objdir/${obj}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $convenience
- reload_conv_objs="$reload_objs $func_extract_archives_result"
- fi
- fi
-
- # Create the old-style object.
- reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
- output="$obj"
- cmds=$reload_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Exit if we aren't doing a library object file.
- if test -z "$libobj"; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit $EXIT_SUCCESS
- fi
-
- if test "$build_libtool_libs" != yes; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- # $show "echo timestamp > $libobj"
- # $run eval "echo timestamp > $libobj" || exit $?
- exit $EXIT_SUCCESS
- fi
-
- if test -n "$pic_flag" || test "$pic_mode" != default; then
- # Only do commands if we really have different PIC objects.
- reload_objs="$libobjs $reload_conv_objs"
- output="$libobj"
- cmds=$reload_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit $EXIT_SUCCESS
- ;;
-
- prog)
- case $host in
- *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
- esac
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
- fi
-
- if test "$preload" = yes; then
- if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
- test "$dlopen_self_static" = unknown; then
- $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
- fi
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- ;;
- esac
-
- case $host in
- *darwin*)
- # Don't allow lazy linking, it breaks C++ global constructors
- if test "$tagname" = CXX ; then
- compile_command="$compile_command ${wl}-bind_at_load"
- finalize_command="$finalize_command ${wl}-bind_at_load"
- fi
- ;;
- esac
-
-
- # move library search paths that coincide with paths to not yet
- # installed libraries to the beginning of the library search list
- new_libs=
- for path in $notinst_path; do
- case " $new_libs " in
- *" -L$path/$objdir "*) ;;
- *)
- case " $compile_deplibs " in
- *" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
- esac
- ;;
- esac
- done
- for deplib in $compile_deplibs; do
- case $deplib in
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- done
- compile_deplibs="$new_libs"
-
-
- compile_command="$compile_command $compile_deplibs"
- finalize_command="$finalize_command $finalize_deplibs"
-
- if test -n "$rpath$xrpath"; then
- # If the user specified any rpath flags, then add them.
- for libdir in $rpath $xrpath; do
- # This is the magic to use -rpath.
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- fi
-
- # Now hardcode the library paths
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
- case :$dllsearchpath: in
- *":$libdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$libdir";;
- esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
- esac
- ;;
- esac
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- compile_rpath="$rpath"
-
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
- *" $libdir "*) ;;
- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- finalize_rpath="$rpath"
-
- if test -n "$libobjs" && test "$build_old_libs" = yes; then
- # Transform all the library objects into standard objects.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- fi
-
- dlsyms=
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- dlsyms="${outputname}S.c"
- else
- $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- fi
- fi
-
- if test -n "$dlsyms"; then
- case $dlsyms in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist="$output_objdir/${outputname}.nm"
-
- $show "$rm $nlist ${nlist}S ${nlist}T"
- $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
- # Parse the name list into a source file.
- $show "creating $output_objdir/$dlsyms"
-
- test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test "$dlself" = yes; then
- $show "generating symbol list for \`$output'"
-
- test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- for arg in $progfiles; do
- $show "extracting global C symbols from \`$arg'"
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- if test -n "$export_symbols_regex"; then
- $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$outputname.exp"
- $run $rm $export_symbols
- $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- case $host in
- *cygwin* | *mingw* )
- $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- else
- $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
- $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
- $run eval 'mv "$nlist"T "$nlist"'
- case $host in
- *cygwin* | *mingw* )
- $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- fi
- fi
-
- for arg in $dlprefiles; do
- $show "extracting global C symbols from \`$arg'"
- name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
- $run eval '$echo ": $name " >> "$nlist"'
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -z "$run"; then
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $mv "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if grep -v "^: " < "$nlist" |
- if sort -k 3 </dev/null >/dev/null 2>&1; then
- sort -k 3
- else
- sort +2
- fi |
- uniq > "$nlist"S; then
- :
- else
- grep -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- else
- $echo '/* NONE */' >> "$output_objdir/$dlsyms"
- fi
-
- $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-"
-
- case $host in
- *cygwin* | *mingw* )
- $echo >> "$output_objdir/$dlsyms" "\
-/* DATA imports from DLLs on WIN32 can't be const, because
- runtime relocations are performed -- see ld's documentation
- on pseudo-relocs */
-struct {
-"
- ;;
- * )
- $echo >> "$output_objdir/$dlsyms" "\
-const struct {
-"
- ;;
- esac
-
-
- $echo >> "$output_objdir/$dlsyms" "\
- const char *name;
- lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
- eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-
- $echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- fi
-
- pic_flag_for_symtable=
- case $host in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
- esac;;
- *-*-hpux*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag";;
- esac
- esac
-
- # Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
- # Clean up the generated files.
- $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
- # Transform the symbol file into the correct name.
- case $host in
- *cygwin* | *mingw* )
- if test -f "$output_objdir/${outputname}.def" ; then
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
- else
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- fi
- ;;
- * )
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- ;;
- esac
- ;;
- *)
- $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
- fi
-
- if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
- # Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
- link_command="$compile_command$compile_rpath"
-
- # We have no uninstalled library dependencies, so finalize right now.
- $show "$link_command"
- $run eval "$link_command"
- exit_status=$?
-
- # Delete the generated files.
- if test -n "$dlsyms"; then
- $show "$rm $output_objdir/${outputname}S.${objext}"
- $run $rm "$output_objdir/${outputname}S.${objext}"
- fi
-
- exit $exit_status
- fi
-
- if test -n "$shlibpath_var"; then
- # We should set the shlibpath_var
- rpath=
- for dir in $temp_rpath; do
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*)
- # Absolute path.
- rpath="$rpath$dir:"
- ;;
- *)
- # Relative path: add a thisdir entry.
- rpath="$rpath\$thisdir/$dir:"
- ;;
- esac
- done
- temp_rpath="$rpath"
- fi
-
- if test -n "$compile_shlibpath$finalize_shlibpath"; then
- compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
- fi
- if test -n "$finalize_shlibpath"; then
- finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
- fi
-
- compile_var=
- finalize_var=
- if test -n "$runpath_var"; then
- if test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- if test -n "$finalize_perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $finalize_perm_rpath; do
- rpath="$rpath$dir:"
- done
- finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- fi
-
- if test "$no_install" = yes; then
- # We don't need to create a wrapper script.
- link_command="$compile_var$compile_command$compile_rpath"
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- # Delete the old output file.
- $run $rm $output
- # Link the executable and exit
- $show "$link_command"
- $run eval "$link_command" || exit $?
- exit $EXIT_SUCCESS
- fi
-
- if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
-
- $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- $echo "$modename: \`$output' will be relinked during installation" 1>&2
- else
- if test "$fast_install" != no; then
- link_command="$finalize_var$compile_command$finalize_rpath"
- if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP`
- else
- # fast_install is set to needless
- relink_command=
- fi
- else
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
- fi
- fi
-
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
- # Delete the old output files.
- $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
- $show "$link_command"
- $run eval "$link_command" || exit $?
-
- # Now create the wrapper script.
- $show "creating $output"
-
- # Quote the relink command for shipping.
- if test -n "$relink_command"; then
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
- fi
- done
- relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
- fi
-
- # Quote $echo for shipping.
- if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
- case $progpath in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
- *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
- esac
- qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
- else
- qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Only actually do things if our run command is non-null.
- if test -z "$run"; then
- # win32 will think the script is a binary if it has
- # a .exe suffix, so we strip it off here.
- case $output in
- *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
- esac
- # test for cygwin because mv fails w/o .exe extensions
- case $host in
- *cygwin*)
- exeext=.exe
- outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
- *) exeext= ;;
- esac
- case $host in
- *cygwin* | *mingw* )
- output_name=`basename $output`
- output_path=`dirname $output`
- cwrappersource="$output_path/$objdir/lt-$output_name.c"
- cwrapper="$output_path/$output_name.exe"
- $rm $cwrappersource $cwrapper
- trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-
- cat > $cwrappersource <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
- Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-
- The $output program cannot be directly executed until all the libtool
- libraries that it depends on are installed.
-
- This wrapper executable should never be moved out of the build directory.
- If it is, it will not operate correctly.
-
- Currently, it simply execs the wrapper *script* "/bin/sh $output",
- but could eventually absorb all of the scripts functionality and
- exec $objdir/$outputname directly.
-*/
-EOF
- cat >> $cwrappersource<<"EOF"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/stat.h>
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef DIR_SEPARATOR
-# define DIR_SEPARATOR '/'
-# define PATH_SEPARATOR ':'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
- defined (__OS2__)
-# define HAVE_DOS_BASED_FILE_SYSTEM
-# ifndef DIR_SEPARATOR_2
-# define DIR_SEPARATOR_2 '\\'
-# endif
-# ifndef PATH_SEPARATOR_2
-# define PATH_SEPARATOR_2 ';'
-# endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-#ifndef PATH_SEPARATOR_2
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
-#else /* PATH_SEPARATOR_2 */
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
-#endif /* PATH_SEPARATOR_2 */
-
-#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
- if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-/* -DDEBUG is fairly common in CFLAGS. */
-#undef DEBUG
-#if defined DEBUGWRAPPER
-# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
-#else
-# define DEBUG(format, ...)
-#endif
-
-const char *program_name = NULL;
-
-void * xmalloc (size_t num);
-char * xstrdup (const char *string);
-const char * base_name (const char *name);
-char * find_executable(const char *wrapper);
-int check_executable(const char *path);
-char * strendzap(char *str, const char *pat);
-void lt_fatal (const char *message, ...);
-
-int
-main (int argc, char *argv[])
-{
- char **newargz;
- int i;
-
- program_name = (char *) xstrdup (base_name (argv[0]));
- DEBUG("(main) argv[0] : %s\n",argv[0]);
- DEBUG("(main) program_name : %s\n",program_name);
- newargz = XMALLOC(char *, argc+2);
-EOF
-
- cat >> $cwrappersource <<EOF
- newargz[0] = (char *) xstrdup("$SHELL");
-EOF
-
- cat >> $cwrappersource <<"EOF"
- newargz[1] = find_executable(argv[0]);
- if (newargz[1] == NULL)
- lt_fatal("Couldn't find %s", argv[0]);
- DEBUG("(main) found exe at : %s\n",newargz[1]);
- /* we know the script has the same name, without the .exe */
- /* so make sure newargz[1] doesn't end in .exe */
- strendzap(newargz[1],".exe");
- for (i = 1; i < argc; i++)
- newargz[i+1] = xstrdup(argv[i]);
- newargz[argc+1] = NULL;
-
- for (i=0; i<argc+1; i++)
- {
- DEBUG("(main) newargz[%d] : %s\n",i,newargz[i]);
- ;
- }
-
-EOF
-
- case $host_os in
- mingw*)
- cat >> $cwrappersource <<EOF
- execv("$SHELL",(char const **)newargz);
-EOF
- ;;
- *)
- cat >> $cwrappersource <<EOF
- execv("$SHELL",newargz);
-EOF
- ;;
- esac
-
- cat >> $cwrappersource <<"EOF"
- return 127;
-}
-
-void *
-xmalloc (size_t num)
-{
- void * p = (void *) malloc (num);
- if (!p)
- lt_fatal ("Memory exhausted");
-
- return p;
-}
-
-char *
-xstrdup (const char *string)
-{
- return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
-;
-}
-
-const char *
-base_name (const char *name)
-{
- const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* Skip over the disk name in MSDOS pathnames. */
- if (isalpha ((unsigned char)name[0]) && name[1] == ':')
- name += 2;
-#endif
-
- for (base = name; *name; name++)
- if (IS_DIR_SEPARATOR (*name))
- base = name + 1;
- return base;
-}
-
-int
-check_executable(const char * path)
-{
- struct stat st;
-
- DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
- if ((!path) || (!*path))
- return 0;
-
- if ((stat (path, &st) >= 0) &&
- (
- /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
-#if defined (S_IXOTH)
- ((st.st_mode & S_IXOTH) == S_IXOTH) ||
-#endif
-#if defined (S_IXGRP)
- ((st.st_mode & S_IXGRP) == S_IXGRP) ||
-#endif
- ((st.st_mode & S_IXUSR) == S_IXUSR))
- )
- return 1;
- else
- return 0;
-}
-
-/* Searches for the full path of the wrapper. Returns
- newly allocated full path name if found, NULL otherwise */
-char *
-find_executable (const char* wrapper)
-{
- int has_slash = 0;
- const char* p;
- const char* p_next;
- /* static buffer for getcwd */
- char tmp[LT_PATHMAX + 1];
- int tmp_len;
- char* concat_name;
-
- DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
-
- if ((wrapper == NULL) || (*wrapper == '\0'))
- return NULL;
-
- /* Absolute path? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
- {
- concat_name = xstrdup (wrapper);
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
- else
- {
-#endif
- if (IS_DIR_SEPARATOR (wrapper[0]))
- {
- concat_name = xstrdup (wrapper);
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- }
-#endif
-
- for (p = wrapper; *p; p++)
- if (*p == '/')
- {
- has_slash = 1;
- break;
- }
- if (!has_slash)
- {
- /* no slashes; search PATH */
- const char* path = getenv ("PATH");
- if (path != NULL)
- {
- for (p = path; *p; p = p_next)
- {
- const char* q;
- size_t p_len;
- for (q = p; *q; q++)
- if (IS_PATH_SEPARATOR(*q))
- break;
- p_len = q - p;
- p_next = (*q == '\0' ? q : q + 1);
- if (p_len == 0)
- {
- /* empty path: current directory */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
- tmp_len = strlen(tmp);
- concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
- }
- else
- {
- concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, p, p_len);
- concat_name[p_len] = '/';
- strcpy (concat_name + p_len + 1, wrapper);
- }
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
- }
- /* not found in PATH; assume curdir */
- }
- /* Relative path | not found in path: prepend cwd */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
- tmp_len = strlen(tmp);
- concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
-
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- return NULL;
-}
-
-char *
-strendzap(char *str, const char *pat)
-{
- size_t len, patlen;
-
- assert(str != NULL);
- assert(pat != NULL);
-
- len = strlen(str);
- patlen = strlen(pat);
-
- if (patlen <= len)
- {
- str += len - patlen;
- if (strcmp(str, pat) == 0)
- *str = '\0';
- }
- return str;
-}
-
-static void
-lt_error_core (int exit_status, const char * mode,
- const char * message, va_list ap)
-{
- fprintf (stderr, "%s: %s: ", program_name, mode);
- vfprintf (stderr, message, ap);
- fprintf (stderr, ".\n");
-
- if (exit_status >= 0)
- exit (exit_status);
-}
-
-void
-lt_fatal (const char *message, ...)
-{
- va_list ap;
- va_start (ap, message);
- lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
- va_end (ap);
-}
-EOF
- # we should really use a build-platform specific compiler
- # here, but OTOH, the wrappers (shell script and this C one)
- # are only useful if you want to execute the "real" binary.
- # Since the "real" binary is built for $host, then this
- # wrapper might as well be built for $host, too.
- $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
- ;;
- esac
- $rm $output
- trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
-
- $echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
-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
- # 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
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variable:
- notinst_deplibs='$notinst_deplibs'
-else
- # When we are sourced in execute mode, \$file and \$echo are already set.
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- echo=\"$qecho\"
- file=\"\$0\"
- # Make sure echo works.
- if test \"X\$1\" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
- elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$echo works!
- :
- else
- # Restart under the correct shell, and then maybe \$echo will work.
- exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
- fi
- fi\
-"
- $echo >> $output "\
-
- # Find the directory that this script lives in.
- thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
- test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
- while test -n \"\$file\"; do
- destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
- # If there was a directory component, then change thisdir.
- if test \"x\$destdir\" != \"x\$file\"; then
- case \"\$destdir\" in
- [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
- *) thisdir=\"\$thisdir/\$destdir\" ;;
- esac
- fi
-
- file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
- done
-
- # Try to get the absolute directory name.
- absdir=\`cd \"\$thisdir\" && pwd\`
- test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
- if test "$fast_install" = yes; then
- $echo >> $output "\
- program=lt-'$outputname'$exeext
- progdir=\"\$thisdir/$objdir\"
-
- if test ! -f \"\$progdir/\$program\" || \\
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
- test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
- file=\"\$\$-\$program\"
-
- if test ! -d \"\$progdir\"; then
- $mkdir \"\$progdir\"
- else
- $rm \"\$progdir/\$file\"
- fi"
-
- $echo >> $output "\
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
- if relink_command_output=\`eval \$relink_command 2>&1\`; then :
- else
- $echo \"\$relink_command_output\" >&2
- $rm \"\$progdir/\$file\"
- exit $EXIT_FAILURE
- fi
- fi
-
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $rm \"\$progdir/\$program\";
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $rm \"\$progdir/\$file\"
- fi"
- else
- $echo >> $output "\
- program='$outputname'
- progdir=\"\$thisdir/$objdir\"
-"
- fi
-
- $echo >> $output "\
-
- if test -f \"\$progdir/\$program\"; then"
-
- # Export our shlibpath_var if we have one.
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $echo >> $output "\
- # Add our own library path to $shlibpath_var
- $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- # The second colon is a workaround for a bug in BeOS R4 sed
- $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
- export $shlibpath_var
-"
- fi
-
- # fixup the dll searchpath if we need to.
- if test -n "$dllsearchpath"; then
- $echo >> $output "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
-
- $echo >> $output "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
-"
- case $host in
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2*)
- $echo >> $output "\
- exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
- ;;
-
- *)
- $echo >> $output "\
- exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
- ;;
- esac
- $echo >> $output "\
- \$echo \"\$0: cannot exec \$program \$*\"
- exit $EXIT_FAILURE
- fi
- else
- # The program doesn't exist.
- \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
- \$echo \"This script is just a wrapper for \$program.\" 1>&2
- $echo \"See the $PACKAGE documentation for more information.\" 1>&2
- exit $EXIT_FAILURE
- fi
-fi\
-"
- chmod +x $output
- fi
- exit $EXIT_SUCCESS
- ;;
- esac
-
- # See if we need to build an old-fashioned archive.
- for oldlib in $oldlibs; do
-
- if test "$build_libtool_libs" = convenience; then
- oldobjs="$libobjs_save"
- addlibs="$convenience"
- build_libtool_libs=no
- else
- if test "$build_libtool_libs" = module; then
- oldobjs="$libobjs_save"
- build_libtool_libs=no
- else
- oldobjs="$old_deplibs $non_pic_objects"
- fi
- addlibs="$old_convenience"
- fi
-
- if test -n "$addlibs"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $addlibs
- oldobjs="$oldobjs $func_extract_archives_result"
- fi
-
- # Do each command in the archive commands.
- if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- cmds=$old_archive_from_new_cmds
- else
- # POSIX demands no paths to be encoded in archives. We have
- # to avoid creating archives with duplicate basenames if we
- # might have to extract them afterwards, e.g., when creating a
- # static archive out of a convenience library, or when linking
- # the entirety of a libtool archive into another (currently
- # not supported by libtool).
- if (for obj in $oldobjs
- do
- $echo "X$obj" | $Xsed -e 's%^.*/%%'
- done | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- $echo "copying selected object files to avoid basename conflicts..."
-
- if test -z "$gentop"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "$mkdir $gentop"
- $run $mkdir "$gentop"
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
- exit $exit_status
- fi
- fi
-
- save_oldobjs=$oldobjs
- oldobjs=
- counter=1
- for obj in $save_oldobjs
- do
- objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- case " $oldobjs " in
- " ") oldobjs=$obj ;;
- *[\ /]"$objbase "*)
- while :; do
- # Make sure we don't pick an alternate name that also
- # overlaps.
- newobj=lt$counter-$objbase
- counter=`expr $counter + 1`
- case " $oldobjs " in
- *[\ /]"$newobj "*) ;;
- *) if test ! -f "$gentop/$newobj"; then break; fi ;;
- esac
- done
- $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
- $run ln "$obj" "$gentop/$newobj" ||
- $run cp "$obj" "$gentop/$newobj"
- oldobjs="$oldobjs $gentop/$newobj"
- ;;
- *) oldobjs="$oldobjs $obj" ;;
- esac
- done
- fi
-
- eval cmds=\"$old_archive_cmds\"
-
- if len=`expr "X$cmds" : ".*"` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- cmds=$old_archive_cmds
- else
- # the command line is too long to link in one step, link in parts
- $echo "using piecewise archive linking..."
- save_RANLIB=$RANLIB
- RANLIB=:
- objlist=
- concat_cmds=
- save_oldobjs=$oldobjs
-
- # Is there a better way of finding the last object in the list?
- for obj in $save_oldobjs
- do
- last_oldobj=$obj
- done
- for obj in $save_oldobjs
- do
- oldobjs="$objlist $obj"
- objlist="$objlist $obj"
- eval test_cmds=\"$old_archive_cmds\"
- if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
- test "$len" -le "$max_cmd_len"; then
- :
- else
- # the above command should be used before it gets too long
- oldobjs=$objlist
- if test "$obj" = "$last_oldobj" ; then
- RANLIB=$save_RANLIB
- fi
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
- objlist=
- fi
- done
- RANLIB=$save_RANLIB
- oldobjs=$objlist
- if test "X$oldobjs" = "X" ; then
- eval cmds=\"\$concat_cmds\"
- else
- eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
- fi
- fi
- fi
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- eval cmd=\"$cmd\"
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$generated"; then
- $show "${rm}r$generated"
- $run ${rm}r$generated
- fi
-
- # Now create the libtool archive.
- case $output in
- *.la)
- old_library=
- test "$build_old_libs" = yes && old_library="$libname.$libext"
- $show "creating $output"
-
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
- fi
- done
- # Quote the link command for shipping.
- relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
- if test "$hardcode_automatic" = yes ; then
- relink_command=
- fi
-
-
- # Only create the output if not a dry run.
- if test -z "$run"; then
- for installed in no yes; do
- if test "$installed" = yes; then
- if test -z "$install_libdir"; then
- break
- fi
- output="$output_objdir/$outputname"i
- # Replace all uninstalled libtool libraries with the installed ones
- newdependency_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- *.la)
- name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdependency_libs="$newdependency_libs $libdir/$name"
- ;;
- *) newdependency_libs="$newdependency_libs $deplib" ;;
- esac
- done
- dependency_libs="$newdependency_libs"
- newdlfiles=
- for lib in $dlfiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdlfiles="$newdlfiles $libdir/$name"
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
- for lib in $dlprefiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdlprefiles="$newdlprefiles $libdir/$name"
- done
- dlprefiles="$newdlprefiles"
- else
- newdlfiles=
- for lib in $dlfiles; do
- case $lib in
- [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
- *) abs=`pwd`"/$lib" ;;
- esac
- newdlfiles="$newdlfiles $abs"
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
- for lib in $dlprefiles; do
- case $lib in
- [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
- *) abs=`pwd`"/$lib" ;;
- esac
- newdlprefiles="$newdlprefiles $abs"
- done
- dlprefiles="$newdlprefiles"
- fi
- $rm $output
- # place dlname in correct position for cygwin
- tdlname=$dlname
- case $host,$output,$installed,$module,$dlname in
- *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
- esac
- $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=$module
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
- if test "$installed" = no && test "$need_relink" = yes; then
- $echo >> $output "\
-relink_command=\"$relink_command\""
- fi
- done
- fi
-
- # Do a symbolic link so that the libtool archive can be found in
- # LD_LIBRARY_PATH before the program is installed.
- $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
- ;;
- esac
- exit $EXIT_SUCCESS
- ;;
-
- # libtool install mode
- install)
- modename="$modename: install"
-
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
- # Allow the use of GNU shtool's install command.
- $echo "X$nonopt" | grep shtool > /dev/null; then
- # Aesthetically quote it.
- arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$arg "
- arg="$1"
- shift
- else
- install_prog=
- arg=$nonopt
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog$arg"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=no
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest=$arg
- continue
- fi
-
- case $arg in
- -d) isdir=yes ;;
- -f)
- case " $install_prog " in
- *[\\\ /]cp\ *) ;;
- *) prev=$arg ;;
- esac
- ;;
- -g | -m | -o) prev=$arg ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*)
- ;;
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest=$arg
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog $arg"
- done
-
- if test -z "$install_prog"; then
- $echo "$modename: you must specify an install program" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prev' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- $echo "$modename: no file or destination specified" 1>&2
- else
- $echo "$modename: you must specify a destination" 1>&2
- fi
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Strip any trailing slash from the destination.
- dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test "$isdir" = yes; then
- destdir="$dest"
- destname=
- else
- destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
- test "X$destdir" = "X$dest" && destdir=.
- destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files
- if test "$#" -gt 2; then
- $echo "$modename: \`$dest' is not a directory" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
- fi
- case $destdir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case $file in
- *.lo) ;;
- *)
- $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- done
- ;;
- esac
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case $file in
- *.$libext)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- library_names=
- old_library=
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
- test "X$dir" = "X$file/" && dir=
- dir="$dir$objdir"
-
- if test -n "$relink_command"; then
- # Determine the prefix the user has applied to our future dir.
- inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
-
- # Don't allow the user to place us outside of our expected
- # location b/c this prevents finding dependent libraries that
- # are installed to the same prefix.
- # At present, this check doesn't affect windows .dll's that
- # are installed into $libdir/../bin (currently, that works fine)
- # but it's something to keep an eye on.
- if test "$inst_prefix_dir" = "$destdir"; then
- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -n "$inst_prefix_dir"; then
- # Stick the inst_prefix_dir data into the link command.
- relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP`
- else
- relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP`
- fi
-
- $echo "$modename: warning: relinking \`$file'" 1>&2
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- exit $EXIT_FAILURE
- fi
- fi
-
- # See the names of the shared library.
- set dummy $library_names
- if test -n "$2"; then
- realname="$2"
- shift
- shift
-
- srcname="$realname"
- test -n "$relink_command" && srcname="$realname"T
-
- # Install the shared library and build the symlinks.
- $show "$install_prog $dir/$srcname $destdir/$realname"
- $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$striplib $destdir/$realname"
- $run eval "$striplib $destdir/$realname" || exit $?
- fi
-
- if test "$#" -gt 0; then
- # Delete the old symlinks, and create new ones.
- # Try `ln -sf' first, because the `ln' binary might depend on
- # the symlink we replace! Solaris /bin/ln does not understand -f,
- # so we also need to try rm && ln -s.
- for linkname
- do
- if test "$linkname" != "$realname"; then
- $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
- $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
- fi
- done
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- cmds=$postinstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
- fi
-
- exit $lt_exit
- }
- done
- IFS="$save_ifs"
- fi
-
- # Install the pseudo-library for information purposes.
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- instname="$dir/$name"i
- $show "$install_prog $instname $destdir/$name"
- $run eval "$install_prog $instname $destdir/$name" || exit $?
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case $destfile in
- *.lo)
- staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- ;;
- *.$objext)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- # Install the libtool object if requested.
- if test -n "$destfile"; then
- $show "$install_prog $file $destfile"
- $run eval "$install_prog $file $destfile" || exit $?
- fi
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
- $show "$install_prog $staticobj $staticdest"
- $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- fi
- exit $EXIT_SUCCESS
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # If the file is missing, and there is a .exe on the end, strip it
- # because it is most likely a libtool script we actually want to
- # install
- stripped_ext=""
- case $file in
- *.exe)
- if test ! -f "$file"; then
- file=`$echo $file|${SED} 's,.exe$,,'`
- stripped_ext=".exe"
- fi
- ;;
- esac
-
- # Do a test to see if this is really a libtool program.
- case $host in
- *cygwin*|*mingw*)
- wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
- ;;
- *)
- wrapper=$file
- ;;
- esac
- if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
- notinst_deplibs=
- relink_command=
-
- # Note that it is not necessary on cygwin/mingw to append a dot to
- # foo even if both foo and FILE.exe exist: automatic-append-.exe
- # behavior happens only for exec(3), not for open(2)! Also, sourcing
- # `FILE.' does not work on cygwin managed mounts.
- #
- # If there is no directory component, then add one.
- case $wrapper in
- */* | *\\*) . ${wrapper} ;;
- *) . ./${wrapper} ;;
- esac
-
- # Check the variables that should have been set.
- if test -z "$notinst_deplibs"; then
- $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- finalize=yes
- for lib in $notinst_deplibs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- # If there is no directory component, then add one.
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- fi
- libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
- if test -n "$libdir" && test ! -f "$libfile"; then
- $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- finalize=no
- fi
- done
-
- relink_command=
- # Note that it is not necessary on cygwin/mingw to append a dot to
- # foo even if both foo and FILE.exe exist: automatic-append-.exe
- # behavior happens only for exec(3), not for open(2)! Also, sourcing
- # `FILE.' does not work on cygwin managed mounts.
- #
- # If there is no directory component, then add one.
- case $wrapper in
- */* | *\\*) . ${wrapper} ;;
- *) . ./${wrapper} ;;
- esac
-
- outputname=
- if test "$fast_install" = no && test -n "$relink_command"; then
- if test "$finalize" = yes && test -z "$run"; then
- tmpdir=`func_mktempdir`
- file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
- outputname="$tmpdir/$file"
- # Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP`
-
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- ${rm}r "$tmpdir"
- continue
- fi
- file="$outputname"
- else
- $echo "$modename: warning: cannot relink \`$file'" 1>&2
- fi
- else
- # Install the binary that we compiled earlier.
- file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
- # remove .exe since cygwin /usr/bin/install will append another
- # one anyway
- case $install_prog,$host in
- */usr/bin/install*,*cygwin*)
- case $file:$destfile in
- *.exe:*.exe)
- # this is ok
- ;;
- *.exe:*)
- destfile=$destfile.exe
- ;;
- *:*.exe)
- destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
- ;;
- esac
- ;;
- esac
- $show "$install_prog$stripme $file $destfile"
- $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- test -n "$outputname" && ${rm}r "$tmpdir"
- ;;
- esac
- done
-
- for file in $staticlibs; do
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- $show "$install_prog $file $oldlib"
- $run eval "$install_prog \$file \$oldlib" || exit $?
-
- if test -n "$stripme" && test -n "$old_striplib"; then
- $show "$old_striplib $oldlib"
- $run eval "$old_striplib $oldlib" || exit $?
- fi
-
- # Do each command in the postinstall commands.
- cmds=$old_postinstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$future_libdirs"; then
- $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
- fi
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
- else
- exit $EXIT_SUCCESS
- fi
- ;;
-
- # libtool finish mode
- finish)
- modename="$modename: finish"
- libdirs="$nonopt"
- admincmds=
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- cmds=$finish_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || admincmds="$admincmds
- $cmd"
- done
- IFS="$save_ifs"
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $run eval "$cmds" || admincmds="$admincmds
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- test "$show" = : && exit $EXIT_SUCCESS
-
- $echo "X----------------------------------------------------------------------" | $Xsed
- $echo "Libraries have been installed in:"
- for libdir in $libdirs; do
- $echo " $libdir"
- done
- $echo
- $echo "If you ever happen to want to link against installed libraries"
- $echo "in a given directory, LIBDIR, you must either use libtool, and"
- $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
- $echo "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
- $echo " during execution"
- fi
- if test -n "$runpath_var"; then
- $echo " - add LIBDIR to the \`$runpath_var' environment variable"
- $echo " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- $echo " - use the \`$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- $echo " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
- fi
- $echo
- $echo "See any operating system documentation about shared libraries for"
- $echo "more information, such as the ld(1) and ld.so(8) manual pages."
- $echo "X----------------------------------------------------------------------" | $Xsed
- exit $EXIT_SUCCESS
- ;;
-
- # libtool execute mode
- execute)
- modename="$modename: execute"
-
- # The first argument is the command name.
- cmd="$nonopt"
- if test -z "$cmd"; then
- $echo "$modename: you must specify a COMMAND" 1>&2
- $echo "$help"
- exit $EXIT_FAILURE
- fi
-
- # Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
- if test ! -f "$file"; then
- $echo "$modename: \`$file' is not a file" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- dir=
- case $file in
- *.la)
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Read the libtool library.
- dlname=
- library_names=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- continue
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
-
- if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
- else
- if test ! -f "$dir/$dlname"; then
- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- exit $EXIT_FAILURE
- fi
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
- ;;
-
- *)
- $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic="$magic"
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case $file in
- -*) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Transform arg to wrapped name.
- file="$progdir/$program"
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
- args="$args \"$file\""
- done
-
- if test -z "$run"; then
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
-
- # Restore saved environment variables
- for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
- do
- eval "if test \"\${save_$lt_var+set}\" = set; then
- $lt_var=\$save_$lt_var; export $lt_var
- fi"
- done
-
- # Now prepare to actually exec the command.
- exec_cmd="\$cmd$args"
- else
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
- fi
- $echo "$cmd$args"
- exit $EXIT_SUCCESS
- fi
- ;;
-
- # libtool clean and uninstall mode
- clean | uninstall)
- modename="$modename: $mode"
- rm="$nonopt"
- files=
- rmforce=
- exit_status=0
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- for arg
- do
- case $arg in
- -f) rm="$rm $arg"; rmforce=yes ;;
- -*) rm="$rm $arg" ;;
- *) files="$files $arg" ;;
- esac
- done
-
- if test -z "$rm"; then
- $echo "$modename: you must specify an RM program" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- rmdirs=
-
- origobjdir="$objdir"
- for file in $files; do
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$file"; then
- dir=.
- objdir="$origobjdir"
- else
- objdir="$dir/$origobjdir"
- fi
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- test "$mode" = uninstall && objdir="$dir"
-
- # Remember objdir for removal later, being careful to avoid duplicates
- if test "$mode" = clean; then
- case " $rmdirs " in
- *" $objdir "*) ;;
- *) rmdirs="$rmdirs $objdir" ;;
- esac
- fi
-
- # Don't error if the file doesn't exist and rm -f was used.
- if (test -L "$file") >/dev/null 2>&1 \
- || (test -h "$file") >/dev/null 2>&1 \
- || test -f "$file"; then
- :
- elif test -d "$file"; then
- exit_status=1
- continue
- elif test "$rmforce" = yes; then
- continue
- fi
-
- rmfiles="$file"
-
- case $name in
- *.la)
- # Possibly a libtool archive, so verify it.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- . $dir/$name
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
- rmfiles="$rmfiles $objdir/$n"
- done
- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
-
- case "$mode" in
- clean)
- case " $library_names " in
- # " " in the beginning catches empty $dlname
- *" $dlname "*) ;;
- *) rmfiles="$rmfiles $objdir/$dlname" ;;
- esac
- test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
- ;;
- uninstall)
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- cmds=$postuninstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd"
- if test "$?" -ne 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
- fi
-
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- cmds=$old_postuninstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd"
- if test "$?" -ne 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
- fi
- # FIXME: should reinstall the best remaining shared library.
- ;;
- esac
- fi
- ;;
-
- *.lo)
- # Possibly a libtool object, so verify it.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-
- # Read the .lo file
- . $dir/$name
-
- # Add PIC object to the list of files to remove.
- if test -n "$pic_object" \
- && test "$pic_object" != none; then
- rmfiles="$rmfiles $dir/$pic_object"
- fi
-
- # Add non-PIC object to the list of files to remove.
- if test -n "$non_pic_object" \
- && test "$non_pic_object" != none; then
- rmfiles="$rmfiles $dir/$non_pic_object"
- fi
- fi
- ;;
-
- *)
- if test "$mode" = clean ; then
- noexename=$name
- case $file in
- *.exe)
- file=`$echo $file|${SED} 's,.exe$,,'`
- noexename=`$echo $name|${SED} 's,.exe$,,'`
- # $file with .exe has already been added to rmfiles,
- # add $file without .exe
- rmfiles="$rmfiles $file"
- ;;
- esac
- # Do a test to see if this is a libtool program.
- if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- relink_command=
- . $dir/$noexename
-
- # note $name still contains .exe if it was in $file originally
- # as does the version of $file that was added into $rmfiles
- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
- if test "$fast_install" = yes && test -n "$relink_command"; then
- rmfiles="$rmfiles $objdir/lt-$name"
- fi
- if test "X$noexename" != "X$name" ; then
- rmfiles="$rmfiles $objdir/lt-${noexename}.c"
- fi
- fi
- fi
- ;;
- esac
- $show "$rm $rmfiles"
- $run $rm $rmfiles || exit_status=1
- done
- objdir="$origobjdir"
-
- # Try to remove the ${objdir}s in the directories where we deleted files
- for dir in $rmdirs; do
- if test -d "$dir"; then
- $show "rmdir $dir"
- $run rmdir $dir >/dev/null 2>&1
- fi
- done
-
- exit $exit_status
- ;;
-
- "")
- $echo "$modename: you must specify a MODE" 1>&2
- $echo "$generic_help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- if test -z "$exec_cmd"; then
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit $EXIT_FAILURE
- fi
-fi # test -z "$show_help"
-
-if test -n "$exec_cmd"; then
- eval exec $exec_cmd
- exit $EXIT_FAILURE
-fi
-
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
- --config show all configuration variables
- --debug enable verbose shell tracing
--n, --dry-run display commands without modifying any files
- --features display basic configuration information and exit
- --finish same as \`--mode=finish'
- --help display this help message and exit
- --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
- --quiet same as \`--silent'
- --silent don't print informational messages
- --tag=TAG use configuration variables from tag TAG
- --version print version information
-
-MODE must be one of the following:
-
- clean remove files from the build directory
- compile compile a source file into a libtool object
- execute automatically set library path, then run a program
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE.
-
-Report bugs to <bug-libtool@gnu.org>."
- exit $EXIT_SUCCESS
- ;;
-
-clean)
- $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
- ;;
-
-compile)
- $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -prefer-pic try to building PIC objects only
- -prefer-non-pic try to building non-PIC objects only
- -static always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
- ;;
-
-execute)
- $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
-finish)
- $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed."
- ;;
-
-install)
- $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
-link)
- $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-fast-install disable the fast-install mode
- -no-install link a not-installable executable
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -objectlist FILE Use a list of object files found in FILE to specify objects
- -precious-files-regex REGEX
- don't remove output files matching REGEX
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of uninstalled libtool libraries
- -static-libtool-libs
- do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
-uninstall)
- $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
-*)
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
-esac
-
-$echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit $?
-
-# The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries. Given conflicting
-# choices, we go for a static library, that is the most portable,
-# since we can't tell whether shared libraries were disabled because
-# the user asked for that or because the platform doesn't support
-# them. This is particularly important on AIX, because we don't
-# support having both static and shared libraries enabled at the same
-# time on that platform, so we default to a shared-only configuration.
-# If a disable-shared tag is given, we'll fallback to a static-only
-# configuration. But we'll never go from static-only to shared-only.
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-disable_libs=shared
-# ### END LIBTOOL TAG CONFIG: disable-shared
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-disable_libs=static
-# ### END LIBTOOL TAG CONFIG: disable-static
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/libXaw/man/Makefile.am b/libXaw/man/Makefile.am
index cf75d58f8..e6cb8d702 100644
--- a/libXaw/man/Makefile.am
+++ b/libXaw/man/Makefile.am
@@ -1,49 +1,41 @@
-#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
-#
-# 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 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.
-#
-
-libmandir = $(LIB_MAN_DIR)
-
-libman_PRE = Xaw.man
-
-libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@)
-
-EXTRA_DIST = $(libman_PRE)
-
-CLEANFILES = $(libman_DATA)
-
-SED = sed
-
-# Strings to replace in man pages
-XORGRELSTRING = @PACKAGE_STRING@
- XORGMANNAME = X Version 11
-
-MAN_SUBSTS = -e 's/__vendorversion__/"$(XORGRELSTRING)" "$(XORGMANNAME)"/'
-
-SUFFIXES = .$(LIB_MAN_SUFFIX) .man
-
-.man.$(LIB_MAN_SUFFIX):
- $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
-
+#
+# Copyright (c) 2005, 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.
+#
+
+libmandir = $(LIB_MAN_DIR)
+
+libman_PRE = Xaw.man
+
+libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@)
+
+EXTRA_DIST = $(libman_PRE)
+
+CLEANFILES = $(libman_DATA)
+
+SUFFIXES = .$(LIB_MAN_SUFFIX) .man
+
+# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
+MAN_SUBSTS += -e 's|__docdir__|$(docdir)|g'
+
+.man.$(LIB_MAN_SUFFIX):
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+
diff --git a/libXaw/man/Makefile.in b/libXaw/man/Makefile.in
deleted file mode 100644
index ad722cdb3..000000000
--- a/libXaw/man/Makefile.in
+++ /dev/null
@@ -1,464 +0,0 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 2005 Sun Microsystems, Inc. All rights reserved.
-#
-# 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 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.
-#
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-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 = man
-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 = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo " GEN " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-SOURCES =
-DIST_SOURCES =
-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 = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(libmandir)"
-DATA = $(libman_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
-ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APP_MAN_DIR = @APP_MAN_DIR@
-APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CHANGELOG_CMD = @CHANGELOG_CMD@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CWARNFLAGS = @CWARNFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
-DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
-DSYMUTIL = @DSYMUTIL@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-FILE_MAN_DIR = @FILE_MAN_DIR@
-FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
-GREP = @GREP@
-GROFF = @GROFF@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBEXT = @LIBEXT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_MAN_DIR = @LIB_MAN_DIR@
-LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MISC_MAN_DIR = @MISC_MAN_DIR@
-MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
-MKDIR_P = @MKDIR_P@
-NMEDIT = @NMEDIT@
-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@
-RANLIB = @RANLIB@
-SED = sed
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XAW6_CFLAGS = @XAW6_CFLAGS@
-XAW6_LIBS = @XAW6_LIBS@
-XAW7_CFLAGS = @XAW7_CFLAGS@
-XAW7_LIBS = @XAW7_LIBS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-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@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-distcleancheck_listfiles = @distcleancheck_listfiles@
-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@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-libmandir = $(LIB_MAN_DIR)
-libman_PRE = Xaw.man
-libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@)
-EXTRA_DIST = $(libman_PRE)
-CLEANFILES = $(libman_DATA)
-
-# Strings to replace in man pages
-XORGRELSTRING = @PACKAGE_STRING@
-XORGMANNAME = X Version 11
-MAN_SUBSTS = -e 's/__vendorversion__/"$(XORGRELSTRING)" "$(XORGMANNAME)"/'
-SUFFIXES = .$(LIB_MAN_SUFFIX) .man
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .$(LIB_MAN_SUFFIX) .man
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu man/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: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-libmanDATA: $(libman_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(libmandir)" || $(MKDIR_P) "$(DESTDIR)$(libmandir)"
- @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(libmandir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(libmandir)" || exit $$?; \
- done
-
-uninstall-libmanDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(libmandir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(libmandir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$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)$(libmandir)"; 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)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-libmanDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-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 mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-libmanDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-dvi install-dvi-am \
- install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-libmanDATA install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-libmanDATA
-
-
-.man.$(LIB_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/libXaw/man/Xaw.man b/libXaw/man/Xaw.man
index a1425952b..f5458e908 100644
--- a/libXaw/man/Xaw.man
+++ b/libXaw/man/Xaw.man
@@ -1,628 +1,629 @@
-.\"
-.\" Copyright (c) 1999 by The XFree86 Project, 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 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.
-.\"
-.\" Author: Paulo César Pereira de Andrade
-.\"
-.\" $XFree86: xc/lib/Xaw/Xaw.man,v 1.7 2001/11/04 21:16:39 paulo Exp $
-.\"
-.de EX
-.sp
-.nf
-.ft CW
-..
-.de EE
-.ft R
-.fi
-.sp
-..
-.de TQ
-.\".br
-.ns
-.TP \\$1
-..
-.TH Xaw 3 __vendorversion__
-.SH NAME
- Xaw \- X Athena Widgets
-.SH DESCRIPTION
-.B Xaw
-is a widget set based on the X Toolkit Intrinsics (Xt) Library. This
-release by the X.org Foundation includes additions and modifications
-originally made for The XFree86 Project, Inc. This manual page describes
-these changes as well as some of the common interfaces between its version
-and the previous X Consortium release (Xaw6).
-.SH ACTIONS
-All of the \fIXaw\fR widgets now have the additional translations
-.B call-proc, declare, get-values
-and \fBset-values\fP. The syntax for these actions is:
-.PP
-.I action-name \fP(\fIboolean-expression\fP, \fIarguments\fP)
-.PP
-\fBAction-name\fP is one of \fIcall-proc\fP, \fIdeclare\fP,
-\fIget-values\fP or \fIset-values\fP.
-.PP
-\fBBoolean-expression\fP is composed with the operators \fI|\fR (or), \fI&\fR
-(and), \fI^\fR (xor), and \fI~\fR (not). The operands can be a variable name,
-which starts with a \fI$\fR; a resource name without the bindings \fI.\fP
-or \fI*\fP; or a constant name, including \fImine\fP (event->xany.window
-== XtWindow(widget)), \fIfaked\fP (event->xany.send_event != 0), \fItrue\fP (1)
-and \fIfalse\fP (0).
-.PP
-\fBArguments\fP are self-explanatory; when starting with a \fI$\fP they name
-a variable, otherwise, they indicate a resource name.
-.TP 8
-.B call-proc \fP(\fIboolean-expression\fP, \fIprocedure-name\fP)
-This action allows the evaluation of a boolean expression in the first
-parameter before calling a action procedure. The procedure is only called
-if the expression evaluates as true. Example:
-.EX
-call-proc("$inside & $pressed", notify)
-.EE
-.TP 8
-.B declare \fP(\fIboolean-expression\fP, \fIvariable\fP, \fIvalue\fP, ...)
-This action is used to create new variables or change their values. Any
-number of variable-value tuples may be specified. Example:
-.EX
-declare(1, $pressed, 1)
-.EE
-.TP 8
-.B get-values \fP(\fIboolean-expression\fP, \fIvariable\fP, \fIvalue\fP, ...)
-This action reads a widget resource value into a variable. Any number of
-variable-value tuples may be specified. Example:
-.EX
-get-values(1, $fg, foreground, $bg, background)
-.EE
-.TP 8
-.B set-values \fP(\fIboolean-expression\fP, \fIvariable\fP, \fIvalue\fP, ...)
-This action sets a widget resource to the given value, which may be a
-variable. Any number of variable-value tuples may be specified. Example:
-.EX
-set-values(1, foreground, $bg, background, $fg)
-.EE
-.PP
-Here is a sample translation to make a label widget behave like a button:
-.PP
-.nf
-<Map>: get-values(1, $fg, foreground, $bg, background)\en\e
-<Btn1Down>: set-values(1, foreground, yellow, background, gray30)\en\e
-<Btn1Up>: set-values(1, foreground, $fg, background, $bg)
-.fi
-.SH DISPLAY LISTS
-All of the \fBXaw\fP widgets have now the additional resource
-\fIdisplayList\fP. This resource allows drawing the widget decorations
-using commands embedded in a resource string. The displayList resource has
-the syntax:
-.PP
-\fI[class-name:]function-name arguments[[{;\en}]...]\fP
-.PP
-\fBClass-name\fP is any registered set of functions to draw in the widget.
-Currently the only existing class is \fIxlib\fP, which provides access to
-the Xlib drawing primitives.
-.PP
-\fBFunction-name\fP is the drawing or configuration function to be called,
-described bellow.
-.PP
-\fBArguments\fP may be anything suitable to the displayList function being
-called. When the function requires a coordinate, the syntax is
-\fI{+-}<integer>\fP or \fI<integer>/<integer>\fP. Examples:
-.nf
- +0,+0 top, left
- -0,-0 bottom, right
- -+10,-+10 bottom+10, right+10
- +0,1/2 left, vertical-center
-.fi
-.TP 8
-.B arc-mode \fPmode
-Sets the arc mode. Accepted \fImode\fPs are "pieslice" and "chord", which
-set the arc to ArcPieSlice or ArcChord, respectively. Example:
-.EX
-arc-mode chord
-.EE
-.TP 8
-.B bg \fPcolor-spec
-.TQ
-.B background \fPcolor-spec
-Sets the background color. \fIcolor-spec\fP must a valid color
-specification. Example:
-.EX
-background red
-.EE
-.TP 8
-.B cap-style \fPstyle
-Sets the cap style. Accepted \fIstyle\fPs are "notlast", "butt", "round",
-and "projecting", which set the cap style to CapNotLast, CapBut, CapRound
-or CapProjecting, respectively. Example:
-.EX
-cap-style round
-.EE
-.TP 8
-.B clip-mask \fPpixmap-spec
-Sets the pixmap for the clip mask. Requires a pixmap parameter, as
-described in the \fBPIXMAPS\fP section below. Example:
-.EX
-clip-mask xlogo11
-.EE
-.TP 8
-.B clip-origin \fPx,y
-Sets the clip x and y origin. Requires two arguments, the x and y
-coordinates. Example:
-.EX
-clip-origin 10,10
-.EE
-.TP 8
-.B clip-rects \fPx1,y1,x2,y2 [...,xn,yn]
-.TQ
-.B clip-rectangles \fPx1,y1,x2,y2 [...,xn,yn]
-Sets a list of rectangles to the clip mask. The number of arguments must
-be a multiple of four. The arguments are coordinates. The parser
-calculates the width and height of the rectangles. Example:
-.EX
-clip-rects 0,0,10,20, 20,10,30,30
-.EE
-.TP 8
-.B coord-mode \fPmode
-Changes the coord mode for \fIfill-polygon\fP, \fIdraw-lines\fP, and
-\fIdraw-points\fP. Accepted parameters are "modeorigin" and "previous",
-that sets the coord mode to CoordModeOrigin or CoordModePrevious,
-respectively. Example:
-.EX
-coord-mode previous
-.EE
-.TP 8
-.B copy-area \fP{pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy]
-Calls XCopyArea. The character \fI.\fP means copy the window contents;
-pixmap-spec is as defined in the \fBPIXMAPS\fP section below. \fIX2\fP and
-\fIy2\fP are the coordinates of the end copy, not the width and height; if
-not defined, the parser calculates them. \fIsrc_x\fP and \fIsrc_y\fP
-default to zero. Example:
-.EX
-copy-area Term,10,10
-.EE
-.TP 8
-.B copy-plane \fP{pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy,plane]
-Calls XCopyPlane. The character \fI.\fP means copy the window contents;
-pixmap-spec is as defined in the \fBPIXMAPS\fP section below. \fIX2\fP and
-\fIy2\fP are the coordinates of the end copy, not the width and height; if
-not defined, the parser calculates them. \fIsrc_x\fP and \fIsrc_y\fP
-default to zero. \fIPlane\fP defaults to one. Example:
-.EX
-copy-plane star,10,10
-.EE
-.TP 8
-.B dashes \fPi1[...,in]
-Sets the dashes for line drawing. Accepts up to 127 arguments. Example:
-.EX
-dashes 3,7 9,10
-.EE
-.TP 8
-.B draw-arc \fPx1,y1,x2,y2[,start-angle,end-angle]
-Draws an arc. The four first arguments are the rectangle enclosing the
-arc. The two remaining arguments, if specified, are the start and end
-angle, in degrees. Example:
-.EX
-draw-arc +0,+0,-1,-1,0,90
-.EE
-.TP 8
-.B draw-rect \fPx1,y1,x2,y2
-.TQ
-.B draw-rectangle \fPx1,y1,x2,y2
-Draws a rectangle. Requires four arguments, which are the start and end
-coordinate pairs. Example:
-.EX
-draw-rect +1,+1,-5,-5
-.EE
-.TP 8
-.B draw-string \fPx,y,"string"
-Draws a text string. Requires three arguments, a x coordinate, a y
-coordinate, and a string. Strings that have white space can be quoted with
-the \fI"\fP character; the backslash character \fI\e\fP can also be used,
-but it will be necessary escape it twice. Example:
-.EX
- draw-string 10,10, "Hello world!"\fP
-.EE
-.TP 8
-.B exposures \fPboolean
-Sets graphics exposures in the GC. Allowed parameters are a integer or the
-strings "true", "false", "on" and "off". Example:
-.EX
-exposures true
-.EE
-.TP 8
-.B fill-arc \fPx1,y1,x2,y2[,start-angle,end-angle]
-Like \fIdraw-arc\fP, but fills the contents of the arc with the currently
-selected foreground. Example:
-.EX
-fill-arc +0,+0,-1,-1,0,180
-.EE
-.TP 8
-.B fill-poly \fPx1,y1 [...,xn,yn]
-.TQ
-.B fill-polygon \fPx1,y1 [...,xn,yn]
-Like \fIdraw-lines\fP, but fills the enclosed polygon and joins the first
-and last point, if they are not at the same position. Example:
-.EX
-fill-poly +0,+10, +10,+20, +30,+0
-.EE
-.TP
-.B fill-rect \fPx1,y1,x2,y2
-.TQ
-.B fill-rectangle \fPx1,y1,x2,y2
-Like \fIdraw-rect\fP, but fills the contents of the rectangle with the
-selected foreground color. Example:
-.EX
-fill-rect +10,+10,-20,-20
-.EE
-.TP 8
-.B fill-rule \fPrule
-Sets the fill rule. Accepted parameters are "evenodd" and "winding", which
-set the fill rule to EvenOddRule or WindingRule, respectively. Example:
-.EX
-fill-rule winding
-.EE
-.TP 8
-.B fill-style \fPstyle
-Sets the fill style. Allowed parameters are "solid", "tiled", "stippled" and
-"opaquestippled", which set the fill style to FillSolid, FillTiled,
-FillStippled or FillOpaqueStippled, respectively. Example:
-.EX
-fill-style tiled
-.EE
-.TP 8
-.B font \fPfont-spec
-Sets the font for text functions. Example:
-.EX
-font -*-*-*-R-*-*-*-120-*-*-*-*-ISO8859-1
-.EE
-.TP 8
-.B fg \fPcolor-spec
-.TQ
-.B foreground \fPcolor-spec
-Like \fIbackground\fP, but sets the current foreground color. Example:
-.EX
-foreground blue
-.EE
-.TP 8
-.B mask
-This command is useful when you want to draw only in the region that really
-needs to be repainted. Requires no arguments.
-.TP 8
-.B function \fPfunction-spec
-Sets the specific GC function. Allowed parameters are "set", "clear", "and",
-"andreverse", "copy", "andinverted", "noop", "xor", "or", "nor", "equiv",
-"invert", "orreverse", "copyinverted" and "nand", which set the function to
-GXset, GXclear, GXand, GXandReverse, GXcopy, GXandInverted, GXnoop, GXxor,
-GXor, GXnor, GXequiv, GXinvert, GXorReverse, GXcopyInverted or GXnand,
-respectively. Example:
-.EX
-function xor
-.EE
-.TP 8
-.B join-style \fPstyle
-Sets the join style. Allowed parameters are "miter", "round" and "bevel",
-which set the join style to JoinMiter, JoinRound and JoinBevel,
-respectively. Example:
-.EX
-join-style round
-.EE
-.TP 8
-.B image \fP{pixmap-spec},xs,ys,[xe,ye]
-This function is implemented as a way to quickly compose complex
-decorations in widgets. \fIPixmap-spec\fP is as defined in the
-\fBPIXMAPS\fP section below. \fIxs\fP and \fIys\fP are the coordinates from
-where to start copying the pixmap; \fIxe\fP and \fIye\fP are optional (they
-default to xs + pixmap.width and ys + pixmap.height, respectively). If the
-pixmap has a mask, the copy is masked accordingly. Example:
-.EX
-image pixmap.xpm,0,0,20,20
-.EE
-.TP 8
-.B line \fPx1,y1,x2,y2
-.TQ
-.B draw-line \fPx1,y1,x2,y2
-Draws a line with the current foreground color. Requires four arguments,
-the starting and ending coordinate pairs. Example:
-.EX
-line +0,+0, -1,-1
-.EE
-.TP 8
-.B line-width \fPinteger
-Selects a line width for drawing. Example:
-.EX
-line-width 2
-.EE
-.TP 8
-.B line-style \fPstyle
-Sets the line style. Accepted parameters are "solid", "onoffdash" and
-"doubledash", which set the line style to LineSolid, LineOnOffDash or
-LineDoubleDash, respectively. Example:
-.EX
-line-style onoffdash
-.EE
-.TP 8
-.B lines \fPx1,y1,x2,y2 [...,xn,yn]
-.TQ
-.B draw-lines \fPx1,y1,x2,y2 [...,xn,yn]
-Draws a list of lines. Any number of argument pairs may be supplied.
-Example:
-.EX
-lines +0,-1, -1,-1, -1,+0
-.EE
-.TP 8
-.B paint-string \fPx,y,"string"
-Identical to draw-string, but also uses the background color. Example:
-.EX
- paint-string 10,20, "Sample text"\fP
-.EE
-.TP 8
-.B point \fPx,y
-.TQ
-.B draw-point \fPx,y
-Draws a point. Requires two arguments, a coordinate pair. Example:
-.EX
-point +10,+10
-.EE
-.TP 8
-.B plane-mask \fPinteger
-Sets the plane mask. Requires an integer parameter. Example:
-.EX
-plane-mask -1
-.EE
-.TP 8
-.B points \fPx1,y1 [...,xn,yn]
-.TQ
-.B draw-points \fPx1,y1 [...,xn,yn]
-Draws a list of points at the specified coordinates. Example:
-.EX
-points +1,+2, +1,+4, +1,+6
-.EE
-.TP 8
-.B segments \fPx1,y1,x2,y2 [...,xn,yn]
-.TQ
-.B draw-segments \fPx1,y1,x2,y2 [...,xn,yn]
-Draws a list of segment lines. The number of parameters must be multiple
-of 4. Example:
-.EX
-segments +1,+2,+1,-3, +2,-2,-3,-2
-.EE
-.TP 8
-.B shape-mode \fPmode
-Sets the shape mode used in \fIfill-polygon\fP. Accepted parameters are
-"complex", "convex" or "nonconvex", which set the shape mode to Complex,
-Convex or Nonconvex, accordingly. Example:
-.EX
-shape-mode convex
-.EE
-.TP 8
-.B stipple \fPpixmap-spec
-Sets the pixmap for a stipple. Requires a pixmap parameter, as described
-in the \fBPIXMAPS\fP section below. Example:
-.EX
-stipple plaid
-.EE
-.TP 8
-.B subwindow-mode \fPmode
-Sets the subwindow mode in the GC. Accepted parameters are
-"includeinferiors" and "clipbychildren", which set the subwindow mode to
-IncludeInferiors or ClipByChildren, respectively. Example:
-.EX
-subwindow-mode includeinferiors
-.EE
-.TP 8
-.B tile \fPpixmap-spec
-Sets the pixmap for a tile. Requires a pixmap parameter, as described
-in the \fBPIXMAPS\fP section below. Example:
-.EX
-tile xlogo11?foreground=red&background=gray80
-.EE
-.TP 8
-.B ts-origin \fPx,y
-Sets the tile stipple x and y origin. Requires two arguments, a x and y
-coordinate. Example:
-.EX
-ts-origin 10,10
-.EE
-.TP 8
-.B umask
-Disables the GC mask, if it has been set with the command \fImask\fP.
-Requires no arguments.
-.PP
-Example for drawing a shadow effect in a widget:
-.EX
-foreground gray30;\e
-draw-lines +1,-1,-1,-1,-1,+1;\e
-foreground gray85;\e
-draw-lines -1,+0,+0,+0,+0,-1
-.EE
-.SH PIXMAPS
-A String to Pixmap converter has been added to \fBXaw\fP. This converter
-is meant to be extended, and has enough abstraction to allow loading
-several image formats. It uses a format that resembles a \fIURL\fP, with
-the syntax:
-.PP
-.I [type:]name[?arg=val[{&}...]]
-.PP
-\fBType\fP can be one of \fIbitmap\fP, \fIgradient\fP or \fIxpm\fP.
-.PP
-\fBName\fP may be a file name, or, in the case of type \fIgradient\fP, may be
-either \fIvertical\fP or \fIhorizontal\fP.
-.PP
-\fBArg=val\fP is a list of arguments to the converter. An argument list is
-preceded by a question mark, and multiple arguments are separated by
-ampersands. The most common arguments are \fIforeground\fP and
-\fIbackground\fP. Gradients also support the arguments \fIstart\fP and
-\fIend\fP (colors with which to start and end the gradient); the
-\fPsteps\fP argument, to allow using less colors; and the \fIdimension\fP
-argument to specify the size of the gradient. The \fIxpm\fP converter
-understands the \fIcloseness\fP argument, which aids in using fewer colors
-(useful if you have a limited colormap).
-.SH TEXT WIDGET
-Most of the changes to this version of the Xaw library were done in the
-TextWidget, TextSrcObject, TextSinkObject and related files.
-.PP
-A couple of highly visible changes in the Text widget are due to many bugs
-in the Xaw6 implementation involving scrollbars and auto-resizing.
-Scrollbars being added or removed caused several problems in keeping the
-text cursor visible, and in Xaw6 it was very easy to have a widget thinking
-the cursor was visible, when it was not. Also, permitting automatic
-resizing of the widget to a larger geometry created other problems, making
-it difficult to have a consistent layout in the application, and, if the
-window manager did not interfere, windows larger than the screen could
-result. Therefore, some functionality involving scrollbars and
-auto-resizing has been disabled; see the section on new and modified
-Text widget resources below.
-.PP
-The Text widget's default key bindings were originally based on the Emacs
-text editor. In this release, even more operations familiar to Emacs users
-have been added. New text actions include:
-.TP 8
-.B indent
-Indents text blocks. Not bound by default. The Text widget also does not
-attempt to perform auto-indentation of its source object by default.
-.TP 8
-.B keyboard-reset
-Resets the keyboard state. Reverts the action multiplier to 1, and if undo
-is enabled, toggles between undo and redo. Bound by default to
-\fIControl<Key>G\fP.
-.TP 8
-.B kill-ring-yank
-In this version of Xaw, text killed in any text field is kept in memory,
-allowing cut and paste operations internally to the program between text
-fields. Bound by default to \fIMeta<Key>Y\fP.
-.TP 8
-.B numeric
-Listed here only for purposes of documentation. Called by default when one
-of the characters \fI1, 2, 3, 4, 5, 6, 7, 8, 9, 0,\fP or \fI-\fP is typed,
-allowing composition of the multiplication number of text actions.
-.TP 8
-.B set-keyboard-focus
-Sets the input focus of the top level widget to the text field. Not
-enabled by default, but bound to the \fI<Btn1Down>\fP event.
-.TP 8
-.B toggle-overwrite
-Toggles overwrite mode. In overwrite mode, any text inserted in a text
-field will replace existing text. Bound by default to \fI<Key>Insert\fP.
-.TP 8
-.B undo
-Sets the \fIenableUndo\fP resource of the textSrcObject. Not enabled by
-default, but bound to \fIControl<Key>_\fP.
-.PP
-New and modified Text widget resources include:
-.TP 8
-.B justify (\fPClass\fB Justify)
-Sets the text justification. Can be one of \fIleft, right, center\fP, or
-\fIfull\fP. Only enabled when the \fIautoFill\fP resource is set, and the
-resources \fIleftColumn\fP and \fIrightColumn\fP are correctly set.
-.TP 8
-.B leftColumn (\fPClass\fB Column)
-Specifies the left column at which to break text. Text lines started with
-an alphanumeric character will automatically start at this column.
-.TP 8
-.B positionCallback (\fPClass\fB Callback)
-Allows installation of a callback to be called every time the cursor is
-moved, and/or the file changes its size. The callback is called with a
-pointer to a structure containing the following data:
-.nf
-typedef struct {
- int line_number;
- int column_number;
- XawTextPosition insert_position;
- XawTextPosition last_position;
- Boolean overwrite_mode;
-} XawTextPositionInfo;
-.fi
-This callback is intended to help programmers write text editors based
-on the Xaw widget set.
-.TP 8
-.B resize (\fPClass\fB Resize)
-No longer supported, but recognized for backward compatibility with
-resource specifications written for the Xaw6 Text widget.
-.TP 8
-.B rightColumn (\fPClass\fB Column)
-Specifies the right column at which to break text. Text lines started with
-an alphanumeric character will automatically end at this column.
-.TP 8
-.B scrollHorizontal (\fPClass\fB Scroll)
-.TQ
-.B scrollVertical (\fPClass\fB Scroll)
-These resources control the placement of scrollbars on the left and bottom
-edges of the Text widget. They accept the values \fIXawtextScrollAlways\fP
-and \fIXawtextScrollNever\fP. A converter is registered for this resource
-that will convert the following strings: \fIalways\fP and \fInever\fP. The
-value \fIXawtextScrollWhenNeeded\fP (and \fIwhenNeeded\fP, recognized by
-the converter), is accepted for backwards compatibility with resource
-specifications written for the Xaw6 Text widget, but ignored (effectively
-treated as \fIXawtextScrollNever\fP).
-.SH TEXT SOURCE OBJECT
-The textSrcObject allows display of its contents to more than one window,
-and also stores undo information. The new resources for the textSrcObject
-are:
-.TP 8
-.B callback (\fPClass\fB Callback)
-Previous versions of Xaw had this resource in subclasses of the TextSource
-object. This was changed to make it possible to tell the callback the
-state of the text when undo is enabled.
-.TP 8
-.B enableUndo (\fPClass\fB Undo)
-A boolean resource that enables or disables the undo function. The default
-value is False.
-.TP 8
-.B sourceChanged (\fPClass\fB Changed)
-Like the callback resource, this resource was previously in subclasses of
-the TextSource object. It is now in the textSrcObject to control the
-changed/unchanged state when undo is enabled.
-.SH TEXT SINK OBJECT
-The textSinkObject subclasses asciiSinkObject and multiSinkObject have been
-changed slightly to use a new cursor shape (no longer a caret at the
-baseline) that indicates the input focus of the text widget, and allow
-specification of the cursor color. The new resource is:
-.TP 8
-.B cursorColor (\fPClass\fB Color)
-Sets the cursor color of the text. This color is also used to draw
-selected text.
-.SH SIMPLE MENU WIDGET
-The simpleMenuWidget algorithm to lay out menu entries has been changed to
-enable multiple columns when a single column does not fit on the screen.
-It was also modified to enable submenus.
-.SH SME BSB OBJECT
-A new resource has been added to the smeBSBObject to allow binding submenus
-to it. The new resource is:
-.TP 8
-.B menuName (\fPClass\fB MenuName)
-Specifies the name of the popup widget to be popped up when the pointer is
-over the menu entry, or NULL. Note that the named menu must be a child of
-the popup parent of the smeBSBObject.
-.SH AUTHORS
-The original X Consortium version of the Athena Widget Set and its
-documentation were the work of many people, including Chris D. Peterson,
-Ralph Swick, Mark Ackerman, Donna Converse, Jim Fulton, Loretta
-Guarino-Reid, Charles Haynes, Rich Hyde, Mary Larson, Joel McCormack, Ron
-Newman, Jeanne Rich, Terry Weissman, Mike Gancarz, Phil Karlton, Kathleen
-Langone, Ram Rao, Smokey Wallace, Al Mento, and Jean Diaz.
-.PP
-The additions and modifications to \fIXaw\fR which were
-originally made for XFree86 were written by Paulo
-C\('esar Pereira de Andrade.
-.SH SEE ALSO
-.I Athena Widget Set - C Language Interface
+.\"
+.\" Copyright (c) 1999 by The XFree86 Project, 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 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.
+.\"
+.\" Author: Paulo César Pereira de Andrade
+.\"
+.de EX
+.sp
+.nf
+.ft CW
+..
+.de EE
+.ft R
+.fi
+.sp
+..
+.de TQ
+.\".br
+.ns
+.TP \\$1
+..
+.TH Xaw 3 __vendorversion__
+.SH NAME
+ Xaw \- X Athena Widgets
+.SH DESCRIPTION
+.B Xaw
+is a widget set based on the X Toolkit Intrinsics (Xt) Library. This
+release by the X.Org Foundation includes additions and modifications
+originally made for The XFree86 Project, Inc. This manual page describes
+these changes as well as some of the common interfaces between its version
+and the previous X Consortium release (Xaw6).
+.PP
+The bulk of the Xaw documentation is located in the API specification
+which may be installed in __docdir__, or found on the X.Org website.
+.SH ACTIONS
+All of the \fIXaw\fR widgets now have the additional translations
+.B call-proc, declare, get-values
+and \fBset-values\fP. The syntax for these actions is:
+.PP
+.I action-name \fP(\fIboolean-expression\fP, \fIarguments\fP)
+.PP
+\fBAction-name\fP is one of \fIcall-proc\fP, \fIdeclare\fP,
+\fIget-values\fP or \fIset-values\fP.
+.PP
+\fBBoolean-expression\fP is composed with the operators \fI|\fR (or), \fI&\fR
+(and), \fI^\fR (xor), and \fI~\fR (not). The operands can be a variable name,
+which starts with a \fI$\fR; a resource name without the bindings \fI.\fP
+or \fI*\fP; or a constant name, including \fImine\fP (event->xany.window
+== XtWindow(widget)), \fIfaked\fP (event->xany.send_event != 0), \fItrue\fP (1)
+and \fIfalse\fP (0).
+.PP
+\fBArguments\fP are self-explanatory; when starting with a \fI$\fP they name
+a variable, otherwise, they indicate a resource name.
+.TP 8
+.B call-proc \fP(\fIboolean-expression\fP, \fIprocedure-name\fP)
+This action allows the evaluation of a boolean expression in the first
+parameter before calling a action procedure. The procedure is only called
+if the expression evaluates as true. Example:
+.EX
+call-proc("$inside & $pressed", notify)
+.EE
+.TP 8
+.B declare \fP(\fIboolean-expression\fP, \fIvariable\fP, \fIvalue\fP, ...)
+This action is used to create new variables or change their values. Any
+number of variable-value tuples may be specified. Example:
+.EX
+declare(1, $pressed, 1)
+.EE
+.TP 8
+.B get-values \fP(\fIboolean-expression\fP, \fIvariable\fP, \fIvalue\fP, ...)
+This action reads a widget resource value into a variable. Any number of
+variable-value tuples may be specified. Example:
+.EX
+get-values(1, $fg, foreground, $bg, background)
+.EE
+.TP 8
+.B set-values \fP(\fIboolean-expression\fP, \fIvariable\fP, \fIvalue\fP, ...)
+This action sets a widget resource to the given value, which may be a
+variable. Any number of variable-value tuples may be specified. Example:
+.EX
+set-values(1, foreground, $bg, background, $fg)
+.EE
+.PP
+Here is a sample translation to make a label widget behave like a button:
+.PP
+.nf
+<Map>: get-values(1, $fg, foreground, $bg, background)\en\e
+<Btn1Down>: set-values(1, foreground, yellow, background, gray30)\en\e
+<Btn1Up>: set-values(1, foreground, $fg, background, $bg)
+.fi
+.SH DISPLAY LISTS
+All of the \fBXaw\fP widgets have now the additional resource
+\fIdisplayList\fP. This resource allows drawing the widget decorations
+using commands embedded in a resource string. The displayList resource has
+the syntax:
+.PP
+\fI[class-name:]function-name arguments[[{;\en}]...]\fP
+.PP
+\fBClass-name\fP is any registered set of functions to draw in the widget.
+Currently the only existing class is \fIxlib\fP, which provides access to
+the Xlib drawing primitives.
+.PP
+\fBFunction-name\fP is the drawing or configuration function to be called,
+described bellow.
+.PP
+\fBArguments\fP may be anything suitable to the displayList function being
+called. When the function requires a coordinate, the syntax is
+\fI{+-}<integer>\fP or \fI<integer>/<integer>\fP. Examples:
+.nf
+ +0,+0 top, left
+ -0,-0 bottom, right
+ -+10,-+10 bottom+10, right+10
+ +0,1/2 left, vertical-center
+.fi
+.TP 8
+.B arc-mode \fPmode
+Sets the arc mode. Accepted \fImode\fPs are "pieslice" and "chord", which
+set the arc to ArcPieSlice or ArcChord, respectively. Example:
+.EX
+arc-mode chord
+.EE
+.TP 8
+.B bg \fPcolor-spec
+.TQ
+.B background \fPcolor-spec
+Sets the background color. \fIcolor-spec\fP must a valid color
+specification. Example:
+.EX
+background red
+.EE
+.TP 8
+.B cap-style \fPstyle
+Sets the cap style. Accepted \fIstyle\fPs are "notlast", "butt", "round",
+and "projecting", which set the cap style to CapNotLast, CapBut, CapRound
+or CapProjecting, respectively. Example:
+.EX
+cap-style round
+.EE
+.TP 8
+.B clip-mask \fPpixmap-spec
+Sets the pixmap for the clip mask. Requires a pixmap parameter, as
+described in the \fBPIXMAPS\fP section below. Example:
+.EX
+clip-mask xlogo11
+.EE
+.TP 8
+.B clip-origin \fPx,y
+Sets the clip x and y origin. Requires two arguments, the x and y
+coordinates. Example:
+.EX
+clip-origin 10,10
+.EE
+.TP 8
+.B clip-rects \fPx1,y1,x2,y2 [...,xn,yn]
+.TQ
+.B clip-rectangles \fPx1,y1,x2,y2 [...,xn,yn]
+Sets a list of rectangles to the clip mask. The number of arguments must
+be a multiple of four. The arguments are coordinates. The parser
+calculates the width and height of the rectangles. Example:
+.EX
+clip-rects 0,0,10,20, 20,10,30,30
+.EE
+.TP 8
+.B coord-mode \fPmode
+Changes the coord mode for \fIfill-polygon\fP, \fIdraw-lines\fP, and
+\fIdraw-points\fP. Accepted parameters are "modeorigin" and "previous",
+that sets the coord mode to CoordModeOrigin or CoordModePrevious,
+respectively. Example:
+.EX
+coord-mode previous
+.EE
+.TP 8
+.B copy-area \fP{pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy]
+Calls XCopyArea. The character \fI.\fP means copy the window contents;
+pixmap-spec is as defined in the \fBPIXMAPS\fP section below. \fIX2\fP and
+\fIy2\fP are the coordinates of the end copy, not the width and height; if
+not defined, the parser calculates them. \fIsrc_x\fP and \fIsrc_y\fP
+default to zero. Example:
+.EX
+copy-area Term,10,10
+.EE
+.TP 8
+.B copy-plane \fP{pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy,plane]
+Calls XCopyPlane. The character \fI.\fP means copy the window contents;
+pixmap-spec is as defined in the \fBPIXMAPS\fP section below. \fIX2\fP and
+\fIy2\fP are the coordinates of the end copy, not the width and height; if
+not defined, the parser calculates them. \fIsrc_x\fP and \fIsrc_y\fP
+default to zero. \fIPlane\fP defaults to one. Example:
+.EX
+copy-plane star,10,10
+.EE
+.TP 8
+.B dashes \fPi1[...,in]
+Sets the dashes for line drawing. Accepts up to 127 arguments. Example:
+.EX
+dashes 3,7 9,10
+.EE
+.TP 8
+.B draw-arc \fPx1,y1,x2,y2[,start-angle,end-angle]
+Draws an arc. The four first arguments are the rectangle enclosing the
+arc. The two remaining arguments, if specified, are the start and end
+angle, in degrees. Example:
+.EX
+draw-arc +0,+0,-1,-1,0,90
+.EE
+.TP 8
+.B draw-rect \fPx1,y1,x2,y2
+.TQ
+.B draw-rectangle \fPx1,y1,x2,y2
+Draws a rectangle. Requires four arguments, which are the start and end
+coordinate pairs. Example:
+.EX
+draw-rect +1,+1,-5,-5
+.EE
+.TP 8
+.B draw-string \fPx,y,"string"
+Draws a text string. Requires three arguments, a x coordinate, a y
+coordinate, and a string. Strings that have white space can be quoted with
+the \fI"\fP character; the backslash character \fI\e\fP can also be used,
+but it will be necessary escape it twice. Example:
+.EX
+ draw-string 10,10, "Hello world!"\fP
+.EE
+.TP 8
+.B exposures \fPboolean
+Sets graphics exposures in the GC. Allowed parameters are a integer or the
+strings "true", "false", "on" and "off". Example:
+.EX
+exposures true
+.EE
+.TP 8
+.B fill-arc \fPx1,y1,x2,y2[,start-angle,end-angle]
+Like \fIdraw-arc\fP, but fills the contents of the arc with the currently
+selected foreground. Example:
+.EX
+fill-arc +0,+0,-1,-1,0,180
+.EE
+.TP 8
+.B fill-poly \fPx1,y1 [...,xn,yn]
+.TQ
+.B fill-polygon \fPx1,y1 [...,xn,yn]
+Like \fIdraw-lines\fP, but fills the enclosed polygon and joins the first
+and last point, if they are not at the same position. Example:
+.EX
+fill-poly +0,+10, +10,+20, +30,+0
+.EE
+.TP
+.B fill-rect \fPx1,y1,x2,y2
+.TQ
+.B fill-rectangle \fPx1,y1,x2,y2
+Like \fIdraw-rect\fP, but fills the contents of the rectangle with the
+selected foreground color. Example:
+.EX
+fill-rect +10,+10,-20,-20
+.EE
+.TP 8
+.B fill-rule \fPrule
+Sets the fill rule. Accepted parameters are "evenodd" and "winding", which
+set the fill rule to EvenOddRule or WindingRule, respectively. Example:
+.EX
+fill-rule winding
+.EE
+.TP 8
+.B fill-style \fPstyle
+Sets the fill style. Allowed parameters are "solid", "tiled", "stippled" and
+"opaquestippled", which set the fill style to FillSolid, FillTiled,
+FillStippled or FillOpaqueStippled, respectively. Example:
+.EX
+fill-style tiled
+.EE
+.TP 8
+.B font \fPfont-spec
+Sets the font for text functions. Example:
+.EX
+font -*-*-*-R-*-*-*-120-*-*-*-*-ISO8859-1
+.EE
+.TP 8
+.B fg \fPcolor-spec
+.TQ
+.B foreground \fPcolor-spec
+Like \fIbackground\fP, but sets the current foreground color. Example:
+.EX
+foreground blue
+.EE
+.TP 8
+.B mask
+This command is useful when you want to draw only in the region that really
+needs to be repainted. Requires no arguments.
+.TP 8
+.B function \fPfunction-spec
+Sets the specific GC function. Allowed parameters are "set", "clear", "and",
+"andreverse", "copy", "andinverted", "noop", "xor", "or", "nor", "equiv",
+"invert", "orreverse", "copyinverted" and "nand", which set the function to
+GXset, GXclear, GXand, GXandReverse, GXcopy, GXandInverted, GXnoop, GXxor,
+GXor, GXnor, GXequiv, GXinvert, GXorReverse, GXcopyInverted or GXnand,
+respectively. Example:
+.EX
+function xor
+.EE
+.TP 8
+.B join-style \fPstyle
+Sets the join style. Allowed parameters are "miter", "round" and "bevel",
+which set the join style to JoinMiter, JoinRound and JoinBevel,
+respectively. Example:
+.EX
+join-style round
+.EE
+.TP 8
+.B image \fP{pixmap-spec},xs,ys,[xe,ye]
+This function is implemented as a way to quickly compose complex
+decorations in widgets. \fIPixmap-spec\fP is as defined in the
+\fBPIXMAPS\fP section below. \fIxs\fP and \fIys\fP are the coordinates from
+where to start copying the pixmap; \fIxe\fP and \fIye\fP are optional (they
+default to xs + pixmap.width and ys + pixmap.height, respectively). If the
+pixmap has a mask, the copy is masked accordingly. Example:
+.EX
+image pixmap.xpm,0,0,20,20
+.EE
+.TP 8
+.B line \fPx1,y1,x2,y2
+.TQ
+.B draw-line \fPx1,y1,x2,y2
+Draws a line with the current foreground color. Requires four arguments,
+the starting and ending coordinate pairs. Example:
+.EX
+line +0,+0, -1,-1
+.EE
+.TP 8
+.B line-width \fPinteger
+Selects a line width for drawing. Example:
+.EX
+line-width 2
+.EE
+.TP 8
+.B line-style \fPstyle
+Sets the line style. Accepted parameters are "solid", "onoffdash" and
+"doubledash", which set the line style to LineSolid, LineOnOffDash or
+LineDoubleDash, respectively. Example:
+.EX
+line-style onoffdash
+.EE
+.TP 8
+.B lines \fPx1,y1,x2,y2 [...,xn,yn]
+.TQ
+.B draw-lines \fPx1,y1,x2,y2 [...,xn,yn]
+Draws a list of lines. Any number of argument pairs may be supplied.
+Example:
+.EX
+lines +0,-1, -1,-1, -1,+0
+.EE
+.TP 8
+.B paint-string \fPx,y,"string"
+Identical to draw-string, but also uses the background color. Example:
+.EX
+ paint-string 10,20, "Sample text"\fP
+.EE
+.TP 8
+.B point \fPx,y
+.TQ
+.B draw-point \fPx,y
+Draws a point. Requires two arguments, a coordinate pair. Example:
+.EX
+point +10,+10
+.EE
+.TP 8
+.B plane-mask \fPinteger
+Sets the plane mask. Requires an integer parameter. Example:
+.EX
+plane-mask -1
+.EE
+.TP 8
+.B points \fPx1,y1 [...,xn,yn]
+.TQ
+.B draw-points \fPx1,y1 [...,xn,yn]
+Draws a list of points at the specified coordinates. Example:
+.EX
+points +1,+2, +1,+4, +1,+6
+.EE
+.TP 8
+.B segments \fPx1,y1,x2,y2 [...,xn,yn]
+.TQ
+.B draw-segments \fPx1,y1,x2,y2 [...,xn,yn]
+Draws a list of segment lines. The number of parameters must be multiple
+of 4. Example:
+.EX
+segments +1,+2,+1,-3, +2,-2,-3,-2
+.EE
+.TP 8
+.B shape-mode \fPmode
+Sets the shape mode used in \fIfill-polygon\fP. Accepted parameters are
+"complex", "convex" or "nonconvex", which set the shape mode to Complex,
+Convex or Nonconvex, accordingly. Example:
+.EX
+shape-mode convex
+.EE
+.TP 8
+.B stipple \fPpixmap-spec
+Sets the pixmap for a stipple. Requires a pixmap parameter, as described
+in the \fBPIXMAPS\fP section below. Example:
+.EX
+stipple plaid
+.EE
+.TP 8
+.B subwindow-mode \fPmode
+Sets the subwindow mode in the GC. Accepted parameters are
+"includeinferiors" and "clipbychildren", which set the subwindow mode to
+IncludeInferiors or ClipByChildren, respectively. Example:
+.EX
+subwindow-mode includeinferiors
+.EE
+.TP 8
+.B tile \fPpixmap-spec
+Sets the pixmap for a tile. Requires a pixmap parameter, as described
+in the \fBPIXMAPS\fP section below. Example:
+.EX
+tile xlogo11?foreground=red&background=gray80
+.EE
+.TP 8
+.B ts-origin \fPx,y
+Sets the tile stipple x and y origin. Requires two arguments, a x and y
+coordinate. Example:
+.EX
+ts-origin 10,10
+.EE
+.TP 8
+.B umask
+Disables the GC mask, if it has been set with the command \fImask\fP.
+Requires no arguments.
+.PP
+Example for drawing a shadow effect in a widget:
+.EX
+foreground gray30;\e
+draw-lines +1,-1,-1,-1,-1,+1;\e
+foreground gray85;\e
+draw-lines -1,+0,+0,+0,+0,-1
+.EE
+.SH PIXMAPS
+A String to Pixmap converter has been added to \fBXaw\fP. This converter
+is meant to be extended, and has enough abstraction to allow loading
+several image formats. It uses a format that resembles a \fIURL\fP, with
+the syntax:
+.PP
+.I [type:]name[?arg=val[{&}...]]
+.PP
+\fBType\fP can be one of \fIbitmap\fP, \fIgradient\fP or \fIxpm\fP.
+.PP
+\fBName\fP may be a file name, or, in the case of type \fIgradient\fP, may be
+either \fIvertical\fP or \fIhorizontal\fP.
+.PP
+\fBArg=val\fP is a list of arguments to the converter. An argument list is
+preceded by a question mark, and multiple arguments are separated by
+ampersands. The most common arguments are \fIforeground\fP and
+\fIbackground\fP. Gradients also support the arguments \fIstart\fP and
+\fIend\fP (colors with which to start and end the gradient); the
+\fPsteps\fP argument, to allow using less colors; and the \fIdimension\fP
+argument to specify the size of the gradient. The \fIxpm\fP converter
+understands the \fIcloseness\fP argument, which aids in using fewer colors
+(useful if you have a limited colormap).
+.SH TEXT WIDGET
+Most of the changes to this version of the Xaw library were done in the
+TextWidget, TextSrcObject, TextSinkObject and related files.
+.PP
+A couple of highly visible changes in the Text widget are due to many bugs
+in the Xaw6 implementation involving scrollbars and auto-resizing.
+Scrollbars being added or removed caused several problems in keeping the
+text cursor visible, and in Xaw6 it was very easy to have a widget thinking
+the cursor was visible, when it was not. Also, permitting automatic
+resizing of the widget to a larger geometry created other problems, making
+it difficult to have a consistent layout in the application, and, if the
+window manager did not interfere, windows larger than the screen could
+result. Therefore, some functionality involving scrollbars and
+auto-resizing has been disabled; see the section on new and modified
+Text widget resources below.
+.PP
+The Text widget's default key bindings were originally based on the Emacs
+text editor. In this release, even more operations familiar to Emacs users
+have been added. New text actions include:
+.TP 8
+.B indent
+Indents text blocks. Not bound by default. The Text widget also does not
+attempt to perform auto-indentation of its source object by default.
+.TP 8
+.B keyboard-reset
+Resets the keyboard state. Reverts the action multiplier to 1, and if undo
+is enabled, toggles between undo and redo. Bound by default to
+\fIControl<Key>G\fP.
+.TP 8
+.B kill-ring-yank
+In this version of Xaw, text killed in any text field is kept in memory,
+allowing cut and paste operations internally to the program between text
+fields. Bound by default to \fIMeta<Key>Y\fP.
+.TP 8
+.B numeric
+Listed here only for purposes of documentation. Called by default when one
+of the characters \fI1, 2, 3, 4, 5, 6, 7, 8, 9, 0,\fP or \fI-\fP is typed,
+allowing composition of the multiplication number of text actions.
+.TP 8
+.B set-keyboard-focus
+Sets the input focus of the top level widget to the text field. Not
+enabled by default, but bound to the \fI<Btn1Down>\fP event.
+.TP 8
+.B toggle-overwrite
+Toggles overwrite mode. In overwrite mode, any text inserted in a text
+field will replace existing text. Bound by default to \fI<Key>Insert\fP.
+.TP 8
+.B undo
+Sets the \fIenableUndo\fP resource of the textSrcObject. Not enabled by
+default, but bound to \fIControl<Key>_\fP.
+.PP
+New and modified Text widget resources include:
+.TP 8
+.B justify (\fPClass\fB Justify)
+Sets the text justification. Can be one of \fIleft, right, center\fP, or
+\fIfull\fP. Only enabled when the \fIautoFill\fP resource is set, and the
+resources \fIleftColumn\fP and \fIrightColumn\fP are correctly set.
+.TP 8
+.B leftColumn (\fPClass\fB Column)
+Specifies the left column at which to break text. Text lines started with
+an alphanumeric character will automatically start at this column.
+.TP 8
+.B positionCallback (\fPClass\fB Callback)
+Allows installation of a callback to be called every time the cursor is
+moved, and/or the file changes its size. The callback is called with a
+pointer to a structure containing the following data:
+.nf
+typedef struct {
+ int line_number;
+ int column_number;
+ XawTextPosition insert_position;
+ XawTextPosition last_position;
+ Boolean overwrite_mode;
+} XawTextPositionInfo;
+.fi
+This callback is intended to help programmers write text editors based
+on the Xaw widget set.
+.TP 8
+.B resize (\fPClass\fB Resize)
+No longer supported, but recognized for backward compatibility with
+resource specifications written for the Xaw6 Text widget.
+.TP 8
+.B rightColumn (\fPClass\fB Column)
+Specifies the right column at which to break text. Text lines started with
+an alphanumeric character will automatically end at this column.
+.TP 8
+.B scrollHorizontal (\fPClass\fB Scroll)
+.TQ
+.B scrollVertical (\fPClass\fB Scroll)
+These resources control the placement of scrollbars on the left and bottom
+edges of the Text widget. They accept the values \fIXawtextScrollAlways\fP
+and \fIXawtextScrollNever\fP. A converter is registered for this resource
+that will convert the following strings: \fIalways\fP and \fInever\fP. The
+value \fIXawtextScrollWhenNeeded\fP (and \fIwhenNeeded\fP, recognized by
+the converter), is accepted for backwards compatibility with resource
+specifications written for the Xaw6 Text widget, but ignored (effectively
+treated as \fIXawtextScrollNever\fP).
+.SH TEXT SOURCE OBJECT
+The textSrcObject allows display of its contents to more than one window,
+and also stores undo information. The new resources for the textSrcObject
+are:
+.TP 8
+.B callback (\fPClass\fB Callback)
+Previous versions of Xaw had this resource in subclasses of the TextSource
+object. This was changed to make it possible to tell the callback the
+state of the text when undo is enabled.
+.TP 8
+.B enableUndo (\fPClass\fB Undo)
+A boolean resource that enables or disables the undo function. The default
+value is False.
+.TP 8
+.B sourceChanged (\fPClass\fB Changed)
+Like the callback resource, this resource was previously in subclasses of
+the TextSource object. It is now in the textSrcObject to control the
+changed/unchanged state when undo is enabled.
+.SH TEXT SINK OBJECT
+The textSinkObject subclasses asciiSinkObject and multiSinkObject have been
+changed slightly to use a new cursor shape (no longer a caret at the
+baseline) that indicates the input focus of the text widget, and allow
+specification of the cursor color. The new resource is:
+.TP 8
+.B cursorColor (\fPClass\fB Color)
+Sets the cursor color of the text. This color is also used to draw
+selected text.
+.SH SIMPLE MENU WIDGET
+The simpleMenuWidget algorithm to lay out menu entries has been changed to
+enable multiple columns when a single column does not fit on the screen.
+It was also modified to enable submenus.
+.SH SME BSB OBJECT
+A new resource has been added to the smeBSBObject to allow binding submenus
+to it. The new resource is:
+.TP 8
+.B menuName (\fPClass\fB MenuName)
+Specifies the name of the popup widget to be popped up when the pointer is
+over the menu entry, or NULL. Note that the named menu must be a child of
+the popup parent of the smeBSBObject.
+.SH AUTHORS
+The original X Consortium version of the Athena Widget Set and its
+documentation were the work of many people, including Chris D. Peterson,
+Ralph Swick, Mark Ackerman, Donna Converse, Jim Fulton, Loretta
+Guarino-Reid, Charles Haynes, Rich Hyde, Mary Larson, Joel McCormack, Ron
+Newman, Jeanne Rich, Terry Weissman, Mike Gancarz, Phil Karlton, Kathleen
+Langone, Ram Rao, Smokey Wallace, Al Mento, and Jean Diaz.
+.PP
+The additions and modifications to \fIXaw\fR which were
+originally made for XFree86 were written by Paulo
+C\('esar Pereira de Andrade.
+.SH SEE ALSO
+.I Athena Widget Set - C Language Interface
diff --git a/libXaw/missing b/libXaw/missing
deleted file mode 100644
index 28055d2ae..000000000
--- a/libXaw/missing
+++ /dev/null
@@ -1,376 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2009-04-28.21; # UTC
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# 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, 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 <http://www.gnu.org/licenses/>.
-
-# 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.
-
-if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
-fi
-
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
- configure_ac=configure.ac
-else
- configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-case $1 in
---run)
- # Try to run requested program, and just exit if it succeeds.
- run=
- shift
- "$@" && exit 0
- # Exit code 63 means version mismatch. This often happens
- # when the user try to use an ancient version of a tool on
- # a file that requires a minimum version. In this case we
- # we should proceed has if the program had been absent, or
- # if --run hadn't been passed.
- if test $? = 63; then
- run=:
- msg="probably too old"
- fi
- ;;
-
- -h|--h|--he|--hel|--help)
- echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
- -h, --help display this help and exit
- -v, --version output version information and exit
- --run try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
- autom4te touch the output file, or create a stub one
- automake touch all \`Makefile.in' files
- bison create \`y.tab.[ch]', if possible, from existing .[ch]
- flex create \`lex.yy.c', if possible, from existing .c
- help2man touch the output file
- lex create \`lex.yy.c', if possible, from existing .c
- makeinfo touch the output file
- tar try tar, gnutar, gtar, then tar without non-portable flags
- yacc create \`y.tab.[ch]', if possible, from existing .[ch]
-
-Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
-\`g' are ignored when checking the name.
-
-Send bug reports to <bug-automake@gnu.org>."
- exit $?
- ;;
-
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "missing $scriptversion (GNU Automake)"
- exit $?
- ;;
-
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
-
-esac
-
-# normalize program name to check for.
-program=`echo "$1" | sed '
- s/^gnu-//; t
- s/^gnu//; t
- s/^g//; t'`
-
-# Now exit if we have it, but it failed. Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program). This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
- lex*|yacc*)
- # Not GNU programs, they don't have --version.
- ;;
-
- tar*)
- if test -n "$run"; then
- echo 1>&2 "ERROR: \`tar' requires --run"
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- exit 1
- fi
- ;;
-
- *)
- if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
- # We have it, but it failed.
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- # Could not run --version or --help. This is probably someone
- # running `$TOOL --version' or `$TOOL --help' to check whether
- # $TOOL exists and not knowing $TOOL uses missing.
- exit 1
- fi
- ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
- aclocal*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acinclude.m4' or \`${configure_ac}'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
- any GNU archive site."
- touch aclocal.m4
- ;;
-
- autoconf*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`${configure_ac}'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
- archive site."
- touch configure
- ;;
-
- autoheader*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acconfig.h' or \`${configure_ac}'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
- from any GNU archive site."
- files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
- test -z "$files" && files="config.h"
- touch_files=
- for f in $files; do
- case $f in
- *:*) touch_files="$touch_files "`echo "$f" |
- sed -e 's/^[^:]*://' -e 's/:.*//'`;;
- *) touch_files="$touch_files $f.in";;
- esac
- done
- touch $touch_files
- ;;
-
- automake*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
- You might want to install the \`Automake' and \`Perl' packages.
- Grab them from any GNU archive site."
- find . -type f -name Makefile.am -print |
- sed 's/\.am$/.in/' |
- while read f; do touch "$f"; done
- ;;
-
- autom4te*)
- echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
- You might have modified some files without having the
- proper tools for further handling them.
- You can get \`$1' as part of \`Autoconf' from any GNU
- archive site."
-
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -f "$file"; then
- touch $file
- else
- test -z "$file" || exec >$file
- echo "#! /bin/sh"
- echo "# Created by GNU Automake missing as a replacement of"
- echo "# $ $@"
- echo "exit 0"
- chmod +x $file
- exit 1
- fi
- ;;
-
- bison*|yacc*)
- echo 1>&2 "\
-WARNING: \`$1' $msg. You should only need it if
- you modified a \`.y' file. You may need the \`Bison' package
- in order for those modifications to take effect. You can get
- \`Bison' from any GNU archive site."
- rm -f y.tab.c y.tab.h
- if test $# -ne 1; then
- eval LASTARG="\${$#}"
- case $LASTARG in
- *.y)
- SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" y.tab.c
- fi
- SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" y.tab.h
- fi
- ;;
- esac
- fi
- if test ! -f y.tab.h; then
- echo >y.tab.h
- fi
- if test ! -f y.tab.c; then
- echo 'main() { return 0; }' >y.tab.c
- fi
- ;;
-
- lex*|flex*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.l' file. You may need the \`Flex' package
- in order for those modifications to take effect. You can get
- \`Flex' from any GNU archive site."
- rm -f lex.yy.c
- if test $# -ne 1; then
- eval LASTARG="\${$#}"
- case $LASTARG in
- *.l)
- SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" lex.yy.c
- fi
- ;;
- esac
- fi
- if test ! -f lex.yy.c; then
- echo 'main() { return 0; }' >lex.yy.c
- fi
- ;;
-
- help2man*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a dependency of a manual page. You may need the
- \`Help2man' package in order for those modifications to take
- effect. You can get \`Help2man' from any GNU archive site."
-
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -f "$file"; then
- touch $file
- else
- test -z "$file" || exec >$file
- echo ".ab help2man is required to generate this page"
- exit $?
- fi
- ;;
-
- makeinfo*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.texi' or \`.texinfo' file, or any other file
- indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
- # The file to touch is that specified with -o ...
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -z "$file"; then
- # ... or it is the one specified with @setfilename ...
- infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '
- /^@setfilename/{
- s/.* \([^ ]*\) *$/\1/
- p
- q
- }' $infile`
- # ... or it is derived from the source name (dir/f.texi becomes f.info)
- test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
- fi
- # If the file does not exist, the user really needs makeinfo;
- # let's fail without touching anything.
- test -f $file || exit 1
- touch $file
- ;;
-
- tar*)
- shift
-
- # We have already tried tar in the generic part.
- # Look for gnutar/gtar before invocation to avoid ugly error
- # messages.
- if (gnutar --version > /dev/null 2>&1); then
- gnutar "$@" && exit 0
- fi
- if (gtar --version > /dev/null 2>&1); then
- gtar "$@" && exit 0
- fi
- firstarg="$1"
- if shift; then
- case $firstarg in
- *o*)
- firstarg=`echo "$firstarg" | sed s/o//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- case $firstarg in
- *h*)
- firstarg=`echo "$firstarg" | sed s/h//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- fi
-
- echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
- You may want to install GNU tar or Free paxutils, or check the
- command line arguments."
- exit 1
- ;;
-
- *)
- echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
- You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
- it often tells you about the needed prerequisites for installing
- this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
- exit 1
- ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/libXaw/spec/AsciiSink b/libXaw/spec/AsciiSink
deleted file mode 100644
index 56dc20ea6..000000000
--- a/libXaw/spec/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 <X11/Xaw/AsciiSink.h>
-.IN "AsciiSink.h" ""
-Class Header file <X11/Xaw/AsciiSinkP.h>
-.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/libXaw/spec/AsciiSource b/libXaw/spec/AsciiSource
deleted file mode 100644
index 19b976562..000000000
--- a/libXaw/spec/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 <X11/Xaw/AsciiSrc.h> or <X11/Xaw/MultiSrc.h>
-.IN "AsciiSrc.h" ""
-Class Header file <X11/Xaw/AsciiSrcP.h> or <X11/Xaw/MultiSrcP.h>
-.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/libXaw/spec/AsciiText b/libXaw/spec/AsciiText
deleted file mode 100644
index 815e0e162..000000000
--- a/libXaw/spec/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 <X11/Xaw/AsciiText.h>
-.IN "AsciiText.h" ""
-ClassHeader file <X11/Xaw/AsciiTextP.h>
-.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/libXaw/spec/Box b/libXaw/spec/Box
deleted file mode 100644
index 22bfe39b1..000000000
--- a/libXaw/spec/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 <X11/Xaw/Box.h>
-.IN "Box.h" ""
-Class Header file <X11/Xaw/BoxP.h>
-.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/libXaw/spec/CH1 b/libXaw/spec/CH1
deleted file mode 100644
index b392a7012..000000000
--- a/libXaw/spec/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 \fB\*(xV\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 <X11/Xaw/Box.h>
-Class Header file <X11/Xaw/BoxP.h>
-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/libXaw/spec/CH2 b/libXaw/spec/CH2
deleted file mode 100644
index 9e6c17a8a..000000000
--- a/libXaw/spec/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 #<red><green><blue> 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/libXaw/spec/CH3.intro b/libXaw/spec/CH3.intro
deleted file mode 100644
index 9040e02d5..000000000
--- a/libXaw/spec/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/libXaw/spec/CH6.intro b/libXaw/spec/CH6.intro
deleted file mode 100644
index 530f2f7f9..000000000
--- a/libXaw/spec/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/libXaw/spec/CH7.intro b/libXaw/spec/CH7.intro
deleted file mode 100644
index 7aaa1896b..000000000
--- a/libXaw/spec/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/libXaw/spec/Command b/libXaw/spec/Command
deleted file mode 100644
index 13dac468b..000000000
--- a/libXaw/spec/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 <X11/Xaw/Command.h>
-.IN "Command.h" ""
-Class header file <X11/Xaw/CommandP.h>
-.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
- <EnterWindow>: highlight(\|)
- <LeaveWindow>: reset(\|)
- <Btn1Down>: set(\|)
- <Btn1Up>: 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 <Btn1Down>,<Btn1Up>: 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/libXaw/spec/Dialog b/libXaw/spec/Dialog
deleted file mode 100644
index d14bca0b4..000000000
--- a/libXaw/spec/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 <X11/Xaw/Dialog.h>
-.IN "Dialog.h" ""
-Class Header file <X11/Xaw/DialogP.h>
-.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/libXaw/spec/Form b/libXaw/spec/Form
deleted file mode 100644
index 9ada171dd..000000000
--- a/libXaw/spec/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 <X11/Xaw/Form.h>
-.IN "Form.h" ""
-Class Header file <X11/Xaw/FormP.h>
-.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/libXaw/spec/Grip b/libXaw/spec/Grip
deleted file mode 100644
index cdbcb0ee6..000000000
--- a/libXaw/spec/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 <X11/Xaw/Grip.h>
-.IN "Grip.h" ""
-Class header file <X11/Xaw/GripP.h>
-.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
- <Btn1Down>: GripAction(press)
- <Btn1Motion>: GripAction(move)
- <Btn1Up>: GripAction(release)
-.sp
-.De
-For a complete description of the format of translation tables, see the
-\fI\*(xT\fP.
diff --git a/libXaw/spec/Label b/libXaw/spec/Label
deleted file mode 100644
index bbf4ce44a..000000000
--- a/libXaw/spec/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 <X11/Xaw/Label.h>
-.IN "Label.h" ""
-Class header file <X11/Xaw/LabelP.h>
-.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/libXaw/spec/List b/libXaw/spec/List
deleted file mode 100644
index 1b64aaaf5..000000000
--- a/libXaw/spec/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 <X11/Xaw/List.h>
-.IN "List.h" ""
-Class header file <X11/Xaw/ListP.h>
-.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
-<Btn1Down>,<Btn1Up>: 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/libXaw/spec/Makefile.am b/libXaw/spec/Makefile.am
deleted file mode 100644
index 9e16f9797..000000000
--- a/libXaw/spec/Makefile.am
+++ /dev/null
@@ -1,96 +0,0 @@
-#
-# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-#
-# 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 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.
-#
-
-# Based on xc/doc/specs/Xaw/Makefile from X11R6.9
-
-XDOCMACROS = macros.t
-XIDXMACROS = indexmacros.t
-EVERYWHERE = $(XDOCMACROS) strings.mit strings.xaw
-CHAPTER1 = CH1
-CHAPTER2 = CH2
-CHAPTER3 = CH3.intro Command Grip Label List Panner Repeater \
- Scrollbar Simple StripChart Toggle
-CHAPTER4 = CH4.intro SimpleMenu SmeBSB SmeLine Sme MenuButton
-CHAPTER5 = CH5.intro TextActions TextFuncs AsciiText AsciiSource AsciiSink \
- TextCustom Text TextSource TextSink
-CHAPTER6 = CH6.intro Box Dialog Form Paned Porthole Tree Viewport
-CHAPTER7 = CH7.intro Template
-
-spec_sources = \
- $(EVERYWHERE) TPage_Credits \
- $(CHAPTER1) $(CHAPTER2) $(CHAPTER3) $(CHAPTER4) \
- $(CHAPTER5) $(CHAPTER6) $(CHAPTER7)
-
-spec_input = $(spec_sources:%=$(srcdir)/%)
-
-EXTRA_DIST = $(spec_sources) $(XIDXMACROS) block.awk fixindex.awk widg.idxmac.t
-
-if BUILD_DOCS
-doc_DATA = widgets.ps widgets.index.ps widgets.txt widgets.html
-
-CLEANFILES = $(doc_DATA)
-MOSTLYCLEANFILES = index.*
-
-GROFF_DEFS = -dxV="$(PACKAGE_STRING)"
-GROFF_FLAGS = -t -ms $(GROFF_DEFS)
-
-widgets.ps: $(spec_input)
- -$(AM_V_GEN) $(GROFF) -Tps $(GROFF_FLAGS) $(spec_input) \
- 2> index.raw > $@
- @if grep '^[^1-9.]' index.raw | grep -v warning; then exit 1; \
- else test $$? -le 1; fi
-
-widgets.txt: $(spec_input)
- $(AM_V_GEN) $(GROFF) -Tascii $(GROFF_FLAGS) $(spec_input) \
- 2> index.txt.raw > $@
-
-widgets.html: $(spec_input)
- $(AM_V_GEN) $(GROFF) -Thtml $(GROFF_FLAGS) $(spec_input) \
- 2> index.html.raw > $@
-
-index.raw: widgets.ps
-
-index.pageno: index.raw
- $(AM_V_GEN)$(SED) -n '$$p' index.raw > $@
-
-index.troff: index.raw
- $(AM_V_GEN)$(GREP) '^[1-9]' index.raw | \
- (sort -f '-t:' -k2,2 -k1,1n 2>/dev/null || \
- sort -f '-t:' +1 -3 +0n -1n) | \
- $(AWK) -f $(srcdir)/fixindex.awk | \
- $(AWK) -f $(srcdir)/block.awk > $@
-
-widgets.index.ps: widg.idxmac.t index.troff index.pageno
- $(AM_V_GEN)$(GROFF) -me $(GROFF_DEFS) \
- $(srcdir)/widg.idxmac.t $(srcdir)/$(XIDXMACROS) index.troff > $@
-
-
-# Useful for running off part of the manual by hand,
-# e.g., make part PART=Label
-part: $(srcdir)/$(PART)
- $(GROFF) -Tps $(GROFF_FLAGS) $(EVERYWHERE) $(srcdir)/$(PART) > $(PART).ps
-
-endif BUILD_DOCS
diff --git a/libXaw/spec/Makefile.in b/libXaw/spec/Makefile.in
deleted file mode 100644
index a57ed02c2..000000000
--- a/libXaw/spec/Makefile.in
+++ /dev/null
@@ -1,513 +0,0 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 2009 Sun Microsystems, Inc. All rights reserved.
-#
-# 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 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.
-#
-
-# Based on xc/doc/specs/Xaw/Makefile from X11R6.9
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-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 = spec
-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 = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo " GEN " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-SOURCES =
-DIST_SOURCES =
-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 = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(docdir)"
-DATA = $(doc_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
-ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APP_MAN_DIR = @APP_MAN_DIR@
-APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CHANGELOG_CMD = @CHANGELOG_CMD@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CWARNFLAGS = @CWARNFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
-DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
-DSYMUTIL = @DSYMUTIL@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-FILE_MAN_DIR = @FILE_MAN_DIR@
-FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
-GREP = @GREP@
-GROFF = @GROFF@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBEXT = @LIBEXT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_MAN_DIR = @LIB_MAN_DIR@
-LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MISC_MAN_DIR = @MISC_MAN_DIR@
-MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
-MKDIR_P = @MKDIR_P@
-NMEDIT = @NMEDIT@
-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@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XAW6_CFLAGS = @XAW6_CFLAGS@
-XAW6_LIBS = @XAW6_LIBS@
-XAW7_CFLAGS = @XAW7_CFLAGS@
-XAW7_LIBS = @XAW7_LIBS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-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@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-distcleancheck_listfiles = @distcleancheck_listfiles@
-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@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-XDOCMACROS = macros.t
-XIDXMACROS = indexmacros.t
-EVERYWHERE = $(XDOCMACROS) strings.mit strings.xaw
-CHAPTER1 = CH1
-CHAPTER2 = CH2
-CHAPTER3 = CH3.intro Command Grip Label List Panner Repeater \
- Scrollbar Simple StripChart Toggle
-
-CHAPTER4 = CH4.intro SimpleMenu SmeBSB SmeLine Sme MenuButton
-CHAPTER5 = CH5.intro TextActions TextFuncs AsciiText AsciiSource AsciiSink \
- TextCustom Text TextSource TextSink
-
-CHAPTER6 = CH6.intro Box Dialog Form Paned Porthole Tree Viewport
-CHAPTER7 = CH7.intro Template
-spec_sources = \
- $(EVERYWHERE) TPage_Credits \
- $(CHAPTER1) $(CHAPTER2) $(CHAPTER3) $(CHAPTER4) \
- $(CHAPTER5) $(CHAPTER6) $(CHAPTER7)
-
-spec_input = $(spec_sources:%=$(srcdir)/%)
-EXTRA_DIST = $(spec_sources) $(XIDXMACROS) block.awk fixindex.awk widg.idxmac.t
-@BUILD_DOCS_TRUE@doc_DATA = widgets.ps widgets.index.ps widgets.txt widgets.html
-@BUILD_DOCS_TRUE@CLEANFILES = $(doc_DATA)
-@BUILD_DOCS_TRUE@MOSTLYCLEANFILES = index.*
-@BUILD_DOCS_TRUE@GROFF_DEFS = -dxV="$(PACKAGE_STRING)"
-@BUILD_DOCS_TRUE@GROFF_FLAGS = -t -ms $(GROFF_DEFS)
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu spec/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu spec/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: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-docDATA: $(doc_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
- @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
- done
-
-uninstall-docDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(docdir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$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)$(docdir)"; 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:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-docDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-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 mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-docDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-docDATA install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-docDATA
-
-
-@BUILD_DOCS_TRUE@widgets.ps: $(spec_input)
-@BUILD_DOCS_TRUE@ -$(AM_V_GEN) $(GROFF) -Tps $(GROFF_FLAGS) $(spec_input) \
-@BUILD_DOCS_TRUE@ 2> index.raw > $@
-@BUILD_DOCS_TRUE@ @if grep '^[^1-9.]' index.raw | grep -v warning; then exit 1; \
-@BUILD_DOCS_TRUE@ else test $$? -le 1; fi
-
-@BUILD_DOCS_TRUE@widgets.txt: $(spec_input)
-@BUILD_DOCS_TRUE@ $(AM_V_GEN) $(GROFF) -Tascii $(GROFF_FLAGS) $(spec_input) \
-@BUILD_DOCS_TRUE@ 2> index.txt.raw > $@
-
-@BUILD_DOCS_TRUE@widgets.html: $(spec_input)
-@BUILD_DOCS_TRUE@ $(AM_V_GEN) $(GROFF) -Thtml $(GROFF_FLAGS) $(spec_input) \
-@BUILD_DOCS_TRUE@ 2> index.html.raw > $@
-
-@BUILD_DOCS_TRUE@index.raw: widgets.ps
-
-@BUILD_DOCS_TRUE@index.pageno: index.raw
-@BUILD_DOCS_TRUE@ $(AM_V_GEN)$(SED) -n '$$p' index.raw > $@
-
-@BUILD_DOCS_TRUE@index.troff: index.raw
-@BUILD_DOCS_TRUE@ $(AM_V_GEN)$(GREP) '^[1-9]' index.raw | \
-@BUILD_DOCS_TRUE@ (sort -f '-t:' -k2,2 -k1,1n 2>/dev/null || \
-@BUILD_DOCS_TRUE@ sort -f '-t:' +1 -3 +0n -1n) | \
-@BUILD_DOCS_TRUE@ $(AWK) -f $(srcdir)/fixindex.awk | \
-@BUILD_DOCS_TRUE@ $(AWK) -f $(srcdir)/block.awk > $@
-
-@BUILD_DOCS_TRUE@widgets.index.ps: widg.idxmac.t index.troff index.pageno
-@BUILD_DOCS_TRUE@ $(AM_V_GEN)$(GROFF) -me $(GROFF_DEFS) \
-@BUILD_DOCS_TRUE@ $(srcdir)/widg.idxmac.t $(srcdir)/$(XIDXMACROS) index.troff > $@
-
-# Useful for running off part of the manual by hand,
-# e.g., make part PART=Label
-@BUILD_DOCS_TRUE@part: $(srcdir)/$(PART)
-@BUILD_DOCS_TRUE@ $(GROFF) -Tps $(GROFF_FLAGS) $(EVERYWHERE) $(srcdir)/$(PART) > $(PART).ps
-
-# 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/libXaw/spec/MenuButton b/libXaw/spec/MenuButton
deleted file mode 100644
index 8a4084b1c..000000000
--- a/libXaw/spec/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 <X11/Xaw/MenuButton.h>
-.IN "MenuButton.h" ""
-Class Header file <X11/Xaw/MenuButtonP.h>
-.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
- <EnterWindow>: highlight(\|)
- <LeaveWindow>: reset(\|)
- <BtnDown>: 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/libXaw/spec/Paned b/libXaw/spec/Paned
deleted file mode 100644
index a6b8f0089..000000000
--- a/libXaw/spec/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 <X11/Xaw/Paned.h>
-.IN "Paned.h" ""
-Class Header file <X11/Xaw/PanedP.h>
-.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
- <Btn1Down>: GripAction(Start, UpLeftPane)
-.IN "GripAction" ""
- <Btn2Down>: GripAction(Start, ThisBorderOnly)
- <Btn3Down>: GripAction(Start, LowRightPane)
- <Btn1Motion>: GripAction(Move, UpLeftPane)
- <Btn2Motion>: GripAction(Move, ThisBorderOnly)
- <Btn3Motion>: GripAction(Move, LowRightPane)
- Any<BtnUp>: 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/libXaw/spec/Panner b/libXaw/spec/Panner
deleted file mode 100644
index 1bb11b5fd..000000000
--- a/libXaw/spec/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 <X11/Xaw/Panner.h>
-.IN "Panner.h" ""
-Class header file <X11/Xaw/PannerP.h>
-.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
- <Btn1Down>: start(\|)
- <Btn1Motion>: move(\|)
- <Btn1Up>: notify(\|) stop(\|)
- <Btn2Down>: abort(\|)
- <Key>KP_Enter: set(rubberband,toggle)
- <Key>space: page(+1p,+1p)
- <Key>Delete: page(\-1p,\-1p)
- <Key>BackSpace: page(\-1p,\-1p)
- <Key>Left: page(\-.5p,+0)
- <Key>Right: page(+.5p,+0)
- <Key>Up: page(+0,\-.5p)
- <Key>Down: page(+0,+.5p)
- <Key>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/libXaw/spec/Porthole b/libXaw/spec/Porthole
deleted file mode 100644
index 4d4104aa0..000000000
--- a/libXaw/spec/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 <X11/Xaw/Porthole.h>
-.IN "Porthole.h" ""
-Class Header file <X11/Xaw/PortholeP.h>
-.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/libXaw/spec/Repeater b/libXaw/spec/Repeater
deleted file mode 100644
index 93872939c..000000000
--- a/libXaw/spec/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 <X11/Xaw/Repeater.h>
-.IN "Repeater.h" ""
-Class header file <X11/Xaw/RepeaterP.h>
-.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
- <EnterWindow>: highlight(\|)
- <LeaveWindow>: unhighlight(\|)
- <Btn1Down>: set(\|) start(\|)
- <Btn1Up>: stop(\|) unset(\|)
-.De
-.LP
diff --git a/libXaw/spec/Scrollbar b/libXaw/spec/Scrollbar
deleted file mode 100644
index faf693a3b..000000000
--- a/libXaw/spec/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 <X11/Xaw/Scrollbar.h>
-.IN "Scrollbar.h" ""
-Class header file <X11/Xaw/ScrollbarP.h>
-.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
- <Btn1Down>: StartScroll(Forward)
- <Btn2Down>: StartScroll(Continuous) MoveThumb(\|) NotifyThumb(\|)
- <Btn3Down>: StartScroll(Backward)
- <Btn2Motion>: MoveThumb(\|) NotifyThumb(\|)
- <BtnUp>: 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: \\
- ~Meta<Key>space: StartScroll(Forward) NotifyScroll(FullLength) \\n\\
- Meta<Key>space: 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 *) &top;
- XtSetArg(args[0], XtNshown, *l_top);
- }
-.NL
-.De
-.sp
diff --git a/libXaw/spec/Simple b/libXaw/spec/Simple
deleted file mode 100644
index a030d4012..000000000
--- a/libXaw/spec/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 <Xaw/Simple.h>
-.IN "Simple.h" ""
-Class Header file <Xaw/SimpleP.h>
-.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/libXaw/spec/SimpleMenu b/libXaw/spec/SimpleMenu
deleted file mode 100644
index b59e511c8..000000000
--- a/libXaw/spec/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 <X11/Xaw/SimpleMenu.h>
-.IN "SimpleMenu.h" ""
-Class Header file <X11/Xaw/SimpleMenP.h>
-.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
-<X11/X.h>.
-.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
- <EnterWindow>: highlight(\|)
- <LeaveWindow>: unhighlight(\|)
- <BtnMotion>: highlight(\|)
- <BtnUp>: 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<Btn1Down>: XawPositionSimpleMenu(xterm) MenuPopup(xterm)
- !Ctrl<Btn2Down>: 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/libXaw/spec/Sme b/libXaw/spec/Sme
deleted file mode 100644
index 48eaa1510..000000000
--- a/libXaw/spec/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 <X11/Xaw/Sme.h>
-.IN "Sme.h" ""
-Class Header file <X11/Xaw/SmeP.h>
-.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/libXaw/spec/SmeBSB b/libXaw/spec/SmeBSB
deleted file mode 100644
index 2cfae9d8f..000000000
--- a/libXaw/spec/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 <X11/Xaw/SmeBSB.h>
-.IN "SmeBSB.h" ""
-Class Header file <X11/Xaw/SmeBSBP.h>
-.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/libXaw/spec/SmeLine b/libXaw/spec/SmeLine
deleted file mode 100644
index 5b87cd9a5..000000000
--- a/libXaw/spec/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 <X11/Xaw/SmeLine.h>
-.IN "SmeLine.h" ""
-Class Header file <X11/Xaw/SmeLineP.h>
-.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/libXaw/spec/StripChart b/libXaw/spec/StripChart
deleted file mode 100644
index 3a4e68338..000000000
--- a/libXaw/spec/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 <Xaw/StripChart.h>
-.IN "StripChart.h" ""
-Class Header file <Xaw/StripCharP.h>
-.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/libXaw/spec/TPage_Credits b/libXaw/spec/TPage_Credits
deleted file mode 100644
index 7301ddf63..000000000
--- a/libXaw/spec/TPage_Credits
+++ /dev/null
@@ -1,156 +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 7\fP\s-1
-
-\s+1\fB\*(xV\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/libXaw/spec/Text b/libXaw/spec/Text
deleted file mode 100644
index 7fea09a19..000000000
--- a/libXaw/spec/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 <X11/Xaw/Text.h>
-.IN "Text.h" ""
-Class Header file <X11/Xaw/TextP.h>
-.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/libXaw/spec/TextActions b/libXaw/spec/TextActions
deleted file mode 100644
index 69c89c9ac..000000000
--- a/libXaw/spec/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 \\
- <FocusIn>: display-caret(on) \\n\\
- <FocusOut>: 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
- Ctrl<Key>A: beginning-of-line(\|) \\n\\
- Ctrl<Key>B: backward-character(\|) \\n\\
- Ctrl<Key>D: delete-next-character(\|) \\n\\
- Ctrl<Key>E: end-of-line(\|) \\n\\
- Ctrl<Key>F: forward-character(\|) \\n\\
- Ctrl<Key>G: multiply(Reset) \\n\\
- Ctrl<Key>H: delete-previous-character(\|) \\n\\
- Ctrl<Key>J: newline-and-indent(\|) \\n\\
- Ctrl<Key>K: kill-to-end-of-line(\|) \\n\\
- Ctrl<Key>L: redraw-display(\|) \\n\\
- Ctrl<Key>M: newline(\|) \\n\\
- Ctrl<Key>N: next-line(\|) \\n\\
- Ctrl<Key>O: newline-and-backup(\|) \\n\\
- Ctrl<Key>P: previous-line(\|) \\n\\
- Ctrl<Key>R: search(backward) \\n\\
- Ctrl<Key>S: search(forward) \\n\\
- Ctrl<Key>T: transpose-characters(\|) \\n\\
- Ctrl<Key>U: multiply(4) \\n\\
- Ctrl<Key>V: next-page(\|) \\n\\
- Ctrl<Key>W: kill-selection(\|) \\n\\
- Ctrl<Key>Y: insert-selection(CUT_BUFFER1) \\n\\
- Ctrl<Key>Z: scroll-one-line-up(\|) \\n\\
- Ctrl<Key>\\: reconnect-im(\|) \\n\\
- Meta<Key>B: backward-word(\|) \\n\\
- Meta<Key>F: forward-word(\|) \\n\\
- Meta<Key>I: insert-file(\|) \\n\\
- Meta<Key>K: kill-to-end-of-paragraph(\|) \\n\\
- Meta<Key>Q: form-paragraph(\|) \\n\\
- Meta<Key>V: previous-page(\|) \\n\\
- Meta<Key>Y: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
- Meta<Key>Z: scroll-one-line-down(\|) \\n\\
- :Meta<Key>d: delete-next-word(\|) \\n\\
- :Meta<Key>D: kill-word(\|) \\n\\
- :Meta<Key>h: delete-previous-word(\|) \\n\\
- :Meta<Key>H: backward-kill-word(\|) \\n\\
- :Meta<Key>\\<: beginning-of-file(\|) \\n\\
- :Meta<Key>\\>: end-of-file(\|) \\n\\
- :Meta<Key>]: forward-paragraph(\|) \\n\\
- :Meta<Key>[: backward-paragraph(\|) \\n\\
- ~Shift Meta<Key>Delete: delete-previous-word(\|) \\n\\
- \ Shift Meta<Key>Delete: backward-kill-word(\|) \\n\\
- ~Shift Meta<Key>Backspace: delete-previous-word(\|) \\n\\
- \ Shift Meta<Key>Backspace: backward-kill-word(\|) \\n\\
- <Key>Right: forward-character(\|) \\n\\
- <Key>Left: backward-character(\|) \\n\\
- <Key>Down: next-line(\|) \\n\\
- <Key>Up: previous-line(\|) \\n\\
- <Key>Delete: delete-previous-character(\|) \\n\\
- <Key>BackSpace: delete-previous-character(\|) \\n\\
- <Key>Linefeed: newline-and-indent(\|) \\n\\
- <Key>Return: newline(\|) \\n\\
- <Key>: insert-char(\|) \\n\\
- <Key>Kanji: reconnect-im(\|) \\n\\
- <FocusIn>: focus-in(\|) \\n\\
- <FocusOut>: focus-out(\|) \\n\\
- <Btn1Down>: select-start(\|) \\n\\
- <Btn1Motion>: extend-adjust(\|) \\n\\
- <Btn1Up>: extend-end(PRIMARY, CUT_BUFFER0) \\n\\
- <Btn2Down>: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
- <Btn3Down>: extend-start(\|) \\n\\
- <Btn3Motion>: extend-adjust(\|) \\n\\
- <Btn3Up>: extend-end(PRIMARY, CUT_BUFFER0) \\n
-.De
diff --git a/libXaw/spec/TextFuncs b/libXaw/spec/TextFuncs
deleted file mode 100644
index ea26068a5..000000000
--- a/libXaw/spec/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,
-<X11/Xaw/Text.h>.
-.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/libXaw/spec/TextSink b/libXaw/spec/TextSink
deleted file mode 100644
index 72ae3cf99..000000000
--- a/libXaw/spec/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 <X11/Xaw/TextSink.h>
-.IN "TextSink.h" ""
-Class Header file <X11/Xaw/TextSinkP.h>
-.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/libXaw/spec/TextSource b/libXaw/spec/TextSource
deleted file mode 100644
index 852db2dd3..000000000
--- a/libXaw/spec/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 <X11/Xaw/TextSrc.h>
-.IN "TextSrc.h" ""
-Class Header file <X11/Xaw/TextSrcP.h>
-.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/libXaw/spec/Toggle b/libXaw/spec/Toggle
deleted file mode 100644
index 12a605bd2..000000000
--- a/libXaw/spec/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 <Xaw/Toggle.h>
-.IN "Toggle.h" ""
-Class Header file <Xaw/ToggleP.h>
-.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
- <EnterWindow>: highlight(Always)
- <LeaveWindow>: unhighlight(\|)
- <Btn1Down>,<Btn1Up>: 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
- <EnterWindow>: highlight(Always)
- <LeaveWindow>: unhighlight(\|)
- <Btn1Down>,<Btn1Up>: 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/libXaw/spec/Tree b/libXaw/spec/Tree
deleted file mode 100644
index 5575228fb..000000000
--- a/libXaw/spec/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 <X11/Xaw/Tree.h>
-.IN "Box.h" ""
-Class Header file <X11/Xaw/TreeP.h>
-.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/libXaw/spec/Viewport b/libXaw/spec/Viewport
deleted file mode 100644
index 0b599472a..000000000
--- a/libXaw/spec/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 <X11/Xaw/Viewport.h>
-.IN "Viewport.h" ""
-Class Header file <X11/Xaw/ViewportP.h>
-.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/libXaw/spec/block.awk b/libXaw/spec/block.awk
deleted file mode 100644
index 0dd75f3f7..000000000
--- a/libXaw/spec/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/libXaw/spec/fixindex.awk b/libXaw/spec/fixindex.awk
deleted file mode 100644
index e8849f3bd..000000000
--- a/libXaw/spec/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/libXaw/spec/indexmacros.t b/libXaw/spec/indexmacros.t
deleted file mode 100644
index 4660f18ed..000000000
--- a/libXaw/spec/indexmacros.t
+++ /dev/null
@@ -1,42 +0,0 @@
-. \" Macros for the index
-.de Ib \" blank major entry
-.br
-.ne 2v
-\\$1:
-..
-.de I> \" major entry
-.br
-\\$1, \\$2
-..
-.de I< \" minor entry
-.br
- \\$2, \\$3
-..
-.de LB \" new letter starts here
-.di DT \" start diverted text
-.sp
-.sz +2
-.b
-\\$1
-.r
-.sz -2
-.sp
-.di \" end diverted text
-.ne \\n(dnu+1v \" get enough space for it
-.DT \" output it
-..
-.\" set up various parameters for the right evironment.
-.\" Your taste may be different.
-.ef ''\fB % \fP''
-.of ''\fB % \fP''
-.++ A
-.po 1.0i \" physical offset
-.ta 5iR \" right alignment tab
-.lp \" initialize -me
-.ce
-.sz 18
-Index
-.sp 1
-.sz 10
-.2c \" 2 column mode
-.sp 3
diff --git a/libXaw/spec/macros.t b/libXaw/spec/macros.t
deleted file mode 100644
index cbc599b3f..000000000
--- a/libXaw/spec/macros.t
+++ /dev/null
@@ -1,226 +0,0 @@
-.\" $Xorg: macros.t,v 1.3 2000/08/17 19:42:51 cpqbld Exp $
-.\" macros.t -- macros for X Consortium documents
-.\" Revised and commented by smarks 93.12.20.
-.\"
-.\" global setup: set ragged right, assign string variables
-.\"
-.na
-.ie n \{\
-.ds Q \&"
-.ds U \&"
-.ds - \%--
-.\}
-.el \{\
-.ds Q `\h'-\w'\^'u'`
-.ds U '\h'-\w'\^'u''
-.ds - \(em
-.\}
-.\"
-.\" --- Ds --- displayed text (like .DS) with no keep
-.\" .Ds is obsolete. Change to something from this table:
-.\" for this use instead
-.\" .Ds .ID
-.\" .Ds n .LD (where "n" is a number)
-.\" (Numbers don't work in these macros, so ".Ds 5"
-.\" comes out the same as ".Ds 0".)
-.\"
-.de Ds
-.nf
-.\\$1D \\$2 \\$1
-.ft 1
-.ps \\n(PS
-.if \\n(VS>=40 .vs \\n(VSu
-.if \\n(VS<=39 .vs \\n(VSp
-..
-.de D
-.ID \\$1
-..
-.de 0D
-.LD
-..
-.\" backward compatibility for the Xt spec
-.de 5D
-.LD
-..
-.\"
-.\" --- De --- obsolete: use .DE instead
-.\"
-.de De
-.DE
-..
-.\"
-.\" --- FD ---
-.\"
-.de FD
-.LP
-.KS
-.TA .5i 3i
-.ta .5i 3i
-.nf
-..
-.\"
-.\" --- FN ---
-.\"
-.de FN
-.fi
-.KE
-.LP
-..
-.\"
-.\" --- IN --- send an index entry to the stderr
-.\"
-.de IN
-.tm \\n%:\\$1:\\$2:\\$3
-..
-.\"
-.\" --- C{ ---
-.\"
-.de C{
-.KS
-.nf
-.D
-.\"
-.\" choose appropriate monospace font
-.\" the imagen conditional, 480,
-.\" may be changed to L if LB is too
-.\" heavy for your eyes...
-.\"
-.ie "\\*(.T"480" .ft L
-.el .ie "\\*(.T"300" .ft L
-.el .ie "\\*(.T"202" .ft PO
-.el .ie "\\*(.T"aps" .ft CW
-.el .ft R
-.ps \\n(PS
-.ie \\n(VS>40 .vs \\n(VSu
-.el .vs \\n(VSp
-..
-.\"
-.\" --- C} ---
-.\"
-.de C}
-.DE
-.R
-..
-.\"
-.\" --- Pn --- like PN, but use $2; $1 and $3 abut
-.\"
-.de Pn
-.IN \\$2
-.ie t \\$1\fB\^\\$2\^\fR\\$3
-.el \\$1\fI\^\\$2\^\fP\\$3
-..
-.\"
-.\" --- PN --- put $1 in boldface and add index entry; $2 abuts
-.\"
-.de PN
-.IN \\$1
-.ie t \fB\^\\$1\^\fR\\$2
-.el \fI\^\\$1\^\fP\\$2
-..
-.\"
-.\" --- hI --- add index entry for $1 as header file
-.\"
-.de hI
-.IN <\\$1>
-.IN Files <\\$1>
-.IN Headers <\\$1>
-..
-.\"
-.\" --- hN --- put $1 in boldface as header and add index entry; $2 abuts
-.\"
-.de hN
-.hI \\$1
-.ie t <\fB\\$1\fR>\\$2
-.el <\fI\\$1\fP>\\$2
-..
-.\"
-.\" --- NT ---
-.\"
-.de NT
-.br
-.ne 7
-.ds NO Note
-.if \\n(.$ .ds NO \\$1
-.ie n .sp
-.el .sp 10p
-.ce
-\\*(NO
-.ie n .sp
-.el .sp 5p
-.if '\\$1'C' .ce 99
-.if '\\$2'C' .ce 99
-.\" .QS/.QE macros don't exist in older versions of -ms
-.ie \\n(GS .QS
-.el \{\
-. in +5n
-. ll -5n
-.\}
-.R
-..
-.\"
-.\" --- NE --- Note End (doug kraft 3/85)
-.\"
-.de NE
-.ce 0
-.ie \\n(GS .QE
-.el \{\
-. in -5n
-. ll +5n
-.\}
-.ie n .sp
-.el .sp 10p
-..
-.\"
-.\" --- nH --- numbered header (like NH) but with automatic TOC entry
-.\" usage: .nH level "section title, preferable in quotes"
-.\"
-.de nH
-.NH \\$1
-\\$2
-.XS
-\\*(SN \\$2
-.XE
-..
-.\"
-.\" --- sM --- put start-marker in margin
-.\"
-.de sM
-.KS
-.sp 1
-\\h'-0.5i'\\L'-1v'\\v'1p'\\l'1v'\\v'1v-1p'
-.sp -1
-..
-.\"
-.\" --- eM --- put end-marker in margin
-.\"
-.de eM
-.sp -1
-\\h'-0.5i'\\L'-1v'\\v'1v+1p'\\l'1v'\\v'-1p'
-.sp 1
-.KE
-..
-.\"
-.\" --- YZ --- finish up; $1 is the starting page number of the TOC
-.\"
-.de YZ
-. \" Force there to be an even number of pages, so the table of
-. \" contents doesn't end up on the back of the last page in
-. \" the case of duplex printing.
-.if o .bp
-. \" Emit a .pn directive with one plus the last page number.
- \" This will be the number of the first page of the index.
-.nr YZ \\n%+1
-.tm .pn \\n(YZ
-. \" Issue the table of contents, setting roman numerals,
-. \" and redefining the footer to use them.
-.bp \\$1
-.af PN i
-.EF ''\\\\\\\\n(PN''
-.OF ''\\\\\\\\n(PN''
-. \" Why all the backslashes? This string is evaluated
-. \" three times: 1) during the definition of this macro,
-. \" 2) when the .EF and .OF macros are expanded, and 3)
-. \" when the bottom-of-page trap is invoked. Thus,
-. \" eight backslashes are reduced to one in the final output.
-.PX
-..
diff --git a/libXaw/spec/strings.mit b/libXaw/spec/strings.mit
deleted file mode 100644
index e8a339bf2..000000000
--- a/libXaw/spec/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/libXaw/spec/strings.xaw b/libXaw/spec/strings.xaw
deleted file mode 100644
index 7ef362ef8..000000000
--- a/libXaw/spec/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<something>\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/libXaw/spec/widg.idxmac.t b/libXaw/spec/widg.idxmac.t
deleted file mode 100644
index b464a1a7d..000000000
--- a/libXaw/spec/widg.idxmac.t
+++ /dev/null
@@ -1,3 +0,0 @@
-.eh '\fBAthena Widget Set\fP''\fB\*(xV\fP'
-.oh '\fBAthena Widget Set\fP''\fB\*(xV\fP'
-.so index.pageno
diff --git a/libXaw/specs/AsciiSink.xml b/libXaw/specs/AsciiSink.xml
new file mode 100644
index 000000000..06bc87dc4
--- /dev/null
+++ b/libXaw/specs/AsciiSink.xml
@@ -0,0 +1,141 @@
+<sect1 id="Ascii_Sink_Object_and_Multi_Sink_Object">
+<title>Ascii Sink Object and Multi Sink Object</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- AsciiSink Object -->
+<!-- .XE -->
+<!-- .IN "AsciiSink object" "" "@DEF@" -->
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+Application Header file &lt;X11/Xaw/AsciiSink.h&gt;
+<!-- .IN "AsciiSink.h" "" -->
+Class Header file &lt;X11/Xaw/AsciiSinkP.h&gt;
+<!-- .IN "AsciiSinkP.h" "" -->
+Class asciiSinkObjectClass
+<!-- .IN "asciiSinkObjectClass" "" -->
+Class Name AsciiSink
+<!-- .IN "AsciiSink object" "class name" -->
+Superclass TextSink
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+The AsciiSink or MultiSink object is used by a text widget to render the text.
+Depending on its <function>international</function> 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.
+</para>
+<sect2 id="asciisink_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating an AsciiSink object instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "AsciiSink object" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>displayNonprinting</entry>
+ <entry>Output</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>echo</entry>
+ <entry>Output</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>XFontStruct*</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>fontSet</entry>
+ <entry>FontSet</entry>
+ <entry>XFontSet</entry>
+ <entry></entry>
+ <entry>XtDefaultFontSet</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Bg Bold -->
+This resource is retrieved by the AsciiSink instead of being copied
+from the Text widget.
+<!-- .Dc -->
+<!-- .Sd Bold -->
+<!-- .Sh Bold -->
+</para>
+<para>
+<!-- .IP <function>font</function> 1.5i -->
+The text font to use when displaying the <function>string</function>.
+(This resource is present in the AsciiSink, but not the MultiSink.)
+<!-- .IP <function>fontSet</function> 1.5i -->
+</para>
+<para>
+The text font set to use when displaying the <function>string</function>.
+(This resource is present in the MultiSink, but not the AsciiSink.)
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/AsciiSource.xml b/libXaw/specs/AsciiSource.xml
new file mode 100644
index 000000000..bd51f990a
--- /dev/null
+++ b/libXaw/specs/AsciiSource.xml
@@ -0,0 +1,368 @@
+<sect1 id="Ascii_Source_Object_and_Multi_Source_Object">
+<title>Ascii Source Object and Multi Source Object</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- AsciiSrc Object -->
+<!-- .XE -->
+<!-- .IN "AsciiSrc object" "" "@DEF@" -->
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+Application Header file &lt;X11/Xaw/AsciiSrc.h&gt; or &lt;X11/Xaw/MultiSrc.h&gt;
+<!-- .IN "AsciiSrc.h" "" -->
+Class Header file &lt;X11/Xaw/AsciiSrcP.h&gt; or &lt;X11/Xaw/MultiSrcP.h&gt;
+<!-- .IN "AsciiSrcP.h" "" -->
+Class asciiSrcObjectClass or multiSrcObjectClass
+<!-- .IN "asciiSrcObjectClass" "" -->
+Class Name AsciiSrc or MultiSrc
+<!-- .IN "AsciiSrc object" "class name" -->
+Superclass TextSource
+</literallayout>
+</para>
+<para>
+<!-- .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 <function>international</function> 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.
+</para>
+<para>
+<!-- .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
+</para>
+<para>
+<!-- .LP -->
+The AsciiSrc can be either of two types: <function>XawAsciiFile</function>
+or <function>XawAsciiString</function>.
+</para>
+<para>
+<!-- .LP -->
+AsciiSrc objects of type <function>XawAsciiFile</function> 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 <function>XawAsciiString</function>. 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 <function>XawAsciiSave</function> is made. When the
+source is in this mode the <function>useStringInPlace</function> resource is ignored.
+</para>
+<para>
+<!-- .LP -->
+AsciiSrc objects of type <function>XawAsciiString</function> have the text buffer
+implemented as a string.
+\fIMultiSrc objects of type <function>XawAsciiString</function> have the text buffer
+implemented as a wide character string.\fP
+The string owner is responsible for allocating and managing storage for the
+string.
+</para>
+<para>
+<!-- .LP -->
+In the default case for AsciiSrc objects of type <function>XawAsciiString</function>,
+the resource <function>useStringInPlace</function> 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 <function>XtSetValues</function>, 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 <function>XtGetValues</function> 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 <function>XtGetValues</function> 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, <function>XawAsciiSourceFreeString</function>, allowing the
+application programmer to direct the widget to free the copy.
+</para>
+<para>
+<!-- .LP -->
+When the resource <function>useStringInPlace</function> is true and the AsciiSrc object
+is of type <function>XawAsciiString</function>, the application
+is the string owner. The widget will take the value
+of the string resource as its own text buffer, and the <function>length</function>
+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 <function>XtGetValues</function> 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.
+</para>
+<sect2 id="asciisource_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating an AsciiSrc object instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "AsciiSrc object" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>dataCompression</entry>
+ <entry>DataCompression</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>Callback</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>editType</entry>
+ <entry>EditType</entry>
+ <entry>EditMode</entry>
+ <entry></entry>
+ <entry>XawtextRead</entry>
+ </row>
+ <row>
+ <entry>length</entry>
+ <entry>Length</entry>
+ <entry>Int</entry>
+ <entry>A</entry>
+ <entry>length of <function>string</function></entry>
+ </row>
+ <row>
+ <entry>pieceSize</entry>
+ <entry>PieceSize</entry>
+ <entry>Int</entry>
+ <entry></entry>
+ <entry>BUFSIZ</entry>
+ </row>
+ <row>
+ <entry>string</entry>
+ <entry>String</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>type</entry>
+ <entry>Type</entry>
+ <entry>AsciiType</entry>
+ <entry></entry>
+ <entry>XawAsciiString</entry>
+ </row>
+ <row>
+ <entry>useStringInPlace</entry>
+ <entry>UseStringInPlace</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Oc Bold -->
+<!-- .Dc -->
+<!-- .Od Bold -->
+<!-- .Oe -->
+<!-- .Ol Bold -->
+<!-- .Op Bold -->
+<!-- .Os Bold -->
+<!-- .Ot Bold -->
+<!-- .Ou Bold -->
+</para>
+</sect2>
+<sect2 id="asciisource_convenience_routines">
+<title>Convenience Routines</title>
+<para>
+<!-- .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.
+</para>
+<sect3 id="Conserving_Memory">
+<title>Conserving Memory</title>
+<para>
+<!-- .LP -->
+When the AsciiSrc widget is not in <function>useStringInPlace</function> mode
+space must be allocated whenever the file is saved, or the string is
+requested with a call to <function>XtGetValues</function>. 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 <function>XawAsciiSourceFreeString</function>.
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawAsciiSourceFreeString</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the AsciiSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function will free the memory that contains the string pointer returned
+by <function>XtGetValues</function>. This will normally happen automatically when
+the next call to <function>XtGetValues</function> occurs, or when the widget is destroyed.
+</para>
+</sect3>
+<sect3 id="Saving_Files">
+<title>Saving Files</title>
+<para>
+<!-- .LP -->
+To save the changes made in the current text source into a file use
+<function>XawAsciiSave</function>.
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Boolean<function> XawAsciiSave</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the AsciiSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<function>XawAsciiSave</function> returns <function>True</function> if the save was successful.
+It will update the file named in the <function>string</function> resource.
+If the buffer has not been changed, no action will be taken. This function
+only works on an AsciiSrc of type <function>XawAsciiFile</function>.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To save the contents of the current text buffer into a named file use
+<function>XawAsciiSaveAsFile</function>.
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Boolean<function> XawAsciiSaveAsFile</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>String<parameter> name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the AsciiSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+The name of the file to save the current buffer into.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function returns <function>True</function> if the save was successful.
+<function>XawAsciiSaveAsFile</function> will work with a buffer of either type
+<function>XawAsciiString</function> or type <function>XawAsciiFile</function>.
+</para>
+</sect3>
+<sect3 id="Seeing_if_the_Source_has_Changed">
+<title>Seeing if the Source has Changed</title>
+<para>
+<!-- .LP -->
+To find out if the text buffer in an AsciiSrc object has changed
+since the last time it was saved with <function>XawAsciiSave</function> or queried
+<!-- .IN "XawAsciiSave" "" -->
+use <function>XawAsciiSourceChanged</function>.
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Boolean<function> XawAsciiSourceChanged</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the AsciiSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function will return <function>True</function> 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 <function>XtGetValues</function> or the
+buffer is saved via <function>XawAsciiSave</function>.
+
+</para>
+</sect3>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/AsciiText.xml b/libXaw/specs/AsciiText.xml
new file mode 100644
index 000000000..1a336d6c8
--- /dev/null
+++ b/libXaw/specs/AsciiText.xml
@@ -0,0 +1,450 @@
+<sect1 id="Ascii_Text_Widget">
+<title>Ascii Text Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- AsciiText Widget -->
+<!-- .XE -->
+<!-- .IN "AsciiText widget" "" "@DEF@" -->
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+Application Header file &lt;X11/Xaw/AsciiText.h&gt;
+<!-- .IN "AsciiText.h" "" -->
+ClassHeader file &lt;X11/Xaw/AsciiTextP.h&gt;
+<!-- .IN "AsciiTextP.h" "" -->
+Class asciiTextWidgetClass
+<!-- .IN "asciiTextWidgetClass" "" -->
+Class Name Text
+<!-- .IN "AsciiText widget" "class name" -->
+Superclass Text
+Sink Name textSink
+Source Name textSource
+</literallayout>
+<!-- .sp 1 -->
+</para>
+<para>
+<!-- .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
+<emphasis remap='I'>*AsciiText*resource_name</emphasis> instead of
+<emphasis remap='I'>*AsciiText.resource_name</emphasis>, 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 <function>XtSetValues</function>.
+</para>
+<sect2 id="asciitext_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating an AsciiText widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "AsciiText widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>autoFill</entry>
+ <entry>AutoFill</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>bottomMargin</entry>
+ <entry>Margin</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_xterm</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>dataCompression</entry>
+ <entry>DataCompression</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>displayCaret</entry>
+ <entry>Output</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>displayNonprinting</entry>
+ <entry>Output</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>displayPosition</entry>
+ <entry>TextPosition</entry>
+ <entry>XawTextPosition</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>echo</entry>
+ <entry>Output</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>editType</entry>
+ <entry>EditType</entry>
+ <entry>XawTextEditType</entry>
+ <entry></entry>
+ <entry>XawtextRead</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>XFontStruct*</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>fontSet</entry>
+ <entry>FontSet</entry>
+ <entry>XFontSet</entry>
+ <entry></entry>
+ <entry>XtDefaultFontSet</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Font height + margins</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>insertPosition</entry>
+ <entry>TextPosition</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>leftMargin</entry>
+ <entry>Margin</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>length</entry>
+ <entry>Length</entry>
+ <entry>int</entry>
+ <entry>A</entry>
+ <entry>length of <function>string</function></entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>pieceSize</entry>
+ <entry>PieceSize</entry>
+ <entry>XawTextPosition</entry>
+ <entry></entry>
+ <entry>BUFSIZ</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>resize</entry>
+ <entry>Resize</entry>
+ <entry>XawTextResizeMode</entry>
+ <entry></entry>
+ <entry>XawtextResizeNever</entry>
+ </row>
+ <row>
+ <entry>rightMargin</entry>
+ <entry>Margin</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>scrollHorizontal</entry>
+ <entry>Scroll</entry>
+ <entry>XawTextScrollMode</entry>
+ <entry></entry>
+ <entry>XawtextScrollNever</entry>
+ </row>
+ <row>
+ <entry>scrollVertical</entry>
+ <entry>Scroll</entry>
+ <entry>XawTextScrollMode</entry>
+ <entry></entry>
+ <entry>XawtextScrollNever</entry>
+ </row>
+ <row>
+ <entry>selectTypes</entry>
+ <entry>SelectTypes</entry>
+ <entry>XawTextSelectType*</entry>
+ <entry></entry>
+ <entry>See above</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>string</entry>
+ <entry>String</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>textSink</entry>
+ <entry>TextSink</entry>
+ <entry>Widget</entry>
+ <entry></entry>
+ <entry>An AsciiSink</entry>
+ </row>
+ <row>
+ <entry>textSource</entry>
+ <entry>TextSource</entry>
+ <entry>Widget</entry>
+ <entry></entry>
+ <entry>An AsciiSrc</entry>
+ </row>
+ <row>
+ <entry>topMargin</entry>
+ <entry>Margin</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See above</entry>
+ </row>
+ <row>
+ <entry>type</entry>
+ <entry>Type</entry>
+ <entry>XawAsciiType</entry>
+ <entry></entry>
+ <entry>XawAsciiString</entry>
+ </row>
+ <row>
+ <entry>useStringInPlace</entry>
+ <entry>UseStringInPlace</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>100</entry>
+ </row>
+ <row>
+ <entry>wrap</entry>
+ <entry>Wrap</entry>
+ <entry>WrapMode</entry>
+ <entry></entry>
+ <entry>XawtextWrapNever</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Box.xml b/libXaw/specs/Box.xml
new file mode 100644
index 000000000..fe93b42d3
--- /dev/null
+++ b/libXaw/specs/Box.xml
@@ -0,0 +1,346 @@
+<sect1 id="Box_Widget">
+<title>Box Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Box Widget -->
+<!-- .XE -->
+<!-- .IN "Box widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/Box.h&gt;
+<!-- .IN "Box.h" "" -->
+Class Header file &lt;X11/Xaw/BoxP.h&gt;
+<!-- .IN "BoxP.h" "" -->
+Class boxWidgetClass
+<!-- .IN "boxWidgetClass" "" -->
+Class Name Box
+<!-- .IN "Box widget" "class name" -->
+Superclass Composite
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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.
+</para>
+<sect2 id="box_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Box widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Box widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>children</entry>
+ <entry>ReadOnly</entry>
+ <entry>WidgetList</entry>
+ <entry>R</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>see <function>Layout Semantics</function></entry>
+ </row>
+ <row>
+ <entry>hSpace</entry>
+ <entry>HSpace</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numChildren</entry>
+ <entry>ReadOnly</entry>
+ <entry>Cardinal</entry>
+ <entry>R</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>orientation</entry>
+ <entry>Orientation</entry>
+ <entry>Orientation</entry>
+ <entry></entry>
+ <entry>XtorientVertical</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>vSpace</entry>
+ <entry>VSpace</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>see <function>Layout Semantics</function></entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<!-- .Ch -->
+<!-- .Cm -->
+<!-- .Dp -->
+<!-- .Dc -->
+<!-- .Hw -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>hSpace</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>vSpace</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>orientation</function>
+ </term>
+ <listitem>
+ <para>
+Specifies whether the preferred shape of the box (i.e. the result
+returned by the query_geometry class method) is tall and narrow
+<function>XtorientVertical</function> or short and wide <function>XtorientHorizontal</function>.
+<!-- .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 <function>XtorientVertical</function> (the default).
+When the parent enforces height constraints, it is usually better to
+specify <function>XtorientHorizontal</function>.
+<!-- .Rs "horizontal \fPand\fB vertical" -->
+<!-- .Sc -->
+<!-- .Se -->
+<!-- .Tr -->
+<!-- .Xy -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Layout_Semantics">
+<title>Layout Semantics</title>
+<!-- .IN "Box widget" "layout semantics" -->
+<para>
+<!-- .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 <function>orientation</function> of the Box.
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>XtorientVertical</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>XtorientHorizontal</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+After positioning all children, the Box widget attempts to shrink its
+own size to the minimum dimensions required for the layout.
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/CH1.xml b/libXaw/specs/CH1.xml
new file mode 100644
index 000000000..a4fb08c2d
--- /dev/null
+++ b/libXaw/specs/CH1.xml
@@ -0,0 +1,725 @@
+<chapter id="athena_widgets_and_the_intrinsics">
+<title>Athena Widgets and The Intrinsics</title>
+<para>
+The X Toolkit is made up of two distinct pieces, the Xt Intrinsics and a
+widget set. The Athena widget set is a sample implementation of a
+widget set built upon the Intrinsics. In the X Toolkit, a widget is the
+combination of an X window or subwindow and its associated input and
+output semantics.
+</para>
+<para>
+Because the Intrinsics 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 Intrinsics. Since widget sets may also
+implement private protocols, all functionality may not be available when
+mixing and matching widget sets. For information about the Intrinsics, see
+the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+<para>
+The Athena widget set is a library package layered on top of the Intrinsics
+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
+Intrinsics are a Consortium standard, there is no standard widget set.
+</para>
+
+<para>
+To the extent possible, the Intrinsics are "policy-free". The application
+environment and widget set, not the Intrinsics, define, implement, and
+enforce:
+</para>
+
+<itemizedlist>
+ <listitem><para>Policy</para></listitem>
+ <listitem><para>Consistency</para></listitem>
+ <listitem><para>Style</para></listitem>
+</itemizedlist>
+
+<para>
+Each individual widget implementation defines its own policy. The X Toolkit
+design allows for, but does not necessarily encourage, the free mixing
+of radically differing widget implementations.
+</para>
+
+<sect1 id="Introduction_to_the_tk">
+<title>Introduction to the X Toolkit</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Introduction to the X Toolkit -->
+<!-- .XE -->
+<!-- .IN "introduction" "" "@DEF@" -->
+The X Toolkit 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 X Toolkit in their applications, programmers can present a similar
+user interface across applications to all workstation users.
+</para>
+<para>
+<!-- .LP -->
+The X Toolkit consists of:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A set of Intrinsics functions for building widgets
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+An architectural model for constructing widgets
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A widget set for application programming
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+While the majority of the Intrinsics functions are intended
+for the widget programmer,
+a subset of the Intrinsics functions are to be used by application programmers
+(see <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>).
+The architectural model lets the widget programmer design new widgets
+by using the Intrinsics and by combining other widgets.
+The application interface layers built on top of the X Toolkit 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.
+</para>
+<para>
+<!-- .LP -->
+The remainder of this chapter discusses the X Toolkit and Athena widget set:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Terminology
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Model
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Conventions used in this manual
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Format of the Widget Reference Chapters
+ </para>
+ </listitem>
+</itemizedlist>
+</sect1>
+<sect1 id="Terminology">
+<title>Terminology</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Terminology -->
+<!-- .XE -->
+</para>
+<para>
+<!-- .LP -->
+In addition to the terms already defined for X programming (see
+<emphasis remap='I'>Xlib - C Language Interface</emphasis>),
+the following terms are specific to the Intrinsics and Athena widget set
+and used throughout this document.
+</para>
+<para>
+<!-- .LP -->
+<function>Application programmer</function>
+<!-- .IN "application programmer" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A programmer who uses the X Toolkit to produce an application user interface.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Child</function>
+<!-- .IN "child" "" "@DEF" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A widget that is contained within another "parent" widget.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Class</function>
+<!-- .IN "class" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+The general group to which a specific object belongs.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Client</function>
+<!-- .IN "client" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A function that uses a widget in an application or for composing
+other widgets.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>FullName</function>
+<!-- .IN "FullName" "" "@DEF" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+The name of a widget instance appended to the full name of its parent.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Instance</function>
+<!-- .IN "instance" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A specific widget object as opposed to a general widget class.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Method</function>
+<!-- .IN "method" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A function or procedure implemented by a widget class.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Name</function>
+<!-- .IN "name" "widget" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Object</function>
+<!-- .IN "object" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+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 X Toolkit,
+some of the object's public functions are called directly by the application,
+while others are called indirectly when the application calls the common
+Intrinsics functions.
+In general, if a function is common to all widgets,
+an application uses a single Intrinsics 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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Parent</function>
+<!-- .IN "parent" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A widget that contains at least one other ("child") widget.
+A parent widget is also known as a composite widget.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Resource</function>
+<!-- .IN "resource" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A named piece of data in a widget that can be set by a client,
+by an application, or by user defaults.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Superclass</function>
+<!-- .IN "superclass" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A larger class of which a specific class is a member.
+All members of a class are also members of the superclass.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>User</function>
+<!-- .IN "user" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A person interacting with a workstation.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Widget</function>
+<!-- .IN "widget" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+An object providing a user-interface abstraction (for example, a Scrollbar
+widget).
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Widget class</function>
+<!-- .IN "widget class" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+The general group to which a specific widget belongs,
+otherwise known as the type of the widget.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<function>Widget programmer</function>
+<!-- .IN "widget programmer" "" "@DEF@" -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A programmer who adds new widgets to the X Toolkit.
+ </para>
+ </listitem>
+</itemizedlist>
+</sect1>
+<sect1 id="Underlying_Model">
+<title>Underlying Model</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Underlying Model -->
+<!-- .XE -->
+<!-- .IN "underlying model" "" "@DEF@" -->
+The underlying architectural model is based on the following premises:
+<!-- .KS -->
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+</itemizedlist>
+</sect1>
+<sect1 id="Conventions_Used_in_this_Manual">
+<title>Conventions Used in this Manual</title>
+<itemizedlist>
+ <listitem>
+ <para>
+<!-- .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 Intrinsics. The new resources for each widget are
+listed in bold text, and the inherited resources are listed in plain text.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Global symbols are printed in <function>bold</function> and can be function names,
+symbols defined in include files, or structure names. Arguments are
+printed in <emphasis remap='I'>italics</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>specifies</emphasis> or, in the
+case of multiple arguments, the word <emphasis remap='I'>specify</emphasis>. The explanations
+for all arguments that are returned to you start with the word
+<emphasis remap='I'>returns</emphasis> or, in the case of multiple arguments, the word
+<emphasis remap='I'>return</emphasis>. The explanations for all arguments that you can pass
+and are returned start with the words <emphasis remap='I'>specifies and returns</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Any pointer to a structure that is used to return a value is
+designated as such by the <emphasis remap='I'>_return</emphasis> 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 <emphasis remap='I'>_in_out</emphasis>
+suffix.
+<!-- .IN "_return" "" "@DEF@" -->
+<!-- .IN "_in_out" "" "@DEF@" -->
+ </para>
+ </listitem>
+</itemizedlist>
+</sect1>
+<sect1 id="Format_of_the_Widget_Reference_Chapters">
+<title>Format of the Widget Reference Chapters</title>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+The first few pages of every chapter give an overview of the widgets
+in that section. Widgets are grouped into chapters by functionality.
+<variablelist>
+ <varlistentry>
+ <term>
+ "Chapter <!-- xref -->
+ </term>
+ <listitem>
+ <para>
+Simple Widgets
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ "Chapter <!-- xref -->
+ </term>
+ <listitem>
+ <para>
+Menus
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ "Chapter <!-- xref -->
+ </term>
+ <listitem>
+ <para>
+Text Widgets
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ "Chapter <!-- xref -->
+ </term>
+ <listitem>
+ <para>
+Composite and Constraint Widget
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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.
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/Box.h&gt;
+Class Header file &lt;X11/Xaw/BoxP.h&gt;
+Class boxWidgetClass
+Class Name Box
+Superclass Composite
+<!-- .sp -->
+</literallayout>
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>Application Header File</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .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@" -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Class Header File</function>
+ </term>
+ <listitem>
+ <para>
+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@" -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Class</function>
+ </term>
+ <listitem>
+ <para>
+This is the widget class of this widget. This global symbol is passed to
+<function>XtCreateWidget</function> so that the Intrinsics will know which type of widget
+to create.
+<!-- .IN "class name" "" "@DEF@" -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Class Name</function>
+ </term>
+ <listitem>
+ <para>
+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" "" -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Superclass</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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@" -->
+<variablelist>
+ <varlistentry>
+ <term>
+ A
+ </term>
+ <listitem>
+ <para>
+This resource may be automatically adjusted when another
+resource is changed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ C
+ </term>
+ <listitem>
+ <para>
+This resource is only settable at widget creation time, and may not
+be modified with <function>XtSetValues</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ D
+ </term>
+ <listitem>
+ <para>
+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 X Toolkit.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ R
+ </term>
+ <listitem>
+ <para>
+This resource is READ-ONLY, and may not be modified.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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 <function>bold</function>.
+If you have already read the description of the superclass you need
+only pay attention to the resources printed in bold.
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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.
+</para>
+</sect1>
+<sect1 id="Input_Focus">
+<title>Input Focus</title>
+<!-- .XS -->
+<!-- Input Focus -->
+<!-- .XE -->
+<!-- .IN "input focus" "" "@DEF@" -->
+<!-- .IN "input" "" "@DEF@" -->
+<!-- .IN "XtNinput" "" "@DEF@" -->
+<para>
+<!-- .LP -->
+The Intrinsics define a resource on all Shell widgets that interact with
+the window manager called <function>input</function>. This resource requests the
+assistance of window manager in acquiring the input focus. The
+resource defaults to <function>False</function> in the Intrinsics, but is redefined to
+default to <function>True</function> when an application is using the Athena widget
+set. An application programmer may override this default and set the
+resource back to <function>False</function> if the application does not need the window
+manager to give it the input focus. See the
+<emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis> for details
+on the <emphasis remap='I'>input</emphasis> resource.
+
+</para>
+</sect1>
+</chapter>
diff --git a/libXaw/specs/CH2.xml b/libXaw/specs/CH2.xml
new file mode 100644
index 000000000..08f0ff569
--- /dev/null
+++ b/libXaw/specs/CH2.xml
@@ -0,0 +1,1891 @@
+<chapter><title>Using Widgets</title>
+<sect1 id="using_widgets">
+<title>Using Widgets</title>
+<para>
+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).
+</para>
+<para>
+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 Intrinsics mechanisms,
+want to implement alternative application programming interfaces.
+</para>
+<para>
+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 X Toolkit, only one is described here. A full
+description of the programming interface is provided in the document
+<emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+<sect2 id="Setting_the_Locale">
+<title>Setting the Locale</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Setting the Locale -->
+<!-- .XE -->
+If it is desirable that the application take advantage of
+internationalization (i18n), you must establish locale with
+<function>XtSetLanguageProc</function>
+before <function>XtDisplayInitialize</function> or <function>XtAppInitialize</function>
+is called. For full details, please refer to the document
+<emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>, section 2.2. However, the following simplest-case
+call is sufficient in many or most applications.
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "internationalization" "" "" -->
+<!-- .IN "XtSetLanguageProc" "" "@DEF@" -->
+<!-- .IN "locale" "" "" -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2i -->
+<!-- .ta .5i 2i -->
+ XtSetLanguageProc(NULL, NULL, NULL);
+</literallayout>
+</para>
+<para>
+<!-- .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.
+</para>
+</sect2>
+<sect2 id="Initializing_the_Toolkit">
+<title>Initializing the Toolkit</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Initializing the Toolkit -->
+<!-- .XE -->
+You must call a toolkit initialization function before invoking any
+other toolkit routines (besides locale setting, above).
+<function>XtAppInitialize</function>
+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@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Widget<function> XtAppInitialize</function></funcdef>
+ <paramdef>XtAppContext<parameter> app_context_return</parameter></paramdef>
+ <paramdef>String<parameter> application_class</parameter></paramdef>
+ <paramdef>XrmOptionDescRec<parameter> options</parameter></paramdef>
+ <paramdef>Cardinal<parameter> num_options</parameter></paramdef>
+ <paramdef>int<parameter> *argc_in_out</parameter></paramdef>
+ <paramdef>String<parameter> *argv_in_out</parameter></paramdef>
+ <paramdef>String<parameter> *fallback_resources</parameter></paramdef>
+ <paramdef>ArgList<parameter> args</parameter></paramdef>
+ <paramdef>Cardinal<parameter> num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_con_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the application context of this application, if non-NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+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''.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies how to parse the command line for any application-specific
+resources.
+The options argument is passed as a parameter to
+<function>XrmParseCommand</function> .
+For further information,
+see <emphasis remap='I'>Xlib - C Language Interface</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the options list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argc_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the number of command line parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argv_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the command line parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fallback_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies resource values to be used if the site-wide application class
+defaults file cannot be opened, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to use when creating the Application shell.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of arguments in <emphasis remap='I'>args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function will remove the command line arguments that the toolkit
+reads from <emphasis remap='I'>argc_in_out</emphasis>, and <emphasis remap='I'>argv_in_out</emphasis>. 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 Intrinsics. This function returns an ApplicationShell
+widget to be used as the root of the application's widget tree.
+</para>
+</sect2>
+<sect2 id="Creating_a_Widget">
+<title>Creating a Widget</title>
+<para>
+<!-- .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 <function>XtCreateWidget</function>. Second, the widget's parent is informed
+of the new child by using <function>XtManageChild</function>. Finally, X windows are
+created for the parent and all its children by using <function>XtRealizeWidget</function>
+and specifying the top-most widget. The first two steps can be
+combined by using <function>XtCreateManagedWidget</function>. In addition,
+<function>XtRealizeWidget</function> is automatically called when the child becomes
+managed if the parent is already realized.
+</para>
+<para>
+<!-- .LP -->
+To allocate, initialize, and manage a widget, use
+<function>XtCreateManagedWidget .</function>
+<!-- .IN "XtCreateManagedWidget" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Widget<function> XtCreateManagedWidget</function></funcdef>
+ <paramdef>String<parameter> name</parameter></paramdef>
+ <paramdef>WidgetClass<parameter> widget_class</parameter></paramdef>
+ <paramdef>Widget<parameter> parent</parameter></paramdef>
+ <paramdef>ArgList<parameter> args</parameter></paramdef>
+ <paramdef>Cardinal<parameter> num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the instance name for the created widget that is used for retrieving
+widget resources.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class pointer for the created widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>parent</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parent widget ID.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+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. <!-- xref> -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of arguments in the argument list.
+If the num_args is zero, the argument list is never referenced.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+When a widget instance is successfully created, the widget identifier
+is returned to the application. If an error is encountered, the
+<function>XtError</function>
+routine is invoked to inform the user of the error.
+<!-- .IN "XtError" "" "" -->
+</para>
+<para>
+<!-- .LP -->
+For further information, see <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+</sect2>
+<sect2 id="Common_Resources">
+<title>Common Resources</title>
+<!-- .XS -->
+<!-- Common Resources -->
+<!-- .XE -->
+<!-- .IN "resource" "" -->
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+The following resources are retrieved from the argument list
+or from the resource database by all of the Athena widgets:
+<informaltable>
+ <tgroup cols='4' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry><emphasis remap='I'>widget dependent</emphasis></entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry><emphasis remap='I'>widget dependent</emphasis></entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry><emphasis remap='I'>widget dependent</emphasis></entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .IN "XtDefaultForeground" "" "" -->
+<!-- .IN "XtDefaultBackground" "" "" -->
+</para>
+<para>
+<!-- .LP -->
+The following additional resources are retrieved from the argument list
+or from the resource database by many of the Athena widgets:
+<informaltable>
+ <tgroup cols='4' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry><emphasis remap='I'>widget dependent</emphasis></entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .IN "XtDefaultForeground" "" "" -->
+</para>
+</sect2>
+<sect2 id="Resource_Conversions">
+<title>Resource Conversions</title>
+<!-- .XS -->
+<!-- Resource Conversions -->
+<!-- .XE -->
+<!-- .IN "conversions" "" "@DEF@" -->
+<!-- .IN "string conversions" "" "@DEF@" -->
+<!-- .IN "type conversions" "" "@DEF@" -->
+<para>
+<!-- .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:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Cursor
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Pixel
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Bitmap
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .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.
+</para>
+<sect3 id="Cursor_Conversion">
+<title>Cursor Conversion</title>
+<!-- .IN "conversions" "ColorCursor" "@DEF@" -->
+<!-- .IN "conversions" "Cursor" "@DEF@" -->
+<!-- .IN "cursor" "" "" -->
+<para>
+<!-- .LP -->
+The value for the <function>cursorName</function> resource is specified in the resource
+database as a string, and is of the following forms:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A standard X cursor name from <function>&lt; X11/cursorfont.h &gt;</function>.
+The names in <function>cursorfont.h</function> each describe a specific cursor. The
+resource names for these cursors are exactly like the names in this file
+except the <function>XC_</function> is not used. The cursor definition <function>XC_gumby</function>
+has a resource name of <function>gumby</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Glyphs, as in <emphasis remap='I'>FONT font-name glyph-index [[ font-name ] glyph-index ]</emphasis>.
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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). <!-- xref -->
+ </para>
+ </listitem>
+</itemizedlist>
+</sect3>
+<sect3 id="Pixel_Conversion">
+<title>Pixel Conversion</title>
+<para>
+<!-- .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 <emphasis remap='I'>Xlib - C Language Interface</emphasis>). In addition this routine understands
+the special toolkit symbols `XtDefaultForeground' and
+`XtDefaultBackground', described in <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>. In short the acceptable
+pixel names are:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Any color name for the rgb.txt file (typically in the directory
+/usr/lib/X11 on POSIX systems).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A numeric specification of the form #&lt;red&gt;&lt;green&gt;&lt;blue&gt; where these
+numeric values are hexadecimal digits (both upper and lower case).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The special strings `XtDefaultForeground' and `XtDefaultBackground'
+ </para>
+ </listitem>
+</itemizedlist>
+</sect3>
+<sect3 id="Bitmap_Conversion">
+<title>Bitmap Conversion</title>
+<!-- .IN "bitmap conversions" "" "@DEF@" -->
+<!-- .IN "conversions" "Bitmap" "@DEF@" -->
+<!-- .IN "bitmapFilePath" "" "@DEF@" -->
+<!-- .IN "BitmapFilePath" "" "@DEF@" -->
+<!-- .IN "/usr/include/X11/bitmaps" "" "" -->
+<para>
+<!-- .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 <function>bitmapFilePath</function> resource--class
+<function>BitmapFilePath</function>. 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 <function>bitmapFilePath</function> resource is
+global to the application, and may <function>not</function> be specified differently
+for each widget that wishes to convert a cursor to bitmap. In addition
+to the directories specified in the <function>bitmapFilePath</function> resource a
+default directory is searched. When using POSIX the default
+directory is
+<function>/usr/include/X11/bitmaps .</function>
+</para>
+</sect3>
+</sect2>
+<sect2 id="Realizing_a_Widget">
+<title>Realizing a Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Realizing a Widget -->
+<!-- .XE -->
+<!-- .IN "realizing widgets" "" "@DEF@" -->
+The
+<function>XtRealizeWidget</function>
+function performs two tasks:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Calculates the geometry constraints of all managed descendants
+of this widget. The actual calculation is put off until realize time
+for performance reasons.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Creates an X window for the widget and, if it is a composite widget,
+realizes each of its managed children.
+<!-- .IN "XtRealizeWidget" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtRealizeWidget</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+For further information about this function,
+see the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+</sect2>
+<sect2 id="Processing_Events">
+<title>Processing Events</title>
+<para>
+<!-- .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 <function>XtAppMainLoop</function>.
+<!-- .IN "XtAppMainLoop" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtAppMainLoop</function></funcdef>
+ <paramdef>XtAppContext<parameter> app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context of this application. The value is
+normally returned by <function>XtAppInitialize</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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
+<emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+</sect2>
+<sect2 id="Standard_Widget_Manipulation_Functions">
+<title>Standard Widget Manipulation Functions</title>
+<!-- .XS -->
+<!-- Standard Widget Manipulation Functions -->
+<!-- .XE -->
+<para>
+<!-- .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 Intrinsics, or a widget class-specific manipulation routine.
+</para>
+<para>
+<!-- .LP -->
+The Intrinsics 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.
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Control the mapping of widget windows
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Destroy a widget instance
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Obtain an argument value
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Set an argument value
+ </para>
+ </listitem>
+</itemizedlist>
+<sect3 id="Mapping_Widgets">
+<title>Mapping Widgets</title>
+<para>
+<!-- .LP -->
+By default,
+widget windows are mapped (made viewable) automatically by
+<function>XtRealizeWidget</function>. This behavior can be disabled by using
+<function>XtSetMappedWhenManaged</function>, making the client responsible for calling
+<function>XtMapWidget</function> to make the widget viewable.
+<!-- .IN "XtSetMappedWhenManaged" "" "@DEF@" -->
+<!-- .IN "XtMapWidget" "" "" -->
+<!-- .IN "XtRealizeWidget" "" "" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtSetMappedWhenManaged</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Boolean<parameter> map_when_managed</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>map_when_managed</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new value.
+If map_when_managed is <function>True</function>, the widget is mapped automatically
+when it is realized. If map_when_managed is <function>False</function>, the client
+must call
+<function>XtMapWidget</function>
+or make a second call to
+<function>XtSetMappedWhenManaged</function>
+to cause the child window to be mapped.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+The definition for
+<function>XtMapWidget</function>
+is:
+<!-- .IN "XtMapWidget" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtMapWidget</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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 <function>XtCreateWidget</function>) and
+then use <function>XtManageChildren</function> 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" "" "" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtManageChildren</function></funcdef>
+ <paramdef>WidgetList<parameter> children</parameter></paramdef>
+ <paramdef>Cardinal<parameter> num_children</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of children to add.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of children to add.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+For further information about these functions,
+see the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+</sect3>
+<sect3 id="Destroying_Widgets">
+<title>Destroying Widgets</title>
+<para>
+<!-- .LP -->
+To destroy a widget instance of any type, use
+<function>XtDestroyWidget</function>
+<!-- .IN "XtDestroyWidget" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtDestroyWidget</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<function>XtDestroyWidget</function>
+destroys the widget and recursively destroys any children that it may have,
+including the windows created by its children.
+After calling
+<function>XtDestroyWidget ,</function>
+no further references should be made to the widget or any children
+that the destroyed widget may have had.
+</para>
+</sect3>
+<sect3 id="Retrieving_Widget_Resource_Values">
+<title>Retrieving Widget Resource Values</title>
+<para>
+<!-- .LP -->
+To retrieve the current value of a resource attribute associated
+with a widget instance, use
+<function>XtGetValues .</function>
+<!-- .IN "XtGetValues" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtGetValues</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>ArgList<parameter> args</parameter></paramdef>
+ <paramdef>Cardinal<parameter> num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a variable-length argument list of name and <function>address</function>
+pairs that contain the resource name and the address into which the
+resource value is stored.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of arguments in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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 <function>ArgList</function>
+contains a pointer to this storage (e.g. x and y must be
+allocated as Position). For further information, see the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+</sect3>
+<sect3 id="Modifying_Widget_Resource_Values">
+<title>Modifying Widget Resource Values</title>
+<para>
+<!-- .LP -->
+To modify the current value of a resource attribute associated with a
+widget instance, use
+<function>XtSetValues .</function>
+<!-- .IN "XtSetValues" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtSetValues</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>ArgList<parameter> args</parameter></paramdef>
+ <paramdef>Cardinal<parameter> num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an array of name and <function>value</function> pairs that contain the
+arguments to be modified and their new values.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of arguments in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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 <function>XtSetValues</function> request is
+ignored.
+</para>
+<para>
+<!-- .LP -->
+For further information about these functions, see the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+<!-- .IN "XtGetValues" "" "" -->
+<!-- .IN "XtSetValues" "" "" -->
+<!-- .NT -->
+The argument list entry for
+<function>XtGetValues</function>
+specifies the address to which the caller wants the value copied. The
+argument list entry for
+<function>XtSetValues ,</function>
+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 -->
+</para>
+</sect3>
+</sect2>
+<sect2 id="Using_the_Client_Callback_Interface">
+<title>Using the Client Callback Interface</title>
+<para>
+<!-- .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@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> CallbackProc</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XtPointer<parameter> client_data</parameter></paramdef>
+ <paramdef>XtPointer<parameter> call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies widget for which the callback is registered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>closure</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies any callback-specific data the widget wants to pass to the client.
+For example, when Scrollbar executes its <function>jumpProc</function> callback list,
+it passes the current position of the thumb in <emphasis remap='I'>call_data</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+Callbacks can be registered either by creating an argument containing
+the callback list described below or by using the special convenience
+routines <function>XtAddCallback</function> and <function>XtAddCallbacks</function>. When the widget
+is created, a pointer to a list of callback procedure and data pairs can
+be passed in the argument list to
+<function>XtCreateWidget .</function>
+The list is of type
+<function>XtCallbackList :</function>
+<!-- .IN "XtCallbackProc" -->
+<!-- .IN "XtAddCallbacks" -->
+<!-- .IN "XtAddCallback" -->
+<!-- .IN "XtCallbackList" "" "@DEF@" -->
+<!-- .IN "XtCallbackRec" "" "@DEF@" -->
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 3i -->
+<!-- .ta .5i 3i -->
+typedef struct {
+ XtCallbackProc callback;
+ XtPointer closure;
+} XtCallbackRec, *XtCallbackList;
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+The callback list must be allocated and initialized before calling
+<function>XtCreateWidget .</function>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+The second method for registering callbacks is to use
+<function>XtAddCallback</function>
+after the widget has been created.
+<!-- .IN "XtAddCallback" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XtAddCallback</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>String<parameter> callback_name</parameter></paramdef>
+ <paramdef>XtCallbackProc<parameter> callback</parameter></paramdef>
+ <paramdef>XtPointer<parameter> client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget to add the callback to.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list within the widget to append to.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback procedure to add.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the data to be passed to the callback when it is invoked.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<function>XtAddCallback</function>
+adds the specified callback to the list for the named widget.
+</para>
+<para>
+<!-- .LP -->
+All widgets provide a callback list named
+<function>destroyCallback</function>
+<!-- .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 <emphasis remap='I'>call_data</emphasis> argument is unused for
+destroy callbacks.
+</para>
+</sect2>
+<sect2 id="Programming_Considerations">
+<title>Programming Considerations</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Programming Considerations -->
+<!-- .XE -->
+This section provides some guidelines on how to set up an application
+program that uses the X Toolkit.
+</para>
+<sect3 id="Writing_Applications">
+<title>Writing Applications</title>
+<para>
+<!-- .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:
+</para>
+<orderedlist>
+ <listitem>
+ <para>
+Include
+<function>&lt; X11/Intrinsic.h &gt;</function>
+in your application programs.
+This header file automatically includes
+<function>&lt; X11/Xlib.h &gt;,</function>
+so all Xlib functions also are defined.
+It may also be necessary to include <function>&lt; X11/StringDefs.h &gt;</function> when setting
+up argument lists, as many of the XtN<emphasis remap='I'>something</emphasis> definitions are
+only defined in this file.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Include the widget-specific header files for each widget type
+that you need to use.
+For example,
+<function>&lt; X11/Xaw/Label.h &gt;</function>
+and
+<function>&lt; X11/Xaw/Command.h &gt;.</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Call the
+<function>XtAppInitialize</function>
+<!-- .IN "XtAppInitialize" -->
+function before invoking any other toolkit or Xlib functions.
+For further information,
+see Section 2.1 and the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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 <function>XtN</function> to help catch spelling errors. For example,
+<function>XtNlabel</function> is defined for the <function>label</function> resource of many widgets.
+<!-- .IN "XtN" "" "@DEF@" -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+For further information, see Section 2.9.2.2. <!-- xref -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+When the argument list is set up, create the widget with the
+<function>XtCreateManagedWidget</function> function. For further information, see
+Section 2.2 and the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+<!-- .IN "XtCreateManagedWidget" -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the widget has any callback routines, set by the
+<function>XtNcallback</function>
+argument or the
+<function>XtAddCallback</function>
+function, declare these routines within the application.
+<!-- .IN "XtAddCallback" -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+After creating the initial widget hierarchy, windows must be created
+for each widget by calling
+<function>XtRealizeWidget</function>
+on the top level widget.
+<!-- .IN "XtRealizeWidget" -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Most applications now sit in a loop processing events using
+<function>XtAppMainLoop ,</function>
+for example:
+<!-- .IN "XtAppMainLoop" -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<literallayout class="monospaced">
+XtCreateManagedWidget(<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>class</emphasis>, <emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>args</emphasis>, <emphasis remap='I'>num_args</emphasis>);
+XtRealizeWidget(<emphasis remap='I'>shell</emphasis>);
+XtAppMainLoop(<emphasis remap='I'>app_context</emphasis>);
+</literallayout>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+For information about this function, see the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Link your application with
+<function>libXaw</function>
+(the Athena widgets),
+<function>libXmu</function>
+(miscellaneous utilities),
+<function>libXt</function>
+(the X Toolkit Intrinsics),
+<function>libSM</function>
+(Session Management),
+<function>libICE</function>
+(Inter-Client Exchange),
+<function>libXext</function>
+(the extension library needed for the shape extension code which allows
+rounded Command buttons), and
+<function>libX11</function>
+(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" -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<literallayout class="monospaced">
+cc -o <emphasis remap='I'>application</emphasis> <emphasis remap='I'>application</emphasis>.c \-lXaw \-lXmu \-lXt \
+\-lSM \-lICE \-lXext \-lX11
+</literallayout>
+ </para>
+ </listitem>
+</orderedlist>
+</sect3>
+<sect3 id="Changing_Resource_Values">
+<title>Changing Resource Values</title>
+<!-- .IN "resource" "" -->
+<para>
+<!-- .LP -->
+The Intrinsics 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.
+<variablelist>
+ <varlistentry>
+ <term>Resource Manager</term>
+ <listitem>
+ <para>
+This method picks up resource definitions described in <emphasis remap='I'>Xlib - C Language Interface</emphasis> from
+many different locations at run time. The locations most important to
+the application programmer are the <emphasis remap='I'>fallback resources</emphasis> and the
+<emphasis remap='I'>app-defaults</emphasis> file, (see <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis> 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Argument Lists</term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<sect4 id="Specifying_Resources">
+<title>Specifying Resources</title>
+<para>
+<!-- .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" -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>Xrdb</function>
+ </term>
+ <listitem>
+ <para>
+The <function>xrdb</function> 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" -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Application Defaults</term>
+ <listitem>
+ <para>
+The application defaults (app-defaults) file (normally in
+/usr/lib/X11/app-defaults/<emphasis remap='I'>classname</emphasis>) for an application is loaded
+whenever the application is started.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+The resource specification has two colon-separated parts, a name, and
+a value. The <emphasis remap='I'>value</emphasis> is a string whose format is dependent on the
+resource specified by <emphasis remap='I'>name</emphasis>. <emphasis remap='I'>Name</emphasis> is constructed by
+appending a resource name to a full widget name.
+</para>
+<para>
+<!-- .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:
+<variablelist>
+ <varlistentry>
+ <term>
+ xman.form.button1
+ </term>
+ <listitem>
+ <para>
+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.)
+
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ Xman.Form.Command
+ </term>
+ <listitem>
+ <para>
+This will match any Command widget that is a child of a Form widget
+that is itself a child of an application of class <emphasis remap='I'>Xman</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ Xman.Form.button1
+ </term>
+ <listitem>
+ <para>
+This is a mixed resource name with both widget names and classes specified.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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:
+<variablelist>
+ <varlistentry>
+ <term>
+ Xman*Command
+ </term>
+ <listitem>
+ <para>
+This matches all Command widgets in the Xman application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ Foo*button1
+ </term>
+ <listitem>
+ <para>
+This matches any widget in the Foo application that is named <emphasis remap='I'>button1</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+The root of all application widget trees is the widget returned by
+<function>XtAppInitialize</function>. 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 (<function>argv[0]</function>) or the name of
+the application specified using the standard <emphasis remap='I'>-name</emphasis> command line
+option supported by the Intrinsics.
+</para>
+<para>
+<!-- .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.
+<variablelist>
+ <varlistentry>
+ <term>
+ *foreground:Blue
+ </term>
+ <listitem>
+ <para>
+Specifies that all widgets in all applications will have a foreground
+color of blue.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ Xman*borderWidth:10
+ </term>
+ <listitem>
+ <para>
+Specifies that all widgets in an application whose class is Xman will
+have a border width of 10 (pixels).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ xman.form.button1.label:Testing
+ </term>
+ <listitem>
+ <para>
+Specifies that a particular widget in the xman application will have a
+label named <emphasis remap='I'>Testing</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+An exclamation point (!) in the first column of a line indicates
+that the rest of the line should be treated as a comment.
+</para>
+<para>
+<!-- .LP -->
+<function>Final Words</function>
+</para>
+<para>
+<!-- .LP -->
+The Resource manager is a powerful tool that can be used very
+effectively to customize X Toolkit applications at run time by either the
+application programmer or the user. Some final points to note:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+An application programmer may add new resources to their
+application. These resources are associated with the global
+application, and not any particular widget. The X Toolkit function used for
+adding the application resources is <function>XtGetApplicationResources</function>.
+<!-- .IN "XtGetApplicationResources" -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Only one resource line will match any given resource. There is a set
+of precedence rules, which take the following general stance.
+<!-- .ta 10n -->
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist>
+ <listitem>
+ <para>
+More specific overrides less specific, thus period always overrides asterisk.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Names on the left are more specific and override names on the right.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+When resource specifications are exactly the same, user defaults
+will override program defaults.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+For a complete explanation of the rules of precedence, and
+other specific topics see <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis> and <emphasis remap='I'>Xlib - C Language Interface</emphasis>.
+</para>
+</sect4>
+<sect4 id="Creating_Argument_Lists">
+<title>Creating Argument Lists</title>
+<!-- .IN "argument lists" "" "@DEF@" -->
+<para>
+<!-- .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<emphasis remap='I'>resource name</emphasis>. For example, the
+symbol for ``foreground'' is <function>XtNforeground</function>. For further information,
+see the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+<para>
+<!-- .LP -->
+Argument are specified by using the following structure:
+<!-- .IN "ArgList" "" "@DEF@" -->
+<!-- .IN "Arg" "" "@DEF@" -->
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 1.5i -->
+<!-- .ta .5i 1.5i -->
+typedef struct {
+ String name;
+ XtArgVal value;
+} Arg, *ArgList;
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+The first approach is to statically initialize the argument list.
+For example:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i -->
+<!-- .ta .5i -->
+static Arg arglist[] = {
+ {XtNwidth, (XtArgVal) 400},
+ {XtNheight, (XtArgVal) 300},
+};
+</literallayout>
+</para>
+<para>
+<!-- .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" -->
+<function>XtNumber</function>
+macro is used to compute the number of elements in the argument list,
+preventing simple programming errors:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+XtCreateWidget(<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>class</emphasis>, <emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>arglist</emphasis>, XtNumber(<emphasis remap='I'>arglist</emphasis>));
+</literallayout>
+<!-- .IN "XtSetArg" "" "@DEF@" -->
+</para>
+<para>
+<!-- .LP -->
+The second approach is to use the
+<function>XtSetArg</function>
+macro.
+For example:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i -->
+<!-- .ta .5i -->
+Arg arglist[10];
+XtSetArg(arglist[1], XtNwidth, 400);
+XtSetArg(arglist[2], XtNheight, 300);
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+To make it easier to insert and delete entries,
+you also can use a variable index:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i -->
+<!-- .ta .5i -->
+Arg arglist[10];
+Cardinal i=0;
+XtSetArg(arglist[i], XtNwidth, 400); i++;
+XtSetArg(arglist[i], XtNheight, 300); i++;
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+The i variable can then be used as the argument list count in the widget
+create function.
+In this example,
+<!-- .IN "XtNumber" -->
+<function>XtNumber</function>
+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
+<function>XtSetArg .</function>
+As it is currently implemented,
+<function>XtSetArg</function>
+is a macro that dereferences the first argument twice.
+<!-- .NE -->
+</para>
+<para>
+<!-- .LP -->
+The third approach is to individually set the elements of the
+argument list array:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .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;
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+Note that in this example, as in the previous example,
+<!-- .IN "XtNumber" -->
+<function>XtNumber</function>
+would return 10, not 2, and therefore would not be useful.
+</para>
+<para>
+<!-- .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:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i -->
+<!-- .ta .5i -->
+static Arg arglist[] = {
+ {XtNwidth, (XtArgVal) 400},
+ {XtNheight, (XtArgVal) NULL},
+};
+arglist[1].value = (XtArgVal) 300;
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+In this example,
+<!-- .IN "XtNumber" -->
+<function>XtNumber</function>
+can be used, as in the first approach, for easier code maintenance.
+</para>
+</sect4>
+</sect3>
+</sect2>
+<sect2 id="Example_Programs">
+<title>Example Programs</title>
+<!-- .XS -->
+<!-- Example Programs -->
+<!-- .XE -->
+<!-- .IN "examples" -->
+<para>
+<!-- .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 <function>contrib/examples/mit/Xaw</function>, 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.
+</para>
+</sect2>
+</sect1>
+</chapter>
diff --git a/libXaw/specs/CH3.xml b/libXaw/specs/CH3.xml
new file mode 100644
index 000000000..8fdefcc7b
--- /dev/null
+++ b/libXaw/specs/CH3.xml
@@ -0,0 +1,123 @@
+<chapter id="simple_widgets">
+<title>Simple Widgets</title>
+
+<!-- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH3.intro.xml"/> -->
+<para>
+Each of these widgets performs a specific user interface function. They
+are <emphasis remap='I'>simple</emphasis> 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.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term><function>Command</function></term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>Grip</function></term>
+ <listitem>
+ <para>
+A rectangle that, when selected, will cause an action to take place.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>Label</function></term>
+ <listitem>
+ <para>
+A rectangle that can display a multi-line string or a bitmap or pixmap image.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><function>List</function></term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><function>Panner</function></term>
+ <listitem>
+ <para>
+A rectangular area containing a <emphasis remap='I'>slider</emphasis> that may be moved in two
+dimensions. Notification of movement may be continuous or discrete.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><function>Repeater</function></term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><function>Scrollbar</function></term>
+ <listitem>
+ <para>
+A rectangular area containing a <emphasis remap='I'>thumb</emphasis> that when slid along one
+dimension may cause a specific action to take place. The Scrollbar may
+be oriented horizontally or vertically.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><function>Simple</function></term>
+ <listitem>
+ <para>
+The base class for most of the simple widgets. Provides a rectangular
+area with a settable mouse cursor and special border.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><function>StripChart</function></term>
+ <listitem>
+ <para>
+A real time data graph that will automatically update and scroll.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><function>Toggle</function></term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<!-- End of CH3.Intr -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Command.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Grip.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Label.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="List.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Panner.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Repeater.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Scrollbar.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Simple.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="StripChart.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Toggle.xml"/>
+</chapter>
diff --git a/libXaw/spec/CH4.intro b/libXaw/specs/CH4.xml
index c11e42547..00c89f78e 100644
--- a/libXaw/spec/CH4.intro
+++ b/libXaw/specs/CH4.xml
@@ -1,87 +1,102 @@
-.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
+<chapter id="menus">
+<title>Menus</title>
+<para>
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
+</para>
+<para>
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
+</para>
+<para>
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" ""
+</para>
+<para>
+<variablelist>
+ <varlistentry>
+ <term>Sme</term>
+ <listitem>
+ <para>
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" ""
+itself to provide blank space in a menu. "Sme" means "Simple Menu
+Entry."
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>SmeBSB</term>
+ <listitem>
+ <para>
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" ""
+A bitmap may also be placed in the left and right margins. "BSB" means
+"Bitmap String Bitmap."
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>SmeLine</term>
+ <listitem>
+ <para>
This menu entry provides an unselectable entry containing a separator line.
-.sp
-.LP
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
The SimpleMenu widget informs the window manager that it should ignore
-its window by setting the \fBOverride Redirect\fP flag. This is the
+its window by setting the <function>Override Redirect</function> 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
+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
+</para>
+<para>
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
+</para>
+<sect1 id="Using_the_Menus">
+<title>Using the Menus</title>
+<!-- .XS -->
+<!-- Using the Menus -->
+<!-- .XE -->
+<!-- .IN "Menus" "using" -->
+<para>
+<!-- .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"
+that button; this is a <function>pulldown</function> 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-<pointer
-.IN "Menus" "popup"
-button 1> in the common application \fBxterm\fP). In this
+application; this is a <function>popup</function> menu (e.g. clicking Ctrl-&lt;pointer
+<!-- .IN "Menus" "popup" -->
+button 1&gt; in the common application <function>xterm</function>). 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
+</para>
+<para>
+<!-- .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.
+
+</para>
+</sect1>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Sme.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="SmeBSB.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="SmeLine.xml"/>
+</chapter>
diff --git a/libXaw/spec/CH5.intro b/libXaw/specs/CH5.xml
index 69230c0ad..eb3f2fb3e 100644
--- a/libXaw/spec/CH5.intro
+++ b/libXaw/specs/CH5.xml
@@ -1,82 +1,71 @@
-.\" $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
+<chapter id="text_widgets">
+<title>Text Widgets</title>
-\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
+<para>
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
+</para>
+<para>
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
+details.) <!-- xref -->
+</para>
+<para>
+The words <emphasis remap='I'>insertion point</emphasis> 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
+always be referred to as the <emphasis remap='I'>pointer</emphasis>.
+</para>
+<para>
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
+</para>
+<para>
+<itemizedlist>
+ <listitem><para>Append-only</para></listitem>
+ <listitem><para>Editable</para></listitem>
+ <listitem><para>Read-only</para></listitem>
+</itemizedlist>
+</para>
+<para>
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" ""
+read-only mode with <function>XtSetValues</function>, it cannot be modified via
+with <function>XawTextReplace</function>. Append-only and editable modes allow
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
+</para>
+<sect1 id="Text_Widget_for_Users">
+<title>Text Widget for Users</title>
+<!-- .IN "Text widget" "User's Guide to the Text widget" -->
+<!-- .XS -->
+<!-- Text Widget for Users -->
+<!-- .XE -->
+<para>
+<!-- .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
+</para>
+<sect2 id="Default_Key_Bindings">
+<title>Default Key Bindings</title>
+<!-- .IN "Text widget" "default key bindings" -->
+<para>
+<!-- .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
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .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
@@ -89,8 +78,8 @@ 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-o Newline And Backup Meta-&lt; Beginning Of File
+Ctrl-p Previous Line Meta-&gt; End Of File
Ctrl-r Search/Replace Backward Meta-] Forward Paragraph
Ctrl-s Search/Replace Forward Meta-[ Backward Paragraph
Ctrl-t Transpose Characters
@@ -101,14 +90,18 @@ 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
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .LP -->
In addition, the pointer may be used to cut and paste text:
-.LP
-.Ds
-.TA .5i 2.0i
-.ta .5i 2.0i
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.0i -->
+<!-- .ta .5i 2.0i -->
Button 1 Down Start Selection
Button 1 Motion Adjust Selection
Button 1 Up End Selection (cut)
@@ -119,35 +112,44 @@ In addition, the pointer may be used to cut and paste text:
Button 3 Motion Adjust Selection
Button 3 Up End Selection (cut)
-.De
-.LP
+</literallayout>
+</para>
+<para>
+<!-- .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
+<function>translations</function> resource.
+<!-- .\" -->
+</para>
+</sect2>
+<sect2 id="Search_and_Replace">
+<title>Search and Replace</title>
+<!-- .IN "Text widget" "search" -->
+<!-- .IN "Text widget" "query replace" -->
+<para>
+<!-- .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
+typing either <emphasis remap='I'>Control-r</emphasis> or <emphasis remap='I'>Control-s</emphasis>. If <emphasis remap='I'>Control-s</emphasis> 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
+insertion point; if <emphasis remap='I'>Control-r</emphasis> 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
+</para>
+<para>
+<!-- .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
+<emphasis remap='I'>backward</emphasis> and <emphasis remap='I'>forward</emphasis>. 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
+</para>
+<para>
+<!-- .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
+<emphasis remap='I'>Search for:</emphasis> and the other labeled <emphasis remap='I'>Replace with:</emphasis>. If this is
+a read-only Text widget the <emphasis remap='I'>Replace with:</emphasis> 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
@@ -155,19 +157,23 @@ 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
+<literallayout class="monospaced">
+<!-- .TA 1.75i -->
+<!-- .ta 1.75i -->
+<function>Carriage Return</function>: Execute the action, and pop down the search widget.
+<function>Tab</function>: Execute the action, then move to the next field.
+<function>Shift Carriage Return</function>: Execute the action, then move to the next field.
+<function>Control-q Tab</function>: Enter a Tab into a text field.
+<function>Control-c</function>: Pop down the search popup.
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
Using these special key sequences should allow simple
searches without ever removing one's hands from the keyboard.
-.LP
+</para>
+<para>
+<!-- .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
@@ -175,31 +181,62 @@ 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
+</para>
+<variablelist>
+ <varlistentry>
+ <term>Search</term>
+ <listitem>
+ <para>
Search for the specified string.
-.IP \fBReplace\fP 15
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Replace</term>
+ <listitem>
+ <para>
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
+<emphasis remap='I'>Replace with</emphasis> text field, and move onto the next occurrence of the
+<emphasis remap='I'>Search for</emphasis> text field. The functionality is commonly referred to as
query-replace.
-.IP \fBReplace-All\fP 15
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>ReplaceAll</term>
+ <listitem>
+ <para>
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
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>ReplaceAll</term>
+ <listitem>
+ <para>
Remove the search popup from the screen.
-.LP
-Finally, when \fBinternational\fP resource is \fBtrue\fP, there may be a
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<para>
+<!-- .LP -->
+Finally, when <function>international</function> resource is <function>true</function>, 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
+is determined by the X locale in use and the VendorShell's <function>preeditType</function>
resource.
-.LP
+</para>
+<para>
+<!-- .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 <name of Text widget>
+<!-- .sp -->
+<!-- .nf -->
+<!-- .ta .5i 1.0i 1.5i 2.0i 2.5i -->
+<literallayout class="monospaced">
+Text &lt;name of Text widget&gt;
TransientShell search
Form form
Label label1
@@ -214,79 +251,147 @@ Text <name of Text widget>
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,
+</literallayout>
+<!-- .fi -->
+</para>
+</sect2>
+<sect2 id="File_Insertion">
+<title>File Insertion</title>
+<para>
+<!-- .LP -->
+<!-- .IN "Text widget" "file insertion" -->
+To insert a file into a text widget, type the key sequence <emphasis remap='I'>Meta-i</emphasis>,
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
+filename has been entered, click on <emphasis remap='I'>Insert File</emphasis>, or type
+<emphasis remap='I'>Carriage Return</emphasis>. 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
+on <emphasis remap='I'>Cancel</emphasis>. If <emphasis remap='I'>Meta-i</emphasis> is typed at a text widget that is
read-only, it will beep, as no file insertion is allowed.
-.LP
+</para>
+<para>
+<!-- .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 <name of Text widget>
+<!-- .sp -->
+<!-- .nf -->
+<!-- .ta .5i 1.0i 1.5i 2.0i 2.5i -->
+<literallayout class="monospaced">
+Text &lt;name of Text widget&gt;
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"
+</literallayout>
+<!-- .fi -->
+</para>
+</sect2>
+<sect2 id="Text_Selections_for_Users">
+<title>Text Selections for Users</title>
+<para>
+<!-- .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,
+the user to copy pieces of the text into the <function>PRIMARY</function> selection,
and paste
into the text widget some text that another application (or text
-widget) has put in the \fBPRIMARY\fP selection.
-.LP
+widget) has put in the <function>PRIMARY</function> selection.
+</para>
+<para>
+<!-- .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
+</para>
+<para>
+<!-- .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
+</para>
+<para>
+<!-- .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.
+put into the <function>PRIMARY</function> 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
+</para>
+<para>
+<!-- .LP -->
Rapidly clicking pointer button 1 the following number of times will adjust
the selection as described.
-.IP \fBTwo\fP 1.0i
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>Two</function>
+ </term>
+ <listitem>
+ <para>
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
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Three</function>
+ </term>
+ <listitem>
+ <para>
Select the line under the pointer.
-.IP \fBFour\fP 1.0i
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Four</function>
+ </term>
+ <listitem>
+ <para>
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
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Five</function>
+ </term>
+ <listitem>
+ <para>
Select the entire text buffer.
-.LP
-To unset the text selection, click pointer button 1
-without moving it.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+To unset the text selection, click pointer button 1 without moving it.
+</para>
+</sect2>
+</sect1>
+
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="TextActions_text_widget_actions.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="TextActions_default_translation_bindings.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="TextFuncs.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="TextCustom.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Text.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="TextSink.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="TextSource.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="AsciiSink.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="AsciiSource.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="AsciiText.xml"/>
+</chapter>
diff --git a/libXaw/specs/CH6.xml b/libXaw/specs/CH6.xml
new file mode 100644
index 000000000..e8009afb6
--- /dev/null
+++ b/libXaw/specs/CH6.xml
@@ -0,0 +1,117 @@
+<chapter id="composite_and_constraint_widgets">
+<title>Composite and Constraint Widgets</title>
+<para>
+These widgets may contain arbitrary widget children. They implement a
+policy for the size and location of their children.
+</para>
+<para>
+<variablelist>
+ <varlistentry>
+ <term>Box</term>
+ <listitem>
+ <para>
+This widget will pack its children as tightly as possible in non-overlapping rows.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Dialog</term>
+ <listitem>
+ <para>
+An implementation of a commonly used interaction semantic to prompt for
+auxiliary input from the user, such as a filename.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Form</term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Paned</term>
+ <listitem>
+ <para>
+Allows children to be tiled vertically or horizontally. Controls are
+also provided to allow the user to dynamically resize the individual panes.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Porthole</term>
+ <listitem>
+ <para>
+Allows viewing of a managed child which is as large as, or larger than its
+parent, typically under control of a Panner widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Tree</term>
+ <listitem>
+ <para>
+Provides geometry management of widgets arranged in a directed, acyclic graph.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Viewport</term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<note>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+If the application wishes to change the size or location of
+any widget it should make a call to <function>XtSetValues</function>. 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 <function>XtMoveWidget</function> or
+<!-- .IN "XtMoveWidget" "" -->
+<function>XtResizeWidget</function>; these functions are exclusively for the use of
+<!-- .IN "XtResizeWidget" "" -->
+Composite widget implementors.
+</para>
+<para>
+<!-- .LP -->
+For more information on geometry management consult the <emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+</para>
+</note>
+
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Box.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Dialog.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Form.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Paned.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Porthole.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Tree.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Viewport.xml"/>
+
+</chapter>
diff --git a/libXaw/specs/CH7.xml b/libXaw/specs/CH7.xml
new file mode 100644
index 000000000..4c491704b
--- /dev/null
+++ b/libXaw/specs/CH7.xml
@@ -0,0 +1,167 @@
+<chapter id="creating_new_widgets__subclassing_">
+<title>Creating New Widgets (Subclassing)</title>
+<para>
+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
+<emphasis remap='I'>Template</emphasis> widget that is intended to assist
+the novice widget programmer in writing a custom widget.
+</para>
+<para>
+Reasons for wishing to write a custom widget include:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Providing a graphical interface not currently supported by any existing
+widget set.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Convenient access to resource management procedures to obtain fonts,
+colors, etc., even if user customization is not desired.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Convenient access to user input dispatch and translation management procedures.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Access to callback mechanism for building higher-level application libraries.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Customizing the interface or behavior of an existing widget to suit a
+special application need.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Converting a non-Toolkit application to use the Toolkit.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+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.
+</para>
+<para>
+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
+<function>widgetClass</function>.
+The geometry of the Core widget is determined entirely by the parent
+widget.
+</para>
+<para>
+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:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Allocate 2 drawing colors in addition to a background color.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Allocate a text font.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Execute an application-supplied function to handle exposure events.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Execute an application-supplied function to handle user input events.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+<para>
+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
+<emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>
+for complete details of the material outlined here. Section 1.4 of
+the <emphasis remap='I'>Intrinsics</emphasis> should be read in
+conjunction with this section.
+</para>
+<para>
+All Athena widgets have three separate files associated with them:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+A "public" header file containing declarations needed by applications programmers
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A "private" header file containing additional declarations needed by the
+widget and any subclasses
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A source code file containing the implementation of the widget
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+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.
+</para>
+
+<para>
+In the following example, the public header file
+<function>&lt; X11/Xaw/Template.h &gt;</function>,
+the private header file
+<function>&lt; X11/Xaw/TemplateP.h &gt;</function>
+and the source code file
+<function>&lt; X11/Xaw/Template.c &gt;</function>
+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.
+</para>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Template_public_header_file.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Template_private_header_file.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Template_widget_source_file.xml"/>
+</chapter>
diff --git a/libXaw/specs/Command.xml b/libXaw/specs/Command.xml
new file mode 100644
index 000000000..92d1b7253
--- /dev/null
+++ b/libXaw/specs/Command.xml
@@ -0,0 +1,525 @@
+<sect1 id="Command_Widget">
+<title>Command Widget</title>
+<!-- .XS -->
+<!-- Command Widget -->
+<!-- .XE -->
+<!-- .IN "Command widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application header file &lt;X11/Xaw/Command.h&gt;
+<!-- .IN "Command.h" "" -->
+Class header file &lt;X11/Xaw/CommandP.h&gt;
+<!-- .IN "CommandP.h" "" -->
+Class commandWidgetClass
+<!-- .IN "commandWidgetClass" "" -->
+Class Name Command
+<!-- .IN "Command widget" "class name" -->
+Superclass Label
+<!-- .sp -->
+</literallayout>
+<para>
+<!-- .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 <function>notify</function>
+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.
+</para>
+<sect2 id="Resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Command widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Command widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>bitmap</entry>
+ <entry>Bitmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cornerRoundPercent</entry>
+ <entry>CornerRoundPercent</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>25</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>encoding</entry>
+ <entry>Encoding</entry>
+ <entry>UnsignedChar</entry>
+ <entry></entry>
+ <entry>XawTextEncoding8bit</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>XFontStruct</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic height + 2 * <function>internalHeight</function></entry>
+ </row>
+ <row>
+ <entry>highlightThickness</entry>
+ <entry>Thickness</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>2 (0 if Shaped)</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>internalHeight</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>internalWidth</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>justify</entry>
+ <entry>Justify</entry>
+ <entry>Justify</entry>
+ <entry></entry>
+ <entry>XtJustifyCenter (center)</entry>
+ </row>
+ <row>
+ <entry>label</entry>
+ <entry>Label</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>name of widget</entry>
+ </row>
+ <row>
+ <entry>leftBitmap</entry>
+ <entry>LeftBitmap</entry>
+ <entry>Bitmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>resize</entry>
+ <entry>Resize</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>shapeStyle</entry>
+ <entry>ShapeStyle</entry>
+ <entry>ShapeStyle</entry>
+ <entry></entry>
+ <entry>Rectangle</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See below</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic width + 2 * <function>internalWidth</function></entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+\" 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 -->
+</para>
+</sect2>
+<sect2 id="Command_Actions">
+<title>Command Actions</title>
+<!-- .IN "Command widget" "actions" -->
+<para>
+<!-- .LP -->
+The Command widget supports the following actions:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Switching the button's interior between the foreground and background
+colors with <function>set</function>, <function>unset</function>, and <function>reset</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Processing application callbacks with <function>notify</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Switching the internal border between highlighted
+and unhighlighted states with <function>highlight</function> and <function>unhighlight</function>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<!-- .IN "Command widget" "translation bindings" -->
+The following are the default translation bindings used by the
+Command widget:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.25i -->
+<!-- .ta .5i 2.25i -->
+ &lt;EnterWindow&gt;: highlight(\|)
+ &lt;LeaveWindow&gt;: reset(\|)
+ &lt;Btn1Down&gt;: set(\|)
+ &lt;Btn1Up&gt;: notify(\|) unset(\|)
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+The full list of actions supported by Command is:
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>highlight</function>(<function>condition</function>)
+ </term>
+ <listitem>
+ <para>
+Displays the internal highlight border in the color (<function>foreground</function>
+or <function>background</function> ) that contrasts with the interior color of the
+Command widget. The conditions <function>WhenUnset</function> and <function>Always</function> are
+understood by this action procedure. If no argument is passed,
+<function>WhenUnset</function> is assumed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>unhighlight</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Displays the internal highlight border in the color (<function>foreground</function>
+or <function>background</function> ) that matches the interior color of the
+Command widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>set</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Enters the <function>set</function> state, in which <function>notify</function> is possible. This
+action causes the button to display its interior in the
+<function>foreground</function> color. The label or bitmap is displayed in the
+<function>background</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>unset</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Cancels the <emphasis remap='I'>set</emphasis> state and displays the interior of the button in the
+<function>background</function> color. The label or bitmap is displayed in the
+<function>foreground</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>reset</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Cancels any <emphasis remap='I'>set</emphasis> or <emphasis remap='I'>highlight</emphasis> and displays the interior of the
+button in the <function>background</function> color, with the label or bitmap displayed
+in the <function>foreground</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>notify</function>(\|)
+ </term>
+ <listitem>
+ <para>
+When the button is in the <function>set</function> state this action calls all functions in
+the callback list named by the <function>callback</function> resource. The value of
+the <emphasis remap='I'>call_data</emphasis> argument passed to these functions is undefined.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.25i -->
+<!-- .ta .5i 2.25i -->
+*Myapp*save.translations: #augment &lt;Btn1Down&gt;,&lt;Btn1Up&gt;: Save()
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+<!-- .NT -->
+When a bitmap of depth greater that one (1) is specified the
+<emphasis remap='I'>set</emphasis>(), <emphasis remap='I'>unset</emphasis>(), and <emphasis remap='I'>reset</emphasis>() actions have no effect,
+since there are no foreground and background colors used in a
+multi-plane pixmap.
+<!-- .NE -->
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Dialog.xml b/libXaw/specs/Dialog.xml
new file mode 100644
index 000000000..f77006c6a
--- /dev/null
+++ b/libXaw/specs/Dialog.xml
@@ -0,0 +1,692 @@
+<sect1 id="Dialog_Widget">
+<title>Dialog Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Dialog Widget -->
+<!-- .XE -->
+<!-- .IN "Dialog widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/Dialog.h&gt;
+<!-- .IN "Dialog.h" "" -->
+Class Header file &lt;X11/Xaw/DialogP.h&gt;
+<!-- .IN "DialogP.h" "" -->
+Class dialogWidgetClass
+<!-- .IN "dialogWidgetClass" "" -->
+Class Name Dialog
+<!-- .IN "Dialog widget" "class name" -->
+Superclass Form
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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 <emphasis remap='I'>Filename:</emphasis>. 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.
+</para>
+<sect2 id="dialog_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Dialog widget instance, the following resources are
+retrieved from the argument list or the resource database:
+<!-- .IN "Dialog widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>children</entry>
+ <entry>ReadOnly</entry>
+ <entry>WidgetList</entry>
+ <entry>R</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>defaultDistance</entry>
+ <entry>Thickness</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Enough space to contain all children</entry>
+ </row>
+ <row>
+ <entry>icon</entry>
+ <entry>Icon</entry>
+ <entry>Bitmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>label</entry>
+ <entry>Label</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>"label"</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numChildren</entry>
+ <entry>ReadOnly</entry>
+ <entry>Cardinal</entry>
+ <entry>R</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>value</entry>
+ <entry>Value</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>no value widget</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Enough space to contain all children</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<!-- .Ch -->
+<!-- .Cm -->
+<!-- .Dd -->
+<!-- .Dp -->
+<!-- .Dc -->
+<!-- .Hw -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>icon</function>
+ </term>
+ <listitem>
+ <para>
+A pixmap image to be displayed immediately to the left of the
+Dialog widget's label.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>label</function>
+ </term>
+ <listitem>
+ <para>
+A string to be displayed at the top of the Dialog widget.
+<!-- .Mm -->
+<!-- .Nc -->
+<!-- .Sc -->
+<!-- .Se -->
+<!-- .Tr -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>value</function>
+ </term>
+ <listitem>
+ <para>
+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 <function>value</function> 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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Constraint_Resources">
+<title>Constraint Resources</title>
+<para>
+<!-- .LP -->
+<!-- .IN "Dialog widget" "constraint resources" -->
+Each child of the Dialog widget may request special layout resources
+be applied to it. These <emphasis remap='I'>constraint</emphasis> resources allow the Dialog
+widget's children to specify individual layout requirements.
+</para>
+<para>
+<!-- .LP -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>bottom</entry>
+ <entry>Edge</entry>
+ <entry>XawEdgeType</entry>
+ <entry></entry>
+ <entry>XawRubber</entry>
+ </row>
+ <row>
+ <entry>fromHoriz</entry>
+ <entry>Widget</entry>
+ <entry>Widget</entry>
+ <entry></entry>
+ <entry>NULL (left edge of Dialog)</entry>
+ </row>
+ <row>
+ <entry>fromVert</entry>
+ <entry>Widget</entry>
+ <entry>Widget </entry>
+ <entry></entry>
+ <entry>NULL (top edge of Dialog)</entry>
+ </row>
+ <row>
+ <entry>horizDistance</entry>
+ <entry>Thickness</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry><function>defaultDistance</function> resource</entry>
+ </row>
+ <row>
+ <entry>left</entry>
+ <entry>Edge</entry>
+ <entry>XawEdgeType</entry>
+ <entry></entry>
+ <entry>XawRubber</entry>
+ </row>
+ <row>
+ <entry>resizable</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>FALSE</entry>
+ </row>
+ <row>
+ <entry>right</entry>
+ <entry>Edge</entry>
+ <entry>XawEdgeType</entry>
+ <entry></entry>
+ <entry>XawRubber</entry>
+ </row>
+ <row>
+ <entry>top</entry>
+ <entry>Edge</entry>
+ <entry>XawEdgeType</entry>
+ <entry></entry>
+ <entry>XawRubber</entry>
+ </row>
+ <row>
+ <entry>vertDistance</entry>
+ <entry>Thickness</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry><function>defaultDistance</function> resource</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<literallayout class="monospaced">
+bottom
+left
+right
+top What to do with this edge of the child when
+ the parent is resized. This resource may be
+ any edgeType. See Layout Semantics for
+ details.
+
+fromHoriz
+fromVert 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 par-
+ ent.
+
+horizDistance
+vertDistance The amount of space, in pixels, between this
+ child and its left or upper neighbor.
+
+resizable If this resource is False then the parent
+ widget will ignore all geometry request made
+ by this child. The parent may still resize
+ this child itself, however.
+</literallayout>
+<!-- .Bt -->
+<!-- .Fh -->
+<!-- .Hd -->
+<!-- .Rl -->
+</para>
+</sect2>
+<sect2 id="dialog_layout_semantics">
+<title>Layout Semantics</title>
+<!-- .IN "Dialog widget" "layout semantics" -->
+<para>
+The Dialog widget uses two different sets of layout seman-
+tics. One is used when initially laying out the children.
+The other is used when the Dialog is resized.
+</para>
+<para>
+The first layout method uses the <function>fromVert</function> mand <function>fromHoriz</function>
+resources to place the children of the Dialog. A single
+pass is made through the Dialog widget's children in the
+order that they were created. Each child is then placed in
+the Dialog widget below or to the right of the widget speci-
+fied by the <function>fromVert</function> mand <function>fromHoriz</function> mresources. The distance
+the new child is placed from its left or upper neighbor is
+determined by the <function>horizDistance</function> mand <function>vertDistance</function> mresources.
+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.
+</para>
+<para>
+
+The second layout method is used when the Dialog is resized.
+It does not matter what causes this resize, and it is possi-
+ble for a resize to happen before the widget becomes visible
+(due to constraints imposed by the parent of the Dialog).
+This layout method uses the <function>bottom</function> ,
+<function>top</function> , <function>left</function> , and
+<function>right</function>
+resources. These resources are used to determine what will
+happen to each edge of the child when the Dialog is resized.
+If a value of <function>XawChain</function>
+<emphasis remap='I'>&lt;something&gt;</emphasis>
+ is specified, the the edge
+of the child will remain a fixed distance from the <emphasis remap='I'>chain</emphasis>
+edge of the Dialog. For example if <function>XawChainLeft</function>
+mis specified for the <function>right</function> mresource of a child
+then the right edge
+of that child will remain a fixed distance from the left
+edge of the Dialog widget. If a value of <function>XawRubber</function> mis spec-
+ified, that edge will grow by the same percentage that the
+Dialog grew. For instance if the Dialog grows by 50% the
+left edge of the child (if specified as <function>XawRubber</function> mwill be
+50% farther from the left edge of the Dialog). 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 Dialog widget is resized.
+</para>
+
+<para>
+<!-- .LP -->
+<informaltable>
+ <tgroup cols='3' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <thead>
+ <row>
+ <entry>Edge Type</entry>
+ <entry>Resource Name</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XawChainBottom</entry>
+ <entry>ChainBottom</entry>
+ <entry>Edge remains a fixed distance from bottom of Dialog</entry>
+ </row>
+ <row>
+ <entry>XawChainLeft</entry>
+ <entry>ChainLeft</entry>
+ <entry>Edge remains a fixed distance from left of Dialog</entry>
+ </row>
+ <row>
+ <entry>XawChainRight</entry>
+ <entry>ChainRight</entry>
+ <entry>Edge remains a fixed distance from right of Dialog</entry>
+ </row>
+ <row>
+ <entry>XawChainTop</entry>
+ <entry>ChainTop</entry>
+ <entry>Edge remains a fixed distance from top of Dialog</entry>
+ </row>
+ <row>
+ <entry>XawRubber</entry>
+ <entry>Rubber</entry>
+ <entry>Edges will move a proportional distance</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<sect3 id="Example">
+<title>Example</title>
+<para>
+<!-- .LP -->
+If you wish to force the Dialog to never resize one or more of its children
+then set <function>left</function> and <function>right</function> to <function>XawChainLeft</function> and
+<function>top</function> and <function>bottom</function> to <function>XawChainTop</function>. This will cause
+the child to remain a fixed distance from the top and left
+edges of the Dialog, and to never resize.
+</para>
+</sect3>
+<sect3 id="Special_Considerations">
+<title>Special Considerations</title>
+<!-- .IN "Dialog widget" "special considerations" -->
+<para>
+<!-- .LP -->
+The Dialog widget automatically sets the <function>top</function> and <function>bottom</function>
+resources for all Children that are subclasses of the Command widget,
+as well as the widget children that are used to contain the <function>label</function>,
+<function>value</function>, and <function>icon</function>. 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.
+</para>
+<para>
+<!-- .LP -->
+The Dialog will also set <function>fromLeft</function> to the last button in the
+<!-- .IN "fromLeft" "" -->
+Dialog for each new button added to the Dialog widget.
+</para>
+<para>
+<!-- .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.
+</para>
+</sect3>
+</sect2>
+<sect2 id="Automatically_Created_Children_">
+<title>Automatically Created Children.</title>
+<!-- .IN "Dialog widget" "automatically created children" -->
+<para>
+<!-- .LP -->
+The Dialog uses Label widgets to contain the <function>label</function> and <function>icon</function>.
+These widgets are named <emphasis remap='I'>label</emphasis> and <emphasis remap='I'>icon</emphasis> respectively. The
+Dialog <function>value</function> is contained in an AsciiText widget whose name is
+<function>value</function>. Using <function>XtNameToWidget</function> the application can change
+<!-- .IN "XtNameToWidget" "" -->
+those resources associated with each of these widgets that are not
+available through the Dialog widget itself.
+</para>
+<para>
+<!-- .LP -->
+</para>
+</sect2>
+<sect2 id="dialog_convenience_routines">
+<title>Convenience Routines</title>
+<para>
+<!-- .LP -->
+To return the character string in the text field, use
+<!-- .PN XawDialogGetValueString . -->
+<!-- .IN "XawDialogGetValueString" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>String<function> XawDialogGetValueString</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Dialog widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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
+<function>XawDialogGetValueString</function> or an <function>XtGetValues</function> call on the
+<function>value</function> widget, when the string will be automatically freed, and
+a new string is returned. This string may be freed earlier by calling
+the function <function>XawAsciiSourceFreeString</function>.
+<!-- .IN "XawAsciiSourceFreeString" "" -->
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+To add a new button to the Dialog widget use
+<function>XawDialogAddButton</function>.
+<!-- .IN "XawDialogAddButton" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawDialogAddButton</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>String<parameter> name</parameter></paramdef>
+ <paramdef>XtCallbackProc<parameter> func</parameter></paramdef>
+ <paramdef>XtPointer<parameter> client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Dialog widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the new Command button to be added to the Dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>func</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a callback function to be called when this button is activated. If
+NULL is specified then no callback is added.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the client_data to be passed to the <emphasis remap='I'>func</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function is merely a shorthand for the code sequence:
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .SM -->
+<!-- .TA 1i 2i -->
+<!-- .ta 1i 2i -->
+{
+ Widget button = XtCreateManagedWidget(name, commandWidgetClass, w, NULL, ZERO);
+ XtAddCallback(button, XtNcallback, func, client_data);
+}
+<!-- .NL -->
+</literallayout>
+<!-- .sp -->
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Form.xml b/libXaw/specs/Form.xml
new file mode 100644
index 000000000..13cc36a5a
--- /dev/null
+++ b/libXaw/specs/Form.xml
@@ -0,0 +1,531 @@
+<sect1 id="Form_Widget">
+<title>Form Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Form Widget -->
+<!-- .XE -->
+<!-- .IN "Form widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/Form.h&gt;
+<!-- .IN "Form.h" "" -->
+Class Header file &lt;X11/Xaw/FormP.h&gt;
+<!-- .IN "FormP.h" "" -->
+Class formWidgetClass
+<!-- .IN "formWidgetClass" "" -->
+Class Name Form
+<!-- .IN "Form widget" "class name" -->
+Superclass Constraint
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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 <function>defaultDistance</function>
+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.
+</para>
+<sect2 id="form_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Form widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Form widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>children</entry>
+ <entry>ReadOnly</entry>
+ <entry>WidgetList</entry>
+ <entry>R</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>defaultDistance</entry>
+ <entry>Thickness</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Enough space to contain all children</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numChildren</entry>
+ <entry>ReadOnly</entry>
+ <entry>Cardinal</entry>
+ <entry>R</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Enough space to contain all children</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<!-- .Ch -->
+<!-- .Cm -->
+<!-- .Dd Bold -->
+<!-- .Dp -->
+<!-- .Dc -->
+<!-- .Hw -->
+<!-- .Mm -->
+<!-- .Nc -->
+<!-- .Sc -->
+<!-- .Se -->
+<!-- .Tr -->
+<!-- .Xy -->
+</para>
+</sect2>
+<sect2 id="form_constraint_resources">
+<title>Constraint Resources</title>
+<para>
+<!-- .LP -->
+<!-- .IN "Form widget" "constraint resources" -->
+Each child of the Form widget may request special layout resources
+be applied to it. These <emphasis remap='I'>constraint</emphasis> resources allow the Form
+widget's children to specify individual layout requirements.
+</para>
+<para>
+<!-- .LP -->
+</para>
+<para>
+<!-- .LP -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>bottom</entry>
+ <entry>Edge</entry>
+ <entry>XawEdgeType</entry>
+ <entry></entry>
+ <entry>XawRubber</entry>
+ </row>
+ <row>
+ <entry>fromHoriz</entry>
+ <entry>Widget</entry>
+ <entry>Widget</entry>
+ <entry></entry>
+ <entry>NULL (left edge of Form)</entry>
+ </row>
+ <row>
+ <entry>fromVert</entry>
+ <entry>Widget</entry>
+ <entry>Widget </entry>
+ <entry></entry>
+ <entry>NULL (top edge of Form)</entry>
+ </row>
+ <row>
+ <entry>horizDistance</entry>
+ <entry>Thickness</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry><function>defaultDistance</function> resource</entry>
+ </row>
+ <row>
+ <entry>left</entry>
+ <entry>Edge</entry>
+ <entry>XawEdgeType</entry>
+ <entry></entry>
+ <entry>XawRubber</entry>
+ </row>
+ <row>
+ <entry>resizable</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>FALSE</entry>
+ </row>
+ <row>
+ <entry>right</entry>
+ <entry>Edge</entry>
+ <entry>XawEdgeType</entry>
+ <entry></entry>
+ <entry>XawRubber</entry>
+ </row>
+ <row>
+ <entry>top</entry>
+ <entry>Edge</entry>
+ <entry>XawEdgeType</entry>
+ <entry></entry>
+ <entry>XawRubber</entry>
+ </row>
+ <row>
+ <entry>vertDistance</entry>
+ <entry>Thickness</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry><function>defaultDistance</function> resource</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Bt Bold -->
+<!-- .Fh Bold -->
+<!-- .Hd Bold -->
+<!-- .Rl Bold -->
+</para>
+<literallayout class="monospaced">
+bottom
+left
+right
+top What to do with this edge of the child when
+ the parent is resized. This resource may be
+ any edgeType. See Layout Semantics for
+ details.
+
+fromHoriz
+fromVert 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 par-
+ ent.
+
+horizDistance
+vertDistance The amount of space, in pixels, between this
+ child and its left or upper neighbor.
+
+resizable If this resource is False then the parent
+ widget will ignore all geometry request made
+ by this child. The parent may still resize
+ this child itself, however.
+</literallayout>
+<!-- .Bt -->
+</sect2>
+<sect2 id="form_layout_semantics">
+<title>Layout Semantics</title>
+<para>
+The Form widget uses two different sets of layout semantics.
+One is used when initially laying out the children. The
+other is used when the Form is resized.
+</para>
+<para>
+The first layout method uses the <function>fromVert</function>
+and <function>fromHoriz</function>
+resources to place the children of the Form. A single pass
+is made through the Form widget's children in the order that
+they were created. Each child is then placed in the Form
+widget below or to the right of the widget specified by the
+<function>fromVert</function> and <function>fromHoriz</function>
+resources. The distance the new
+child is placed from its left or upper neighbor is deter-
+mined by the <function>horizDistance</function> and
+<function>vertDistance</function> resources. 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 post-
+pone conversion and does not cache conversion results.
+</para>
+<para>
+The second layout method is used when the Form is resized.
+It does not matter what causes this resize, and it is possi-
+ble for a resize to happen before the widget becomes visible
+(due to constraints imposed by the parent of the Form).
+This layout method uses the <function>bottom</function>,
+<function>top</function>, <function>left</function>, and
+<function>right</function>
+resources. These resources are used to determine what will
+happen to each edge of the child when the Form is resized.
+If a value of <function>XawChain</function>
+&lt;<emphasis remap='I'>something</emphasis>&gt; is specified, the the edge
+of the child will remain a fixed distance from the
+<emphasis remap='I'>chain</emphasis>
+edge of the Form. For example if <function>XawChainLeft</function> is specified
+for the <function>right</function> resource of a child then the right edge of
+that child will remain a fixed distance from the left edge
+of the Form widget. If a value of <function>XawRubber</function> is specified,
+that edge will grow by the same percentage that the Form
+grew. For instance if the Form grows by 50% the left edge
+of the child (if specified as <function>XawRubber</function> will be 50% farther
+from the left edge of the Form). 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 Form widget is resized.
+<!-- .LP -->
+<!-- .Lt Form -->
+</para>
+<para>
+<!-- .LP -->
+<informaltable>
+ <tgroup cols='3' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <thead>
+ <row>
+ <entry>Edge Type</entry>
+ <entry>Resource Name</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XawChainBottom</entry>
+ <entry>ChainBottom</entry>
+ <entry>Edge remains a fixed distance from bottom of Form</entry>
+ </row>
+ <row>
+ <entry>XawChainLeft</entry>
+ <entry>ChainLeft</entry>
+ <entry>Edge remains a fixed distance from left of Form</entry>
+ </row>
+ <row>
+ <entry>XawChainRight</entry>
+ <entry>ChainRight</entry>
+ <entry>Edge remains a fixed distance from right of Form</entry>
+ </row>
+ <row>
+ <entry>XawChainTop</entry>
+ <entry>ChainTop</entry>
+ <entry>Edge remains a fixed distance from top of Form</entry>
+ </row>
+ <row>
+ <entry>XawRubber</entry>
+ <entry>Rubber</entry>
+ <entry>Edges will move a proportional distance</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<sect3 id="form_example">
+<title>Example</title>
+<para>
+<!-- .LP -->
+If you wish to force the Form to never resize one or more of its
+children, then set <function>left</function> and <function>right</function> to <function>XawChainLeft</function> and
+<function>top</function> and <function>bottom</function> to <function>XawChainTop</function>. This will cause the
+child to remain a fixed distance from the top and left edges of the
+Form, and never to resize.
+</para>
+</sect3>
+</sect2>
+<sect2 id="form_convenience_routines">
+<title>Convenience Routines</title>
+<para>
+<!-- .LP -->
+To force or defer a re-layout of the Form, use
+<!-- .PN XawFormDoLayout . -->
+<!-- .IN "Form widget" "re-layout" -->
+<!-- .IN "XawFormDoLayout" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawFormDoLayout</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Boolean<parameter> do_layout</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Form widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>do_layout</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether the layout of the Form widget is enabled (<function>True</function>)
+or disabled (<function>False</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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.
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Grip.xml b/libXaw/specs/Grip.xml
new file mode 100644
index 000000000..4e49d5ba0
--- /dev/null
+++ b/libXaw/specs/Grip.xml
@@ -0,0 +1,357 @@
+<sect1 id="Grip_Widget">
+<title>Grip Widget</title>
+<!-- .XS -->
+<!-- Grip Widget -->
+<!-- .XE -->
+<!-- .IN "Grip widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application header file &lt;X11/Xaw/Grip.h&gt;
+<!-- .IN "Grip.h" "" -->
+Class header file &lt;X11/Xaw/GripP.h&gt;
+<!-- .IN "GripP.h" "" -->
+Class gripWidgetClass
+<!-- .IN "gripWidgetClass" "" -->
+Class Name Grip
+<!-- .IN "Grip widget" "class name" -->
+Superclass Simple
+<!-- .sp -->
+</literallayout>
+<para>
+<!-- .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.
+</para>
+<sect2 id="grip_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Grip widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Grip widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>Callback</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>8</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>8</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>callback</function>
+ </term>
+ <listitem>
+ <para>
+All routines on this list are called whenever the <function>GripAction</function>
+action routine is invoked. The <emphasis remap='I'>call_data</emphasis> contains all
+information passed to the action routine. A detailed description
+is given below in the <function>Grip Actions</function> section.
+<!-- .Cm -->
+<!-- .Cu -->
+<!-- .Cn -->
+<!-- .Dp -->
+<!-- .Dc -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>foreground</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Grip_Actions">
+<title>Grip Actions</title>
+<!-- .IN "Grip widget" "actions" -->
+<para>
+<!-- .LP -->
+The Grip widget does not declare any default event translation bindings,
+but it does declare a single action routine named <function>GripAction</function>. The
+<!-- .IN "Grip widget" "GripAction routine" -->
+client specifies an arbitrary event translation table, optionally giving
+parameters to the <function>GripAction</function> routine.
+</para>
+<para>
+<!-- .LP -->
+The <function>GripAction</function> routine executes the callbacks on the
+<function>callback</function> list, passing as <function>call_data</function> a pointer to a
+<function>XawGripCallData</function> structure, defined in the Grip widget's application
+header file.
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .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 -->
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+In this structure, the <emphasis remap='I'>event</emphasis> is a pointer to the input event that
+triggered the action. <emphasis remap='I'>params</emphasis> and <emphasis remap='I'>num_params</emphasis> give the string
+parameters specified in the translation table for the particular event
+binding.
+<!-- .IN "Grip widget" "GripAction table" -->
+</para>
+<para>
+<!-- .LP -->
+The following is an example of a translation table that uses the GripAction:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.5i -->
+<!-- .ta .5i 2.5i -->
+<!-- .sp -->
+ &lt;Btn1Down&gt;: GripAction(press)
+ &lt;Btn1Motion&gt;: GripAction(move)
+ &lt;Btn1Up&gt;: GripAction(release)
+<!-- .sp -->
+</literallayout>
+For a complete description of the format of translation tables, see the
+<emphasis remap='I'>X Toolkit Intrinsics - C Language Interface</emphasis>.
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Label.xml b/libXaw/specs/Label.xml
new file mode 100644
index 000000000..68962b5bd
--- /dev/null
+++ b/libXaw/specs/Label.xml
@@ -0,0 +1,345 @@
+<sect1 id="Label_Widget">
+<title>Label Widget</title>
+<!-- .XS -->
+<!-- Label Widget -->
+<!-- .XE -->
+<!-- .IN "Label widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application header file &lt;X11/Xaw/Label.h&gt;
+<!-- .IN "Label.h" "" -->
+Class header file &lt;X11/Xaw/LabelP.h&gt;
+<!-- .IN "LabelP.h" "" -->
+Class labelWidgetClass
+<!-- .IN "labelWidgetClass" "" -->
+Class Name Label
+<!-- .IN "Label widget" "class name" -->
+Superclass Simple
+<!-- .sp -->
+</literallayout>
+<para>
+<!-- .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
+<emphasis remap='I'>font</emphasis>), or in a multi-byte encoding (for use with a
+<emphasis remap='I'>fontset</emphasis>). 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.
+</para>
+<sect2 id="label_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Label widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Label widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>bitmap</entry>
+ <entry>Bitmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>encoding</entry>
+ <entry>Encoding</entry>
+ <entry>UnsignedChar</entry>
+ <entry></entry>
+ <entry>XawTextEncoding8bit</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>XFontStruct</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>fontSet</entry>
+ <entry>FontSet</entry>
+ <entry>XFontSet</entry>
+ <entry></entry>
+ <entry>XtDefaultFontSet</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic height + 2 * <function>internalHeight</function></entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>internalHeight</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>internalWidth</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>justify</entry>
+ <entry>Justify</entry>
+ <entry>Justify</entry>
+ <entry></entry>
+ <entry>XtJustifyCenter (center)</entry>
+ </row>
+ <row>
+ <entry>label</entry>
+ <entry>Label</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>name of widget</entry>
+ </row>
+ <row>
+ <entry>leftBitmap</entry>
+ <entry>LeftBitmap</entry>
+ <entry>Bitmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>resize</entry>
+ <entry>Resize</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See above</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic width + 2 * <function>internalWidth</function></entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .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 -->
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/List.xml b/libXaw/specs/List.xml
new file mode 100644
index 000000000..0bad43dde
--- /dev/null
+++ b/libXaw/specs/List.xml
@@ -0,0 +1,872 @@
+<sect1 id="List_Widget">
+<title>List Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- List Widget -->
+<!-- .XE -->
+<!-- .IN "List widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application header file &lt;X11/Xaw/List.h&gt;
+<!-- .IN "List.h" "" -->
+Class header file &lt;X11/Xaw/ListP.h&gt;
+<!-- .IN "ListP.h" "" -->
+Class listWidgetClass
+<!-- .IN "listWidgetClass" "" -->
+Class Name List
+<!-- .IN "List widget" "class name" -->
+Superclass Simple
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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 <function>Notify</function> action is invoked, calling all routines on
+its callback list. Only one string may be selected at a time.
+</para>
+<sect2 id="list_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a List widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "List widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>Callback</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>columnSpacing</entry>
+ <entry>Spacing</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>6</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_left_ptr</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>defaultColumns</entry>
+ <entry>Columns</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>FontStruct</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>fontSet</entry>
+ <entry>FontSet</entry>
+ <entry>XFontSet</entry>
+ <entry></entry>
+ <entry>XtDefaultFontSet</entry>
+ </row>
+ <row>
+ <entry>forceColumns</entry>
+ <entry>Columns</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Enough space to contain the list</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>internalHeight</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>internalWidth</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>list</entry>
+ <entry>List</entry>
+ <entry>Pointer</entry>
+ <entry></entry>
+ <entry>name of widget</entry>
+ </row>
+ <row>
+ <entry>longest</entry>
+ <entry>Longest</entry>
+ <entry>int</entry>
+ <entry>A</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numberStrings</entry>
+ <entry>NumberStrings</entry>
+ <entry>int</entry>
+ <entry>A</entry>
+ <entry>computed for NULL terminated list</entry>
+ </row>
+ <row>
+ <entry>pasteBuffer</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>rowSpacing</entry>
+ <entry>Spacing</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See below</entry>
+ </row>
+ <row>
+ <entry>verticalList</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Enough space to contain the list</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>callback</function>
+ </term>
+ <listitem>
+ <para>
+All functions on this list are called whenever the <function>notify</function> action is
+invoked. The <emphasis remap='I'>call_data</emphasis> argument contains information about the element
+selected and is described in detail in the <function>List Callbacks</function> section.
+<!-- .Cm -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>columnSpacing</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>rowSpacing</function>
+ </term>
+ <listitem>
+ <para>
+The amount of space, in pixels, between each of the rows and columns
+in the list.
+<!-- .Cu -->
+<!-- .Cn -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>defaultColumns</function>
+ </term>
+ <listitem>
+ <para>
+The default number of columns. This value is used when neither the
+width nor the height of the List widget is specified or when
+<function>forceColumns</function> is <function>True</function>.
+<!-- .Dp -->
+<!-- .Dc -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>font</function>
+ </term>
+ <listitem>
+ <para>
+The text font to use when displaying the <function>list</function>, when the
+<function>international</function> resource is <function>false</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>fontSet</function>
+ </term>
+ <listitem>
+ <para>
+The text font set to use when displaying the <function>list</function>, when the
+<function>international</function> resource is <function>true</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>forceColumns</function>
+ </term>
+ <listitem>
+ <para>
+Forces the default number of columns to be used regardless of the
+List widget's current size.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>foreground</function>
+ </term>
+ <listitem>
+ <para>
+A pixel value which indexes the widget's colormap to derive the color
+used to paint the text of the list elements.
+<!-- .Hw -->
+<!-- .Ib -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ \fPinternalHeight\fP
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ \fPinternalWidth\fP
+ </term>
+ <listitem>
+ <para>
+The margin, in pixels, between the edges of the list and the
+corresponding edge of the List widget's window.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>list</function>
+ </term>
+ <listitem>
+ <para>
+An array of text strings displayed in the List widget. If
+<function>numberStrings</function> is zero (the default) then the <function>list</function> must be
+NULL terminated. If a value is not specified for the <function>list</function>, then
+<function>numberStrings</function> is set to 1, and the name of the widget is used as
+the <function>list</function>, and <function>longest</function> is set to the length of the name of the
+widget. The <function>list</function> is used in place, and must be available
+to the List widget for the lifetime of this widget, or until it is
+changed with <function>XtSetValues</function> or <function>XawListChange</function>.
+<!-- .In -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>longest</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>numberStrings</function>
+ </term>
+ <listitem>
+ <para>
+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 <function>list</function> is NULL
+terminated.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>pasteBuffer</function>
+ </term>
+ <listitem>
+ <para>
+If this resource is set to <function>True</function> then the name of the currently
+selected list element will be put into <function>CUT_BUFFER_0</function>.
+<!-- .Pf -->
+<!-- .Pb -->
+<!-- .Sc -->
+<!-- .Se -->
+<!-- .Tr -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>verticalList</function>
+ </term>
+ <listitem>
+ <para>
+If this resource is set to <function>True</function> then the list elements will be
+presented in column major order.
+<!-- .Xy -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="List_Actions">
+<title>List Actions</title>
+<!-- .IN "List widget" "actions" -->
+<para>
+<!-- .LP -->
+The List widget supports the following actions:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Highlighting and unhighlighting the list element under the
+pointer with <function>Set</function> and <function>Unset</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Processing application callbacks with <function>Notify</function>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+The following is the default translation table used by the List Widget:
+<!-- .IN "List widget" "default translation table" -->
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.25i -->
+<!-- .ta .5i 2.25i -->
+&lt;Btn1Down&gt;,&lt;Btn1Up&gt;: Set(\|) Notify(\|)
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+The full list of actions supported by List widget is:
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>Set</function>(\|)
+ </term>
+ <listitem>
+ <para>
+<emphasis remap='I'>Sets</emphasis> 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 <emphasis remap='I'>set</emphasis>
+element will be <emphasis remap='I'>unset</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Unset</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Cancels the <emphasis remap='I'>set</emphasis> state of the element under the pointer,
+and redraws it with normal foreground and background colors.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Notify</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Calls all callbacks on the List widget's callback list. Information
+about the currently selected list element is passed in the
+<emphasis remap='I'>call_data</emphasis> argument (see <function>List Callbacks</function> below).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="List_Callbacks">
+<title>List Callbacks</title>
+<!-- .IN "List widget" "callbacks" -->
+<para>
+<!-- .LP -->
+All procedures on the List widget's callback list will have a
+<function>XawListReturnStruct</function> passed to them as <emphasis remap='I'>call_data</emphasis>. The
+structure is defined in the List widget's application header file.
+</para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .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 -->
+</literallayout>
+<note><para>
+The <emphasis remap='I'>list_index</emphasis> item used to be called simply <emphasis remap='I'>index</emphasis>.
+Unfortunately, this name collided with a global name defined on some
+operating systems, and had to be changed.
+</para></note>
+<!-- .NE -->
+</sect2>
+<sect2 id="Changing_the_List">
+<title>Changing the List</title>
+<para>
+<!-- .LP -->
+To change the list that is displayed, use
+<function>XawListChange .</function>
+<!-- .IN "XawListChange" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawListChange</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>String*<parameter> list</parameter></paramdef>
+ <paramdef>intnitems,<parameter> longest</parameter></paramdef>
+ <paramdef>Boolean<parameter> resize</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the List widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>list</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new list for the List widget to display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nitems</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of items in the <emphasis remap='I'>list</emphasis>. If a value less than 1
+is specified, <emphasis remap='I'>list</emphasis> must be NULL terminated, and the number of
+items will be calculated by the List widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>longest</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the length of the longest item in the <emphasis remap='I'>list</emphasis> in pixels.
+If a value less than 1 is specified, the List widget will calculate the
+value.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resize</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a Boolean value that if <function>True</function> 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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<function>XawListChange</function>
+will <emphasis remap='I'>unset</emphasis> all list elements that are currently <function>set</function> before
+the list is actually changed. The <emphasis remap='I'>list</emphasis> is used in place, and must
+remain usable for the lifetime of the List widget, or until <emphasis remap='I'>list</emphasis>
+has been changed again with this function or with <function>XtSetValues</function>.
+</para>
+</sect2>
+<sect2 id="Highlighting_an_Item">
+<title>Highlighting an Item</title>
+<para>
+<!-- .LP -->
+To highlight an item in the list, use
+<function>XawListHighlight .</function>
+<!-- .IN "XawListHighlight" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawListHighlight</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>int<parameter> item</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the List widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>item</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an index into the current list that indicates the item to be
+highlighted.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+Only one item can be highlighted at a time.
+If an item is already highlighted when
+<function>XawListHighlight</function>
+is called,
+the highlighted item is unhighlighted before the new item is highlighted.
+</para>
+</sect2>
+<sect2 id="Unhighlighting_an_Item">
+<title>Unhighlighting an Item</title>
+<para>
+<!-- .LP -->
+To unhighlight the currently highlighted item in the list, use
+<function>XawListUnhighlight .</function>
+<!-- .IN "XawListUnhighlight" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawListUnhighlight</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the List widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Retrieving_the_Currently_Selected_Item">
+<title>Retrieving the Currently Selected Item</title>
+<para>
+<!-- .LP -->
+To retrieve the list element that is currently <emphasis remap='I'>set</emphasis>, use
+<function>XawListShowCurrent .</function>
+<!-- .IN "XawListShowCurrent" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XawListReturnStruct<function> *XawListShowCurrent</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the List widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<function>XawListShowCurrent</function>
+returns a pointer to an
+<function>XawListReturnStruct</function>
+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.
+</para>
+</sect2>
+<sect2 id="Restrictions">
+<title>Restrictions</title>
+<para>
+<!-- .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.'')
+</para>
+<para>
+<!-- .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.)
+</para>
+<para>
+<!-- .LP -->
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Makefile.am b/libXaw/specs/Makefile.am
new file mode 100644
index 000000000..ebdbd729f
--- /dev/null
+++ b/libXaw/specs/Makefile.am
@@ -0,0 +1,106 @@
+#
+# 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 ENABLE_SPECS
+doc_sources = libXaw.xml
+dist_doc_DATA = $(doc_sources) \
+ AsciiSink.xml \
+ AsciiSource.xml \
+ AsciiText.xml \
+ Box.xml \
+ CH1.xml \
+ CH2.xml \
+ CH3.xml \
+ CH4.xml \
+ CH5.xml \
+ CH6.xml \
+ CH7.xml \
+ Command.xml \
+ Dialog.xml \
+ Form.xml \
+ Grip.xml \
+ Label.xml \
+ List.xml \
+ MenuButton.xml \
+ Paned.xml \
+ Panner.xml \
+ Porthole.xml \
+ Repeater.xml \
+ Scrollbar.xml \
+ SimpleMenu.xml \
+ Simple.xml \
+ SmeBSB.xml \
+ SmeLine.xml \
+ Sme.xml \
+ StripChart.xml \
+ Template_private_header_file.xml \
+ Template_public_header_file.xml \
+ Template_widget_source_file.xml \
+ Template.xml \
+ TextActions_default_translation_bindings.xml \
+ TextActions_text_widget_actions.xml \
+ TextActions.xml \
+ TextCustom.xml \
+ TextFuncs.xml \
+ TextSink.xml \
+ TextSource.xml \
+ Text.xml \
+ Toggle.xml \
+ TPage_Credits.xml \
+ Tree.xml \
+ Viewport.xml
+
+if HAVE_XMLTO
+doc_DATA = $(doc_sources:.xml=.html)
+
+if HAVE_FOP
+doc_DATA += $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf)
+endif
+
+if HAVE_XMLTO_TEXT
+doc_DATA += $(doc_sources:.xml=.txt)
+endif
+
+if HAVE_STYLESHEETS
+XMLTO_FLAGS = -m $(XSL_STYLESHEET) \
+ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css
+endif
+
+CLEANFILES = $(doc_DATA)
+
+SUFFIXES = .xml .ps .pdf .txt .html
+
+%.txt: %.xml $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $<
+
+%.html: %.xml $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $<
+
+%.pdf: %.xml $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $<
+
+%.ps: %.xml $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $<
+
+endif HAVE_XMLTO
+endif ENABLE_SPECS
diff --git a/libXaw/specs/MenuButton.xml b/libXaw/specs/MenuButton.xml
new file mode 100644
index 000000000..b907fefb5
--- /dev/null
+++ b/libXaw/specs/MenuButton.xml
@@ -0,0 +1,567 @@
+<sect2 id="MenuButton_Widget">
+<title>MenuButton Widget</title>
+<!-- .XS -->
+<!-- MenuButton Widget -->
+<!-- .XE -->
+<!-- .IN "MenuButton widget" "" "@DEF@" -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+Application Header file &lt;X11/Xaw/MenuButton.h&gt;
+<!-- .IN "MenuButton.h" "" -->
+Class Header file &lt;X11/Xaw/MenuButtonP.h&gt;
+<!-- .IN "MenuButtonP.h" "" -->
+Class menuButtonWidgetClass
+<!-- .IN "menuButtonWidgetClass" "" -->
+Class Name MenuButton
+<!-- .IN "MenuButton widget" "class name" -->
+Superclass Command
+</literallayout>
+<para>
+<!-- .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
+<emphasis remap='I'>font</emphasis>), or in a multi-byte encoding (for use with
+a <emphasis remap='I'>fontset</emphasis>). The graphic may also be a bitmap or
+pixmap.
+</para>
+<para>
+<!-- .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 <function>menuName</function> resource.
+</para>
+<sect3 id="Resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a MenuButton widget instance,
+the following resources are retrieved from the argument list
+or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "MenuButton widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>bitmap</entry>
+ <entry>Bitmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cornerRoundPercent</entry>
+ <entry>CornerRoundPercent</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>25</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>encoding</entry>
+ <entry>Encoding</entry>
+ <entry>UnsignedChar</entry>
+ <entry></entry>
+ <entry>XawTextEncoding8bit</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>XFontStruct</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>fontSet</entry>
+ <entry>FontSet</entry>
+ <entry>XFontSet</entry>
+ <entry></entry>
+ <entry>XtDefaultFontSet</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic height + 2 * <function>internalHeight</function></entry>
+ </row>
+ <row>
+ <entry>highlightThickness</entry>
+ <entry>Thickness</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>2 (0 if Shaped)</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>internalHeight</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>internalWidth</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>justify</entry>
+ <entry>Justify</entry>
+ <entry>Justify</entry>
+ <entry></entry>
+ <entry>XtJustifyCenter (center)</entry>
+ </row>
+ <row>
+ <entry>label</entry>
+ <entry>Label</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>name of widget</entry>
+ </row>
+ <row>
+ <entry>leftBitmap</entry>
+ <entry>LeftBitmap</entry>
+ <entry>Bitmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>menuName</entry>
+ <entry>MenuName</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>"menu"</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>resize</entry>
+ <entry>Resize</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>shapeStype</entry>
+ <entry>ShapeStyle</entry>
+ <entry>ShapeStyle</entry>
+ <entry></entry>
+ <entry>Rectangle</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See below</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic width + 2 * <function>internalWidth</function></entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .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 -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>menuName</function>
+ </term>
+ <listitem>
+ <para>
+The name of a popup shell to popup as a menu. The MenuButton
+will search for this name using <function>XtNameToWidget</function> 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
+<function>XtNameToWidget</function>. If no widget of called <function>menuName</function> 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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="MenuButton_Actions">
+<title>MenuButton Actions</title>
+<!-- .IN "MenuButton widget" "actions" -->
+<para>
+<!-- .LP -->
+The MenuButton widget supports the following actions:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Switching the button between the foreground and background
+colors with <function>set</function> and <function>unset</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Processing application callbacks with <function>notify</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Switching the internal border between highlighted
+and unhighlighted states with <function>highlight</function> and <function>unhighlight</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Popping up a menu with <function>PopupMenu</function>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+The following are the default translation bindings used by the
+MenuButton widget:
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.25i -->
+<!-- .ta .5i 2.25i -->
+ &lt;EnterWindow&gt;: highlight(\|)
+ &lt;LeaveWindow&gt;: reset(\|)
+ &lt;BtnDown&gt;: reset(\|) PopupMenu(\)
+</literallayout>
+</para>
+</sect3>
+<sect3 id="MenuButton_Actions_b">
+<title>MenuButton Actions_b</title>
+<para>
+<!-- .LP -->
+The full list of actions supported by MenuButton is:
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>highlight</function>(<function>condition</function>)
+ </term>
+ <listitem>
+ <para>
+Displays the internal highlight border in the color (<function>foreground</function>
+or <function>background</function> ) that contrasts with the interior color of the
+Command widget. The conditions <function>WhenUnset</function> and <function>Always</function> are
+understood by this action procedure. If no argument is passed,
+<function>WhenUnset</function> is assumed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>unhighlight</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Displays the internal highlight border in the color (<function>XtNforeground</function>
+or <function>background</function> ) that matches the interior color of the
+MenuButton widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>set</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Enters the <function>set</function> state, in which <function>notify</function> is possible. This
+action causes the button to display its interior in the
+<function>foreground</function> color. The label or bitmap is displayed in the
+<function>background</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>unset</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Cancels the <emphasis remap='I'>set</emphasis> state and displays the interior of the button in the
+<function>background</function> color. The label or bitmap is displayed in the
+<function>foreground</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>reset</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Cancels any <function>set</function> or <function>highlight</function> and displays the interior of the
+button in the <function>background</function> color, with the label displayed in the
+<function>foreground</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>notify</function>(\|)
+ </term>
+ <listitem>
+ <para>
+When the button is in the <function>set</function> state this action calls all functions in
+the callback list named by the <function>callback</function> resource. The value of
+the call_data argument in these callback functions is undefined.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>PopupMenu</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Pops up the menu specified by the <function>menuName</function> resource.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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 -->
+
+</para>
+</sect3>
+</sect2>
diff --git a/libXaw/specs/Paned.xml b/libXaw/specs/Paned.xml
new file mode 100644
index 000000000..90c3809cc
--- /dev/null
+++ b/libXaw/specs/Paned.xml
@@ -0,0 +1,1213 @@
+<sect1 id="Paned_Widget">
+<title>Paned Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Paned Widget -->
+<!-- .XE -->
+<!-- .IN "Paned widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/Paned.h&gt;
+<!-- .IN "Paned.h" "" -->
+Class Header file &lt;X11/Xaw/PanedP.h&gt;
+<!-- .IN "PanedP.h" "" -->
+Class panedWidgetClass
+<!-- .IN "panedWidgetClass" "" -->
+Class Name Paned
+<!-- .IN "Paned widget" "class name" -->
+Superclass Constraint
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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 <emphasis remap='I'>grips</emphasis> that appear near the right or bottom edge of the
+border between two panes.
+</para>
+<para>
+<!-- .LP -->
+The Paned widget may accept any widget class as a pane <function>except</function>
+Grip. Grip widgets have a special meaning for the Paned widget, and
+adding a Grip as its own pane will confuse the Paned widget.
+</para>
+<sect2 id="Using_the_Paned_Widget">
+<title>Using the Paned Widget</title>
+<!-- .IN "Paned widget" "using" -->
+<para>
+<!-- .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 <function>Layout Semantics</function>.
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+The default bindings for the Paned widget's grips are:
+<informaltable>
+ <tgroup cols='3' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <thead>
+ <row>
+ <entry>Mouse button</entry>
+ <entry>Pane to Resize - Vertical</entry>
+ <entry>Pane to Resize - Horizontal</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>1 (left)</entry>
+ <entry>above the grip</entry>
+ <entry>left of the grip</entry>
+ </row>
+ <row>
+ <entry>2 (middle)</entry>
+ <entry>adjust border</entry>
+ <entry>adjust border</entry>
+ </row>
+ <row>
+ <entry>3 (right)</entry>
+ <entry>below the grip</entry>
+ <entry>right of the grip</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+</sect2>
+<sect2 id="paned_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Paned widget instance, the following resources are
+retrieved from the argument list or the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Paned widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>betweenCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry>A</entry>
+ <entry>Depends on orientation</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>children</entry>
+ <entry>ReadOnly</entry>
+ <entry>WidgetList</entry>
+ <entry>R</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>gripCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry>A</entry>
+ <entry>Depends on orientation</entry>
+ </row>
+ <row>
+ <entry>gripIndent</entry>
+ <entry>GripIndent</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>10</entry>
+ </row>
+ <row>
+ <entry>gripTranslations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>see below</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Depends on orientation</entry>
+ </row>
+ <row>
+ <entry>horizontalBetweenCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>sb_up_arrow</entry>
+ </row>
+ <row>
+ <entry>horizontalGripCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>sb_h_double_arrow</entry>
+ </row>
+ <row>
+ <entry>internalBorderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>internalBorderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>leftCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>sb_left_arrow</entry>
+ </row>
+ <row>
+ <entry>lowerCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>sb_down_arrow</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numChildren</entry>
+ <entry>ReadOnly</entry>
+ <entry>Cardinal</entry>
+ <entry>R</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>orientation</entry>
+ <entry>Orientation</entry>
+ <entry>Orientation</entry>
+ <entry></entry>
+ <entry>XtorientVertical</entry>
+ </row>
+ <row>
+ <entry>refigureMode</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>rightCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>sb_right_arrow</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>upperCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>sb_up_arrow</entry>
+ </row>
+ <row>
+ <entry>verticalBetweenCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>sb_left_arrow</entry>
+ </row>
+ <row>
+ <entry>verticalGripCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>sb_v_double_arrow</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Depends on orientation</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Paned</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Paned</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<!-- .Ch -->
+<!-- .Cm -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>cursor</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>gripCursor</function>
+ </term>
+ <listitem>
+ <para>
+The cursor to use when the grips are not active. The default value is
+<function>verticalGripCursor</function> or <function>horizontalGripCursor</function> depending on
+the orientation of the Paned widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>gripIndent</function>
+ </term>
+ <listitem>
+ <para>
+The amount of space left between the right (or bottom) edge of the
+Paned widget and all the grips.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>gripTranslation</function>
+ </term>
+ <listitem>
+ <para>
+Translation table that will be applied to all grips.
+<!-- .Hw -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>horizontalBetweenCursor</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>verticalBetweenCursor</function>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>horizontalGripCursor</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>verticalGripCursor</function>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>internalBorderColor</function>
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>Paned*BorderColor: blue</emphasis> to set the internal border color
+for the Paned widget. An optimization is invoked if
+<function>internalBorderColor</function> and <function>background</function> are the same, and the
+internal borders are not drawn. <function>internalBorderWidth</function> is still left
+between the panes, however.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>internalBorderWidth</function>
+ </term>
+ <listitem>
+ <para>
+The width of the internal borders. This is the amount of space left
+between the panes. The class name of this resource allows
+<emphasis remap='I'>Paned*BorderWidth: 3</emphasis> to set the internal border width for the
+Paned widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>leftCursor</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>rightCursor</function>
+ </term>
+ <listitem>
+ <para>
+The cursor used to indicate which is the <emphasis remap='I'>important</emphasis> pane to resize
+when the Paned widget is oriented horizontally.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>lowerCursor</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>upperCursor</function>
+ </term>
+ <listitem>
+ <para>
+The cursor used to indicate which is the <emphasis remap='I'>important</emphasis> 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 <function>XawPanedGetNumSub</function> to retrieve the
+number of panes.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>orientation</function>
+ </term>
+ <listitem>
+ <para>
+The orientation to stack the panes. This value can be either
+<function>XtorientVertical</function> or <function>XtorientHorizontal</function>.
+<!-- .IN "XtorientVertical" "" -->
+<!-- .IN "XtorientHorizontal" "" -->
+<!-- .IN "conversions" "Orientation" -->
+<!-- .Rs "vertical \fPand\fB horizontal" -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>refigureMode</function>
+ </term>
+ <listitem>
+ <para>
+This resource allows pane layout to be suspended. If this value is
+<function>False</function>, 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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="paned_constraint_resources">
+<title>Constraint Resources</title>
+<para>
+<!-- .LP -->
+<!-- .IN "Paned widget" "constraint resources" -->
+Each child of the Paned widget may request special layout resources
+be applied to it. These <emphasis remap='I'>constraint</emphasis> resources allow the Paned
+widget's children to specify individual layout requirements.
+</para>
+<para>
+<!-- .LP -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>allowResize</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>max</entry>
+ <entry>Max</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>Infinity</entry>
+ </row>
+ <row>
+ <entry>min</entry>
+ <entry>Min</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>Height of Grips</entry>
+ </row>
+ <row>
+ <entry>preferredPaneSize</entry>
+ <entry>PreferredPaneSize</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>ask child</entry>
+ </row>
+ <row>
+ <entry>resizeToPreferred</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>showGrip</entry>
+ <entry>ShowGrip</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>skipAdjust</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>allowResize</function>
+ </term>
+ <listitem>
+ <para>
+If this value is <function>False</function> the the Paned widget will disallow all
+geometry requests from this child.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>max</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>min</function>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>preferredPaneSize</function>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>resizeToPreferred</function>
+ </term>
+ <listitem>
+ <para>
+Determines whether or not to resize each pane to its preferred size
+when the Paned widget is resized. See <function>Layout Semantics</function> for details.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>showGrip</function>
+ </term>
+ <listitem>
+ <para>
+If <function>True</function> 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>skipAdjust</function>
+ </term>
+ <listitem>
+ <para>
+This resource is used to determine which pane is forced to be resized.
+Setting this value to <function>True</function> makes this pane less likely to be
+forced to be resized. See <function>Layout Semantics</function> for details.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="paned_layout_semantics">
+<title>Layout Semantics</title>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<function>Layout Rules</function>
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>1</function>
+ </term>
+ <listitem>
+ <para>
+Do not let a pane grow larger than its <function>max</function> or smaller than its
+<function>min</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>2</function>
+ </term>
+ <listitem>
+ <para>
+Do not adjust panes with <function>skipAdjust</function> set.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>3</function>
+ </term>
+ <listitem>
+ <para>
+Do not adjust panes away from their preferred size, although moving one
+closer to its preferred size is fine.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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.
+</para>
+<sect3 id="Resizing_Panes_from_a_Grip_Action">
+<title>Resizing Panes from a Grip Action</title>
+<para>
+<!-- .LP -->
+The pane above the grip is resized by invoking the GripAction with
+<function>UpLeftPane</function> 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.
+</para>
+<para>
+<!-- .LP -->
+The pane below the grip is resized by invoking the GripAction with
+<function>LowRightPane</function> specified. The panes above the grip are each
+checked in this case. No pane below the chosen pane will ever be resized.
+</para>
+<para>
+<!-- .LP -->
+Invoking GripAction with <function>ThisBorderOnly</function> specified just moves the
+border between the panes. No other panes are ever resized.
+</para>
+</sect3>
+<sect3 id="Resizing_Panes_after_the_Paned_widget_is_resized_">
+<title>Resizing Panes after the Paned widget is resized.</title>
+<para>
+<!-- .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
+<function>resizeToPreferred</function> resource allows the application to tell the
+Paned widget whether to query the child about its preferred size
+(subject to the the <function>preferredPaneSize</function>) or to use the current size
+when refiguring the pane locations after the pane has been resized.
+</para>
+<para>
+<!-- .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.
+</para>
+</sect3>
+<sect3 id="Managing_Children_and_Geometry_Management">
+<title>Managing Children and Geometry Management</title>
+<para>
+<!-- .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.
+</para>
+</sect3>
+<sect3 id="paned_special_considerations">
+<title>Special Considerations</title>
+<para>
+<!-- .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.
+</para>
+</sect3>
+</sect2>
+<sect2 id="Grip_Translations">
+<title>Grip Translations</title>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.25i -->
+<!-- .ta .5i 2.25i -->
+ &lt;Btn1Down&gt;: GripAction(Start, UpLeftPane)
+<!-- .IN "GripAction" "" -->
+ &lt;Btn2Down&gt;: GripAction(Start, ThisBorderOnly)
+ &lt;Btn3Down&gt;: GripAction(Start, LowRightPane)
+ &lt;Btn1Motion&gt;: GripAction(Move, UpLeftPane)
+ &lt;Btn2Motion&gt;: GripAction(Move, ThisBorderOnly)
+ &lt;Btn3Motion&gt;: GripAction(Move, LowRightPane)
+ Any&lt;BtnUp&gt;: GripAction(Commit)
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .LP -->
+The Paned widget interprets the <function>GripAction</function> as taking two arguments.
+<!-- .IN "GripAction" "" -->
+The first argument may be any of the following:
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>Start</function>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Move</function>
+ </term>
+ <listitem>
+ <para>
+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 <function>Start</function> action, that began this process. If
+these arguments are not passed, the behavior is undefined.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Commit</function>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="paned_convenience_routines">
+<title>Convenience Routines</title>
+<para>
+<!-- .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
+<function>XawPanedAllowResize :</function>
+<!-- .IN "XawPanedAllowResize" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawPanedAllowResize</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Boolean<parameter> allow_resize</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the child pane.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>allow_resize</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether or not resizing requests for this child will be
+granted by the Paned widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+If allow_resize is <function>True</function>, the Paned widget allows geometry
+requests from the child to change the pane's height. If allow_resize
+is <function>False</function>, the Paned widget ignores geometry requests from the
+child to change the pane's height. The default state is <function>True</function>
+before the Pane is realized and <function>False</function> after it is realized.
+This procedure is equivalent to changing the <function>allowResize</function>
+constraint resource for the child.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<!-- .IN "Paned widget" "change height settings" -->
+To change the minimum and maximum height settings for a pane, use
+<function>XawPanedSetMinMax :</function>
+<!-- .IN "XawPanedSetMinMax" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawPanedSetMinMax</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>intmin,<parameter> max</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the child pane.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>min</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new minimum height of the child, expressed in pixels.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>max</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies new maximum height of the child, expressed in pixels.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This procedure is equivalent to setting the <function>min</function> and <function>max</function>
+constraint resources for the child.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<!-- .IN "Paned widget" "get height settings" -->
+To retrieve the minimum and maximum height settings for a pane, use
+<function>XawPanedGetMinMax :</function>
+<!-- .IN "XawPanedGetMinMax" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawPanedGetMinMax</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>int*min_return,<parameter> *max_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the child pane.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>min_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the minimum height of the child, expressed in pixels.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>max_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the maximum height of the child, expressed in pixels.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This procedure is equivalent to getting the <function>min</function> and <function>max</function>
+resources for this child child.
+</para>
+<para>
+<!-- .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
+<function>XawPanedSetRefigureMode :</function>
+<!-- .IN "XawPanedSetRefigureMode" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawPanedSetRefigureMode</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Boolean<parameter> mode</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Paned widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>mode</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether the layout of the Paned widget is enabled (<function>True</function>)
+or disabled (<function>False</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<!-- .IN "Paned widget" "getting the number of children" -->
+To retrieve the number of panes in a paned widget use
+<function>XawPanedGetNumSub</function>:
+<!-- .IN "XawPanedGetNumSub" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>int<function> XawPanedGetNumSub</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Paned widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function returns the number of panes in the Paned widget. This is
+<function>not</function> the same as the number of children, since the grips are also
+children of the Paned widget.
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Panner.xml b/libXaw/specs/Panner.xml
new file mode 100644
index 000000000..a04bb1a96
--- /dev/null
+++ b/libXaw/specs/Panner.xml
@@ -0,0 +1,734 @@
+<sect1 id="Panner_Widget">
+<title>Panner Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Panner Widget -->
+<!-- .XE -->
+<!-- .IN "Panner widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application header file &lt;X11/Xaw/Panner.h&gt;
+<!-- .IN "Panner.h" "" -->
+Class header file &lt;X11/Xaw/PannerP.h&gt;
+<!-- .IN "PannerP.h" "" -->
+Class pannerWidgetClass
+<!-- .IN "pannerWidgetClass" "" -->
+Class Name Panner
+<!-- .IN "Panner widget" "class name" -->
+Superclass Simple
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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.
+</para>
+<sect2 id="panner_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Panner widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Panner widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>allowOff</entry>
+ <entry>AllowOff</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>backgroundStipple</entry>
+ <entry>BackgroundStipple</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>canvasHeight</entry>
+ <entry>CanvasHeight</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>canvasWidth</entry>
+ <entry>CanvasWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>defaultScale</entry>
+ <entry>DefaultScale</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>8</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>depends on orientation</entry>
+ </row>
+ <row>
+ <entry>internalSpace</entry>
+ <entry>InternalSpace</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>lineWidth</entry>
+ <entry>LineWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>reportCallback</entry>
+ <entry>ReportCallback</entry>
+ <entry>Callback</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>resize</entry>
+ <entry>Resize</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>rubberBand</entry>
+ <entry>RubberBand</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>shadowColor</entry>
+ <entry>ShadowColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>shadowThickness</entry>
+ <entry>ShadowThickness</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>sliderX</entry>
+ <entry>SliderX</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>sliderY</entry>
+ <entry>SliderY</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>sliderHeight</entry>
+ <entry>SliderHeight</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>sliderWidth</entry>
+ <entry>SliderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See below</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>depends on orientation</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<!-- .Ac -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>allowOff</function>
+ </term>
+ <listitem>
+ <para>
+Whether to allow the edges of the slider to go off the edges of the canvas.
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>backgroundStipple</function>
+ </term>
+ <listitem>
+ <para>
+The name of a bitmap pattern to be used as the background for
+the area representing the canvas.
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>canvasHeight</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>canvasWidth</function>
+ </term>
+ <listitem>
+ <para>
+The size of the canvas.
+<!-- .Cm -->
+<!-- .Cu -->
+<!-- .Cn -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>defaultScale</function>
+ </term>
+ <listitem>
+ <para>
+The percentage size that the Panner widget should have relative
+to the size of the canvas.
+<!-- .Dp -->
+<!-- .Dc -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>foreground</function>
+ </term>
+ <listitem>
+ <para>
+A pixel value which indexes the widget's colormap to derive the color
+used to draw the slider.
+<!-- .Hw -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>internalSpace</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>lineWidth</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>reportCallback</function>
+ </term>
+ <listitem>
+ <para>
+All functions on this callback list are called when the
+<function>notify</function> action is invoked. See the <function>Panner Actions</function> section
+for details.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>resize</function>
+ </term>
+ <listitem>
+ <para>
+Whether or not to resize the panner whenever the canvas size is changed so
+that the <function>defaultScale</function> is maintained.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>rubberBand</function>
+ </term>
+ <listitem>
+ <para>
+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 <function>move</function> action procedure also
+invokes the <function>notify</function> action procedure.
+<!-- .Sc -->
+<!-- .Se -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>shadowColor</function>
+ </term>
+ <listitem>
+ <para>
+The color of the shadow underneath the slider.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>shadowThickness</function>
+ </term>
+ <listitem>
+ <para>
+The width of the shadow underneath the slider.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>sliderX</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>sliderY</function>
+ </term>
+ <listitem>
+ <para>
+The location of the slider in the coordinates of the canvas.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>sliderHeight</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>sliderWidth</function>
+ </term>
+ <listitem>
+ <para>
+The size of the slider.
+<!-- .Tr -->
+<!-- .Xy -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+<sect2 id="Panner_Actions">
+<title>Panner Actions</title>
+<!-- .IN "Panner widget" "actions" -->
+<para>
+<!-- .LP -->
+The actions supported by the Panner widget are:
+</para>
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>start</function>()
+ </term>
+ <listitem>
+ <para>
+This action begins movement of the slider.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>stop</function>()
+ </term>
+ <listitem>
+ <para>
+This action ends movement of the slider.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>abort</function>()
+ </term>
+ <listitem>
+ <para>
+This action ends movement of the slider and restores it to the position it
+held when the <function>start</function> action was invoked.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>move</function>()
+ </term>
+ <listitem>
+ <para>
+This action moves the outline of the slider (if the <function>rubberBand</function> resource
+is True) or the slider itself (by invoking the <function>notify</function>
+action procedure).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>page</function>(<function>xamount</function>,<function>yamount</function>)
+ </term>
+ <listitem>
+ <para>
+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 <function>p</function> indicating pages (slider sizes), or <function>c</function> indicating
+canvas sizes. Thus, <emphasis remap='I'>page(+0,+.5p)</emphasis> represents vertical movement down
+one-half the height of the slider and <emphasis remap='I'>page(0,0)</emphasis> represents moving to
+the upper left corner of the canvas.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>notify</function>()
+ </term>
+ <listitem>
+ <para>
+This action informs the application of the slider's current position by
+invoking the <function>reportCallback</function> functions registered by the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>set</function>(<function>what</function>,<function>value</function>)
+ </term>
+ <listitem>
+ <para>
+This action changes the behavior of the Panner. The <emphasis remap='I'>what</emphasis> argument
+must currently be the string <function>rubberband</function> and controls the value of
+the <function>rubberBand</function> resource. The <function>value</function> argument
+may have one of the values <function>on</function>, <function>off</function>, or <function>toggle</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<!-- .LP -->
+<!-- .sp -->
+The default bindings for Panner are:
+<!-- .IN "Panner widget" "default translation table" -->
+</para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 1.75i -->
+<!-- .ta .5i 1.75i -->
+ &lt;Btn1Down&gt;: start(\|)
+ &lt;Btn1Motion&gt;: move(\|)
+ &lt;Btn1Up&gt;: notify(\|) stop(\|)
+ &lt;Btn2Down&gt;: abort(\|)
+ &lt;Key&gt;KP_Enter: set(rubberband,toggle)
+ &lt;Key&gt;space: page(+1p,+1p)
+ &lt;Key&gt;Delete: page(\-1p,\-1p)
+ &lt;Key&gt;BackSpace: page(\-1p,\-1p)
+ &lt;Key&gt;Left: page(\-.5p,+0)
+ &lt;Key&gt;Right: page(+.5p,+0)
+ &lt;Key&gt;Up: page(+0,\-.5p)
+ &lt;Key&gt;Down: page(+0,+.5p)
+ &lt;Key&gt;Home: page(0,0)
+</literallayout>
+</sect2>
+
+<sect2 id="Panner_Callbacks">
+<title>Panner Callbacks</title>
+<!-- .IN "Panner widget" "callbacks" -->
+<para>
+<!-- .LP -->
+The functions registered on the <function>reportCallback</function> list are invoked by
+the <function>notify</function> action as follows:
+<!-- .IN "ReportProc" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> ReportProc</function></funcdef>
+ <paramdef>Widget<parameter> panner</parameter></paramdef>
+ <paramdef>XtPointer<parameter> client_data</parameter></paramdef>
+ <paramdef>XtPointer<parameter> report</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+ </para>
+<para>
+<variablelist>
+ <varlistentry>
+ <term>panner</term>
+ <listitem>
+ <para>
+<!-- .IP <emphasis remap='I'>panner</emphasis> 1i -->
+Specifies the Panner widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>panner</term>
+ <listitem>
+ <para>
+<!-- .IP <emphasis remap='I'>client_data</emphasis> 1i -->
+Specifies the client data.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>panner</term>
+ <listitem>
+ <para>
+<!-- .IP <emphasis remap='I'>report</emphasis> 1i -->
+Specifies a pointer to an <function>XawPannerReport</function> structure containing
+the location and size of the slider and the size of the canvas.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Porthole.xml b/libXaw/specs/Porthole.xml
new file mode 100644
index 000000000..beda434ee
--- /dev/null
+++ b/libXaw/specs/Porthole.xml
@@ -0,0 +1,306 @@
+<sect1 id="Porthole_Widget">
+<title>Porthole Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Porthole Widget -->
+<!-- .XE -->
+<!-- .IN "Porthole widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/Porthole.h&gt;
+<!-- .IN "Porthole.h" "" -->
+Class Header file &lt;X11/Xaw/PortholeP.h&gt;
+<!-- .IN "PortholeP.h" "" -->
+Class portholeWidgetClass
+<!-- .IN "portholeWidgetClass" "" -->
+Class Name Porthole
+<!-- .IN "Porthole widget" "class name" -->
+Superclass Composite
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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).
+</para>
+<sect2 id="porthole_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Porthole widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Porthole widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>children</entry>
+ <entry>ReadOnly</entry>
+ <entry>WidgetList</entry>
+ <entry>R</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>see <function>Layout Semantics</function></entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numChildren</entry>
+ <entry>ReadOnly</entry>
+ <entry>Cardinal</entry>
+ <entry>R</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>reportCallback</entry>
+ <entry>ReportCallback</entry>
+ <entry>Callback</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>see <function>Layout Semantics</function></entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<!-- .Ch -->
+<!-- .Cm -->
+<!-- .Dp -->
+<!-- .Dc -->
+<!-- .Hw -->
+<!-- .Mm -->
+<!-- .Nc -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>reportCallback</function>
+ </term>
+ <listitem>
+ <para>
+A list of functions to invoke whenever the managed child widget changes
+size or position.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<!-- .Sc -->
+<!-- .Se -->
+<!-- .Tr -->
+<!-- .Xy -->
+</para>
+</sect2>
+<sect2 id="porthold_layout_semantics">
+<title>Layout Semantics</title>
+<!-- .IN "Porthole widget" "layout semantics" -->
+<para>
+<!-- .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.
+</para>
+</sect2>
+<sect2 id="Porthole_Callbacks">
+<title>Porthole Callbacks</title>
+<!-- .IN "Porthole widget" "callbacks" -->
+<para>
+<!-- .LP -->
+The functions registered on the <function>reportCallback</function> list are invoked whenever
+the managed child changes size or position:
+<!-- .IN "ReportProc" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> ReportProc</function></funcdef>
+ <paramdef>Widget<parameter> porthole</parameter></paramdef>
+ <paramdef>XtPointer<parameter> client_data</parameter></paramdef>
+ <paramdef>XtPointer<parameter> report</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+</para>
+<variablelist>
+ <varlistentry>
+ <term>porthole</term>
+ <listitem>
+ <para>
+<!-- .IP <emphasis remap='I'>porthole</emphasis> 1i -->
+Specifies the Porthole widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>client_data</term>
+ <listitem>
+ <para>
+<!-- .IP <emphasis remap='I'>client_data</emphasis> 1i -->
+Specifies the client data.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>report</term>
+ <listitem>
+ <para>
+<!-- .IP <emphasis remap='I'>report</emphasis> 1i -->
+Specifies a pointer to an <function>XawPannerReport</function> structure containing
+the location and size of the slider and the size of the canvas.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Repeater.xml b/libXaw/specs/Repeater.xml
new file mode 100644
index 000000000..35cd69aee
--- /dev/null
+++ b/libXaw/specs/Repeater.xml
@@ -0,0 +1,558 @@
+<sect1 id="Repeater_Widget">
+<title>Repeater Widget</title>
+<!-- .XS -->
+<!-- Repeater Widget -->
+<!-- .XE -->
+<!-- .IN "Repeater widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application header file &lt;X11/Xaw/Repeater.h&gt;
+<!-- .IN "Repeater.h" "" -->
+Class header file &lt;X11/Xaw/RepeaterP.h&gt;
+<!-- .IN "RepeaterP.h" "" -->
+Class repeaterWidgetClass
+<!-- .IN "repeaterWidgetClass" "" -->
+Class Name Repeater
+<!-- .IN "Repeater widget" "class name" -->
+Superclass Command
+<!-- .sp -->
+</literallayout>
+<para>
+<!-- .LP -->
+The Repeater widget is a subclass of the Command widget; see the <!-- xref -->
+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.
+</para>
+<sect2 id="repeater_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Repeater widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Repeater widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>bitmap</entry>
+ <entry>Bitmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cornerRoundPercent</entry>
+ <entry>CornerRoundPercent</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>25</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>decay</entry>
+ <entry>Decay</entry>
+ <entry>Int</entry>
+ <entry></entry>
+ <entry>5</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>encoding</entry>
+ <entry>Encoding</entry>
+ <entry>UnsignedChar</entry>
+ <entry></entry>
+ <entry>XawTextEncoding8bit</entry>
+ </row>
+ <row>
+ <entry>flash</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>XFontStruct</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>fontSet</entry>
+ <entry>FontSet</entry>
+ <entry>XFontSet</entry>
+ <entry></entry>
+ <entry>XtDefaultFontSet</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic height + 2 * <function>internalHeight</function></entry>
+ </row>
+ <row>
+ <entry>highlightThickness</entry>
+ <entry>Thickness</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>2 (0 if Shaped)</entry>
+ </row>
+ <row>
+ <entry>initialDelay</entry>
+ <entry>Delay</entry>
+ <entry>Int</entry>
+ <entry></entry>
+ <entry>200</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>internalHeight</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>internalWidth</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>justify</entry>
+ <entry>Justify</entry>
+ <entry>Justify</entry>
+ <entry></entry>
+ <entry>XtJustifyCenter (center)</entry>
+ </row>
+ <row>
+ <entry>label</entry>
+ <entry>Label</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>name of widget</entry>
+ </row>
+ <row>
+ <entry>leftBitmap</entry>
+ <entry>LeftBitmap</entry>
+ <entry>Bitmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>minimumDelay</entry>
+ <entry>MinimumDelay</entry>
+ <entry>Int</entry>
+ <entry></entry>
+ <entry>10</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>repeatDelay</entry>
+ <entry>Delay</entry>
+ <entry>Int</entry>
+ <entry></entry>
+ <entry>50</entry>
+ </row>
+ <row>
+ <entry>resize</entry>
+ <entry>Resize</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Pointer</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>shapeStyle</entry>
+ <entry>ShapeStyle</entry>
+ <entry>ShapeStyle</entry>
+ <entry></entry>
+ <entry>Rectangle</entry>
+ </row>
+ <row>
+ <entry>startCallback</entry>
+ <entry>StartCallback</entry>
+ <entry>Callback</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>stopCallback</entry>
+ <entry>StopCallback</entry>
+ <entry>Callback</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See below</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic width + 2 * <function>internalWidth</function></entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+\" Resource Descriptions
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bm -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<!-- .Cb -->
+<!-- .Cm -->
+<!-- .Cr -->
+<!-- .Cu -->
+<!-- .Cn -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>decay</function>
+ </term>
+ <listitem>
+ <para>
+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 <function>minimumDelay</function> milliseconds.
+<!-- .Dp -->
+<!-- .Dc -->
+<!-- .Le -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>flash</function>
+ </term>
+ <listitem>
+ <para>
+Whether or not to flash the Repeater button whenever the timer goes off.
+<!-- .Lf -->
+<!-- .Ls -->
+<!-- .Lg -->
+<!-- .Hw -->
+<!-- .Ht -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>initialDelay</function>
+ </term>
+ <listitem>
+ <para>
+The number of milliseconds between the beginning of the Repeater button
+being held down and the first invocation of the <function>callback</function> function.
+<!-- .Ib -->
+<!-- .Ih -->
+<!-- .In -->
+<!-- .Ju -->
+<!-- .La -->
+<!-- .Ll -->
+<!-- .Mm -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>minimumDelay</function>
+ </term>
+ <listitem>
+ <para>
+The minimum time between callbacks in milliseconds.
+<!-- .Pf -->
+<!-- .Pb -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>repeatDelay</function>
+ </term>
+ <listitem>
+ <para>
+The number of milliseconds between each callback after the first (minus an
+increasing number of <function>decay</function>s).
+<!-- .Re -->
+<!-- .Sc -->
+<!-- .Se -->
+<!-- .Ss -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>startCallback</function>
+ </term>
+ <listitem>
+ <para>
+The list of functions to invoke by the <function>start</function> action (typically
+when the Repeater button is first pressed). The callback data parameter
+is set to NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>stopCallback</function>
+ </term>
+ <listitem>
+ <para>
+The list of functions to invoke by the <function>stop</function> action (typically
+when the Repeater button is released). The callback data parameter
+is set to NULL.
+<!-- .Tr -->
+<!-- .Xy -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Repeater_Actions">
+<title>Repeater Actions</title>
+<!-- .IN "Repeater widget" "actions" -->
+<para>
+<!-- .LP -->
+The Repeater widget supports the following actions beyond those of the Command
+button:
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>start</function>()
+ </term>
+ <listitem>
+ <para>
+This invokes the functions on the <function>startCallback</function> and <function>callback</function> lists
+and sets a timer to go off in <function>initialDelay</function> milliseconds. The timer
+will cause the <function>callback</function> functions to be invoked with increasing
+frequency until the <function>stop</function> action occurs.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>stop</function>()
+ </term>
+ <listitem>
+ <para>
+This invokes the functions on the <function>stopCallback</function> list and prevents any
+further timers from occuring until the next <function>start</function> action.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<!-- .IN "Repeater widget" "translation bindings" -->
+The following are the default translation bindings used by the
+Repeater widget:
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.25i -->
+<!-- .ta .5i 2.25i -->
+ &lt;EnterWindow&gt;: highlight(\|)
+ &lt;LeaveWindow&gt;: unhighlight(\|)
+ &lt;Btn1Down&gt;: set(\|) start(\|)
+ &lt;Btn1Up&gt;: stop(\|) unset(\|)
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Scrollbar.xml b/libXaw/specs/Scrollbar.xml
new file mode 100644
index 000000000..87f6d68eb
--- /dev/null
+++ b/libXaw/specs/Scrollbar.xml
@@ -0,0 +1,884 @@
+<sect1 id="Scrollbar_Widget">
+<title>Scrollbar Widget</title>
+
+<literallayout class="monospaced">
+Application header file &lt;X11/Xaw/Scrollbar.h&gt;
+Class header file &lt;X11/Xaw/ScrollbarP.h&gt;
+Class scrollbarWidgetClass
+Class Name Scrollbar
+Superclass Simple
+</literallayout>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<sect2 id="scrollbar_resources">
+<title>Resources</title>
+
+<para>
+When creating a Scrollbar widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>depends on orientation</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>jumpProc</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>length</entry>
+ <entry>Length</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>minimumThumb</entry>
+ <entry>MinimumThumb</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>7</entry>
+ </row>
+ <row>
+ <entry>orientation</entry>
+ <entry>Orientation</entry>
+ <entry>Orientation</entry>
+ <entry></entry>
+ <entry>XtorientVertical (vertical)</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>parent's Screen</entry>
+ </row>
+ <row>
+ <entry>scrollDCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_sb_down_arrow</entry>
+ </row>
+ <row>
+ <entry>scrollHCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_sb_h_double_arrow</entry>
+ </row>
+ <row>
+ <entry>scrollLCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_sb_left_arrow</entry>
+ </row>
+ <row>
+ <entry>scrollProc</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>scrollRCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_sb_right_arrow</entry>
+ </row>
+ <row>
+ <entry>scrollUCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_sb_up_arrow</entry>
+ </row>
+ <row>
+ <entry>scrollVCursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_sb_v_arrow</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>shown</entry>
+ <entry>Shown</entry>
+ <entry>Float</entry>
+ <entry></entry>
+ <entry>0.0</entry>
+ </row>
+ <row>
+ <entry>thickness</entry>
+ <entry>Thickness</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>14</entry>
+ </row>
+ <row>
+ <entry>thumb</entry>
+ <entry>Thumb</entry>
+ <entry>Bitmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>thumbProc</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>topOfThumb</entry>
+ <entry>TopOfThumb</entry>
+ <entry>Float</entry>
+ <entry></entry>
+ <entry>0.0</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See below</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>depends on orientation</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>foreground</function>
+ </term>
+ <listitem>
+ <para>
+A pixel value which indexes the widget's colormap to derive the color
+used to draw the thumb.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>jumpProc</function>
+ </term>
+ <listitem>
+ <para>
+All functions on this callback list are called when the
+<function>NotifyThumb</function> action is invoked. See the <function>Scrollbar
+Actions</function> section for details.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>length</function>
+ </term>
+ <listitem>
+ <para>
+The height of a vertical scrollbar or the width of a horizontal scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>minimumThumb</function>
+ </term>
+ <listitem>
+ <para>
+The smallest size, in pixels, to which the thumb can shrink.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>orientation</function>
+ </term>
+ <listitem>
+ <para>
+The orientation is the direction that the thumb will be allowed to move.
+This value can be either <function>XtorientVertical</function> or
+<function>XtorientHorizontal</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>scrollDCursor</function>
+ </term>
+ <listitem>
+ <para>
+This cursor is used when scrolling backward in a vertical scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>scrollHCursor</function>
+ </term>
+ <listitem>
+ <para>
+This cursor is used when a horizontal scrollbar is inactive.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>scrollLCursor</function>
+ </term>
+ <listitem>
+ <para>
+This cursor is used when scrolling forward in a horizontal scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>scrollProc</function>
+ </term>
+ <listitem>
+ <para>
+All functions on this callback list may be called when the
+<function>NotifyScroll</function> action is invoked. See the \fBScrollbar
+Actions\fP section for details.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>scrollRCursor</function>
+ </term>
+ <listitem>
+ <para>
+This cursor is used when scrolling backward in a horizontal scrollbar,
+or when thumbing a vertical scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>scrollUCursor</function>
+ </term>
+ <listitem>
+ <para>
+This cursor is used when scrolling forward in a vertical scrollbar, or when
+thumbing a horizontal scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>scrollVCursor</function>
+ </term>
+ <listitem>
+ <para>
+This cursor is used when a vertical scrollbar is inactive.
+<!-- .Se -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>shown</function>
+ </term>
+ <listitem>
+ <para>
+This is the size of the thumb, expressed as a percentage (0.0 - 1.0)
+of the length of the scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>thickness</function>
+ </term>
+ <listitem>
+ <para>
+The width of a vertical scrollbar or the height of a horizontal scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>thumb</function>
+ </term>
+ <listitem>
+ <para>
+This pixmap is used to tile (or stipple) the thumb of the scrollbar. If
+no tiling is desired, then set this resource to <function>None</function>. 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 <function>Converting Bitmaps</function> for
+details.)
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>topOfThumb</function>
+ </term>
+ <listitem>
+ <para>
+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 <function>top</function> in
+previous versions of the Athena widget set. The name collided with the
+a Form widget constraint resource, and had to be changed.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+</sect2>
+
+<sect2 id="Scrollbar_Actions">
+<title>Scrollbar Actions</title>
+<para>
+<!-- .LP -->
+The actions supported by the Scrollbar widget are:
+</para>
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>StartScroll</function>(<emphasis remap='I'>value</emphasis>)
+ </term>
+ <listitem>
+ <para>
+The possible <emphasis remap='I'>values</emphasis> are Forward, Backward, or Continuous.
+This must be the first action to begin a new movement.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>NotifyScroll</function>(<emphasis remap='I'>value</emphasis>)
+ </term>
+ <listitem>
+ <para>
+The possible <emphasis remap='I'>values</emphasis> are Proportional or FullLength. If the
+argument to StartScroll was Forward or Backward, NotifyScroll executes
+the <function>scrollProc</function> callbacks and passes either; the position of the
+pointer, if <emphasis remap='I'>value</emphasis> is Proportional, or the full length of the
+scroll bar, if <emphasis remap='I'>value</emphasis> is FullLength. If the argument to
+StartScroll was Continuous, NotifyScroll returns without executing any
+callbacks.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>EndScroll</function>(\^)
+ </term>
+ <listitem>
+ <para>
+This must be the last action after a movement is complete.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>MoveThumb</function>(\^)
+ </term>
+ <listitem>
+ <para>
+Repositions the Scrollbar's thumb to the current pointer location.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>NotifyThumb</function>(\^)\
+ </term>
+ <listitem>
+ <para>
+Calls the
+<!-- .PN jumpProc -->
+callbacks and passes the relative position of the
+pointer as a percentage of the scroll bar length.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<para>
+The default bindings for Scrollbar are:
+<!-- .IN "Scrollbar widget" "default translation table" -->
+</para>
+
+<literallayout class="monospaced">
+ &lt;Btn1Down&gt;: StartScroll(Forward)
+ &lt;Btn2Down&gt;: StartScroll(Continuous) MoveThumb(\|) NotifyThumb(\|)
+ &lt;Btn3Down&gt;: StartScroll(Backward)
+ &lt;Btn2Motion&gt;: MoveThumb(\|) NotifyThumb(\|)
+ &lt;BtnUp&gt;: NotifyScroll(Proportional) EndScroll(\|)
+</literallayout>
+
+<para>
+Examples of additional bindings a user might wish to specify in a
+resource file are:
+</para>
+
+<literallayout class="monospaced">
+*Scrollbar.Translations: \\
+ ~Meta&lt;Key&gt;space: StartScroll(Forward) NotifyScroll(FullLength) \\n\\
+ Meta&lt;Key&gt;space: StartScroll(Backward) NotifyScroll(FullLength) \\n\\
+ EndScroll(\|)
+</literallayout>
+
+</sect2>
+
+<sect2 id="Scrollbar_Callbacks">
+<title>Scrollbar Callbacks</title>
+<!-- .IN "Scrollbar widget" "callbacks" -->
+<para>
+<!-- .LP -->
+There are two callback lists provided by the Scrollbar widget.
+The procedural interface for these functions is described here.
+</para>
+
+<para>
+<!-- .LP -->
+The calling interface to the <function>scrollProc</function> callback procedure is:
+<!-- .IN "ScrollProc" "" "@DEF@" -->
+</para>
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> ScrollProc</function></funcdef>
+ <paramdef>Widget<parameter> scrollbar</parameter></paramdef>
+ <paramdef>XtPointer<parameter> client_data</parameter></paramdef>
+ <paramdef>XtPointer<parameter> position</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>scrollbar</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Scrollbar widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the client data.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>position</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pixel position in integer form.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <function>scrollProc</function> callback is used for incremental scrolling
+and is called by the <function>NotifyScroll</function> 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.
+</para>
+
+<para>
+The calling interface to the <function>jumpProc</function> callback procedure is:
+</para>
+<!-- .IN "jumpProc" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> JumpProc</function></funcdef>
+ <paramdef>Widget<parameter> scrollbar</parameter></paramdef>
+ <paramdef>XtPointer<parameter> client_data</parameter></paramdef>
+ <paramdef>XtPointer<parameter> percent_ptr</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>scrollbar</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the ID of the scroll bar widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the client data.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>percent_ptr</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the floating point position of the thumb (0.0 \- 1.0).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <function>jumpProc</function> callback is used to implement smooth scrolling and
+is called by the <function>NotifyThumb</function> action. Percent_ptr must be cast
+to a pointer to float before use; i.e.
+</para>
+
+<literallayout class="monospaced">
+ float percent = *(float*)percent_ptr;
+</literallayout>
+
+<para>
+With the default button bindings, button 2 moves the thumb interactively,
+and the <function>jumpProc</function> is called on each new position of the pointer,
+while the pointer button remains down. The value specified by
+<emphasis remap='I'>percent_ptr</emphasis> 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.
+</para>
+
+</sect2>
+
+<sect2 id="Convenience_Routines">
+<title>Convenience Routines</title>
+<para>
+<!-- .IN "Scrollbar widget" "setting thumb values" -->
+To set the position and length of a Scrollbar thumb, use
+<!-- .PN XawScrollbarSetThumb . -->
+<!-- .IN "XawScrollbarSetThumb" "" "@DEF@" -->
+</para>
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawScrollbarSetThumb</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>float<parameter> top</parameter></paramdef>
+ <paramdef>float<parameter> shown</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Scrollbar widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>top</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the position of the top of the thumb as a fraction of the
+length of the Scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>shown</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the length of the thumb as a fraction of the total length
+of the Scrollbar.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<function>XawScrollbarThumb</function>
+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.
+</para>
+
+<para>
+If called from <function>jumpProc</function>, <function>XawScrollbarSetThumb</function> has no effect.
+</para>
+
+</sect2>
+
+<sect2 id="Setting_Float_Resources">
+<title>Setting Float Resources</title>
+<!-- .IN "float resources" "setting" -->
+<para>
+The <function>shown</function> and <function>topOfThumb</function> resources are of type
+<emphasis remap='I'>float</emphasis>. 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.
+</para>
+<literallayout class="monospaced">
+ top = 0.5;
+ if (sizeof(float) &gt; sizeof(XtArgVal)) {
+ /*
+ \ * If a float is larger than an XtArgVal then pass this
+ \ * resource value by reference.
+ \ */
+ XtSetArg(args[0], XtNshown, &amp;top);
+ }
+ else {
+ /*
+ \ * Convince C not to perform an automatic conversion, which
+ \ * would truncate 0.5 to 0.
+ \ */
+ XtArgVal * l_top = (XtArgVal *) &amp;top;
+ XtSetArg(args[0], XtNshown, *l_top);
+ }
+</literallayout>
+
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Simple.xml b/libXaw/specs/Simple.xml
new file mode 100644
index 000000000..a21bc64f5
--- /dev/null
+++ b/libXaw/specs/Simple.xml
@@ -0,0 +1,252 @@
+<sect1 id="Simple_Widget">
+<title>Simple Widget</title>
+<!-- .XS -->
+<!-- Simple Widget -->
+<!-- .XE -->
+<!-- .IN "Simple widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;Xaw/Simple.h&gt;
+<!-- .IN "Simple.h" "" -->
+Class Header file &lt;Xaw/SimpleP.h&gt;
+<!-- .IN "SimpleP.h" "" -->
+Class simpleWidgetClass
+<!-- .IN "simpleWidgetClass" -->
+Class Name Simple
+<!-- .IN "Simple widget" "class name" -->
+Superclass Core
+<!-- .sp -->
+</literallayout>
+<para>
+<!-- .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 <emphasis remap='I'>simple</emphasis> Athena widgets. This widget adds six resources
+to the resource list provided by the Core widget and its superclasses.
+</para>
+<sect2 id="simple_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Simple widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Simple widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .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 -->
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/SimpleMenu.xml b/libXaw/specs/SimpleMenu.xml
new file mode 100644
index 000000000..84ba039e7
--- /dev/null
+++ b/libXaw/specs/SimpleMenu.xml
@@ -0,0 +1,790 @@
+<sect2 id="SimpleMenu_Widget">
+<title>SimpleMenu Widget</title>
+<!-- .XS -->
+<!-- SimpleMenu Widget -->
+<!-- .XE -->
+<!-- .IN "SimpleMenu widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/SimpleMenu.h&gt;
+<!-- .IN "SimpleMenu.h" "" -->
+Class Header file &lt;X11/Xaw/SimpleMenP.h&gt;
+<!-- .IN "SimpleMenP.h" "" -->
+Class simpleMenuWidgetClass
+<!-- .IN "simpleMenuWidgetClass" "" -->
+Class Name SimpleMenu
+<!-- .IN "SimpleMenu widget" "class name" -->
+Superclass OverrideShell
+<!-- .sp -->
+</literallayout>
+<para>
+<!-- .LP -->
+The SimpleMenu widget is a container for the menu entries. It is a
+direct subclass of shell, and is should be created with
+<function>XtCreatePopupShell</function>, not <function>XtCreateManagedWidget</function>. 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.
+</para>
+<sect3 id="Resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+<!-- .IN "SimpleMenu widget" "resources" -->
+</para>
+<para>
+<!-- .LP -->
+The resources associated with the SimpleMenu widget control aspects
+that will affect the entire menu.
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>allowShellResize</entry>
+ <entry>AllowShellResize</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>backingStore</entry>
+ <entry>BackingStore</entry>
+ <entry>BackingStore</entry>
+ <entry></entry>
+ <entry>see below</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>bottomMargin</entry>
+ <entry>VerticalMargins</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>children</entry>
+ <entry>ReadOnly</entry>
+ <entry>WidgetList</entry>
+ <entry>R</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>createPopupChildProc</entry>
+ <entry>CreatePopupChildProc</entry>
+ <entry>Function</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>geometry</entry>
+ <entry>Geometry</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>Enough space to contain all entries</entry>
+ </row>
+ <row>
+ <entry>label</entry>
+ <entry>Label</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>labelClass</entry>
+ <entry>LabelClass</entry>
+ <entry>Pointer</entry>
+ <entry></entry>
+ <entry>SmeBSBObjectClass</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>menuOnScreen</entry>
+ <entry>MenuOnScreen</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numChildren</entry>
+ <entry>ReadOnly</entry>
+ <entry>Cardinal</entry>
+ <entry>R</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>overrideRedirect</entry>
+ <entry>OverrideRedirect</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>popdownCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>popupCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>popupOnEntry</entry>
+ <entry>PopupOnEntry</entry>
+ <entry>Widget</entry>
+ <entry>A</entry>
+ <entry>Label or first entry</entry>
+ </row>
+ <row>
+ <entry>rowHeight</entry>
+ <entry>RowHeight</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>saveUnder</entry>
+ <entry>SaveUnder</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>topMargin</entry>
+ <entry>VerticalMargins</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See below</entry>
+ </row>
+ <row>
+ <entry>visual</entry>
+ <entry>Visual</entry>
+ <entry>Visual</entry>
+ <entry></entry>
+ <entry>CopyFromParent</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>Width of widest entry</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>backingStore</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "conversions" "BackingStore" -->
+Determines what type of backing store will be used for the menu. Legal
+values for this resource are <function>NotUseful</function>, <function>WhenMapped</function>, and
+<function>Always</function>. These values are the backing-store integers defined in
+&lt;X11/X.h&gt;.
+<!-- .Rs "notUseful, whenMapped, always, \fPand\fP default" -->
+If <function>default</function> is specified (the default behavior) the server will use
+whatever it thinks is appropriate.
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>bottomMargin</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>topMargin</function>
+ </term>
+ <listitem>
+ <para>
+The amount of space between the top or bottom of the menu and the menu entry
+closest to that edge.
+<!-- .Ch -->
+<!-- .Cm -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>cursor</function>
+ </term>
+ <listitem>
+ <para>
+The shape of the mouse pointer whenever it is in this widget.
+<!-- .Dp -->
+<!-- .Dc -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ geometry
+ </term>
+ <listitem>
+ <para>
+If this resource is specified it will override the x, y, width and
+height of this widget. The format of this string is
+[&lt;<emphasis remap='I'>width</emphasis>&gt;x&lt;<emphasis remap='I'>height</emphasis>&gt;][{+ -} &lt;<emphasis remap='I'>xoffset</emphasis>&gt; {+ -}&lt;<emphasis remap='I'>yoffset</emphasis>&gt;].
+<!-- .Hw -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>label</function>
+ </term>
+ <listitem>
+ <para>
+This label will be placed at the top of the SimpleMenu, and may not be
+highlighted. The name of the
+label object is <function>menuLabel</function>. Using this name it is possible to
+modify the label's attributes through the resource database. When the label
+is created, the <function>label</function> is hard coded to the value of <function>label</function>, and
+<function>justify</function> is hard coded as <function>XtJustifyCenter</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>labelClass</function>
+ </term>
+ <listitem>
+ <para>
+Specifies the type of Sme object created as the menu label.
+<!-- .Mm -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>menuOnScreen</function>
+ </term>
+ <listitem>
+ <para>
+If the menu is automatically positioned under the cursor with the
+<function>XawPositionSimpleMenu</function> action, and this resource is <function>True</function>,
+then the menu will always be fully visible on the screen.
+<!-- .Nc -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ overrideRedirect
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>Interclient Communications Conventions Manual</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ popdownCallback
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ popupCallback
+ </term>
+ <listitem>
+ <para>
+These callback functions are called by the Xt Intrinsics whenever the
+shell is popped up or down (See <emphasis remap='I'>(xT</emphasis> for details).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>popupOnEntry</function>
+ </term>
+ <listitem>
+ <para>
+The <function>XawPositionSimpleMenu</function> 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>rowHeight</function>
+ </term>
+ <listitem>
+ <para>
+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 <function>rowHeight</function> pixels high.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ saveUnder
+ </term>
+ <listitem>
+ <para>
+If this is <function>True</function> then save unders will be active on the menu's window.
+<!-- .Sc -->
+<!-- .Se -->
+<!-- .Tr -->
+<!-- .Xy -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="SimpleMenu_Actions">
+<title>SimpleMenu Actions</title>
+<!-- .IN "SimpleMenu widget" "actions" -->
+<para>
+<!-- .LP -->
+The SimpleMenu widget supports the following actions:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+Switching the entry under the mouse pointer between
+the foreground and background colors with <function>highlight</function>
+and <function>unhighlight</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Processing menu entry callbacks with <function>notify</function>
+<!-- .sp -->
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+<!-- .IN "SimpleMenu widget" "default translations" -->
+The following are the default translation bindings used
+by the SimpleMenu widget:
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.25i -->
+<!-- .ta .5i 2.25i -->
+ &lt;EnterWindow&gt;: highlight(\|)
+ &lt;LeaveWindow&gt;: unhighlight(\|)
+ &lt;BtnMotion&gt;: highlight(\|)
+ &lt;BtnUp&gt;: MenuPopdown(\|) notify(\|) unhighlight(\|)
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .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 -->
+</para>
+<para>
+<!-- .LP -->
+The full list of actions supported by SimpleMenu is:
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>highlight</function>()
+ </term>
+ <listitem>
+ <para>
+Highlight the menu entry that is currently under the pointer.
+Only a item that is highlighted will be notified when the <function>notify</function>
+action is invoked. The look of a highlighted entry is determined by
+the menu entry.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>unhighlight</function>(\|)
+ </term>
+ <listitem>
+ <para>
+Unhighlights the currently highlighted menu item, and returns it to
+its normal look.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>notify</function>(\|)
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>MenuPopdown</function>(<emphasis remap='I'>menu</emphasis>)
+ </term>
+ <listitem>
+ <para>
+This action is defined in <emphasis remap='I'>(xT</emphasis>.
+<!-- .IN "SimpleMenu widget" "MenuPopdown routine" -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="Positioning_the_SimpleMenu">
+<title>Positioning the SimpleMenu</title>
+<!-- .IN "XawPositionSimpleMenu" "" "@DEF@" -->
+<!-- .IN "SimpleMenu widget" "positioning" "@DEF@" -->
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+If popup menus are desired it will be necessary to add the
+<function>XawPositionSimpleMenu</function> and <function>MenuPopup</function> actions to the
+translation table of the widget that will be popping up the menu. The
+<function>MenuPopup</function> action is described in <emphasis remap='I'>(xT</emphasis>.
+<function>XawPositionSimpleMenu</function> is a global action procedure registered by
+the SimpleMenu widget when the first one is created or the convenience
+routine <function>XawSimpleMenuAddGlobalActions</function> is called.
+</para>
+<para>
+<!-- .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
+<function>xterm's</function> menus:
+<!-- .sp -->
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.25i -->
+<!-- .ta .5i 2.25i -->
+ !Ctrl&lt;Btn1Down&gt;: XawPositionSimpleMenu(xterm) MenuPopup(xterm)
+ !Ctrl&lt;Btn2Down&gt;: XawPositionSimpleMenu(modes) MenuPopup(modes)
+</literallayout>
+<!-- .sp 1 -->
+</para>
+<para>
+<!-- .LP -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>XawPositionSimpleMenu</function>(<emphasis remap='I'>menu</emphasis>)
+ </term>
+ <listitem>
+ <para>
+The <function>XawPositionSimpleMenu</function> routine will search for the menu name
+passed to it using <function>XtNameToWidget</function> 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. <function>XawPositionSimpleMenu</function> 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
+<function>popupOnEntry</function> resource. If the <function>menuOnScreen</function> resource is
+<function>True</function> then the menu will always be fully visible on the screen.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="Convenience_Routines">
+<title>Convenience Routines</title>
+<sect4 id="Registering_the_Global_Action_Routines">
+<title>Registering the Global Action Routines</title>
+<para>
+<!-- .LP -->
+<!-- .IN "XawPositionSimpleMenu" "" -->
+The <function>XawPositionSimpleMenu</function> 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
+<function>XawSimpleMenuAddGlobalActions</function>:
+<!-- .IN "XawSimpleMenuAddGlobalActions" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawSimpleMenuAddGlobalActions</function></funcdef>
+ <paramdef>XtAppContext<parameter> app_con</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_con</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context in which this action should be registered.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function need only be called once per application and must be
+called before any widget that uses <function>XawPositionSimpleMenu</function> action
+is realized.
+</para>
+</sect4>
+<sect4 id="Getting_and_Clearing_the_Current_Menu_Entry">
+<title>Getting and Clearing the Current Menu Entry</title>
+<para>
+<!-- .LP -->
+To get the currently highlighted menu entry use
+<function>XawSimpleMenuGetActiveEntry</function>:
+<!-- .IN "XawSimpleMenuGetActiveEntry" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Widget<function> XawSimpleMenuGetActiveEntry</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the SimpleMenu widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function returns the menu entry that is
+currently highlighted, or NULL if no entry is highlighted.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+To clear the SimpleMenu widget's internal information about the
+currently highlighted menu entry use
+<function>XawSimpleMenuClearActiveEntry</function>:
+<!-- .IN "XawSimpleMenuClearActiveEntry" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Widget<function> XawSimpleMenuClearActiveEntry</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the SimpleMenu widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function unsets all internal references to the currently
+highlighted menu entry. It does not <emphasis remap='I'>unhighlight</emphasis> or otherwise
+alter the appearance of the active entry. This function is primarily
+for use by implementors of menu entries.
+
+</para>
+</sect4>
+</sect3>
+</sect2>
diff --git a/libXaw/specs/Sme.xml b/libXaw/specs/Sme.xml
new file mode 100644
index 000000000..2d3d2f5f7
--- /dev/null
+++ b/libXaw/specs/Sme.xml
@@ -0,0 +1,207 @@
+<sect1 id="Sme_Object">
+<title>Sme Object</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Sme Object -->
+<!-- .XE -->
+<!-- .IN "Sme object" "" "@DEF@" -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+Application Header file &lt;X11/Xaw/Sme.h&gt;
+<!-- .IN "Sme.h" "" -->
+Class Header file &lt;X11/Xaw/SmeP.h&gt;
+<!-- .IN "SmeP.h" "" -->
+Class smeObjectClass
+<!-- .IN "smeObjectClass" "" -->
+Class Name Sme
+<!-- .IN "Sme object" "class name" -->
+Superclass RectObj
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .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.
+</para>
+<sect2 id="sme_resources">
+<title>Resources</title>
+<!-- .IN "SmeLine object" "resources" -->
+<para>
+<!-- .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.
+</para>
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .As -->
+<!-- .Dc -->
+<!-- .Hw -->
+
+<para>
+Keep in mind that the SimpleMenu widget will force all menu items to
+be the width of the widest entry.
+<!-- .Ix Bold -->
+<!-- .Se -->
+</para>
+</sect2>
+<sect2 id="Subclassing_the_Sme_Object">
+<title>Subclassing the Sme Object</title>
+<!-- .IN "Sme object" "subclassing" "@DEF" -->
+<para>
+<!-- .LP -->
+<!-- .sp -->
+To Create a new Sme object <emphasis remap='I'>class</emphasis> 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.
+</para>
+<para>
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>Highlight</function>(\|)
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "Sme object" "Highlight method" -->
+Called to put the menu entry into the highlighted state.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Unhighlight</function>(\|)
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "Sme object" "Unhighlight method" -->
+Called to return the widget to its normal (unhighlighted) state.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>Notify</function>(\|)
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "Sme object" "Notify method" -->
+Called when the user selects this menu entry.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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.
+</para>
+<orderedlist>
+ <listitem><para>Objects can be zero pixels high.</para></listitem>
+ <listitem>
+ <para>
+Objects draw on their parent's window, therefore the Drawing dimensions
+are different from those of widgets. For instance, y locations vary
+from <function>y</function> to <function>y + height</function>, not <function>0</function> to <function>height</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<!-- .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 <function>unhighlight</function>
+procedure. However, due to the asynchronous nature of
+X, the expose event generated by <function>XtSetValues</function> will come <emphasis remap='I'>after</emphasis>
+this unhighlight.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</orderedlist>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/SmeBSB.xml b/libXaw/specs/SmeBSB.xml
new file mode 100644
index 000000000..539bdcb03
--- /dev/null
+++ b/libXaw/specs/SmeBSB.xml
@@ -0,0 +1,310 @@
+<sect1 id="SmeBSB_Object">
+<title>SmeBSB Object</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- SmeBSB Object -->
+<!-- .XE -->
+<!-- .IN "SmeBSB object" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/SmeBSB.h&gt;
+<!-- .IN "SmeBSB.h" "" -->
+Class Header file &lt;X11/Xaw/SmeBSBP.h&gt;
+<!-- .IN "SmeBSBP.h" "" -->
+Class smeBSBObjectClass
+<!-- .IN "smeBSBObjectClass" "" -->
+Class Name SmeBSB
+<!-- .IN "SmeBSB object" "class name" -->
+Superclass Sme
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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 <function>font</function> utilized, or in a multi-byte encoding for use with a
+<function>fontSet</function>.
+</para>
+<sect2 id="smebsb_resources">
+<title>Resources</title>
+<!-- .IN "SmeBSB object" "resources" -->
+<para>
+<!-- .LP -->
+The resources associated with the SmeBSB object are defined in this section,
+and affect only the single menu entry specified by this object.
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>Callback</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>FontStruct</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>fontSet</entry>
+ <entry>FontSet</entry>
+ <entry>XFontSet</entry>
+ <entry></entry>
+ <entry>XtDefaultFontSet</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Font height + <function>vertSpace</function></entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>justify</entry>
+ <entry>Justify</entry>
+ <entry>Justify</entry>
+ <entry></entry>
+ <entry>XtjustifyLeft</entry>
+ </row>
+ <row>
+ <entry>label</entry>
+ <entry>Label</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>leftBitmap</entry>
+ <entry>LeftBitmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>leftMargin</entry>
+ <entry>leftMargin</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>rightBitmap</entry>
+ <entry>RightBitmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>rightMargin</entry>
+ <entry>rightMargin</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>vertSpace</entry>
+ <entry>VertSpace</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry>25</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>TextWidth + margins</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<!-- .As -->
+<variablelist>
+ <varlistentry>
+ <term>callback</term>
+ <listitem>
+ <para>
+All callback functions on this list are called when the SimpleMenu
+<emphasis remap='I'>notifies</emphasis> this entry that the user has selected it.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>font</term>
+ <listitem>
+ <para>
+The text font to use when displaying the <function>label</function>, when the
+<function>international</function> resource is <function>false</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>fontSet</term>
+ <listitem>
+ <para>
+The text font set to use when displaying the <function>label</function>, when the
+<function>international</function> resource is <function>true</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>foreground</term>
+ <listitem>
+ <para>
+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 <function>bitmaps</function>.
+<!-- .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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>justify</term>
+ <listitem>
+ <para>
+<!-- .IP <function>justify</function> 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 <function>XtJustifyLeft</function>, <function>XtJustifyCenter</function>,
+or <function>XtJustifyRight</function>. When specifying the justification from a
+resource file the values <function>left</function>, <function>center</function>, or <function>right</function> may be
+used.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>label</term>
+ <listitem>
+ <para>
+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 <function>leftMargin</function>, <function>rightMargin</function>, <function>vertSpace</function>,
+and <function>justify</function> resources.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>leftBitmap</term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>rightBitmap</term>
+ <listitem>
+ <para>
+<!-- .IP <function>rightBitmap</function> 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>leftMargin</term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>rightMargin</term>
+ <listitem>
+ <para>
+This is the amount of space (in pixels) that will be left between the
+edge of the menu entry and the label string.
+<!-- .Se -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>vertSpace</term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/SmeLine.xml b/libXaw/specs/SmeLine.xml
new file mode 100644
index 000000000..e53728c61
--- /dev/null
+++ b/libXaw/specs/SmeLine.xml
@@ -0,0 +1,148 @@
+<sect1 id="SmeLine_Object">
+<title>SmeLine Object</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- SmeLine Object -->
+<!-- .XE -->
+<!-- .IN "SmeLine object" "" "@DEF@" -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+Application Header file &lt;X11/Xaw/SmeLine.h&gt;
+<!-- .IN "SmeLine.h" "" -->
+Class Header file &lt;X11/Xaw/SmeLineP.h&gt;
+<!-- .IN "SmeLineP.h" "" -->
+Class smeLineObjectClass
+<!-- .IN "smeLineObjectClass" "" -->
+Class Name SmeLine
+<!-- .IN "SmeLine object" "class name" -->
+Superclass Sme
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .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.
+</para>
+<sect2 id="smeline_resources">
+<title>Resources</title>
+<!-- .IN "SmeLine object" "resources" -->
+<para>
+<!-- .LP -->
+The resources associated with the SmeLine object are defined in this section,
+and affect only the single menu entry specified by this object.
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry><function>lineWidth</function></entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>lineWidth</entry>
+ <entry>LineWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>stipple</entry>
+ <entry>Stipple</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Dc -->
+<variablelist>
+ <varlistentry>
+ <term>foreground</term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>lineWidth</term>
+ <listitem>
+ <para>
+The width of the horizontal line that is to be displayed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>stipple</term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/StripChart.xml b/libXaw/specs/StripChart.xml
new file mode 100644
index 000000000..f51f6fc83
--- /dev/null
+++ b/libXaw/specs/StripChart.xml
@@ -0,0 +1,435 @@
+<sect1 id="StripChart_Widget">
+<title>StripChart Widget</title>
+<!-- .XS -->
+<!-- StripChart Widget -->
+<!-- .XE -->
+<!-- .IN "StripChart widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;Xaw/StripChart.h&gt;
+<!-- .IN "StripChart.h" "" -->
+Class Header file &lt;Xaw/StripCharP.h&gt;
+<!-- .IN "StripCharP.h" "" -->
+Class stripChartWidgetClass
+<!-- .IN "stripChartWidgetClass" "" -->
+Class Name StripChart
+<!-- .IN "StripChart widget" "class name" -->
+Superclass Simple
+<!-- .sp -->
+</literallayout>
+<para>
+<!-- .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 <function>xload</function>
+to provide a graph of processor load. The StripChart
+reads data from an application, and updates the chart
+at the <function>update</function> interval specified.
+</para>
+<sect2 id="stripchart_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a StripChart widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "StripChart widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>getValue</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>120</entry>
+ </row>
+ <row>
+ <entry>highlight</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>jumpScroll</entry>
+ <entry>JumpScroll</entry>
+ <entry>int</entry>
+ <entry>A</entry>
+ <entry>half the width of the widget</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>minScale</entry>
+ <entry>Scale</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Pointer</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>update</entry>
+ <entry>Interval</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry>10</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>120</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<!-- .Cm -->
+<!-- .Cu -->
+<!-- .Cn -->
+<!-- .Dp -->
+<!-- .Dc -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>foreground</function>
+ </term>
+ <listitem>
+ <para>
+A pixel value which indexes the widget's colormap to derive the color
+that will be used to draw the graph.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>getValue</function>
+ </term>
+ <listitem>
+ <para>
+A list of callback functions to call every <function>update</function> 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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>highlight</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>jumpScroll</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>minScale</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>update</function>
+ </term>
+ <listitem>
+ <para>
+The number of seconds between graph updates. Each update is
+represented on the graph as a 1 pixel wide line. Every <function>update</function> seconds
+the <function>getValue</function> procedure will be used to get a new graph point,
+and this point will be added to the right end of the StripChart.
+<!-- .Xy -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Getting_the_StripChart_Value">
+<title>Getting the StripChart Value</title>
+<!-- .IN "StripChart widget" "getting the value" -->
+<para>
+<!-- .LP -->
+The StripChart widget will call the application routine passed to it
+as the <function>getValue</function> callback function every <function>update</function> seconds to
+obtain another point for the StripChart graph.
+</para>
+<para>
+<!-- .LP -->
+The calling interface for the <function>getValue</function> callback is:
+<!-- .IN "StripChart widget" "getValue callback" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef><function> void</function>(*getValueProc)</funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XtPointer<parameter> client_data</parameter></paramdef>
+ <paramdef>XtPointer<parameter> value</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the StripChart widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the client data.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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 <function>value</function> field of this routine.
+
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/TPage_Credits.xml b/libXaw/specs/TPage_Credits.xml
new file mode 100644
index 000000000..bc07351ab
--- /dev/null
+++ b/libXaw/specs/TPage_Credits.xml
@@ -0,0 +1,90 @@
+<chapter>
+<title>Acknowledgments</title>
+
+<para>
+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.
+</para>
+
+<literallayout class="monospaced">
+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)
+</literallayout>
+
+<para>
+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:
+</para>
+
+<literallayout class="monospaced">
+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)
+</literallayout>
+
+<para>
+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:
+</para>
+
+<literallayout class="monospaced">
+Ralph R. Swick (Project Athena/ Digital)
+Terry Weissman (formerly Digital WSL)
+Al Mento (Digital UEG)
+</literallayout>
+
+<para>
+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.
+</para>
+
+<literallayout class="monospaced">
+Chris D. Peterson
+MIT X Consortium 1989
+</literallayout>
+
+<para>
+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).
+</para>
+
+<literallayout class="monospaced">
+Donna Converse
+MIT X Consortium 1991
+</literallayout>
+
+<para>
+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.
+</para>
+<literallayout class="monospaced">
+Frank Sheeran
+Omron Corporation 1994
+</literallayout>
+
+</chapter>
diff --git a/libXaw/spec/Template b/libXaw/specs/Template.xml
index b5dc050b2..2d94ca829 100644
--- a/libXaw/spec/Template
+++ b/libXaw/specs/Template.xml
@@ -1,64 +1,22 @@
-.\" $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
+<sect2 id="Public_Header_File">
+<title>Public Header File</title>
+<para>
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
+<function>XtSetValues</function>
operation, or to call a public routine implemented by the widget class.
-.LP
+</para>
+<para>
+<!-- .LP -->
The contents of the Template public header file,
-.Pn < X11/Xaw/Template.h >,
+<function>&lt; X11/Xaw/Template.h &gt;, </function>
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
+</para>
+<literallayout class="monospaced">
..
-.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 $ */
+<!-- .CB -->
+<!-- .\".so ../../lib/Xaw/Template.h -->
/* Copyright (c) X Consortium 1987, 1988 */
#ifndef _Template_h
@@ -87,7 +45,7 @@ are:
*/
-/* define any special resource names here that are not in <X11/StringDefs.h> */
+/* define any special resource names here that are not in &lt;X11/StringDefs.h&gt; */
#define XtNtemplateResource "templateResource"
@@ -103,21 +61,27 @@ typedef struct _TemplateRec* TemplateWidget;
extern WidgetClass templateWidgetClass;
#endif /* _Template_h */
-.CE
-.LP
-.sp
+<!-- .CE -->
+</literallayout>
+<para>
+<!-- .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
+</para>
+<para>
+<!-- .LP -->
+For the "WindowWidget", we want 2 drawing colors, a callback list for
user input and an
-\fBexposeCallback\fP callback list, and we will declare three
+<function>exposeCallback</function> callback list, and we will declare three
convenience procedures, so we need to add
-.LP
-.sp
-.CB
+</para>
+<literallayout class="monospaced">
+<!-- .LP -->
+<!-- .sp -->
+<!-- .CB -->
/* Resources:
...
callback Callback Callback NULL
@@ -135,42 +99,49 @@ convenience procedures, so we need to add
extern Pixel WindowColor1(\|/* Widget */\|);
extern Pixel WindowColor2(\|/* Widget */\|);
extern Font\ \ WindowFont(\|/* Widget */\|);
-.CE
-.LP
+<!-- .CE -->
+</literallayout>
+<para>
+<!-- .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
+name, <function>callback</function>, 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
+</para>
+</sect2>
+<sect2 id="Private_Header_File">
+<title>Private Header File</title>
+<para>
+<!-- .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
+<function>XtSetValues .</function>
+</para>
+<para>
+<!-- .LP -->
The contents of the Template private header file,
-.Pn < X11/Xaw/TemplateP.h >,
+<function>&lt; X11/Xaw/TemplateP.h &gt;, </function>
are:
-.CB
-.\".so ../../lib/Xaw/TemplateP.h
-/* XConsortium: TemplateP.h,v 1.2 88/10/25 17:31:47 swick Exp $ */
-
+</para>
+<!-- .CB -->
+<!-- .\".so ../../lib/Xaw/TemplateP.h -->
+<literallayout class="monospaced">
/* Copyright (c) X Consortium 1987, 1988
*/
#ifndef _TemplateP_h
#define _TemplateP_h
-#include <X11/Xaw/Template.h>
+#include &lt;X11/Xaw/Template.h&gt;
/* include superclass private header file */
-#include <X11/CoreP.h>
+#include &lt;X11/CoreP.h&gt;
-/* define unique representation types not found in <X11/StringDefs.h> */
+/* define unique representation types not found in &lt;X11/StringDefs.h&gt; */
#define XtRTemplateResource "TemplateResource"
@@ -197,19 +168,22 @@ typedef struct _TemplateRec {
} TemplateRec;
#endif /* _TemplateP_h */
-.CE
-.LP
-.sp
+<!-- .CE -->
+</literallayout>
+<para>
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
+</para>
+<para>
+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
+</para>
+
+<literallayout class="monospaced">
typedef struct {
/* resources */
Pixel color_1;
@@ -220,27 +194,32 @@ typedef struct {
/* private state */
/* (none) */
} WindowPart;
-.CE
-.NH 2
-Widget Source File
-.LP
+</literallayout>
+
+</sect2>
+<sect2 id="Widget_Source_File">
+<title>Widget Source File</title>
+<para>
+<!-- .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
+</para>
+<para>
+<!-- .LP -->
The contents of the Template implementation file,
-.Pn < X11/Xaw/Template.c >,
+<function>&lt; X11/Xaw/Template.c &gt;,</function>
are:
-.CB
-.\".so ../../lib/Xaw/Template.c
-/* XConsortium: Template.c,v 1.2 88/10/25 17:40:25 swick Exp $ */
-
+</para>
+<!-- .CB -->
+<!-- .\".so ../../lib/Xaw/Template.c -->
+<literallayout class="monospaced">
/* Copyright (c) X Consortium 1987, 1988
*/
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
+#include &lt;X11/IntrinsicP.h&gt;
+#include &lt;X11/StringDefs.h&gt;
#include "TemplateP.h"
static XtResource resources[] = {
@@ -260,12 +239,12 @@ static XtActionsRec actions[] =
};
static char translations[] =
-" <Key>: template(\|) \\n\\
+" &lt;Key&gt;: template(\|) \\n\\
";
TemplateClassRec templateClassRec = {
{ /* core fields */
- /* superclass */ (WidgetClass) &widgetClassRec,
+ /* superclass */ (WidgetClass) &amp;widgetClassRec,
/* class_name */ "Template",
/* widget_size */ sizeof(TemplateRec),
/* class_initialize */ NULL,
@@ -303,11 +282,14 @@ TemplateClassRec templateClassRec = {
}
};
-WidgetClass templateWidgetClass = (WidgetClass)&templateClassRec;
-
-.CE
-The resource list for the \*QWindowWidget\*U might look like the following:
-.CB
+WidgetClass templateWidgetClass = (WidgetClass)&amp;templateClassRec;
+</literallayout>
+<!-- .CE -->
+<para>
+The resource list for the "WindowWidget" might look like the following:
+</para>
+<!-- .CB -->
+<literallayout class="monospaced">
static XtResource resources[] = {
#define offset(field) XtOffsetOf(WindowWidgetRec, window.field)
/* {name, class, type, size, offset, default_type, default_addr}, */
@@ -323,12 +305,16 @@ static XtResource resources[] = {
offset(input_callback), XtRCallback, NULL },
#undef offset
};
-.CE
-.LP
+</literallayout>
+<!-- .CE -->
+<para>
+<!-- .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
+<!-- .CB -->
+</para>
+<literallayout class="monospaced">
/* ARGSUSED */
static void InputAction(w, event, params, num_params)
Widget w;
@@ -344,23 +330,26 @@ static XtActionsRec actions[] =
/* {name, procedure}, */
{"input", InputAction},
};
-.CE
-.LP
+</literallayout>
+<!-- .CE -->
+<para>
+<!-- .LP -->
and the default input binding will be to execute the input callbacks on
-.PN KeyPress
-and
-.PN ButtonPress :
-.LP
-.CB
+<function>KeyPress</function> and <function>ButtonPress : </function>
+</para>
+<literallayout class="monospaced">
static char translations[] =
-" <Key>: input(\|) \\n\\
- <BtnDown>: input(\|) \\
+" &lt;Key&gt;: input(\|) \\n\\
+ &lt;BtnDown&gt;: input(\|) \\
";
-.CE
-.LP
+</literallayout>
+<!-- .CE -->
+<para>
In the class record declaration and initialization, the only field that
is different from the Template is the expose procedure:
-.CB
+</para>
+<!-- .CB -->
+<literallayout class="monospaced">
/* ARGSUSED */
static void Redisplay(w, event, region)
Widget w;
@@ -375,52 +364,44 @@ WindowClassRec windowClassRec = {
...
/* expose */ Redisplay,
-.CE
-.LP
-.sp
-The \*QWindowWidget\*U will also declare three public procedures to return the
+</literallayout>
+<!-- .CE -->
+<para>
+<!-- .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
+<function>XtGetValues :</function>
+</para>
+<!-- .LP -->
+<!-- .CB -->
+<literallayout class="monospaced">
Pixel WindowColor1(w)
- Widget w;
+ Widget w;
{
- return ((WindowWidget)w)->window.color_1;
+ return ((WindowWidget)w)->window.color_1;
}
Pixel WindowColor2(w)
- Widget w;
+ Widget w;
{
- return ((WindowWidget)w)->window.color_2;
+ return ((WindowWidget)w)->window.color_2;
}
Font WindowFont(w)
- Widget w;
+ Widget w;
{
- return ((WindowWidget)w)->window.font->fid;
+ return ((WindowWidget)w)->window.font->fid;
}
-.CE
-.LP
-The \*QWindowWidget\*U is now complete. The application can retrieve the two
+</literallayout>
+
+<para>
+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
-\*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
+<function>XtGetValues ,</function>
+or the <function>WindowColor</function> functions. The actual window created for the
+"WindowWidget" is available by calling the
+<function>XtWindow</function> function.
+</para>
+</sect2>
diff --git a/libXaw/specs/Template_private_header_file.xml b/libXaw/specs/Template_private_header_file.xml
new file mode 100644
index 000000000..a26e92eef
--- /dev/null
+++ b/libXaw/specs/Template_private_header_file.xml
@@ -0,0 +1,87 @@
+<sect1 id="Private_Header_File">
+<title>Private Header File</title>
+<para>
+<!-- .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.
+<function>XtSetValues .</function>
+</para>
+<para>
+<!-- .LP -->
+The contents of the Template private header file,
+<function>&lt; X11/Xaw/TemplateP.h &gt;, </function>
+are:
+</para>
+<!-- .CB -->
+<!-- .\".so ../../lib/Xaw/TemplateP.h -->
+<literallayout class="monospaced">
+/* Copyright (c) X Consortium 1987, 1988
+ */
+
+#ifndef _TemplateP_h
+#define _TemplateP_h
+
+#include &lt;X11/Xaw/Template.h&gt;
+/* include superclass private header file */
+#include &lt;X11/CoreP.h&gt;
+
+/* define unique representation types not found in &lt;X11/StringDefs.h&gt; */
+
+#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 -->
+</literallayout>
+<para>
+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.
+</para>
+<para>
+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:
+</para>
+
+<literallayout class="monospaced">
+typedef struct {
+ /* resources */
+ Pixel color_1;
+ Pixel color_2;
+ XFontStruct* font;
+ XtCallbackList expose_callback;
+ XtCallbackList input_callback;
+ /* private state */
+ /* (none) */
+} WindowPart;
+</literallayout>
+
+</sect1>
diff --git a/libXaw/specs/Template_public_header_file.xml b/libXaw/specs/Template_public_header_file.xml
new file mode 100644
index 000000000..b17379677
--- /dev/null
+++ b/libXaw/specs/Template_public_header_file.xml
@@ -0,0 +1,112 @@
+<sect1 id="Public_Header_File">
+<title>Public Header File</title>
+<para>
+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
+<function>XtSetValues</function>
+operation, or to call a public routine implemented by the widget class.
+</para>
+<para>
+<!-- .LP -->
+The contents of the Template public header file,
+<function>&lt; X11/Xaw/Template.h &gt;, </function>
+are:
+</para>
+<literallayout class="monospaced">
+..
+<!-- .CB -->
+<!-- .\".so ../../lib/Xaw/Template.h -->
+/* 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 &lt;X11/StringDefs.h&gt; */
+
+#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 -->
+</literallayout>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+For the "WindowWidget", we want 2 drawing colors, a callback list for
+user input and an
+<function>exposeCallback</function> callback list, and we will declare three
+convenience procedures, so we need to add
+</para>
+<literallayout class="monospaced">
+<!-- .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 -->
+</literallayout>
+<para>
+<!-- .LP -->
+Note that we have chosen to call the input callback list by the generic
+name, <function>callback</function>, 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.
+</para>
+</sect1>
diff --git a/libXaw/specs/Template_widget_source_file.xml b/libXaw/specs/Template_widget_source_file.xml
new file mode 100644
index 000000000..62ad1b69c
--- /dev/null
+++ b/libXaw/specs/Template_widget_source_file.xml
@@ -0,0 +1,208 @@
+<sect1 id="Widget_Source_File">
+<title>Widget Source File</title>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+The contents of the Template implementation file,
+<function>&lt; X11/Xaw/Template.c &gt;,</function>
+are:
+</para>
+<!-- .CB -->
+<!-- .\".so ../../lib/Xaw/Template.c -->
+<literallayout class="monospaced">
+/* Copyright (c) X Consortium 1987, 1988
+ */
+
+#include &lt;X11/IntrinsicP.h&gt;
+#include &lt;X11/StringDefs.h&gt;
+#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[] =
+" &lt;Key&gt;: template(\|) \\n\\
+";
+
+TemplateClassRec templateClassRec = {
+ { /* core fields */
+ /* superclass */ (WidgetClass) &amp;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)&amp;templateClassRec;
+</literallayout>
+<!-- .CE -->
+<para>
+The resource list for the "WindowWidget" might look like the following:
+</para>
+<!-- .CB -->
+<literallayout class="monospaced">
+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
+};
+</literallayout>
+<!-- .CE -->
+<para>
+<!-- .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 -->
+</para>
+<literallayout class="monospaced">
+/* 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},
+};
+</literallayout>
+<!-- .CE -->
+<para>
+<!-- .LP -->
+and the default input binding will be to execute the input callbacks on
+<function>KeyPress</function> and <function>ButtonPress : </function>
+</para>
+<literallayout class="monospaced">
+static char translations[] =
+" &lt;Key&gt;: input(\|) \\n\\
+ &lt;BtnDown&gt;: input(\|) \\
+";
+</literallayout>
+<!-- .CE -->
+<para>
+In the class record declaration and initialization, the only field that
+is different from the Template is the expose procedure:
+</para>
+<!-- .CB -->
+<literallayout class="monospaced">
+/* ARGSUSED */
+static void Redisplay(w, event, region)
+ Widget w;
+ XEvent *event; /* unused */
+ Region region;
+{
+ XtCallCallbacks(w, XtNexposeCallback, (XtPointer)region);
+}
+
+WindowClassRec windowClassRec = {
+
+ ...
+
+ /* expose */ Redisplay,
+</literallayout>
+<!-- .CE -->
+<para>
+<!-- .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
+<function>XtGetValues :</function>
+</para>
+<!-- .LP -->
+<!-- .CB -->
+<literallayout class="monospaced">
+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;
+}
+</literallayout>
+
+<para>
+The "WindowWidget" is now complete. The application can retrieve the two
+drawing colors from the widget instance by calling either
+<function>XtGetValues ,</function>
+or the <function>WindowColor</function> functions. The actual window created for the
+"WindowWidget" is available by calling the
+<function>XtWindow</function> function.
+</para>
+</sect1>
diff --git a/libXaw/specs/Text.xml b/libXaw/specs/Text.xml
new file mode 100644
index 000000000..3daf7d3e4
--- /dev/null
+++ b/libXaw/specs/Text.xml
@@ -0,0 +1,326 @@
+<sect1 id="Text_Widget_">
+<title>Text Widget</title>
+
+<literallayout class="monospaced">
+Application Header file &lt;X11/Xaw/Text.h&gt;
+Class Header file &lt;X11/Xaw/TextP.h&gt;
+Class textWidgetClass
+Class Name Text
+Superclass Simple
+</literallayout>
+
+
+<para>
+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.
+</para>
+
+<para>
+This section lists the resources that are actually part of the
+Text widget, and explains the functionality provided by each.
+</para>
+<sect2 id="Resources_">
+<title>Resources</title>
+
+<para>
+When creating a Text widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>autoFill</entry>
+ <entry>AutoFill</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>bottomMargin</entry>
+ <entry>Margin</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>XC_xterm</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>displayCaret</entry>
+ <entry>Output</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>displayPosition</entry>
+ <entry>TextPosition</entry>
+ <entry>XawTextPosition</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>Font height + margins</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>insertPosition</entry>
+ <entry>TextPosition</entry>
+ <entry>int</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>leftMargin</entry>
+ <entry>Margin</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>resize</entry>
+ <entry>Resize</entry>
+ <entry>XawTextResizeMode</entry>
+ <entry></entry>
+ <entry>XawtextResizeNever</entry>
+ </row>
+ <row>
+ <entry>rightMargin</entry>
+ <entry>Margin</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Pointer</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>scrollHorizontal</entry>
+ <entry>Scroll</entry>
+ <entry>ScrollMode</entry>
+ <entry></entry>
+ <entry>XawtextScrollNever</entry>
+ </row>
+ <row>
+ <entry>scrollVertical</entry>
+ <entry>Scroll</entry>
+ <entry>XawTextScrollMode</entry>
+ <entry></entry>
+ <entry>XawtextScrollNever</entry>
+ </row>
+ <row>
+ <entry>selectTypes</entry>
+ <entry>SelectTypes</entry>
+ <entry>XawTextSelectType*</entry>
+ <entry></entry>
+ <entry>See above</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>textSink</entry>
+ <entry>TextSink</entry>
+ <entry>Widget</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>textSource</entry>
+ <entry>TextSource</entry>
+ <entry>Widget</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>topMargin</entry>
+ <entry>Margin</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See above</entry>
+ </row>
+ <row>
+ <entry>unrealizeCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>100</entry>
+ </row>
+ <row>
+ <entry>wrap</entry>
+ <entry>Wrap</entry>
+ <entry>WrapMode</entry>
+ <entry></entry>
+ <entry>XawtextWrapNever</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+</sect2>
+</sect1>
diff --git a/libXaw/specs/TextActions.xml b/libXaw/specs/TextActions.xml
new file mode 100644
index 000000000..0af3bec48
--- /dev/null
+++ b/libXaw/specs/TextActions.xml
@@ -0,0 +1,976 @@
+<sect2 id="Text_Widget_Actions">
+<title>Text Widget Actions</title>
+<para>
+<!-- .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 <function>translations</function> resource in the Text widget.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .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
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .LP -->
+Most of the actions take no arguments, and unless otherwise noted you
+may assume this to be the case.
+</para>
+<para>
+<!-- .LP -->
+</para>
+<sect3 id="Cursor_Movement_Actions_fP">
+<title>Cursor Movement Actions\fP</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ forward-character()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ backward-character()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ forward-word()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ backward-word()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ forward-paragraph()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ backward-paragraph()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ beginning-of-line()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ end-of-line()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ next-line()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ previous-line()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ next-page()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ previous-page()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ beginning-of-file()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ end-of-file()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ scroll-one-line-up()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ scroll-one-line-down()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="Delete_Actions">
+<title>Delete Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ delete-next-character()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ delete-previous-character()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ delete-next-word()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ delete-previous-word()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ delete-selection()
+ </term>
+ <listitem>
+ <para>
+This action removes all characters in the current selection.
+The selection can be set with the selection actions.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="Selection_Actions">
+<title>Selection Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ select-word()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ select-all()
+ </term>
+ <listitem>
+ <para>
+This action selects the entire text buffer.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ select-start()
+ </term>
+ <listitem>
+ <para>
+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). <!-- xref -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ select-adjust()
+ </term>
+ <listitem>
+ <para>
+This action allows a selection started with the <emphasis remap='I'>select-start</emphasis>
+action to be modified, as described above.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ select-end(<emphasis remap='I'>name</emphasis>[,<emphasis remap='I'>name</emphasis>,...])
+ </term>
+ <listitem>
+ <para>
+This action ends a text selection that began with the <emphasis remap='I'>select-start</emphasis>
+action, and asserts ownership of the selection or selections specified.
+A <emphasis remap='I'>name</emphasis> can be a selection (e.g., <function>PRIMARY</function>) or a cut buffer
+(e.g., <function>CUT_BUFFER0</function>). Note that case is important. If no
+<emphasis remap='I'>names</emphasis> are specified, <function>PRIMARY</function> is asserted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ extend-start()
+ </term>
+ <listitem>
+ <para>
+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).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ extend-adjust()
+ </term>
+ <listitem>
+ <para>
+This action allows a selection started with an <emphasis remap='I'>extend-start</emphasis> action
+to be modified.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ extend-end(<emphasis remap='I'>name</emphasis>[,<emphasis remap='I'>name</emphasis>,...])
+ </term>
+ <listitem>
+ <para>
+This action ends a text selection that began with the <emphasis remap='I'>extend-start</emphasis>
+action, and asserts ownership of the selection or selections specified.
+A <emphasis remap='I'>name</emphasis> can be a selection (e.g. <function>PRIMARY</function>) or a cut buffer
+(e.g <function>CUT_BUFFER0</function>). Note that case is important. If no names are
+given, <function>PRIMARY</function> is asserted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ insert-selection(<emphasis remap='I'>name</emphasis>[,<emphasis remap='I'>name</emphasis>,...])
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>name</emphasis> can be a
+selection (e.g. <function>PRIMARY</function>) or a cut buffer (e.g <function>CUT_BUFFER0</function>).
+Note that case is important.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="The_New_Line_Actions">
+<title>The New Line Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ newline-and-indent()
+ </term>
+ <listitem>
+ <para>
+This action inserts a newline into the text and adds spaces to
+that line to indent it to match the previous line.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ newline-and-backup()
+ </term>
+ <listitem>
+ <para>
+This action inserts a newline into the text <emphasis remap='I'>after</emphasis> the insert point.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ newline()
+ </term>
+ <listitem>
+ <para>
+This action inserts a newline into the text <emphasis remap='I'>before</emphasis> the insert point.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="Kill_and_Actions">
+<title>Kill and Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ kill-word()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ backward-kill-word()
+ </term>
+ <listitem>
+ <para>
+These actions act exactly like the <emphasis remap='I'>delete-next-word</emphasis> and
+<emphasis remap='I'>delete-previous-word</emphasis> actions, but they stuff the word that was
+killed into the kill buffer (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ kill-selection()
+ </term>
+ <listitem>
+ <para>
+This action deletes the current selection and stuffs the deleted text into
+the kill buffer (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ kill-to-end-of-line()
+ </term>
+ <listitem>
+ <para>
+This action deletes the entire line to the right of the insert point position,
+and stuffs the deleted text into the kill buffer (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ kill-paragraph()
+ </term>
+ <listitem>
+ <para>
+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 (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ kill-to-end-of-paragraph()
+ </term>
+ <listitem>
+ <para>
+This action deletes everything between the current insert point location and
+the next paragraph boundary, and stuffs the deleted text into the kill
+buffer (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="Miscellaneous_Actions">
+<title>Miscellaneous Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+<variablelist>
+ <varlistentry>
+ <term>
+ redraw-display()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ insert-file([<emphasis remap='I'>filename</emphasis>])
+ </term>
+ <listitem>
+ <para>
+This action activates the insert file popup. The <emphasis remap='I'>filename</emphasis>
+option specifies the default filename to put in the filename buffer of
+the popup. If no <emphasis remap='I'>filename</emphasis> is specified the buffer is empty
+at startup.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ insert-char()
+ </term>
+ <listitem>
+ <para>
+This action may only be attached to a key event. When the
+<function>international</function> resource is <function>false</function>, 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 <function>international</function> resource is <function>true</function>,
+characters are passed to the input method via XwcLookupString, and any
+committed string returned is inserted into the text at the insert point.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ insert-string(<emphasis remap='I'>string</emphasis>[,<emphasis remap='I'>string</emphasis>,...])
+ </term>
+ <listitem>
+ <para>
+This action inserts each <emphasis remap='I'>string</emphasis> into the text
+at the insert point location. Any <emphasis remap='I'>string</emphasis>
+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<function>international</function> resource is
+<function>true</function>, 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ display-caret(<emphasis remap='I'>state</emphasis>,<emphasis remap='I'>when</emphasis>)
+ </term>
+ <listitem>
+ <para>
+This action allows the insert point to be turned on and off.
+The <emphasis remap='I'>state</emphasis> argument specifies the desired state of the insert point.
+This value may be any of the string
+values accepted for Boolean resources (e.g. <function>on</function>, <function>True</function>,
+<function>off</function>, <function>False</function>, etc.). If no arguments are specified, the
+default value is <function>True</function>.
+The <emphasis remap='I'>when</emphasis> argument specifies, for <function>EnterNotify</function> or <function>LeaveNotify</function>
+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 <function>always</function> then if the action is bound to an <function>EnterNotify</function>
+or <function>LeaveNotify</function> event, the action will be taken only if the focus
+field is <function>True</function>. An augmented binding that might be useful is:
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i 2.5i 4.0i -->
+<!-- .ta 2.0i 2.5i 4.0i -->
+ *Text.Translations: #override \\
+ &lt;FocusIn&gt;: display-caret(on) \\n\\
+ &lt;FocusOut&gt;: display-caret(off)
+</literallayout>
+<variablelist>
+ <varlistentry>
+ <term>
+ focus-in()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ focus-out()
+ </term>
+ <listitem>
+ <para>
+These actions do not currently do anything.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ search(<emphasis remap='I'>direction</emphasis>,[<emphasis remap='I'>string</emphasis>])
+ </term>
+ <listitem>
+ <para>
+This action activates the search popup. The <emphasis remap='I'>direction</emphasis> must be
+specified as either <function>forward</function> or <function>backward</function>. The string is
+optional and is used as an initial value for the <emphasis remap='I'>Search for</emphasis>: string.
+For further explanation of the search widget see the section on
+<function>Text Searches</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ multiply(<emphasis remap='I'>value</emphasis>)
+ </term>
+ <listitem>
+ <para>
+The multiply action allows the user to multiply the effects of many of
+the text actions. Thus the following action sequence
+<emphasis remap='I'>multiply(10) delete-next-word()</emphasis> 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 <emphasis remap='I'>multiply(25)</emphasis>. If the string
+<function>reset</function> is passed to the multiply action the effects of all previous
+multiplies are removed and a beep is sent to the display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ form-paragraph()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ transpose-characters()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ no-op([<emphasis remap='I'>action</emphasis>])
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>RingBell</emphasis> then a beep is sent to the display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ XawWMProtocols([<emphasis remap='I'>wm_protocol_name</emphasis>])
+ </term>
+ <listitem>
+ <para>
+<!-- .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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ reconnect-im()
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "Input Method" -->
+When the <function>international</function> resource is <function>true</function>,
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect3>
+<sect3 id="Text_Selections_for_Application_Programmers">
+<title>Text Selections for Application Programmers</title>
+<!-- .IN "Text widget" "Text Selections for Application Programmers" -->
+<para>
+<!-- .LP -->
+The default behavior of the text selection array is described in the
+section called <function>Text Selections for Users</function>. To modify the selections
+a programmer must construct a <function>XawTextSelectType</function> array (called the
+selection array), containing the selections desired, and pass this as
+the new value for the <function>selectionTypes</function> resource. The selection
+array may also be modified using the <function>XawTextSetSelectionArray</function>
+<!-- .IN "XawTextSetSelectionArray" "" -->
+function. All selection arrays must end with the value
+<function>XawselectNull</function>. The <function>selectionTypes</function> resource has no converter
+registered and cannot be modified through the resource manager.
+</para>
+<para>
+<!-- .LP -->
+The array contains a list of entries that will be called when the user
+attempts to select text in rapid succession with the <emphasis remap='I'>select-start</emphasis>
+action (usually by clicking a pointer button). The first entry in the
+selection array will be used when the <emphasis remap='I'>select-start</emphasis> action is
+initially called. The next entry will be used when <emphasis remap='I'>select-start</emphasis>
+is called again, and so on. If a timeout value (1/10 of a second) is
+exceeded, the the next <emphasis remap='I'>select-start</emphasis> action will begin at the top
+of the selection array. When <function>XawselectNull</function> is reached the array
+is recycled beginning with the first element.
+
+<informaltable>
+ <tgroup cols='2' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <tbody>
+ <row>
+ <entry><function>XawselectAll</function></entry>
+ <entry>Selects the contents of the entire buffer.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectChar</function></entry>
+ <entry>Selects text characters as the pointer moves over them.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectLine</function></entry>
+ <entry>Selects the entire line.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectNull</function></entry>
+ <entry>Indicates the end of the selection array.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectParagraph</function></entry>
+ <entry>Selects the entire paragraph.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectPosition</function></entry>
+ <entry>Selects the current pointer position.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectWord</function></entry>
+ <entry>Selects whole words as the pointer moves onto them.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<para>
+<!-- .LP -->
+The default selectType array is:
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+{XawselectPosition, XawselectWord, XawselectLine, XawselectParagraph, XawselectAll, XawselectNull}
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .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.
+</para>
+</sect3>
+</sect2>
+<sect2 id="Default_Translation_Bindings">
+<title>Default Translation Bindings</title>
+<para>
+<!-- .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 <function>translations</function> resource.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.5i -->
+<!-- .ta .5i 2.5i -->
+ Ctrl&lt;Key&gt;A: beginning-of-line() \\n\\
+ Ctrl&lt;Key&gt;B: backward-character() \\n\\
+ Ctrl&lt;Key&gt;D: delete-next-character() \\n\\
+ Ctrl&lt;Key&gt;E: end-of-line() \\n\\
+ Ctrl&lt;Key&gt;F: forward-character() \\n\\
+ Ctrl&lt;Key&gt;G: multiply(Reset) \\n\\
+ Ctrl&lt;Key&gt;H: delete-previous-character() \\n\\
+ Ctrl&lt;Key&gt;J: newline-and-indent() \\n\\
+ Ctrl&lt;Key&gt;K: kill-to-end-of-line() \\n\\
+ Ctrl&lt;Key&gt;L: redraw-display() \\n\\
+ Ctrl&lt;Key&gt;M: newline() \\n\\
+ Ctrl&lt;Key&gt;N: next-line() \\n\\
+ Ctrl&lt;Key&gt;O: newline-and-backup() \\n\\
+ Ctrl&lt;Key&gt;P: previous-line() \\n\\
+ Ctrl&lt;Key&gt;R: search(backward) \\n\\
+ Ctrl&lt;Key&gt;S: search(forward) \\n\\
+ Ctrl&lt;Key&gt;T: transpose-characters() \\n\\
+ Ctrl&lt;Key&gt;U: multiply(4) \\n\\
+ Ctrl&lt;Key&gt;V: next-page() \\n\\
+ Ctrl&lt;Key&gt;W: kill-selection() \\n\\
+ Ctrl&lt;Key&gt;Y: insert-selection(CUT_BUFFER1) \\n\\
+ Ctrl&lt;Key&gt;Z: scroll-one-line-up() \\n\\
+ Ctrl&lt;Key&gt;\\: reconnect-im() \\n\\
+ Meta&lt;Key&gt;B: backward-word() \\n\\
+ Meta&lt;Key&gt;F: forward-word() \\n\\
+ Meta&lt;Key&gt;I: insert-file() \\n\\
+ Meta&lt;Key&gt;K: kill-to-end-of-paragraph() \\n\\
+ Meta&lt;Key&gt;Q: form-paragraph() \\n\\
+ Meta&lt;Key&gt;V: previous-page() \\n\\
+ Meta&lt;Key&gt;Y: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
+ Meta&lt;Key&gt;Z: scroll-one-line-down() \\n\\
+ :Meta&lt;Key&gt;d: delete-next-word() \\n\\
+ :Meta&lt;Key&gt;D: kill-word() \\n\\
+ :Meta&lt;Key&gt;h: delete-previous-word() \\n\\
+ :Meta&lt;Key&gt;H: backward-kill-word() \\n\\
+ :Meta&lt;Key&gt;\\&lt;: beginning-of-file() \\n\\
+ :Meta&lt;Key&gt;\\&gt;: end-of-file() \\n\\
+ :Meta&lt;Key&gt;]: forward-paragraph() \\n\\
+ :Meta&lt;Key&gt;[: backward-paragraph() \\n\\
+ ~Shift Meta&lt;Key&gt;Delete: delete-previous-word() \\n\\
+ \ Shift Meta&lt;Key&gt;Delete: backward-kill-word() \\n\\
+ ~Shift Meta&lt;Key&gt;Backspace: delete-previous-word() \\n\\
+ \ Shift Meta&lt;Key&gt;Backspace: backward-kill-word() \\n\\
+ &lt;Key&gt;Right: forward-character() \\n\\
+ &lt;Key&gt;Left: backward-character() \\n\\
+ &lt;Key&gt;Down: next-line() \\n\\
+ &lt;Key&gt;Up: previous-line() \\n\\
+ &lt;Key&gt;Delete: delete-previous-character() \\n\\
+ &lt;Key&gt;BackSpace: delete-previous-character() \\n\\
+ &lt;Key&gt;Linefeed: newline-and-indent() \\n\\
+ &lt;Key&gt;Return: newline() \\n\\
+ &lt;Key&gt;: insert-char() \\n\\
+ &lt;Key&gt;Kanji: reconnect-im() \\n\\
+ &lt;FocusIn&gt;: focus-in() \\n\\
+ &lt;FocusOut&gt;: focus-out() \\n\\
+ &lt;Btn1Down&gt;: select-start() \\n\\
+ &lt;Btn1Motion&gt;: extend-adjust() \\n\\
+ &lt;Btn1Up&gt;: extend-end(PRIMARY, CUT_BUFFER0) \\n\\
+ &lt;Btn2Down&gt;: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
+ &lt;Btn3Down&gt;: extend-start() \\n\\
+ &lt;Btn3Motion&gt;: extend-adjust() \\n\\
+ &lt;Btn3Up&gt;: extend-end(PRIMARY, CUT_BUFFER0) \\n
+</literallayout>
+
+
+</para>
+</sect2>
diff --git a/libXaw/specs/TextActions_default_translation_bindings.xml b/libXaw/specs/TextActions_default_translation_bindings.xml
new file mode 100644
index 000000000..731881104
--- /dev/null
+++ b/libXaw/specs/TextActions_default_translation_bindings.xml
@@ -0,0 +1,85 @@
+<sect1 id="Default_Translation_Bindings">
+<title>Default Translation Bindings</title>
+<para>
+<!-- .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 <function>translations</function> resource.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .TA .5i 2.5i -->
+<!-- .ta .5i 2.5i -->
+ Ctrl&lt;Key&gt;A: beginning-of-line() \\n\\
+ Ctrl&lt;Key&gt;B: backward-character() \\n\\
+ Ctrl&lt;Key&gt;D: delete-next-character() \\n\\
+ Ctrl&lt;Key&gt;E: end-of-line() \\n\\
+ Ctrl&lt;Key&gt;F: forward-character() \\n\\
+ Ctrl&lt;Key&gt;G: multiply(Reset) \\n\\
+ Ctrl&lt;Key&gt;H: delete-previous-character() \\n\\
+ Ctrl&lt;Key&gt;J: newline-and-indent() \\n\\
+ Ctrl&lt;Key&gt;K: kill-to-end-of-line() \\n\\
+ Ctrl&lt;Key&gt;L: redraw-display() \\n\\
+ Ctrl&lt;Key&gt;M: newline() \\n\\
+ Ctrl&lt;Key&gt;N: next-line() \\n\\
+ Ctrl&lt;Key&gt;O: newline-and-backup() \\n\\
+ Ctrl&lt;Key&gt;P: previous-line() \\n\\
+ Ctrl&lt;Key&gt;R: search(backward) \\n\\
+ Ctrl&lt;Key&gt;S: search(forward) \\n\\
+ Ctrl&lt;Key&gt;T: transpose-characters() \\n\\
+ Ctrl&lt;Key&gt;U: multiply(4) \\n\\
+ Ctrl&lt;Key&gt;V: next-page() \\n\\
+ Ctrl&lt;Key&gt;W: kill-selection() \\n\\
+ Ctrl&lt;Key&gt;Y: insert-selection(CUT_BUFFER1) \\n\\
+ Ctrl&lt;Key&gt;Z: scroll-one-line-up() \\n\\
+ Ctrl&lt;Key&gt;\\: reconnect-im() \\n\\
+ Meta&lt;Key&gt;B: backward-word() \\n\\
+ Meta&lt;Key&gt;F: forward-word() \\n\\
+ Meta&lt;Key&gt;I: insert-file() \\n\\
+ Meta&lt;Key&gt;K: kill-to-end-of-paragraph() \\n\\
+ Meta&lt;Key&gt;Q: form-paragraph() \\n\\
+ Meta&lt;Key&gt;V: previous-page() \\n\\
+ Meta&lt;Key&gt;Y: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
+ Meta&lt;Key&gt;Z: scroll-one-line-down() \\n\\
+ :Meta&lt;Key&gt;d: delete-next-word() \\n\\
+ :Meta&lt;Key&gt;D: kill-word() \\n\\
+ :Meta&lt;Key&gt;h: delete-previous-word() \\n\\
+ :Meta&lt;Key&gt;H: backward-kill-word() \\n\\
+ :Meta&lt;Key&gt;\\&lt;: beginning-of-file() \\n\\
+ :Meta&lt;Key&gt;\\&gt;: end-of-file() \\n\\
+ :Meta&lt;Key&gt;]: forward-paragraph() \\n\\
+ :Meta&lt;Key&gt;[: backward-paragraph() \\n\\
+ ~Shift Meta&lt;Key&gt;Delete: delete-previous-word() \\n\\
+ \ Shift Meta&lt;Key&gt;Delete: backward-kill-word() \\n\\
+ ~Shift Meta&lt;Key&gt;Backspace: delete-previous-word() \\n\\
+ \ Shift Meta&lt;Key&gt;Backspace: backward-kill-word() \\n\\
+ &lt;Key&gt;Right: forward-character() \\n\\
+ &lt;Key&gt;Left: backward-character() \\n\\
+ &lt;Key&gt;Down: next-line() \\n\\
+ &lt;Key&gt;Up: previous-line() \\n\\
+ &lt;Key&gt;Delete: delete-previous-character() \\n\\
+ &lt;Key&gt;BackSpace: delete-previous-character() \\n\\
+ &lt;Key&gt;Linefeed: newline-and-indent() \\n\\
+ &lt;Key&gt;Return: newline() \\n\\
+ &lt;Key&gt;: insert-char() \\n\\
+ &lt;Key&gt;Kanji: reconnect-im() \\n\\
+ &lt;FocusIn&gt;: focus-in() \\n\\
+ &lt;FocusOut&gt;: focus-out() \\n\\
+ &lt;Btn1Down&gt;: select-start() \\n\\
+ &lt;Btn1Motion&gt;: extend-adjust() \\n\\
+ &lt;Btn1Up&gt;: extend-end(PRIMARY, CUT_BUFFER0) \\n\\
+ &lt;Btn2Down&gt;: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
+ &lt;Btn3Down&gt;: extend-start() \\n\\
+ &lt;Btn3Motion&gt;: extend-adjust() \\n\\
+ &lt;Btn3Up&gt;: extend-end(PRIMARY, CUT_BUFFER0) \\n
+</literallayout>
+
+
+</para>
+</sect1>
diff --git a/libXaw/specs/TextActions_text_widget_actions.xml b/libXaw/specs/TextActions_text_widget_actions.xml
new file mode 100644
index 000000000..238727698
--- /dev/null
+++ b/libXaw/specs/TextActions_text_widget_actions.xml
@@ -0,0 +1,891 @@
+<sect1 id="Text_Widget_Actions">
+<title>Text Widget Actions</title>
+<para>
+<!-- .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 <function>translations</function> resource in the Text widget.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+<!-- .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
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .LP -->
+Most of the actions take no arguments, and unless otherwise noted you
+may assume this to be the case.
+</para>
+<para>
+<!-- .LP -->
+</para>
+<sect2 id="Cursor_Movement_Actions_fP">
+<title>Cursor Movement Actions\fP</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ forward-character()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ backward-character()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ forward-word()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ backward-word()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ forward-paragraph()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ backward-paragraph()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ beginning-of-line()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ end-of-line()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ next-line()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ previous-line()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ next-page()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ previous-page()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ beginning-of-file()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ end-of-file()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ scroll-one-line-up()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ scroll-one-line-down()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Delete_Actions">
+<title>Delete Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ delete-next-character()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ delete-previous-character()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ delete-next-word()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ delete-previous-word()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ delete-selection()
+ </term>
+ <listitem>
+ <para>
+This action removes all characters in the current selection.
+The selection can be set with the selection actions.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Selection_Actions">
+<title>Selection Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ select-word()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ select-all()
+ </term>
+ <listitem>
+ <para>
+This action selects the entire text buffer.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ select-start()
+ </term>
+ <listitem>
+ <para>
+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). <!-- xref -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ select-adjust()
+ </term>
+ <listitem>
+ <para>
+This action allows a selection started with the <emphasis remap='I'>select-start</emphasis>
+action to be modified, as described above.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ select-end(<emphasis remap='I'>name</emphasis>[,<emphasis remap='I'>name</emphasis>,...])
+ </term>
+ <listitem>
+ <para>
+This action ends a text selection that began with the <emphasis remap='I'>select-start</emphasis>
+action, and asserts ownership of the selection or selections specified.
+A <emphasis remap='I'>name</emphasis> can be a selection (e.g., <function>PRIMARY</function>) or a cut buffer
+(e.g., <function>CUT_BUFFER0</function>). Note that case is important. If no
+<emphasis remap='I'>names</emphasis> are specified, <function>PRIMARY</function> is asserted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ extend-start()
+ </term>
+ <listitem>
+ <para>
+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).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ extend-adjust()
+ </term>
+ <listitem>
+ <para>
+This action allows a selection started with an <emphasis remap='I'>extend-start</emphasis> action
+to be modified.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ extend-end(<emphasis remap='I'>name</emphasis>[,<emphasis remap='I'>name</emphasis>,...])
+ </term>
+ <listitem>
+ <para>
+This action ends a text selection that began with the <emphasis remap='I'>extend-start</emphasis>
+action, and asserts ownership of the selection or selections specified.
+A <emphasis remap='I'>name</emphasis> can be a selection (e.g. <function>PRIMARY</function>) or a cut buffer
+(e.g <function>CUT_BUFFER0</function>). Note that case is important. If no names are
+given, <function>PRIMARY</function> is asserted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ insert-selection(<emphasis remap='I'>name</emphasis>[,<emphasis remap='I'>name</emphasis>,...])
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>name</emphasis> can be a
+selection (e.g. <function>PRIMARY</function>) or a cut buffer (e.g <function>CUT_BUFFER0</function>).
+Note that case is important.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="The_New_Line_Actions">
+<title>The New Line Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ newline-and-indent()
+ </term>
+ <listitem>
+ <para>
+This action inserts a newline into the text and adds spaces to
+that line to indent it to match the previous line.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ newline-and-backup()
+ </term>
+ <listitem>
+ <para>
+This action inserts a newline into the text <emphasis remap='I'>after</emphasis> the insert point.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ newline()
+ </term>
+ <listitem>
+ <para>
+This action inserts a newline into the text <emphasis remap='I'>before</emphasis> the insert point.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Kill_and_Actions">
+<title>Kill and Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<variablelist>
+ <varlistentry>
+ <term>
+ kill-word()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ backward-kill-word()
+ </term>
+ <listitem>
+ <para>
+These actions act exactly like the <emphasis remap='I'>delete-next-word</emphasis> and
+<emphasis remap='I'>delete-previous-word</emphasis> actions, but they stuff the word that was
+killed into the kill buffer (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ kill-selection()
+ </term>
+ <listitem>
+ <para>
+This action deletes the current selection and stuffs the deleted text into
+the kill buffer (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ kill-to-end-of-line()
+ </term>
+ <listitem>
+ <para>
+This action deletes the entire line to the right of the insert point position,
+and stuffs the deleted text into the kill buffer (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ kill-paragraph()
+ </term>
+ <listitem>
+ <para>
+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 (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ kill-to-end-of-paragraph()
+ </term>
+ <listitem>
+ <para>
+This action deletes everything between the current insert point location and
+the next paragraph boundary, and stuffs the deleted text into the kill
+buffer (<function>CUT_BUFFER_1</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Miscellaneous_Actions">
+<title>Miscellaneous Actions</title>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+<variablelist>
+ <varlistentry>
+ <term>
+ redraw-display()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ insert-file([<emphasis remap='I'>filename</emphasis>])
+ </term>
+ <listitem>
+ <para>
+This action activates the insert file popup. The <emphasis remap='I'>filename</emphasis>
+option specifies the default filename to put in the filename buffer of
+the popup. If no <emphasis remap='I'>filename</emphasis> is specified the buffer is empty
+at startup.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ insert-char()
+ </term>
+ <listitem>
+ <para>
+This action may only be attached to a key event. When the
+<function>international</function> resource is <function>false</function>, 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 <function>international</function> resource is <function>true</function>,
+characters are passed to the input method via XwcLookupString, and any
+committed string returned is inserted into the text at the insert point.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ insert-string(<emphasis remap='I'>string</emphasis>[,<emphasis remap='I'>string</emphasis>,...])
+ </term>
+ <listitem>
+ <para>
+This action inserts each <emphasis remap='I'>string</emphasis> into the text
+at the insert point location. Any <emphasis remap='I'>string</emphasis>
+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<function>international</function> resource is
+<function>true</function>, 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ display-caret(<emphasis remap='I'>state</emphasis>,<emphasis remap='I'>when</emphasis>)
+ </term>
+ <listitem>
+ <para>
+This action allows the insert point to be turned on and off.
+The <emphasis remap='I'>state</emphasis> argument specifies the desired state of the insert point.
+This value may be any of the string
+values accepted for Boolean resources (e.g. <function>on</function>, <function>True</function>,
+<function>off</function>, <function>False</function>, etc.). If no arguments are specified, the
+default value is <function>True</function>.
+The <emphasis remap='I'>when</emphasis> argument specifies, for <function>EnterNotify</function> or <function>LeaveNotify</function>
+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 <function>always</function> then if the action is bound to an <function>EnterNotify</function>
+or <function>LeaveNotify</function> event, the action will be taken only if the focus
+field is <function>True</function>. An augmented binding that might be useful is:
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i 2.5i 4.0i -->
+<!-- .ta 2.0i 2.5i 4.0i -->
+ *Text.Translations: #override \\
+ &lt;FocusIn&gt;: display-caret(on) \\n\\
+ &lt;FocusOut&gt;: display-caret(off)
+</literallayout>
+<variablelist>
+ <varlistentry>
+ <term>
+ focus-in()
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ focus-out()
+ </term>
+ <listitem>
+ <para>
+These actions do not currently do anything.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ search(<emphasis remap='I'>direction</emphasis>,[<emphasis remap='I'>string</emphasis>])
+ </term>
+ <listitem>
+ <para>
+This action activates the search popup. The <emphasis remap='I'>direction</emphasis> must be
+specified as either <function>forward</function> or <function>backward</function>. The string is
+optional and is used as an initial value for the <emphasis remap='I'>Search for</emphasis>: string.
+For further explanation of the search widget see the section on
+<function>Text Searches</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ multiply(<emphasis remap='I'>value</emphasis>)
+ </term>
+ <listitem>
+ <para>
+The multiply action allows the user to multiply the effects of many of
+the text actions. Thus the following action sequence
+<emphasis remap='I'>multiply(10) delete-next-word()</emphasis> 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 <emphasis remap='I'>multiply(25)</emphasis>. If the string
+<function>reset</function> is passed to the multiply action the effects of all previous
+multiplies are removed and a beep is sent to the display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ form-paragraph()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ transpose-characters()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ no-op([<emphasis remap='I'>action</emphasis>])
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>RingBell</emphasis> then a beep is sent to the display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ XawWMProtocols([<emphasis remap='I'>wm_protocol_name</emphasis>])
+ </term>
+ <listitem>
+ <para>
+<!-- .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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ reconnect-im()
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "Input Method" -->
+When the <function>international</function> resource is <function>true</function>,
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Text_Selections_for_Application_Programmers">
+<title>Text Selections for Application Programmers</title>
+<!-- .IN "Text widget" "Text Selections for Application Programmers" -->
+<para>
+<!-- .LP -->
+The default behavior of the text selection array is described in the
+section called <function>Text Selections for Users</function>. To modify the selections
+a programmer must construct a <function>XawTextSelectType</function> array (called the
+selection array), containing the selections desired, and pass this as
+the new value for the <function>selectionTypes</function> resource. The selection
+array may also be modified using the <function>XawTextSetSelectionArray</function>
+<!-- .IN "XawTextSetSelectionArray" "" -->
+function. All selection arrays must end with the value
+<function>XawselectNull</function>. The <function>selectionTypes</function> resource has no converter
+registered and cannot be modified through the resource manager.
+</para>
+<para>
+<!-- .LP -->
+The array contains a list of entries that will be called when the user
+attempts to select text in rapid succession with the <emphasis remap='I'>select-start</emphasis>
+action (usually by clicking a pointer button). The first entry in the
+selection array will be used when the <emphasis remap='I'>select-start</emphasis> action is
+initially called. The next entry will be used when <emphasis remap='I'>select-start</emphasis>
+is called again, and so on. If a timeout value (1/10 of a second) is
+exceeded, the the next <emphasis remap='I'>select-start</emphasis> action will begin at the top
+of the selection array. When <function>XawselectNull</function> is reached the array
+is recycled beginning with the first element.
+
+<informaltable>
+ <tgroup cols='2' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <tbody>
+ <row>
+ <entry><function>XawselectAll</function></entry>
+ <entry>Selects the contents of the entire buffer.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectChar</function></entry>
+ <entry>Selects text characters as the pointer moves over them.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectLine</function></entry>
+ <entry>Selects the entire line.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectNull</function></entry>
+ <entry>Indicates the end of the selection array.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectParagraph</function></entry>
+ <entry>Selects the entire paragraph.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectPosition</function></entry>
+ <entry>Selects the current pointer position.</entry>
+ </row>
+ <row>
+ <entry><function>XawselectWord</function></entry>
+ <entry>Selects whole words as the pointer moves onto them.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<para>
+<!-- .LP -->
+The default selectType array is:
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<literallayout class="monospaced">
+{XawselectPosition, XawselectWord, XawselectLine, XawselectParagraph, XawselectAll, XawselectNull}
+</literallayout>
+<!-- .sp -->
+</para>
+<para>
+<!-- .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.
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/spec/TextCustom b/libXaw/specs/TextCustom.xml
index fbb656970..7ca2d5f78 100644
--- a/libXaw/spec/TextCustom
+++ b/libXaw/specs/TextCustom.xml
@@ -1,63 +1,123 @@
-.NH 2
-Customizing the Text Widget
-.LP
-.XS
- Customizing the Text Widget
-.XE
-.IN "Text widget" "customizing" "@DEF@"
-.LP
+<sect1 id="Customizing_the_Text_Widget">
+<title>Customizing the Text Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Customizing the Text Widget -->
+<!-- .XE -->
+<!-- .IN "Text widget" "customizing" "@DEF@" -->
+</para>
+<para>
+<!-- .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
+</para>
+<para>
+<!-- .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
+</para>
+<para>
+<!-- .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
+<!-- .IN "Text widget" "" -->
+</para>
+<para>
+<variablelist>
+ <varlistentry>
+ <term><function>Text</function></term>
+ <listitem>
+ <para>
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
+ </para>
+ </listitem>
+ </varlistentry>
+<!-- .IN "TextSink object" "" -->
+ <varlistentry>
+ <term><function>TextSink</function></term>
+ <listitem>
+ <para>
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
+ </para>
+ </listitem>
+ </varlistentry>
+<!-- .IN "TextSrc object" "" -->
+ <varlistentry>
+ <term><function>TextSrc</function></term>
+ <listitem>
+ <para>
This object is responsible for reading, editing and searching through the
text buffer.
-.IN "AsciiSink object" ""
-.IP \fBAsciiSink\fP 15
+ </para>
+ </listitem>
+ </varlistentry>
+<!-- .IN "AsciiSink object" "" -->
+ <varlistentry>
+ <term><function>AsciiSink</function></term>
+ <listitem>
+ <para>
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
+ </para>
+ </listitem>
+ </varlistentry>
+<!-- .IN "MultiSink object" "" -->
+ <varlistentry>
+ <term><function>MultiSink</function></term>
+ <listitem>
+ <para>
This object is a subclass of the TextSink and knows how to display
font sets.
-.IN "AsciiSrc object" ""
-.IP \fBAsciiSrc\fP 15
+ </para>
+ </listitem>
+ </varlistentry>
+<!-- .IN "AsciiSrc object" "" -->
+ <varlistentry>
+ <term><function>AsciiSrc</function></term>
+ <listitem>
+ <para>
This object is a subclass of the TextSrc and knows how to read strings
and files.
-.IN "MultiSrc object" ""
-.IP \fBMultiSrc\fP 15
+ </para>
+ </listitem>
+ </varlistentry>
+<!-- .IN "MultiSrc object" "" -->
+ <varlistentry>
+ <term><function>MultiSrc</function></term>
+ <listitem>
+ <para>
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
+ </para>
+ </listitem>
+ </varlistentry>
+<!-- .IN "AsciiText widget" "" -->
+ <varlistentry>
+ <term><function>AsciiText</function></term>
+ <listitem>
+ <para>
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.
-
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect1>
diff --git a/libXaw/specs/TextFuncs.xml b/libXaw/specs/TextFuncs.xml
new file mode 100644
index 000000000..0d2ae8192
--- /dev/null
+++ b/libXaw/specs/TextFuncs.xml
@@ -0,0 +1,856 @@
+<sect1 id="Text_Functions">
+<title>Text Functions</title>
+<!-- .XS -->
+<!-- Text Functions -->
+<!-- .XE -->
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+These data structures are defined in the Text widget's public header file,
+&lt;X11/Xaw/Text.h&gt;.
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "XawTextPosition" "" "@DEF@" -->
+typedef long XawTextPosition;
+<!-- .sp -->
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "XawTextBlock" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA .5i 1.5i 2.25i -->
+<!-- .ta .5i 1.5i 2.25i -->
+typedef struct {
+ int <emphasis remap='I'>firstPos</emphasis>;
+ int <emphasis remap='I'>length</emphasis>;
+ char *<emphasis remap='I'>ptr</emphasis>;
+ unsigned long <emphasis remap='I'>format</emphasis>;
+} XawTextBlock, *XawTextBlockPtr;
+</literallayout>
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "XawTextBlockPtr" "" -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>firstPos</emphasis>
+ </term>
+ <listitem>
+ <para>
+The first position, or index, to use within the <emphasis remap='I'>ptr</emphasis> field.
+The value is commonly zero.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>length</emphasis>
+ </term>
+ <listitem>
+ <para>
+The number of characters to be used from the <emphasis remap='I'>ptr</emphasis> field.
+The number of characters used is commonly the number of characters
+in <emphasis remap='I'>ptr</emphasis>, and must not be greater than the length of the string
+in <emphasis remap='I'>ptr</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>ptr</emphasis>
+ </term>
+ <listitem>
+ <para>
+Contains the string to be referenced by the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>format</emphasis>
+ </term>
+ <listitem>
+ <para>
+This flag indicates whether the data pointed to by <function>ptr</function> is char
+or wchar_t. When the associated widget has <function>international</function> set
+to <function>false</function> this field must be XawFmt8Bit. When the associated
+widget has <function>international</function> set to <function>true</function> this field must be
+either XawFmt8Bit or XawFmtWide.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<note>
+<para>
+<!-- .LP -->
+Note: Previous versions of Xaw used
+<function>FMT8BIT ,</function>
+which has been retained for backwards compatibility. <function>FMT8BIT</function> is
+deprecated and will eventually be removed from the implementation.
+</para>
+</note>
+<sect2 id="Selecting_Text">
+<title>Selecting Text</title>
+<para>
+<!-- .LP -->
+To select a piece of text, use
+<function>XawTextSetSelection : </function>
+<!-- .IN "XawTextSetSelection" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextSetSelection</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPositionleft,<parameter> right</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>left</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the character position at which the selection begins.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>right</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the character position at which the selection ends.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+See section 5.4 for a description of <function>XawTextPosition</function>. <!-- xref -->
+If redisplay is enabled, this function highlights the text and
+makes it the <function>PRIMARY</function> selection. This function does not have any
+effect on <function>CUT_BUFFER0</function>.
+</para>
+<para>
+<!-- .LP -->
+</para>
+</sect2>
+<sect2 id="Unhighlighting_Text">
+<title>Unhighlighting Text</title>
+<para>
+<!-- .LP -->
+To unhighlight previously highlighted text in a widget, use
+<function>XawTextUnsetSelection</function>:
+<!-- .IN "XawTextUnsetSelection" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextUnsetSelection</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="Getting_Current_Text_Selection">
+<title>Getting Current Text Selection</title>
+<para>
+<!-- .LP -->
+To retrieve the text that has been selected by this
+text widget use <function>XawTextGetSelectionPos</function>:
+<!-- .IN "XawTextGetSelectionPos" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextGetSelectionPos</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPosition*begin_return,<parameter> *end_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>begin_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the beginning of the text selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>end_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the end of the text selection.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+See section 5.4 for a description of <function>XawTextPosition</function>. <!-- xref -->
+If the returned values are equal, no text is currently selected.
+</para>
+</sect2>
+<sect2 id="Replacing_Text">
+<title>Replacing Text</title>
+<para>
+<!-- .LP -->
+To modify the text in an editable Text widget use <function>XawTextReplace</function>:
+<!-- .IN "XawTextReplace" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>int<function> XawTextReplace</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPositionstart,<parameter> end</parameter></paramdef>
+ <paramdef>XawTextBlock<parameter> *text</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>start</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the starting character position of the text replacement.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>end</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the ending character position of the text replacement.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>text</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the text to be inserted into the file.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+See section 5.4 for a description of <function>XawTextPosition</function> and <!-- xref -->
+<function>XawTextBlock</function>.
+</para>
+<para>
+<!-- .LP -->
+This function may return the following values:
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>XawEditDone</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "XawEditDone" "" -->
+The text replacement was successful.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>XawPositionError</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "XawPositionError" "" -->
+The edit mode is <function>XawtextAppend</function> and <function>start</function> is not the position of
+the last character of the source.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>XawEditError</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .IN "XawEditError" "" -->
+Either the Source was read-only or the range to be deleted is larger
+than the length of the Source.
+
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+The <function>XawTextReplace</function> arguments <function>start</function> and
+<emphasis remap='I'>end</emphasis> 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 <emphasis remap='I'>start</emphasis> up to
+but not including <emphasis remap='I'>end</emphasis> are deleted, and the characters
+specified on the text block are inserted in their place. If
+<emphasis remap='I'>start</emphasis> and <emphasis remap='I'>end</emphasis> are equal, no text is deleted and the new
+text is inserted after <emphasis remap='I'>start</emphasis>.
+</para>
+</sect2>
+<sect2 id="Searching_for_Text">
+<title>Searching for Text</title>
+<para>
+<!-- .LP -->
+To search for a string in the Text widget, use
+<function>XawTextSearch</function>:
+<!-- .IN "XawTextSearch" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XawTextPosition<function> XawTextSearch</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextScanDirection<parameter> dir</parameter></paramdef>
+ <paramdef>XawTextBlock*<parameter> text</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>dir</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the direction to search in. Legal values are
+<function>XawsdLeft</function> and <function>XawsdRight</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>text</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a text block structure that contains the text to search for.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+See section 5.4 for a description of <function>XawTextPosition</function> and <function>XawTextBlock</function>. <!-- xref -->
+The <function>XawTextSearch</function> function will begin at the insertion point
+and search in the
+direction specified for a string that matches the one passed in
+<emphasis remap='I'>text</emphasis>. 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 <function>XawTextSearchError</function> is returned.
+</para>
+</sect2>
+<sect2 id="Redisplaying_Text">
+<title>Redisplaying Text</title>
+<para>
+<!-- .LP -->
+To redisplay a range of characters, use <function>XawTextInvalidate</function>:
+<!-- .IN "XawTextInvalidate" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextInvalidate</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPositionfrom,<parameter> to</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the start of the text to redisplay.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the end of the text to redisplay.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+See section 5.4 for a description of <function>XawTextPosition</function>. <!-- xref -->
+The <function>XawTextInvalidate</function>
+function causes the specified range of characters to be redisplayed
+immediately if redisplay is enabled or the next time that redisplay is
+enabled.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To enable redisplay, use <function>XawTextEnableRedisplay</function>:
+<!-- .IN "XawTextEnableRedisplay" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextEnableRedisplay</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+The <function>XawTextEnableRedisplay</function> function flushes any changes due to
+batched updates when <function>XawTextDisableRedisplay</function>
+was called and allows future changes to be reflected immediately.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To disable redisplay while making several changes, use
+<function>XawTextDisableRedisplay</function>.
+<!-- .IN "XawTextDisableRedisplay" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextDisableRedisplay</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+The <function>XawTextDisableRedisplay</function> function causes all changes to be
+batched until either <function>XawTextDisplay</function> or <function>XawTextEnableRedisplay</function>
+is called.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To display batched updates, use <function>XawTextDisplay</function>:
+<!-- .IN "XawTextDisplay" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextDisplay</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+The <function>XawTextDisplay</function> function forces any accumulated updates to be
+displayed.
+</para>
+</sect2>
+<sect2 id="Resources_Convenience_Routines">
+<title>Resources Convenience Routines</title>
+<para>
+<!-- .LP -->
+To obtain the character position of the left-most character on the
+first line displayed in the widget (the value of the
+<function>displayPosition</function> resource), use <function>XawTextTopPosition</function>.
+<!-- .IN "XawTextTopPosition" "" @DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XawTextPosition<function> XawTextTopPosition</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To assign a new selection array to a text widget use
+<function>XawTextSetSelectionArray</function>:
+<!-- .IN "XawTextSetSelectionArray" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextSetSelectionArray</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextSelectType*<parameter> sarray</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>sarray</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a selection array as defined in the section called \fBText
+Selections for Application Programmers\fP.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+Calling this function is equivalent to setting the value of the
+<function>selectionTypes</function> resource.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To move the insertion point to the specified source position, use
+<function>XawTextSetInsertionPoint</function>:
+<!-- .IN "XawTextSetInsertionPoint" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextSetInsertionPoint</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> position</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>position</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new position for the insertion point.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+See section 5.4 for a description of <function>XawTextPosition</function>. <!-- xref -->
+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 <function>insertPosition</function> resource.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To obtain the current position of the insertion point, use
+<function>XawTextGetInsertionPoint</function>:
+<!-- .IN "XawTextGetInsertionPoint" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XawTextPosition<function> XawTextGetInsertionPoint</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+See section 5.4 for a description of <function>XawTextPosition</function>. <!-- xref -->
+The result is equivalent to retrieving the value of the
+<function>insertPosition</function> resource.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To replace the text source in the specified widget, use
+<function>XawTextSetSource</function>:
+<!-- .IN "XawTextSetSource" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextSetSource</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Widget<parameter> source</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> position</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>source</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the text source object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>position</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies character position that will become the upper left hand corner
+of the displayed text. This is usually set to zero.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+See section 5.4 for a description of <function>XawTextPosition</function>. <!-- xref -->
+A display update will be performed if redisplay is enabled.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp 1 -->
+To obtain the current text source for the specified widget, use
+<function>XawTextGetSource</function>:
+<!-- .IN "XawTextGetSource" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Widget<function> XawTextGetSource</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function returns the text source that this Text widget is currently
+using.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+To enable and disable the insertion point, use
+<function>XawTextDisplayCaret</function>:
+<!-- .IN "XawTextDisplayCaret" "" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTextDisplayCaret</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Boolean<parameter> visible</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Text widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>visible</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether or not the caret should be displayed.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+If <function>visible</function> is <function>False</function> the insertion point will be disabled.
+The marker is re-enabled either by setting <function>visible</function> to <function>True</function>, by
+calling <function>XtSetValues</function>, or by executing the <function>display-caret</function>
+action routine.
+</para>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/TextSink.xml b/libXaw/specs/TextSink.xml
new file mode 100644
index 000000000..bafe557bd
--- /dev/null
+++ b/libXaw/specs/TextSink.xml
@@ -0,0 +1,915 @@
+<sect1 id="TextSink_Object">
+<title>TextSink Object</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- TextSink Object -->
+<!-- .XE -->
+<!-- .IN "TextSink object" "" "@DEF@" -->
+</para>
+<para>
+<!-- .LP -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+Application Header file &lt;X11/Xaw/TextSink.h&gt;
+<!-- .IN "TextSink.h" "" -->
+Class Header file &lt;X11/Xaw/TextSinkP.h&gt;
+<!-- .IN "TextSinkP.h" "" -->
+Class textSinkObjectClass
+<!-- .IN "textSinkObjectClass" "" -->
+Class Name TextSink
+<!-- .IN "TextSink object" "class name" -->
+Superclass Object
+</literallayout>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .LP -->
+Since all text sinks will have some resources in common, the TextSink
+defines a few new resources.
+</para>
+<sect2 id="textsink_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating an TextSink object instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "AsciiSink object" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Bg Bold -->
+<!-- .Dc -->
+<!-- .Sg Bold -->
+</para>
+</sect2>
+<sect2 id="Subclassing_the_TextSink">
+<title>Subclassing the TextSink</title>
+<!-- .IN "TextSink object" "subclassing" "@DEF@" -->
+<para>
+<!-- .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 <function>must
+specify</function> 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.
+<informaltable>
+ <tgroup cols='4' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <thead>
+ <row>
+ <entry>Function</entry>
+ <entry>Inherit with</entry>
+ <entry>Public Interface</entry>
+ <entry>must specify</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>DisplayText</entry>
+ <entry>XtInheritDisplayText</entry>
+ <entry>XawTextSinkDisplayText</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry>InsertCursor</entry>
+ <entry>XtInheritInsertCursor</entry>
+ <entry>XawTextSinkInsertCursor</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry>ClearToBackground</entry>
+ <entry>XtInheritClearToBackground</entry>
+ <entry>XawTextSinkClearToBackground</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry>FindPosition</entry>
+ <entry>XtInheritFindPosition</entry>
+ <entry>XawTextSinkFindPosition</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry>FindDistance</entry>
+ <entry>XtInheritFindDistance</entry>
+ <entry>XawTextSinkFindDistance</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry>Resolve</entry>
+ <entry>XtInheritResolve</entry>
+ <entry>XawTextSinkResolve</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry>MaxLines</entry>
+ <entry>XtInheritMaxLines</entry>
+ <entry>XawTextSinkMaxLines</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry>MaxHeight</entry>
+ <entry>XtInheritMaxHeight</entry>
+ <entry>XawTextSinkMaxHeight</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry>SetTabs</entry>
+ <entry>XtInheritSetTabs</entry>
+ <entry>XawTextSinkSetTabs</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry>GetCursorBounds</entry>
+ <entry>XtInheritGetCursorBounds</entry>
+ <entry>XawTextSinkGetCursorBounds</entry>
+ <entry>yes</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<sect3 id="Displaying_Text">
+<title>Displaying Text</title>
+<para>
+<!-- .LP -->
+To display a section of the text buffer contained in the text source
+use the function <function>DisplayText</function>:
+<!-- .IN "TextSink object" "DisplayText" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> DisplayText</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Positionx,<parameter> y</parameter></paramdef>
+ <paramdef>XawTextPositionpos1,<parameter> pos2</parameter></paramdef>
+ <paramdef>Boolean<parameter> highlight</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>x</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the x location to start drawing the text.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>y</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the y location to start drawing text.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pos1</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the location within the text source of the first character
+to be printed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pos2</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the location within the text source of the last character
+to be printed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>highlight</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether or not to paint the text region highlighted.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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. <emphasis remap='I'>x</emphasis>
+and <emphasis remap='I'>y</emphasis> denote the upper left hand corner of the first character to
+be displayed.
+</para>
+</sect3>
+<sect3 id="Displaying_the_Insert_Point">
+<title>Displaying the Insert Point</title>
+<para>
+<!-- .LP -->
+The function that controls the display of the text cursor is
+<function>InsertCursor</function>. This function will be called whenever the text
+widget desires to change the state of, or move the insert point.
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> InsertCursor</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Positionx,<parameter> y</parameter></paramdef>
+ <paramdef>XawTextInsertState<parameter> state</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>x</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the x location of the cursor in Pixels.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>y</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the y location of the cursor in Pixels.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>state</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the state of the cursor, may be one of <function>XawisOn</function> or
+<function>XawisOff</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<emphasis remap='I'>X</emphasis> and <emphasis remap='I'>y</emphasis> denote the upper left hand corner of the insert point.
+</para>
+</sect3>
+<sect3 id="Clearing_Portions_of_the_Text_window">
+<title>Clearing Portions of the Text window</title>
+<para>
+<!-- .LP -->
+To clear a portion of the Text window to its background color, the Text
+widget will call <function>ClearToBackground</function>. The TextSink object already
+defines this function as calling <function>XClearArea</function> on the region passed.
+This behavior will be used if you specify
+<function>XtInheritClearToBackground</function> for this method.
+<!-- .IN "XtInheritClearToBackground" "" -->
+<!-- .IN "TextSink object" "ClearToBackground" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> ClearToBackground</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Positionx,<parameter> y</parameter></paramdef>
+ <paramdef>Dimensionwidth,<parameter> height</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>x</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the x location, in pixels, of the Region to clear.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>y</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the y location, in pixels, of the Region to clear.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>width</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the width, in pixels, of the Region to clear.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the height, in pixels, of the Region to clear.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<emphasis remap='I'>X</emphasis> and <emphasis remap='I'>y</emphasis> denote the upper left hand corner of region to clear.
+</para>
+</sect3>
+<sect3 id="Finding_a_Text_Position_Given_Pixel_Values">
+<title>Finding a Text Position Given Pixel Values</title>
+<para>
+<!-- .LP -->
+To find the text character position that will be rendered at a given x
+location the Text widget uses the function <function>FindPosition</function>:
+<!-- .IN "TextSink object" "FindPosition" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> FindPosition</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> fromPos</parameter></paramdef>
+ <paramdef>intfromX,<parameter> width</parameter></paramdef>
+ <paramdef>Boolean<parameter> stopAtWordBreak</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> *pos_return</parameter></paramdef>
+ <paramdef>int*width_return,<parameter> *height_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fromPos</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a reference position, usually the first character in this line.
+This character is always to the left of the desired character location.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fromX</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the distance that the left edge of <emphasis remap='I'>fromPos</emphasis> is from the
+left edge of the window. This is the reference x location for the
+reference position.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>width</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the distance, in pixels, from the reference position to the
+desired character position.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>stopAtWordBreak</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether or not the position that is returned should be forced
+to be on a word boundary.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pos_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>stopAtWordBreak</emphasis> is <function>True</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>width_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the actual distance between <emphasis remap='I'>fromPos</emphasis> and <emphasis remap='I'>pos_return</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the maximum height of the text between <emphasis remap='I'>fromPos</emphasis> and
+<emphasis remap='I'>pos_return</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function need make no attempt to deal with line feeds. The text
+widget will only call it one line at a time.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+Another means of finding a text position is provided by the <function>Resolve</function>
+function:
+<!-- .IN "TextSink object" "Resolve" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> Resolve</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> fromPos</parameter></paramdef>
+ <paramdef>intfromX,<parameter> width</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> *pos_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fromPos</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a reference position, usually the first character in this line.
+This character is always to the left of the desired character location.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fromX</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the distance that the left edge of <emphasis remap='I'>fromPos</emphasis> is from the
+left edge of the window. This is the reference x location for the
+reference position.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>width</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the distance, in pixels, from the reference position to the
+desired character position.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pos_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the character position that corresponds to the
+location that has been specified, or the word break immediately to the left
+if <emphasis remap='I'>stopAtWordBreak</emphasis> is <function>True</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .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 <function>FindPosition</function> function, and provides a subset of its
+functionality.
+<!-- .IN "FindPosition" "" -->
+</para>
+</sect3>
+<sect3 id="Finding_the_Distance_Between_two_Text_Positions">
+<title>Finding the Distance Between two Text Positions</title>
+<para>
+<!-- .LP -->
+To find the distance in pixels between two text positions on the same
+line use the function <function>FindDistance</function>.
+<!-- .IN "TextSink object" "FindDistance" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> FindDistance</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPositionfromPos,<parameter> toPos</parameter></paramdef>
+ <paramdef>int<parameter> fromX</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> *pos_return</parameter></paramdef>
+ <paramdef>int*width_return,<parameter> *height_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fromPos</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the text buffer position, in characters, of the first position.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fromX</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the distance that the left edge of <emphasis remap='I'>fromPos</emphasis> is from the
+left edge of the window. This is the reference x location for the
+reference position.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>toPos</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the text buffer position, in characters, of the second position.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resWidth</emphasis>
+ </term>
+ <listitem>
+ <para>
+Return the actual distance between <emphasis remap='I'>fromPos</emphasis>
+and <emphasis remap='I'>pos_return</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resPos</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the character position that corresponds to the actual character
+position used for <emphasis remap='I'>toPos</emphasis> in the calculations. This may be
+different than <emphasis remap='I'>toPos</emphasis>, for example if <emphasis remap='I'>fromPos</emphasis> and <emphasis remap='I'>toPos</emphasis>
+are on different lines in the file.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the maximum height of the text between <emphasis remap='I'>fromPos</emphasis> and
+<emphasis remap='I'>pos_return</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function need make no attempt to deal with line feeds. The Text
+widget will only call it one line at a time.
+</para>
+</sect3>
+<sect3 id="Finding_the_Size_of_the_Drawing_area">
+<title>Finding the Size of the Drawing area</title>
+<para>
+<!-- .LP -->
+To find the maximum number of lines that will fit into the current Text
+widget, use the function <function>MaxLines</function>. The TextSink already defines
+this function to compute the maximum number of lines by using the height
+of <function>font</function>.
+<!-- .IN "TextSink object" "MaxLines" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>int<function> MaxLines</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Dimension<parameter> height</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the height of the current drawing area.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+Returns the maximum number of lines that will fit in <emphasis remap='I'>height</emphasis>.
+</para>
+<para>
+<!-- .LP -->
+<!-- .sp -->
+To find the height required for a given number of text lines, use
+the function <function>MaxHeight</function>. The TextSink already defines this
+function to compute the maximum height of the window by using the
+height of <function>font</function>.
+<!-- .IN "TextSink object" "MaxHeight" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>int<function> MaxHeight</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>int<parameter> lines</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the height of the current drawing area.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+Returns the height that will be taken up by the number of lines passed.
+</para>
+</sect3>
+<sect3 id="Setting_the_Tab_Stops">
+<title>Setting the Tab Stops</title>
+<para>
+<!-- .LP -->
+To set the tab stops for a text sink use the <function>SetTabs</function> 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
+<function>font</function>.
+<!-- .IN "TextSink object" "SetTabs" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> SetTabs</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>inttab_count,<parameter> *tabs</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSink object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>tab_count</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of tabs passed in <emphasis remap='I'>tabs</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>tabs</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the position, in characters, of the tab stops.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+This function is responsible for the converting character positions passed
+to it into whatever internal positions the TextSink uses for tab placement.
+</para>
+</sect3>
+<sect3 id="Getting_the_Insert_Point_s_Size_and_Location">
+<title>Getting the Insert Point's Size and Location</title>
+<para>
+<!-- .LP -->
+To get the size and location of the insert point use the
+<function>GetCursorBounds</function> function.
+<!-- .IN "TextSink object" "GetCursorBounds" "@DEF@" -->
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> GetCursorBounds</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XRectangle<parameter> *rect_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSinkObject.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>rect_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the location and size of the insert point.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<para>
+<!-- .LP -->
+<emphasis remap='I'>Rect</emphasis> will be filled with the current size and location of the
+insert point.
+
+</para>
+</sect3>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/TextSource.xml b/libXaw/specs/TextSource.xml
new file mode 100644
index 000000000..51b9ae0c3
--- /dev/null
+++ b/libXaw/specs/TextSource.xml
@@ -0,0 +1,620 @@
+<sect1 id="TextSrc_Object">
+<title>TextSrc Object</title>
+<literallayout class="monospaced">
+Application Header file &lt;X11/Xaw/TextSrc.h&gt;
+Class Header file &lt;X11/Xaw/TextSrcP.h&gt;
+Class textSrcObjectClass
+Class Name TextSrc
+Superclass Object
+</literallayout>
+
+<para>
+<!-- .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.
+</para>
+
+<para>
+<!-- .LP -->
+Since all text sources will have some resources in common the
+TextSrc defines a few new resources.
+</para>
+
+<sect2 id="textsource_resources">
+<title>Resources</title>
+<para>
+When creating an TextSrc object instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>editType</entry>
+ <entry>EditType</entry>
+ <entry>EditMode</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</sect2>
+
+<sect2 id="Subclassing_the_TextSrc">
+<title>Subclassing the TextSrc</title>
+<para>
+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
+<function>must</function> 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.
+</para>
+
+<informaltable>
+ <tgroup cols='4' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <thead>
+ <row>
+ <entry>Function</entry>
+ <entry>Inherit with</entry>
+ <entry>Public Interface</entry>
+ <entry>must specify</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>Read</entry>
+ <entry>XtInheritRead</entry>
+ <entry>XawTextSourceRead</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry>Replace</entry>
+ <entry>XtInheritReplace</entry>
+ <entry>XawTextSourceReplace</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry>Scan</entry>
+ <entry>XtInheritScan</entry>
+ <entry>XawTextSourceScan</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry>Search</entry>
+ <entry>XtInheritSearch</entry>
+ <entry>XawTextSourceSearch</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry>SetSelection</entry>
+ <entry>XtInheritSetSelection</entry>
+ <entry>XawTextSourceSetSelection</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry>ConvertSelection</entry>
+ <entry>XtInheritConvertSelection</entry>
+ <entry>XawTextSourceConvertSelection</entry>
+ <entry>no</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<sect3 id="Reading_Text_">
+<title>Reading Text.</title>
+<para>
+<!-- .LP -->
+To read the text in a text source use the <function>Read</function> function:
+<!-- .IN "TextSrc object" "Read" "@DEF@" -->
+</para>
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XawTextPosition<function> Read</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> pos</parameter></paramdef>
+ <paramdef>XawTextBlock<parameter> *text_return</parameter></paramdef>
+ <paramdef>int<parameter> length</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<!-- .FN -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pos</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the position of the first character to be read from the text buffer.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>text</emphasis></term>
+ <listitem>
+ <para>
+Returns the text read from the source.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>length</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the maximum number of characters the TextSrc should
+return to the application in <emphasis remap='I'>text_return</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This function returns the text position immediately after the
+characters read from the
+text buffer. The function is not required to read <emphasis remap='I'>length</emphasis>
+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 <function>Read</function> before the desired
+portion of the text buffer is fully retrieved.
+</para>
+</sect3>
+
+<sect3 id="Replacing_Text_">
+<title>Replacing Text.</title>
+<para>
+To replace or edit the text in a text buffer use the <function>Replace</function> function:
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XawTextPosition<function> Replace</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPositionstart,<parameter> end</parameter></paramdef>
+ <paramdef>XawTextBlock<parameter> *text</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term><emphasis remap='I'>w</emphasis></term>
+ <listitem>
+ <para>
+Specifies the TextSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>start</emphasis></term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>end</emphasis></term>
+ <listitem>
+ <para>
+Specifies the position immediately after the last character to be
+removed from the text buffer.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>text</emphasis></term>
+ <listitem>
+ <para>
+Specifies the text to be added to the text source.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This function can return any of the following values:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term><function>XawEditDone</function></term>
+ <listitem>
+ <para>
+The text replacement was successful.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>XawPositionError</function></term>
+ <listitem>
+ <para>
+<!-- .IN "XawPositionError" "" -->
+The edit mode is <function>XawtextAppend</function> and <function>start</function> is not the last
+character of the source.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>XawEditError</function></term>
+ <listitem>
+ <para>
+<!-- .IN "XawEditError" "" -->
+Either the Source was read-only or the range to be deleted is larger
+than the length of the Source.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<!-- .LP -->
+The <function>Replace</function> arguments <function>start</function> and <function>end</function> 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
+<emphasis remap='I'>start</emphasis> up to but not including <emphasis remap='I'>end</emphasis> are deleted, and the
+buffer specified by the text block is inserted in their
+place. If <emphasis remap='I'>start</emphasis> and <emphasis remap='I'>end</emphasis> are equal, no text is deleted and
+the new text is inserted after <emphasis remap='I'>start</emphasis>.
+</para>
+</sect3>
+
+<sect3 id="Scanning_the_TextSrc">
+<title>Scanning the TextSrc</title>
+<para>
+To search the text source for one of the predefined boundary types use
+the <function>Scan</function> function:
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XawTextPosition<function> Scan</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> position</parameter></paramdef>
+ <paramdef>XawTextScanType<parameter> type</parameter></paramdef>
+ <paramdef>XawTextScanDirection<parameter> dir</parameter></paramdef>
+ <paramdef>int<parameter> count</parameter></paramdef>
+ <paramdef>Boolean<parameter> include</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term><emphasis remap='I'>w</emphasis></term>
+ <listitem>
+ <para>
+Specifies the TextSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>position</emphasis></term>
+ <listitem>
+ <para>
+Specifies the position to begin scanning the source.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>type</emphasis></term>
+ <listitem>
+ <para>
+Specifies the type of boundary to scan for, may be one of:
+<function>XawstPosition</function>, <function>XawstWhiteSpace</function>, <function>XawstEOL</function>,
+<function>XawstParagraph</function>, <function>XawstAll</function>. The exact meaning of these
+boundaries is left up to the individual text source.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>dir</emphasis></term>
+ <listitem>
+ <para>
+Specifies the direction to scan, may be either <function>XawsdLeft</function> to search
+<!-- .IN "XawsdLeft" "" -->
+backward, or <function>XawsdRight</function> to search forward.
+<!-- .IN "XawsdRight" "" -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>count</emphasis></term>
+ <listitem>
+ <para>
+Specifies the number of boundaries to scan for.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>include</emphasis></term>
+ <listitem>
+ <para>
+Specifies whether the boundary itself should be included in the scan.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<!-- .LP -->
+The <function>Scan</function> 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.
+</para>
+</sect3>
+
+<sect3 id="Searching_through_a_TextSrc">
+<title>Searching through a TextSrc</title>
+<para>
+To search for a particular string use the <function>Search</function> function.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XawTextPosition<function> Search</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPosition<parameter> position</parameter></paramdef>
+ <paramdef>XawTextScanDirection<parameter> dir</parameter></paramdef>
+ <paramdef>XawTextBlock<parameter> *text</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term><emphasis remap='I'>w</emphasis></term>
+ <listitem>
+ <para>
+Specifies the TextSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>position</emphasis></term>
+ <listitem>
+ <para>
+Specifies the position to begin the search.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>dir</emphasis></term>
+ <listitem>
+ <para>
+Specifies the direction to search, may be either <function>XawsdLeft</function> to search
+<!-- .IN "XawsdLeft" "" -->
+backward, or <function>XawsdRight</function> to search forward.
+<!-- .IN "XawsdRight" "" -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>text</emphasis></term>
+ <listitem>
+ <para>
+Specifies a text block containing the text to search for.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<function>XawTextSearchError</function> is returned.
+</para>
+
+</sect3>
+
+<sect3 id="Text_Selections">
+<title>Text Selections</title>
+
+<para>
+<!-- .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 <function>ConvertSelection</function> function, to attempt the selection
+conversion.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Boolean<function> ConvertSelections</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>Atom*selection,*target,<parameter> *type</parameter></paramdef>
+ <paramdef>caddr_t<parameter> *value_return</parameter></paramdef>
+ <paramdef>unsignedlong<parameter> *length_return</parameter></paramdef>
+ <paramdef>int<parameter> *format_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the TextSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type of selection that was requested (e.g. <function>PRIMARY</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>target</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type of the selection that has been requested, which
+indicates the desired information about the selection (e.g. Filename,
+Text, Window).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+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 <function>XA_STRING</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>length_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns a pointer into which the number of elements in value is to be stored.
+The size of each element is determined by <emphasis remap='I'>format</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>format_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns a pointer into which the size in bits of the data elements of the
+selection value is to be stored.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If this function returns <function>True</function> 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.
+</para>
+
+<para>
+If the source needs to know when the text selection is modified it
+should define a <function>SetSelection</function> procedure:
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> SetSelection</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>XawTextPositionstart,<parameter> end</parameter></paramdef>
+ <paramdef>Atom<parameter> selection</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term><emphasis remap='I'>w</emphasis></term>
+ <listitem>
+ <para>
+Specifies the TextSrc object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>start</emphasis></term>
+ <listitem>
+ <para>
+Specifies the character position of the beginning of the new text selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>end</emphasis></term>
+ <listitem>
+ <para>
+Specifies the character position of the end of the new text selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis remap='I'>selection</emphasis></term>
+ <listitem>
+ <para>
+Specifies the type of selection that was requested (e.g. <function>PRIMARY</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+</sect3>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Toggle.xml b/libXaw/specs/Toggle.xml
new file mode 100644
index 000000000..d5c239898
--- /dev/null
+++ b/libXaw/specs/Toggle.xml
@@ -0,0 +1,773 @@
+<sect1 id="Toggle_Widget">
+<title>Toggle Widget</title>
+<literallayout class="monospaced">
+Application Header file &lt;Xaw/Toggle.h&gt;
+Class Header file &lt;Xaw/ToggleP.h&gt;
+Class toggleWidgetClass
+Class Name Toggle
+Superclass Command
+</literallayout>
+
+<para>
+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
+<emphasis remap='I'>font</emphasis>), or in a multi-byte encoding (for use with
+a <emphasis remap='I'>fontset</emphasis>). The graphic may also be a bitmap or
+pixmap.
+</para>
+
+<para>
+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
+<function>notify</function> 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.
+</para>
+
+<para>
+Toggle widgets may also be part of a ``radio group.'' A radio group is a
+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 <function>XawToggleGetCurrent</function> will
+return information about the Toggle widget in the radio group.
+</para>
+
+<para>
+Toggle widget state is preserved across changes in sensitivity.
+</para>
+
+<sect2 id="toggle_resources">
+<title>Resources</title>
+<para>
+When creating a Toggle widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>bitmap</entry>
+ <entry>Bitmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>callback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>cornerRoundPercent</entry>
+ <entry>CornerRoundPercent</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>25</entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>Cursor</entry>
+ <entry>Cursor</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>cursorName</entry>
+ <entry>Cursor</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>encoding</entry>
+ <entry>Encoding</entry>
+ <entry>UnsignedChar</entry>
+ <entry></entry>
+ <entry>XawTextEncoding8bit</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>Font</entry>
+ <entry>XFontStruct</entry>
+ <entry></entry>
+ <entry>XtDefaultFont</entry>
+ </row>
+ <row>
+ <entry>fontSet</entry>
+ <entry>FontSet</entry>
+ <entry>XFontSet</entry>
+ <entry></entry>
+ <entry>XtDefaultFontSet</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic height + 2 * <function>internalHeight</function></entry>
+ </row>
+ <row>
+ <entry>highlightThickness</entry>
+ <entry>Thickness</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>2 (0 if Shaped)</entry>
+ </row>
+ <row>
+ <entry>insensitiveBorder</entry>
+ <entry>Insensitive</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>GreyPixmap</entry>
+ </row>
+ <row>
+ <entry>internalHeight</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>internalWidth</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>international</entry>
+ <entry>International</entry>
+ <entry>Boolean</entry>
+ <entry>C</entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>justify</entry>
+ <entry>Justify</entry>
+ <entry>Justify</entry>
+ <entry></entry>
+ <entry>XtJustifyCenter (center)</entry>
+ </row>
+ <row>
+ <entry>label</entry>
+ <entry>Label</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>name of widget</entry>
+ </row>
+ <row>
+ <entry>leftBitmap</entry>
+ <entry>LeftBitmap</entry>
+ <entry>Bitmap</entry>
+ <entry></entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>pointerColor</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>pointerColorBackground</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>radioData</entry>
+ <entry>RadioData</entry>
+ <entry>Pointer</entry>
+ <entry></entry>
+ <entry>Name of widget</entry>
+ </row>
+ <row>
+ <entry>radioGroup</entry>
+ <entry>Widget</entry>
+ <entry>Widget</entry>
+ <entry></entry>
+ <entry>No radio group</entry>
+ </row>
+ <row>
+ <entry>resize</entry>
+ <entry>Resize</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>shapeStype</entry>
+ <entry>ShapeStyle</entry>
+ <entry>ShapeStyle</entry>
+ <entry></entry>
+ <entry>Rectangle</entry>
+ </row>
+ <row>
+ <entry>state</entry>
+ <entry>State</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>Off</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>See below</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>graphic width + 2 * <function>internalWidth</function></entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>radioData</function>
+ </term>
+ <listitem>
+ <para>
+Specifies the data that will be returned by <function>XawToggleGetCurrent</function>
+when this is the currently <emphasis remap='I'>set</emphasis> widget in the radio group. This
+value is also used to identify the Toggle that will be set by a call to
+<function>XawToggleSetCurrent</function>. The value NULL will be returned by
+<function>XawToggleGetCurrent</function> if no widget in a radio group is currently
+set. Programmers must not specify NULL (or Zero) as <function>radioData</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>radioGroup</function>
+ </term>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>set</emphasis> 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>state</function>
+ </term>
+ <listitem>
+ <para>
+Specifies whether the Toggle widget is set (<function>True</function>) or unset
+(<function>False</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="Toggle_Actions">
+<title>Toggle Actions</title>
+<para>
+The Toggle widget supports the following actions:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+Switching the Toggle widget between the foreground and background
+colors with <function>set</function> and <function>unset</function> and <function>toggle</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Processing application callbacks with <function>notify</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Switching the internal border between highlighted
+and unhighlighted states with <function>highlight</function> and <function>unhighlight</function>
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+The following are the default translation bindings used by the
+Toggle widget:
+</para>
+
+<literallayout class="monospaced">
+ &lt;EnterWindow&gt;: highlight(Always)
+ &lt;LeaveWindow&gt;: unhighlight()
+ &lt;Btn1Down&gt;,&lt;Btn1Up&gt;: toggle() notify()
+</literallayout>
+</sect2>
+
+<sect2 id="Toggle_Actions_b">
+<title>Toggle Actions_b</title>
+<para>
+The full list of actions supported by Toggle is:
+</para>
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>highlight</function>(<emphasis remap='I'>condition</emphasis>)
+ </term>
+ <listitem>
+ <para>
+Displays the internal highlight border in the color (<function>foreground</function>
+or <function>background</function> ) that contrasts with the interior color of the
+Toggle widget. The conditions <function>WhenUnset</function> and <function>Always</function> are
+understood by this action procedure. If no argument is passed then
+<function>WhenUnset</function> is assumed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>unhighlight</function>()
+ </term>
+ <listitem>
+ <para>
+Displays the internal highlight border in the color (<function>foreground</function>
+or <function>background</function> ) that matches the interior color of the
+Toggle widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>set</function>()
+ </term>
+ <listitem>
+ <para>
+Enters the <emphasis remap='I'>set</emphasis> state, in which <function>notify</function> is possible. This
+action causes the Toggle widget to display its interior in the
+<function>foreground</function> color. The label or bitmap is displayed in the
+<function>background</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>unset</function>()
+ </term>
+ <listitem>
+ <para>
+Cancels the <emphasis remap='I'>set</emphasis> state and displays the interior of the Toggle widget in the
+<function>background</function> color. The label or bitmap is displayed in the
+<function>foreground</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>toggle</function>()
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>reset</function>()
+ </term>
+ <listitem>
+ <para>
+Cancels any <function>set</function> or <function>highlight</function> and displays the interior of the
+Toggle widget in the <function>background</function> color, with the label displayed in the
+<function>foreground</function> color.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>notify</function>()
+ </term>
+ <listitem>
+ <para>
+When the Toggle widget is in the <function>set</function> state this action calls all functions in
+the callback list named by the <function>callback</function> resource. The value of
+the call_data argument in these callback functions is undefined.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+When a bitmap of depth greater that one (1) is specified the
+<emphasis remap='I'>set</emphasis>(), <emphasis remap='I'>unset</emphasis>(), and <emphasis remap='I'>reset</emphasis>() actions have no effect,
+since there are no foreground and background colors used in a
+multi-plane pixmap.
+</para>
+</sect2>
+
+<sect2 id="Radio_Groups">
+<title>Radio Groups</title>
+<para>
+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.
+</para>
+
+<para>
+The other type of radio group is "one of many" and has the more strict
+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.
+</para>
+
+<literallayout class="monospaced">
+ &lt;EnterWindow&gt;: highlight(Always)
+ &lt;LeaveWindow&gt;: unhighlight()
+ &lt;Btn1Down&gt;,&lt;Btn1Up&gt;: set() notify()
+</literallayout>
+
+<para>
+This translation table will not allow any Toggle to be <emphasis remap='I'>unset</emphasis>
+except as a result of another Toggle becoming <emphasis remap='I'>set</emphasis>. It is
+the application programmer's responsibility to choose an initial
+state for the radio group by setting the <function>state</function> resource of one of
+its member widgets to <function>True</function>.
+</para>
+</sect2>
+
+<sect2 id="toggle_convenience_routines">
+<title>Convenience Routines</title>
+<para>
+The following functions allow easy access to the Toggle widget's radio
+group functionality.
+</para>
+
+<sect3 id="Changing_the_Toggle_s_Radio_Group_">
+<title>Changing the Toggle's Radio Group.</title>
+<para>
+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
+<function>XawToggleChangeRadioGroup</function>.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawToggleChangeRadioGroup</function></funcdef>
+ <paramdef>Widgetw,<parameter> radio_group</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Toggle widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>radio_group</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+
+<para>
+If a Toggle is already <emphasis remap='I'>set</emphasis> in the new radio group,
+and the Toggle to be added is also <emphasis remap='I'>set</emphasis> then the previously
+<emphasis remap='I'>set</emphasis> Toggle in the radio group is <emphasis remap='I'>unset</emphasis> and its callback
+procedures are invoked.
+Finding the Currently selected Toggle in a radio group of Toggles
+</para>
+
+<para>
+To find the currently selected Toggle in a radio group of Toggle widgets
+use <function>XawToggleGetCurrent</function>.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XtPointer<function> XawToggleGetCurrent</function></funcdef>
+ <paramdef>XtPointer<parameter> XawToggleGetCurrent(radio_group)</parameter></paramdef>
+ <paramdef>Widget<parameter> radio_group</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>radio_group</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies any Toggle widget in the radio group.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The value returned by this function is the
+<function>radioData</function>
+of the Toggle in this radio group that is currently set. The default
+value for <function>radioData</function>
+is the name of that Toggle widget. If no Toggle is set in the radio
+group specified then NULL is returned.
+Changing the Toggle that is set in a radio group.
+</para>
+
+<para>
+To change the Toggle that is currently set in a radio group use
+<function>XawToggleSetCurrent</function>.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawToggleSetCurrent</function></funcdef>
+ <paramdef>voidXawToggleSetCurrent(radio_group,<parameter> radio_data)</parameter></paramdef>
+ <paramdef>Widget<parameter> radio_group</parameter></paramdef>
+ <paramdef>XtPointer<parameter> radio_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>radio_group</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies any Toggle widget in the radio group.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>radio_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the
+<function>radioData</function>
+identifying the Toggle that should be set in the radio group specified
+by the <emphasis remap='I'>radio_group</emphasis> argument.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+<function>XawToggleSetCurrent</function> locates the Toggle widget to be set by
+matching <emphasis remap='I'>radio_data</emphasis> against the <function>radioData</function> for each Toggle in
+the radio group. If none match, <function>XawToggleSetCurrent</function> returns
+without making any changes. If more than one Toggle matches,
+<function>XawToggleSetCurrent</function> 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.
+Unsetting all Toggles in a radio group.
+</para>
+
+<para>
+To unset all Toggle widgets in a radio group use
+<function>XawToggleUnsetCurrent</function>.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawToggleUnsetCurrent</function></funcdef>
+ <paramdef>void<parameter> XawToggleUnsetCurrent(radio_group)</parameter></paramdef>
+ <paramdef>Widget<parameter> radio_group</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>radio_group</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies any Toggle widget in the radio group.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If this causes a Toggle widget to change state, all routines on its
+callback list will be invoked.
+</para>
+</sect3>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Tree.xml b/libXaw/specs/Tree.xml
new file mode 100644
index 000000000..bb51e80d1
--- /dev/null
+++ b/libXaw/specs/Tree.xml
@@ -0,0 +1,404 @@
+<sect1 id="Tree_Widget">
+<title>Tree Widget</title>
+<literallayout class="monospaced">
+Application Header file &lt;X11/Xaw/Tree.h&gt;
+Class Header file &lt;X11/Xaw/TreeP.h&gt;
+Class treeWidgetClass
+Class Name Tree
+Superclass Constraint
+</literallayout>
+
+<para>
+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 <function>treeParent</function> 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.
+</para>
+
+<para>
+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 <function>Porthole</function> or <function>Viewport</function>)
+that can be used to scroll around in the tree.
+</para>
+
+<sect2 id="tree_resources">
+<title>Resources</title>
+<para>
+When creating a Tree widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+</para>
+
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>autoReconfigure</entry>
+ <entry>AutoReconfigure</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>children</entry>
+ <entry>ReadOnly</entry>
+ <entry>WidgetList</entry>
+ <entry>R</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>Foreground</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>gravity</entry>
+ <entry>Gravity</entry>
+ <entry>XtGravity</entry>
+ <entry></entry>
+ <entry>WestGravity</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>see <function>Layout Semantics</function></entry> <!-- xref -->
+ </row>
+ <row>
+ <entry>hSpace</entry>
+ <entry>HSpace</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>lineWidth</entry>
+ <entry>LineWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numChildren</entry>
+ <entry>ReadOnly</entry>
+ <entry>Cardinal</entry>
+ <entry>R</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>vSpace</entry>
+ <entry>VSpace</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>4</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry>A</entry>
+ <entry>see <function>Layout Semantics</function></entry> <!-- xref -->
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<variablelist>
+ <varlistentry>
+ <term><function>autoReconfigure</function></term>
+ <listitem>
+ <para>
+Whether or not to layout the tree every time a node is added or removed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>gravity</function></term>
+ <listitem>
+ <para>
+Specifies the side of the widget from which the tree should grow. Valid
+values include <function>WestGravity</function>, <function>NorthGravity</function>, <function>EastGravity</function>, and
+<function>SouthGravity</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>hSpace</function></term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>vSpace</function></term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>lineWidth</function></term>
+ <listitem>
+ <para>
+The width of the lines from nodes that do not have a <function>treeGC</function>
+constraint resource to their children.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+</sect2>
+
+<sect2 id="tree_constraint_resources">
+<title>Constraint Resources</title>
+<para>
+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.
+</para>
+
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>treeGC</entry>
+ <entry>TreeGC</entry>
+ <entry>GC</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>treeParent</entry>
+ <entry>TreeParent</entry>
+ <entry>Widget</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+
+
+<variablelist>
+ <varlistentry>
+ <term><function>treeGC</function></term>
+ <listitem>
+ <para>
+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
+<function>foreground</function> and <function>lineWidth</function> will be used.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><function>treeParent</function></term>
+ <listitem>
+ <para>
+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).
+
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+
+<sect2 id="tree_layout_semantics">
+<title>Layout Semantics</title>
+<para>
+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 resource.
+</para>
+
+<para>
+After positioning all children, the Tree widget attempts to shrink its
+own size to the minimum dimensions required for the layout.
+</para>
+
+</sect2>
+
+<sect2 id="tree_convenience_routines">
+<title>Convenience Routines</title>
+<para>
+The most efficient way to layout a tree is to set
+<function>autoReconfigure</function>
+to False and then use the
+<function> XawTreeForceLayout</function>
+routine to arrange the children.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void<function> XawTreeForceLayout</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>w</term>
+ <listitem>
+ <para>
+Specifies the Tree widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+</sect1>
diff --git a/libXaw/specs/Viewport.xml b/libXaw/specs/Viewport.xml
new file mode 100644
index 000000000..3b3703639
--- /dev/null
+++ b/libXaw/specs/Viewport.xml
@@ -0,0 +1,391 @@
+<sect1 id="Viewport_Widget">
+<title>Viewport Widget</title>
+<para>
+<!-- .LP -->
+<!-- .XS -->
+<!-- Viewport Widget -->
+<!-- .XE -->
+<!-- .IN "Viewport widget" "" "@DEF@" -->
+<literallayout class="monospaced">
+<!-- .TA 2.0i -->
+<!-- .ta 2.0i -->
+<!-- .sp -->
+Application Header file &lt;X11/Xaw/Viewport.h&gt;
+<!-- .IN "Viewport.h" "" -->
+Class Header file &lt;X11/Xaw/ViewportP.h&gt;
+<!-- .IN "ViewportP.h" "" -->
+Class viewportWidgetClass
+<!-- .IN "viewportWidgetClass" "" -->
+Class Name Viewport
+<!-- .IN "Viewport widget" "class name" -->
+Superclass Form
+<!-- .sp -->
+</literallayout>
+</para>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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 <function>forceBars</function> option causes
+the Viewport widget to display all scrollbars permanently.
+</para>
+<sect2 id="viewport_resources">
+<title>Resources</title>
+<para>
+<!-- .LP -->
+When creating a Viewport widget instance, the following resources are
+retrieved from the argument list or the resource database:
+</para>
+<para>
+<!-- .LP -->
+<!-- .IN "Viewport widget" "resources" -->
+<informaltable>
+ <tgroup cols='5' align='center'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <colspec colname='c4'/>
+ <colspec colname='c5'/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Type</entry>
+ <entry>Notes</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>accelerators</entry>
+ <entry>Accelerators</entry>
+ <entry>AcceleratorTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>allowHoriz</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>allowVert</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>ancestorSensitive</entry>
+ <entry>AncestorSensitive</entry>
+ <entry>Boolean</entry>
+ <entry>D</entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>Background</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultBackground</entry>
+ </row>
+ <row>
+ <entry>backgroundPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderColor</entry>
+ <entry>BorderColor</entry>
+ <entry>Pixel</entry>
+ <entry></entry>
+ <entry>XtDefaultForeground</entry>
+ </row>
+ <row>
+ <entry>borderPixmap</entry>
+ <entry>Pixmap</entry>
+ <entry>Pixmap</entry>
+ <entry></entry>
+ <entry>XtUnspecifiedPixmap</entry>
+ </row>
+ <row>
+ <entry>borderWidth</entry>
+ <entry>BorderWidth</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>children</entry>
+ <entry>ReadOnly</entry>
+ <entry>WidgetList</entry>
+ <entry>R</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Colormap</entry>
+ <entry>Colormap</entry>
+ <entry></entry>
+ <entry>Parent's Colormap</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Depth</entry>
+ <entry>int</entry>
+ <entry>C</entry>
+ <entry>Parent's Depth</entry>
+ </row>
+ <row>
+ <entry>destroyCallback</entry>
+ <entry>Callback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>forceBars</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>Height</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>height of the child</entry>
+ </row>
+ <row>
+ <entry>mappedWhenManaged</entry>
+ <entry>MappedWhenManaged</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>numChildren</entry>
+ <entry>ReadOnly</entry>
+ <entry>Cardinal</entry>
+ <entry>R</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>reportCallback</entry>
+ <entry>ReportCallback</entry>
+ <entry>XtCallbackList</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Screen</entry>
+ <entry>Screen</entry>
+ <entry>R</entry>
+ <entry>Parent's Screen</entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry>Sensitive</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>True</entry>
+ </row>
+ <row>
+ <entry>translations</entry>
+ <entry>Translations</entry>
+ <entry>TranslationTable</entry>
+ <entry></entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>useBottom</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>useRight</entry>
+ <entry>Boolean</entry>
+ <entry>Boolean</entry>
+ <entry></entry>
+ <entry>False</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>Width</entry>
+ <entry>Dimension</entry>
+ <entry></entry>
+ <entry>width of the child</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>Position</entry>
+ <entry>Position</entry>
+ <entry></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .Ac -->
+<variablelist>
+ <varlistentry>
+ <term>
+ <function>allowHoriz</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>allowVert</function>
+ </term>
+ <listitem>
+ <para>
+If these resources are <function>False</function> then the Viewport will never create
+a scrollbar in this direction. If it is <function>True</function> then the scrollbar will
+only appear when it is needed, unless <function>forceBars</function> is <function>True</function>.
+<!-- .As -->
+<!-- .Bg -->
+<!-- .Gp -->
+<!-- .Bc -->
+<!-- .Bp -->
+<!-- .Bw -->
+<!-- .Ch -->
+<!-- .Cm -->
+<!-- .Dp -->
+<!-- .Dc -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>forceBars</function>
+ </term>
+ <listitem>
+ <para>
+When <function>True</function> the scrollbars that have been <emphasis remap='I'>allowed</emphasis> will always be
+visible on the screen. If <function>False</function> the scrollbars will be visible only
+when the inner window is larger than the frame.
+<!-- .Hw -->
+<!-- .Mm -->
+<!-- .Nc -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>reportCallback</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>useBottom</function>
+ </term>
+ <listitem>
+ <para>
+<!-- .br -->
+<!-- .ns -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <function>useRight</function>
+ </term>
+ <listitem>
+ <para>
+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 -->
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+</sect2>
+<sect2 id="viewport_layout_semantics">
+<title>Layout Semantics</title>
+<para>
+<!-- .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.
+</para>
+<para>
+<!-- .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 <function>allowVert</function> or
+<function>allowHoriz</function> 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.
+</para>
+<para>
+<!-- .LP -->
+The scrollbar children of the Viewport are named <function>horizontal</function> and
+<function>vertical</function>. By using these names the programmer can specify resources
+for the individual scrollbars. <function>XtSetValues</function> can be used to modify
+the resources dynamically once the widget ID has been obtained with
+<function>XtNameToWidget</function>.
+<!-- .IN "XtNameToWidget" "" -->
+<!-- .NT -->
+</para>
+<note><para>
+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.
+</para></note>
+<!-- .NE -->
+
+</sect2>
+</sect1>
diff --git a/libXaw/specs/libXaw.xml b/libXaw/specs/libXaw.xml
new file mode 100644
index 000000000..d8a0a35bc
--- /dev/null
+++ b/libXaw/specs/libXaw.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<book id="libXaw">
+
+<bookinfo>
+ <title>Athena Widget Set - C Language Interface</title>
+ <subtitle>X Consortium Standard</subtitle>
+ <releaseinfo>X Version 11, Release 6.4</releaseinfo>
+ <authorgroup>
+ <author>
+ <firstname>Chris</firstname><surname>Peterson</surname>
+ </author>
+ </authorgroup>
+ <copyright><year>1985</year><holder>X Consortium</holder></copyright>
+ <copyright><year>1986</year><holder>X Consortium</holder></copyright>
+ <copyright><year>1987</year><holder>X Consortium</holder></copyright>
+ <copyright><year>1988</year><holder>X Consortium</holder></copyright>
+ <copyright><year>1989</year><holder>X Consortium</holder></copyright>
+ <copyright><year>1991</year><holder>X Consortium</holder></copyright>
+ <copyright><year>1994</year><holder>X Consortium</holder></copyright>
+ <releaseinfo>libXaw 1.0.7</releaseinfo>
+ <affiliation><orgname>formerly MIT X Consortium</orgname></affiliation>
+ <productnumber>X Version 11, Release 7</productnumber>
+
+<legalnotice>
+
+<para>
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files
+(the &ldquo;Software&rdquo;), 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:
+</para>
+
+<para>
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+</para>
+
+<para>
+THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, 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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+</legalnotice>
+</bookinfo>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH1.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH2.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH3.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH4.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH5.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH6.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH7.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="TPage_Credits.xml"/>
+</book>
+
diff --git a/libXaw/src/Actions.c b/libXaw/src/Actions.c
index a65308b6a..b927e6ac5 100644
--- a/libXaw/src/Actions.c
+++ b/libXaw/src/Actions.c
@@ -1,1139 +1,1137 @@
-/*
- * Copyright (c) 1998 by The XFree86 Project, 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 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.
- */
-
-/* $XFree86: xc/lib/Xaw/Actions.c,v 3.17 2003/03/25 04:18:10 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <X11/Xmd.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/CoreP.h>
-#include <X11/Constraint.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xfuncs.h>
-#include "Private.h"
-
-#ifdef __UNIXOS2__
-static char dummy;
-#endif
-
-#ifndef OLDXAW
-
-/*
- * Definitions
- */
-#define ERROR -2
-#define END -1
-#define BOOLEAN 0
-#define AND '&'
-#define OR '|'
-#define XOR '^'
-#define NOT '~'
-#define LP '('
-#define RP ')'
-
-/*
- * Types
- */
-/* boolean expressions */
-typedef struct _XawEvalInfo {
- Widget widget;
- XawActionResList *rlist;
- XawActionVarList *vlist;
- XawParseBooleanProc parse_proc;
- XEvent *event;
- char *cp, *lp;
- int token;
- Bool value;
-} XawEvalInfo;
-
-/* resources */
-typedef struct _XawActionRes {
- XrmQuark qname;
- XrmQuark qtype;
- Cardinal size;
-} XawActionRes;
-
-struct _XawActionResList {
- WidgetClass widget_class;
- XawActionRes **resources;
- Cardinal num_common_resources;
- Cardinal num_constraint_resources;
-};
-
-/* variables */
-typedef struct _XawActionVar {
- XrmQuark qname;
- XrmQuark qvalue;
-} XawActionVar;
-
-struct _XawActionVarList {
- Widget widget;
- Cardinal num_variables;
- XawActionVar **variables;
-};
-
-/*
- * Private methods
- */
-/* expressions */
-static int get_token(XawEvalInfo*);
-static Bool expr(XawEvalInfo*);
-static Bool and(XawEvalInfo*);
-static Bool prim(XawEvalInfo*);
-
-/* resources */
-static String XawConvertActionRes(XawActionResList*, Widget w, String);
-
-static String _XawEscapeActionVarValue(String);
-static String _XawUnescapeActionVarValue(String);
-static XawActionResList *_XawCreateActionResList(WidgetClass);
-static XawActionResList *_XawFindActionResList(WidgetClass);
-static void _XawBindActionResList(XawActionResList*);
-static XawActionRes *_XawFindActionRes(XawActionResList*, Widget, String);
-static int qcmp_action_resource_list(_Xconst void*, _Xconst void*);
-static int bcmp_action_resource_list(_Xconst void*, _Xconst void*);
-static int qcmp_action_resource(_Xconst void*, _Xconst void*);
-static int bcmp_action_resource(_Xconst void*, _Xconst void*);
-
-/* variables */
-static String XawConvertActionVar(XawActionVarList*, String);
-static void XawDeclareActionVar(XawActionVarList*, String, String);
-
-static XawActionVarList *_XawCreateActionVarList(Widget);
-static XawActionVarList *_XawFindActionVarList(Widget);
-static XawActionVar *_XawCreateActionVar(XawActionVarList*, String);
-static XawActionVar *_XawFindActionVar(XawActionVarList*, String);
-static void _XawDestroyActionVarList(Widget, XtPointer, XtPointer);
-
-/*
- * Initialization
- */
-/* resources */
-static XawActionResList **resource_list;
-static Cardinal num_resource_list;
-
-/* variables */
-static XawActionVarList **variable_list;
-static Cardinal num_variable_list;
-
-/*
- * Implementation
- */
-/*
- * Start of Boolean Expression Evaluation Implementation Code
- */
-Bool
-XawParseBoolean(Widget w, String param, XEvent *event, Bool *succed)
-{
- char *tmp = param;
- int value;
-
- if (!param)
- return (False);
-
- value = (int)strtod(param, &tmp);
- if (*tmp == '\0')
- return (value);
-
- if (XmuCompareISOLatin1(param, "true") == 0
- || XmuCompareISOLatin1(param, "yes") == 0
- || XmuCompareISOLatin1(param, "on") == 0
- || XmuCompareISOLatin1(param, "in") == 0
- || XmuCompareISOLatin1(param, "up") == 0)
- return (True);
- else if (XmuCompareISOLatin1(param, "false") == 0
- || XmuCompareISOLatin1(param, "no") == 0
- || XmuCompareISOLatin1(param, "off") == 0
- || XmuCompareISOLatin1(param, "out") == 0
- || XmuCompareISOLatin1(param, "down") == 0)
- ;
- else if (XmuCompareISOLatin1(param, "my") == 0
- || XmuCompareISOLatin1(param, "mine") == 0)
- return (event->xany.window == XtWindow(w));
- else if (XmuCompareISOLatin1(param, "faked") == 0)
- return (event->xany.send_event != 0);
- else
- *succed = False;
-
- return (False);
-}
-
-Bool
-XawBooleanExpression(Widget w, String param, XEvent *event)
-{
- XawEvalInfo info;
- Bool retval;
-
- if (!param)
- return (False);
-
- info.widget = w;
-
- info.rlist = XawGetActionResList(XtClass(w));
- info.vlist = XawGetActionVarList(w);
-
- /*
- * Verify widget class, in case we will allow the parse proc procedure
- * as a widget class element, or if we allow overriding the default
- * parse boolean proc.
- */
- info.parse_proc = XawParseBoolean;
-
- info.event = event;
- info.cp = info.lp = param;
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "(*) Parsing expression \"%s\"\n", param);
-#endif
-
- (void)get_token(&info);
- if (info.token == ERROR)
- return (False);
- retval = expr(&info);
-
- return (info.token != ERROR ? retval : False);
-}
-
-static int
-get_token(XawEvalInfo *info)
-{
- int ch;
- char *p, name[256];
-
- info->lp = info->cp;
-
- /*COSTCOND*/
- while (1) /* eat white spaces */
- {
- ch = *info->cp++;
- if (isspace(ch))
- continue;
- break;
- }
-
- switch (ch)
- {
- case AND: case OR: case XOR: case NOT: case LP: case RP:
- return (info->token = ch);
- }
-
- /* It's a symbol name, resolve it. */
- if (ch == XAW_PRIV_VAR_PREFIX || isalnum(ch) || ch == '_' || ch == '\\')
- {
- Bool succed = True;
-
- p = info->cp - 1;
-
- while ((ch = *info->cp) && (isalnum(ch) || ch == '_'))
- ++info->cp;
-
- strncpy(name, p, XawMin((int)sizeof(name) - 1,
- (unsigned)(info->cp - p)));
- name[XawMin((int)sizeof(name) -1, info->cp - p)] = '\0';
-
- if (name[0] == XAW_PRIV_VAR_PREFIX)
- {
- String value = XawConvertActionVar(info->vlist, name);
-
- info->value = info->parse_proc(info->widget, value, info->event,
- &succed) & 1;
- }
- else
- {
- info->value = info->parse_proc(info->widget, name, info->event,
- &succed) & 1;
- if (!succed)
- {
- String value =
- XawConvertActionRes(info->rlist, info->widget,
- name[0] == '\\' ? &name[1] : name);
- /* '\\' may have been used to escape a resource name.
- */
-
- succed = True;
- info->value = info->parse_proc(info->widget, value, info->event,
- &succed) & 1;
- if (!succed)
- {
- /* not a numeric value or boolean string */
- info->value = True;
- succed = True;
- }
- }
- }
- if (succed)
- return (info->token = BOOLEAN);
- }
- else if (ch == '\0')
- return (info->token = END);
-
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "evaluate(): bad token \"%c\" at \"%s\"", ch, info->cp - 1);
-
- XtAppWarning(XtWidgetToApplicationContext(info->widget), msg);
- }
-
- return (info->token = ERROR);
-}
-
-static Bool
-expr(XawEvalInfo *info)
-{
- Bool left = and(info);
-
- for (;;)
- switch (info->token)
- {
- case OR:
- (void)get_token(info);
- left |= and(info);
- break;
- case XOR:
- (void)get_token(info);
- left ^= and(info);
- break;
- default:
- return (left);
- }
- /* NOTREACHED */
-}
-
-static Bool
-and(XawEvalInfo *info)
-{
- Bool left = prim(info);
-
- for (;;)
- switch (info->token)
- {
- case AND:
- (void)get_token(info);
- left &= prim(info);
- break;
- default:
- return (left);
- }
- /* NOTREACHED */
-}
-
-static Bool
-prim(XawEvalInfo *info)
-{
- Bool e;
-
- switch (info->token)
- {
- case BOOLEAN:
- e = info->value;
- (void)get_token(info);
- return (e);
- case NOT:
- (void)get_token(info);
- return (!prim(info));
- case LP:
- (void)get_token(info);
- e = expr(info);
- if (info->token != RP)
- {
- char msg[256];
-
- info->token = ERROR;
- XmuSnprintf(msg, sizeof(msg),
- "evaluate(): expecting ), at \"%s\"", info->lp);
- XtAppWarning(XtWidgetToApplicationContext(info->widget), msg);
- return (False);
- }
- (void)get_token(info);
- return (e);
- case END:
- return (True);
- default:
- {
- char msg[256];
-
- info->token = ERROR;
- XmuSnprintf(msg, sizeof(msg),
- "evaluate(): sintax error, at \"%s\"", info->lp);
- XtAppWarning(XtWidgetToApplicationContext(info->widget), msg);
- } return (False);
- }
- /* NOTREACHED */
-}
-
-/*
- * Start of Resources Implementation Code
- */
-void
-XawSetValuesAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- Arg *arglist;
- Cardinal num_args, count;
- XawActionResList *rlist;
- XawActionVarList *vlist;
- XawActionRes *resource;
- XrmValue from, to;
- String value;
- char c_1;
- short c_2;
- int c_4;
-#ifdef LONG64
- long c_8;
-#endif
-
- if (!(*num_params & 1))
- {
- XawPrintActionErrorMsg("set-values", w, params, num_params);
- return;
- }
-
- if (!XawBooleanExpression(w, params[0], event))
- return;
-
- rlist = XawGetActionResList(XtClass(w));
- vlist = XawGetActionVarList(w);
-
- num_args = 0;
- arglist = (Arg *)XtMalloc(sizeof(Arg) * ((*num_params) >> 1));
-
- for (count = 1; count < *num_params; count += 2)
- {
- if ((resource = _XawFindActionRes(rlist, w, params[count])) == NULL)
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "set-values(): bad resource name \"%s\"",
- params[count]);
- XtAppWarning(XtWidgetToApplicationContext(w), msg);
- continue;
- }
- value = XawConvertActionVar(vlist, params[count + 1]);
- from.size = strlen(value) + 1;
- from.addr = value;
- to.size = resource->size;
- switch (to.size)
- {
- case 1: to.addr = (XPointer)&c_1; break;
- case 2: to.addr = (XPointer)&c_2; break;
- case 4: to.addr = (XPointer)&c_4; break;
-#ifdef LONG64
- case 8: to.addr = (XPointer)&c_8; break;
-#endif
- default:
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "set-values(): bad resource size for \"%s\"",
- params[count]);
- XtAppWarning(XtWidgetToApplicationContext(w), msg);
- } continue;
- }
-
- if (strcmp(XtRString, XrmQuarkToString(resource->qtype)) == 0)
-#ifdef LONG64
- c_8 = (long)from.addr;
-#else
- c_4 = (int)from.addr;
-#endif
- else if (!XtConvertAndStore(w, XtRString, &from,
- XrmQuarkToString(resource->qtype), &to))
- continue;
-
- switch (to.size)
- {
- case 1:
- XtSetArg(arglist[num_args], XrmQuarkToString(resource->qname), c_1);
- break;
- case 2:
- XtSetArg(arglist[num_args], XrmQuarkToString(resource->qname), c_2);
- break;
- case 4:
- XtSetArg(arglist[num_args], XrmQuarkToString(resource->qname), c_4);
- break;
-#ifdef LONG64
- case 8:
- XtSetArg(arglist[num_args], XrmQuarkToString(resource->qname), c_8);
- break;
-#endif
- }
- ++num_args;
- }
-
- XtSetValues(w, arglist, num_args);
- XtFree((char *)arglist);
-}
-
-void
-XawGetValuesAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- XawActionResList *rlist;
- XawActionVarList *vlist;
- String value;
- Cardinal count;
-
- if (!(*num_params & 1))
- {
- XawPrintActionErrorMsg("get-values", w, params, num_params);
- return;
- }
- if (!XawBooleanExpression(w, params[0], event))
- return;
-
- rlist = XawGetActionResList(XtClass(w));
- vlist = XawGetActionVarList(w);
-
- for (count = 1; count < *num_params; count += 2)
- {
- if ((value = XawConvertActionRes(rlist, w, params[count + 1])) == NULL)
- continue;
- XawDeclareActionVar(vlist, params[count], value);
- }
-}
-
-void
-XawDeclareAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- XawActionVarList *vlist;
- Cardinal count;
-
- if (!(*num_params & 1))
- {
- XawPrintActionErrorMsg("declare", w, params, num_params);
- return;
- }
- if (!XawBooleanExpression(w, params[0], event))
- return;
-
- vlist = XawGetActionVarList(w);
-
- for (count = 1; count < *num_params; count += 2)
- XawDeclareActionVar(vlist, params[count], params[count + 1]);
-}
-
-void
-XawCallProcAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- String *args;
- Cardinal num_args;
-
- if (*num_params < 2)
- {
- XawPrintActionErrorMsg("call-proc", w, params, num_params);
- return;
- }
-
- if (*num_params && !XawBooleanExpression(w, params[0], event))
- return;
-
- if (*num_params > 2)
- {
- args = &params[2];
- num_args = *num_params - 2;
- }
- else
- {
- args = NULL;
- num_args = 0;
- }
-
- XtCallActionProc(w, params[1], event, args, num_args);
-}
-
-static String
-XawConvertActionRes(XawActionResList *list, Widget w, String name)
-{
- XawActionRes *resource;
- XrmValue from, to;
- Arg arg;
- char c_1;
- short c_2;
- int c_4;
-#ifdef LONG64
- long c_8;
-#endif
-
- if ((resource = _XawFindActionRes(list, w, name)) == NULL)
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "convert(): bad resource name \"%s\"", name);
- XtAppWarning(XtWidgetToApplicationContext(w), msg);
- return (NULL);
- }
-
- from.size = resource->size;
- switch (from.size)
- {
- case 1:
- XtSetArg(arg, XrmQuarkToString(resource->qname),
- from.addr = (XPointer)&c_1);
- break;
- case 2:
- XtSetArg(arg, XrmQuarkToString(resource->qname),
- from.addr = (XPointer)&c_2);
- break;
- case 4:
- XtSetArg(arg, XrmQuarkToString(resource->qname),
- from.addr = (XPointer)&c_4);
- break;
-#ifdef LONG64
- case 8:
- XtSetArg(arg, XrmQuarkToString(resource->qname),
- from.addr = (XPointer)&c_8);
- break;
-#endif
- default:
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "convert(): bad resource size for \"%s\"", name);
- XtAppWarning(XtWidgetToApplicationContext(w), name);
- } return (NULL);
- }
-
- XtGetValues(w, &arg, 1);
- to.size = sizeof(String);
- to.addr = NULL;
-
- if (strcmp(XtRString, XrmQuarkToString(resource->qtype)) == 0)
- to.addr = *(char **)from.addr;
- else if (!XtConvertAndStore(w, XrmQuarkToString(resource->qtype),
- &from, XtRString, &to))
- return (NULL);
-
- return ((String)to.addr);
-}
-
-void
-XawPrintActionErrorMsg(String action_name, Widget w,
- String *params, Cardinal *num_params)
-{
- char msg[1024];
- unsigned int size, idx;
-
- size = XmuSnprintf(msg, sizeof(msg), "%s(): bad number of parameters.\n\t(",
- action_name);
-
- idx = 0;
- while (idx < *num_params - 1 && size < sizeof(msg))
- size += XmuSnprintf(&msg[size], sizeof(msg) - size, "%s, ",
- params[idx++]);
- if (*num_params)
- XmuSnprintf(&msg[size], sizeof(msg) - size, "%s)", params[idx]);
- else
- XmuSnprintf(&msg[size], sizeof(msg) - size, ")");
- XtAppWarning(XtWidgetToApplicationContext(w), msg);
-}
-
-XawActionResList *
-XawGetActionResList(WidgetClass wc)
-{
- XawActionResList *list;
-
- list = _XawFindActionResList(wc);
-
- if (!list)
- list = _XawCreateActionResList(wc);
-
- return (list);
-}
-
-static int
-qcmp_action_resource_list(register _Xconst void *left,
- register _Xconst void *right)
-{
- return ((char *)((*(XawActionResList **)left)->widget_class) -
- (char *)((*(XawActionResList **)right)->widget_class));
-}
-
-static XawActionResList *
-_XawCreateActionResList(WidgetClass wc)
-{
- XawActionResList *list;
-
- list = (XawActionResList *)XtMalloc(sizeof(XawActionResList));
- list->widget_class = wc;
- list->num_common_resources = list->num_constraint_resources = 0;
- list->resources = NULL;
-
- if (!resource_list)
- {
- num_resource_list = 1;
- resource_list = (XawActionResList **)XtMalloc(sizeof(XawActionResList*));
- resource_list[0] = list;
- }
- else
- {
- ++num_resource_list;
- resource_list = (XawActionResList **)XtRealloc((char *)resource_list,
- sizeof(XawActionResList*)
- * num_resource_list);
- resource_list[num_resource_list - 1] = list;
- qsort(resource_list, num_resource_list, sizeof(XawActionResList*),
- qcmp_action_resource_list);
- }
-
- _XawBindActionResList(list);
-
- return (list);
-}
-
-static int
-bcmp_action_resource_list(register _Xconst void *wc,
- register _Xconst void *list)
-{
- return ((char *)wc - (char *)((*(XawActionResList **)list)->widget_class));
-}
-
-static XawActionResList *
-_XawFindActionResList(WidgetClass wc)
-{
- XawActionResList **list;
-
- if (!resource_list)
- return (NULL);
-
- list = (XawActionResList **)bsearch(wc, resource_list,
- num_resource_list,
- sizeof(XawActionResList*),
- bcmp_action_resource_list);
-
- return (list ? *list : NULL);
-}
-
-static int
-qcmp_action_resource(register _Xconst void *left,
- register _Xconst void *right)
-{
- return (strcmp(XrmQuarkToString((*(XawActionRes **)left)->qname),
- XrmQuarkToString((*(XawActionRes **)right)->qname)));
-}
-
-static void
-_XawBindActionResList(XawActionResList *list)
-{
- XtResourceList xt_list, cons_list;
- Cardinal i, num_xt, num_cons;
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "(*) Creating resource list for class \'%s\'\n---------\n",
- list->widget_class->core_class.class_name);
-#endif
-
- XtGetResourceList(list->widget_class, &xt_list, &num_xt);
- XtGetConstraintResourceList(list->widget_class, &cons_list, &num_cons);
- list->num_common_resources = num_xt;
- list->num_constraint_resources = num_cons;
-
- list->resources = (XawActionRes **)
- XtMalloc(sizeof(XawActionRes*) * (num_xt + num_cons));
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "Common resources\n---\n");
-#endif
-
- for (i = 0; i < num_xt; i++)
- {
- list->resources[i] = (XawActionRes *)XtMalloc(sizeof(XawActionRes));
- list->resources[i]->qname =
- XrmPermStringToQuark(xt_list[i].resource_name);
- list->resources[i]->qtype =
- XrmPermStringToQuark(xt_list[i].resource_type);
- list->resources[i]->size = xt_list[i].resource_size;
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "%-20s\t%-20s\t(%d)\n",
- xt_list[i].resource_name,
- xt_list[i].resource_type,
- xt_list[i].resource_size);
-#endif
- }
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "---\nContraint resources\n---");
-#endif
-
- for (; i < num_xt + num_cons; i++)
- {
- list->resources[i] = (XawActionRes *)XtMalloc(sizeof(XawActionRes));
- list->resources[i]->qname =
- XrmPermStringToQuark(cons_list[i - num_xt].resource_name);
- list->resources[i]->qtype =
- XrmPermStringToQuark(cons_list[i - num_xt].resource_type);
- list->resources[i]->size = cons_list[i - num_xt].resource_size;
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "%-20s\t%-20s\t(%d)\n",
- cons_list[i - num_xt].resource_name,
- cons_list[i - num_xt].resource_type,
- cons_list[i - num_xt].resource_size);
-#endif
- }
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "---\n");
-#endif
-
- XtFree((char *)xt_list);
- if (cons_list)
- XtFree((char *)cons_list);
-
- qsort(list->resources, list->num_common_resources, sizeof(XawActionRes*),
- qcmp_action_resource);
- if (num_cons)
- qsort(&list->resources[num_xt], list->num_constraint_resources,
- sizeof(XawActionRes*), qcmp_action_resource);
-}
-
-static int
-bcmp_action_resource(register _Xconst void *string,
- register _Xconst void *resource)
-{
- return (strcmp((String)string,
- XrmQuarkToString((*(XawActionRes **)resource)->qname)));
-}
-
-static XawActionRes *
-_XawFindActionRes(XawActionResList *list, Widget detail, String name)
-{
- XawActionRes **res;
-
- if (!list->resources)
- return (NULL);
-
- res = (XawActionRes **)bsearch(name, list->resources,
- list->num_common_resources,
- sizeof(XawActionRes*), bcmp_action_resource);
-
- if (!res && XtParent(detail)
- && XtIsSubclass(XtParent(detail), constraintWidgetClass))
- {
- XawActionResList *cons = XawGetActionResList(XtClass(XtParent(detail)));
-
- if (cons)
- res = (XawActionRes **)
- bsearch(name, &cons->resources[cons->num_common_resources],
- cons->num_constraint_resources,
- sizeof(XawActionRes*), bcmp_action_resource);
- }
-
- return (res ? *res : NULL);
-}
-
-/*
- * Start of Variables Implementation Code
- */
-/* For speed, only does memory allocation when really required */
-static String
-_XawEscapeActionVarValue(String value)
-{
- String escape;
-
- if (value[0] == '$' || value[0] == '\\')
- {
- escape = XtMalloc(strlen(value) + 2);
- escape[0] = '\\';
- strcpy(escape + 1, value);
- return (escape);
- }
- return (NULL);
-}
-
-/* For speed, only does memory allocation when really required */
-static String
-_XawUnescapeActionVarValue(String value)
-{
- String unescape;
-
- if (value[0] == '\\')
- {
- unescape = XtMalloc(strlen(value));
- strcpy(unescape, value + 1);
- return (unescape);
- }
- return (NULL);
-}
-
-static void
-XawDeclareActionVar(XawActionVarList *list, String name, String value)
-{
- XawActionVar *variable;
- String escape = NULL;
-
- if (name[0] != XAW_PRIV_VAR_PREFIX)
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg), "declare(): variable name must begin with "
- "\'%c\', at %s = %s", XAW_PRIV_VAR_PREFIX, name, value);
- XtAppWarning(XtWidgetToApplicationContext(list->widget), msg);
- return;
- }
- variable = _XawFindActionVar(list, name);
- if (!variable)
- variable = _XawCreateActionVar(list, name);
- if (value)
- escape = _XawEscapeActionVarValue(value);
-
- if (variable->qvalue)
- {
- String val = escape ? escape : value;
-
- if (strcmp(XrmQuarkToString(variable->qvalue), val) == 0)
- {
- if (escape)
- XtFree(escape);
- return;
- }
- }
- variable->qvalue = (escape ? XrmStringToQuark(escape) :
- (value ? XrmStringToQuark(value) : NULLQUARK));
- if (escape)
- XtFree(escape);
-}
-
-static String
-XawConvertActionVar(XawActionVarList *list, String name)
-{
- XawActionVar *variable;
- String unescape;
- XrmQuark quark;
-
- if (name[0] != XAW_PRIV_VAR_PREFIX)
- return (name);
-
- variable = _XawFindActionVar(list, name);
- if (!variable || variable->qvalue == NULLQUARK)
- return (name);
- unescape = _XawUnescapeActionVarValue(XrmQuarkToString(variable->qvalue));
- if (unescape)
- {
- quark = XrmStringToQuark(unescape);
- XtFree(unescape);
- }
- else
- quark = variable->qvalue;
-
- return (XrmQuarkToString(quark));
-}
-
-XawActionVarList *
-XawGetActionVarList(Widget w)
-{
- XawActionVarList *list;
-
- list = _XawFindActionVarList(w);
- if (!list)
- list = _XawCreateActionVarList(w);
-
- return (list);
-}
-
-static int
-qcmp_action_variable_list(register _Xconst void *left,
- register _Xconst void *right)
-{
- return ((char *)((*(XawActionVarList **)left)->widget) -
- (char *)((*(XawActionVarList **)right)->widget));
-}
-
-static XawActionVarList *
-_XawCreateActionVarList(Widget w)
-{
- XawActionVarList *list;
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "(*) Creating action variable list for widget %s (%p)\n",
- XtName(w), w);
-#endif
-
- list = (XawActionVarList *)XtMalloc(sizeof(XawActionVarList));
- list->widget = w;
- list->num_variables = 0;
- list->variables = NULL;
-
- if (!variable_list)
- {
- num_variable_list = 1;
- variable_list = (XawActionVarList **)XtMalloc(sizeof(XawActionVarList*));
- variable_list[0] = list;
- }
- else
- {
- ++num_variable_list;
- variable_list = (XawActionVarList **)
- XtRealloc((char *)variable_list,
- sizeof(XawActionVarList *) * num_variable_list);
- variable_list[num_variable_list - 1] = list;
- qsort(variable_list, num_variable_list, sizeof(XawActionVarList*),
- qcmp_action_variable_list);
- }
-
- XtAddCallback(w, XtNdestroyCallback, _XawDestroyActionVarList,
- (XtPointer)list);
-
- return (list);
-}
-
-static int
-bcmp_action_variable_list(register _Xconst void *widget,
- register _Xconst void *list)
-{
- return ((char *)widget - (char *)((*(XawActionVarList **)list)->widget));
-}
-
-static XawActionVarList *
-_XawFindActionVarList(Widget w)
-{
- XawActionVarList **list;
-
- if (!num_variable_list)
- return (NULL);
-
- list = (XawActionVarList **)bsearch(w, variable_list, num_variable_list,
- sizeof(XawActionVarList*),
- bcmp_action_variable_list);
-
- return (list ? *list : NULL);
-}
-
-static int
-qcmp_action_variable(register _Xconst void *left,
- register _Xconst void *right)
-{
- return (strcmp(XrmQuarkToString((*(XawActionVar **)left)->qname),
- XrmQuarkToString((*(XawActionVar **)right)->qname)));
-}
-
-static XawActionVar *
-_XawCreateActionVar(XawActionVarList *list, String name)
-{
- XawActionVar *variable;
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "(*) Creating action variable '%s' for widget %s (%p)\n",
- name, XtName(list->widget), list->widget);
-#endif
-
- variable = (XawActionVar *)XtMalloc(sizeof(XawActionVar));
- variable->qname = XrmStringToQuark(name);
- variable->qvalue = NULLQUARK;
-
- if (!list->variables)
- {
- list->num_variables = 1;
- list->variables = (XawActionVar **)XtMalloc(sizeof(XawActionVar*));
- list->variables[0] = variable;
- }
- else
- {
- ++list->num_variables;
- list->variables = (XawActionVar **)XtRealloc((char *)list->variables,
- sizeof(XawActionVar *) *
- list->num_variables);
- list->variables[list->num_variables - 1] = variable;
- qsort(list->variables, list->num_variables, sizeof(XawActionVar*),
- qcmp_action_variable);
- }
- return (variable);
-}
-
-static int
-bcmp_action_variable(register _Xconst void *string,
- register _Xconst void *variable)
-{
- return (strcmp((String)string,
- XrmQuarkToString((*(XawActionVar **)variable)->qname)));
-}
-
-static XawActionVar *
-_XawFindActionVar(XawActionVarList *list, String name)
-{
- XawActionVar **var;
-
- if (!list->variables)
- return (NULL);
-
- var = (XawActionVar **)bsearch(name, list->variables, list->num_variables,
- sizeof(XawActionVar*), bcmp_action_variable);
-
- return (var ? *var : NULL);
-}
-
-/*ARGSUSED*/
-static void
-_XawDestroyActionVarList(Widget w, XtPointer client_data, XtPointer call_data)
-{
- XawActionVarList *list = (XawActionVarList *)client_data;
- Cardinal i;
-
- for (i = 0; i < num_variable_list; i++)
- if (variable_list[i] == list)
- break;
- if (i >= num_variable_list || list->widget != w
- || variable_list[i]->widget != w)
- {
- XtWarning("destroy-variable-list(): Bad widget argument.");
- return;
- }
- if (--num_variable_list > 0)
- {
- memmove(&variable_list[i], &variable_list[i + 1],
- (num_variable_list - i) * sizeof(XawActionVarList *));
- variable_list = (XawActionVarList **)
- XtRealloc((char *)variable_list, sizeof(XawActionVarList *) *
- num_variable_list);
- }
- else
- {
- XtFree((char *)variable_list);
- variable_list = NULL;
- }
-
- XtFree((char *)list->variables);
- XtFree((char *)list);
-}
-
-#endif /* OLDXAW */
+/*
+ * Copyright (c) 1998 by The XFree86 Project, 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <X11/Xmd.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/CoreP.h>
+#include <X11/Constraint.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xfuncs.h>
+#include "Private.h"
+
+#ifdef __UNIXOS2__
+static char dummy;
+#endif
+
+#ifndef OLDXAW
+
+/*
+ * Definitions
+ */
+#define ERROR -2
+#define END -1
+#define BOOLEAN 0
+#define AND '&'
+#define OR '|'
+#define XOR '^'
+#define NOT '~'
+#define LP '('
+#define RP ')'
+
+/*
+ * Types
+ */
+/* boolean expressions */
+typedef struct _XawEvalInfo {
+ Widget widget;
+ XawActionResList *rlist;
+ XawActionVarList *vlist;
+ XawParseBooleanProc parse_proc;
+ XEvent *event;
+ char *cp, *lp;
+ int token;
+ Bool value;
+} XawEvalInfo;
+
+/* resources */
+typedef struct _XawActionRes {
+ XrmQuark qname;
+ XrmQuark qtype;
+ Cardinal size;
+} XawActionRes;
+
+struct _XawActionResList {
+ WidgetClass widget_class;
+ XawActionRes **resources;
+ Cardinal num_common_resources;
+ Cardinal num_constraint_resources;
+};
+
+/* variables */
+typedef struct _XawActionVar {
+ XrmQuark qname;
+ XrmQuark qvalue;
+} XawActionVar;
+
+struct _XawActionVarList {
+ Widget widget;
+ Cardinal num_variables;
+ XawActionVar **variables;
+};
+
+/*
+ * Private methods
+ */
+/* expressions */
+static int get_token(XawEvalInfo*);
+static Bool expr(XawEvalInfo*);
+static Bool and(XawEvalInfo*);
+static Bool prim(XawEvalInfo*);
+
+/* resources */
+static String XawConvertActionRes(XawActionResList*, Widget w, String);
+
+static String _XawEscapeActionVarValue(String);
+static String _XawUnescapeActionVarValue(String);
+static XawActionResList *_XawCreateActionResList(WidgetClass);
+static XawActionResList *_XawFindActionResList(WidgetClass);
+static void _XawBindActionResList(XawActionResList*);
+static XawActionRes *_XawFindActionRes(XawActionResList*, Widget, String);
+static int qcmp_action_resource_list(_Xconst void*, _Xconst void*);
+static int bcmp_action_resource_list(_Xconst void*, _Xconst void*);
+static int qcmp_action_resource(_Xconst void*, _Xconst void*);
+static int bcmp_action_resource(_Xconst void*, _Xconst void*);
+
+/* variables */
+static String XawConvertActionVar(XawActionVarList*, String);
+static void XawDeclareActionVar(XawActionVarList*, String, String);
+
+static XawActionVarList *_XawCreateActionVarList(Widget);
+static XawActionVarList *_XawFindActionVarList(Widget);
+static XawActionVar *_XawCreateActionVar(XawActionVarList*, String);
+static XawActionVar *_XawFindActionVar(XawActionVarList*, String);
+static void _XawDestroyActionVarList(Widget, XtPointer, XtPointer);
+
+/*
+ * Initialization
+ */
+/* resources */
+static XawActionResList **resource_list;
+static Cardinal num_resource_list;
+
+/* variables */
+static XawActionVarList **variable_list;
+static Cardinal num_variable_list;
+
+/*
+ * Implementation
+ */
+/*
+ * Start of Boolean Expression Evaluation Implementation Code
+ */
+Bool
+XawParseBoolean(Widget w, String param, XEvent *event, Bool *succed)
+{
+ char *tmp = param;
+ int value;
+
+ if (!param)
+ return (False);
+
+ value = (int)strtod(param, &tmp);
+ if (*tmp == '\0')
+ return (value);
+
+ if (XmuCompareISOLatin1(param, "true") == 0
+ || XmuCompareISOLatin1(param, "yes") == 0
+ || XmuCompareISOLatin1(param, "on") == 0
+ || XmuCompareISOLatin1(param, "in") == 0
+ || XmuCompareISOLatin1(param, "up") == 0)
+ return (True);
+ else if (XmuCompareISOLatin1(param, "false") == 0
+ || XmuCompareISOLatin1(param, "no") == 0
+ || XmuCompareISOLatin1(param, "off") == 0
+ || XmuCompareISOLatin1(param, "out") == 0
+ || XmuCompareISOLatin1(param, "down") == 0)
+ ;
+ else if (XmuCompareISOLatin1(param, "my") == 0
+ || XmuCompareISOLatin1(param, "mine") == 0)
+ return (event->xany.window == XtWindow(w));
+ else if (XmuCompareISOLatin1(param, "faked") == 0)
+ return (event->xany.send_event != 0);
+ else
+ *succed = False;
+
+ return (False);
+}
+
+Bool
+XawBooleanExpression(Widget w, String param, XEvent *event)
+{
+ XawEvalInfo info;
+ Bool retval;
+
+ if (!param)
+ return (False);
+
+ info.widget = w;
+
+ info.rlist = XawGetActionResList(XtClass(w));
+ info.vlist = XawGetActionVarList(w);
+
+ /*
+ * Verify widget class, in case we will allow the parse proc procedure
+ * as a widget class element, or if we allow overriding the default
+ * parse boolean proc.
+ */
+ info.parse_proc = XawParseBoolean;
+
+ info.event = event;
+ info.cp = info.lp = param;
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "(*) Parsing expression \"%s\"\n", param);
+#endif
+
+ (void)get_token(&info);
+ if (info.token == ERROR)
+ return (False);
+ retval = expr(&info);
+
+ return (info.token != ERROR ? retval : False);
+}
+
+static int
+get_token(XawEvalInfo *info)
+{
+ int ch;
+ char *p, name[256];
+
+ info->lp = info->cp;
+
+ /*COSTCOND*/
+ while (1) /* eat white spaces */
+ {
+ ch = *info->cp++;
+ if (isspace(ch))
+ continue;
+ break;
+ }
+
+ switch (ch)
+ {
+ case AND: case OR: case XOR: case NOT: case LP: case RP:
+ return (info->token = ch);
+ }
+
+ /* It's a symbol name, resolve it. */
+ if (ch == XAW_PRIV_VAR_PREFIX || isalnum(ch) || ch == '_' || ch == '\\')
+ {
+ Bool succed = True;
+
+ p = info->cp - 1;
+
+ while ((ch = *info->cp) && (isalnum(ch) || ch == '_'))
+ ++info->cp;
+
+ strncpy(name, p, XawMin((int)sizeof(name) - 1,
+ (unsigned)(info->cp - p)));
+ name[XawMin((int)sizeof(name) -1, info->cp - p)] = '\0';
+
+ if (name[0] == XAW_PRIV_VAR_PREFIX)
+ {
+ String value = XawConvertActionVar(info->vlist, name);
+
+ info->value = info->parse_proc(info->widget, value, info->event,
+ &succed) & 1;
+ }
+ else
+ {
+ info->value = info->parse_proc(info->widget, name, info->event,
+ &succed) & 1;
+ if (!succed)
+ {
+ String value =
+ XawConvertActionRes(info->rlist, info->widget,
+ name[0] == '\\' ? &name[1] : name);
+ /* '\\' may have been used to escape a resource name.
+ */
+
+ succed = True;
+ info->value = info->parse_proc(info->widget, value, info->event,
+ &succed) & 1;
+ if (!succed)
+ {
+ /* not a numeric value or boolean string */
+ info->value = True;
+ succed = True;
+ }
+ }
+ }
+ if (succed)
+ return (info->token = BOOLEAN);
+ }
+ else if (ch == '\0')
+ return (info->token = END);
+
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "evaluate(): bad token \"%c\" at \"%s\"", ch, info->cp - 1);
+
+ XtAppWarning(XtWidgetToApplicationContext(info->widget), msg);
+ }
+
+ return (info->token = ERROR);
+}
+
+static Bool
+expr(XawEvalInfo *info)
+{
+ Bool left = and(info);
+
+ for (;;)
+ switch (info->token)
+ {
+ case OR:
+ (void)get_token(info);
+ left |= and(info);
+ break;
+ case XOR:
+ (void)get_token(info);
+ left ^= and(info);
+ break;
+ default:
+ return (left);
+ }
+ /* NOTREACHED */
+}
+
+static Bool
+and(XawEvalInfo *info)
+{
+ Bool left = prim(info);
+
+ for (;;)
+ switch (info->token)
+ {
+ case AND:
+ (void)get_token(info);
+ left &= prim(info);
+ break;
+ default:
+ return (left);
+ }
+ /* NOTREACHED */
+}
+
+static Bool
+prim(XawEvalInfo *info)
+{
+ Bool e;
+
+ switch (info->token)
+ {
+ case BOOLEAN:
+ e = info->value;
+ (void)get_token(info);
+ return (e);
+ case NOT:
+ (void)get_token(info);
+ return (!prim(info));
+ case LP:
+ (void)get_token(info);
+ e = expr(info);
+ if (info->token != RP)
+ {
+ char msg[256];
+
+ info->token = ERROR;
+ XmuSnprintf(msg, sizeof(msg),
+ "evaluate(): expecting ), at \"%s\"", info->lp);
+ XtAppWarning(XtWidgetToApplicationContext(info->widget), msg);
+ return (False);
+ }
+ (void)get_token(info);
+ return (e);
+ case END:
+ return (True);
+ default:
+ {
+ char msg[256];
+
+ info->token = ERROR;
+ XmuSnprintf(msg, sizeof(msg),
+ "evaluate(): sintax error, at \"%s\"", info->lp);
+ XtAppWarning(XtWidgetToApplicationContext(info->widget), msg);
+ } return (False);
+ }
+ /* NOTREACHED */
+}
+
+/*
+ * Start of Resources Implementation Code
+ */
+void
+XawSetValuesAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ Arg *arglist;
+ Cardinal num_args, count;
+ XawActionResList *rlist;
+ XawActionVarList *vlist;
+ XawActionRes *resource;
+ XrmValue from, to;
+ String value;
+ char c_1;
+ short c_2;
+ int c_4;
+#ifdef LONG64
+ long c_8;
+#endif
+
+ if (!(*num_params & 1))
+ {
+ XawPrintActionErrorMsg("set-values", w, params, num_params);
+ return;
+ }
+
+ if (!XawBooleanExpression(w, params[0], event))
+ return;
+
+ rlist = XawGetActionResList(XtClass(w));
+ vlist = XawGetActionVarList(w);
+
+ num_args = 0;
+ arglist = (Arg *)XtMalloc(sizeof(Arg) * ((*num_params) >> 1));
+
+ for (count = 1; count < *num_params; count += 2)
+ {
+ if ((resource = _XawFindActionRes(rlist, w, params[count])) == NULL)
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "set-values(): bad resource name \"%s\"",
+ params[count]);
+ XtAppWarning(XtWidgetToApplicationContext(w), msg);
+ continue;
+ }
+ value = XawConvertActionVar(vlist, params[count + 1]);
+ from.size = strlen(value) + 1;
+ from.addr = value;
+ to.size = resource->size;
+ switch (to.size)
+ {
+ case 1: to.addr = (XPointer)&c_1; break;
+ case 2: to.addr = (XPointer)&c_2; break;
+ case 4: to.addr = (XPointer)&c_4; break;
+#ifdef LONG64
+ case 8: to.addr = (XPointer)&c_8; break;
+#endif
+ default:
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "set-values(): bad resource size for \"%s\"",
+ params[count]);
+ XtAppWarning(XtWidgetToApplicationContext(w), msg);
+ } continue;
+ }
+
+ if (strcmp(XtRString, XrmQuarkToString(resource->qtype)) == 0)
+#ifdef LONG64
+ c_8 = (long)from.addr;
+#else
+ c_4 = (int)from.addr;
+#endif
+ else if (!XtConvertAndStore(w, XtRString, &from,
+ XrmQuarkToString(resource->qtype), &to))
+ continue;
+
+ switch (to.size)
+ {
+ case 1:
+ XtSetArg(arglist[num_args], XrmQuarkToString(resource->qname), c_1);
+ break;
+ case 2:
+ XtSetArg(arglist[num_args], XrmQuarkToString(resource->qname), c_2);
+ break;
+ case 4:
+ XtSetArg(arglist[num_args], XrmQuarkToString(resource->qname), c_4);
+ break;
+#ifdef LONG64
+ case 8:
+ XtSetArg(arglist[num_args], XrmQuarkToString(resource->qname), c_8);
+ break;
+#endif
+ }
+ ++num_args;
+ }
+
+ XtSetValues(w, arglist, num_args);
+ XtFree((char *)arglist);
+}
+
+void
+XawGetValuesAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ XawActionResList *rlist;
+ XawActionVarList *vlist;
+ String value;
+ Cardinal count;
+
+ if (!(*num_params & 1))
+ {
+ XawPrintActionErrorMsg("get-values", w, params, num_params);
+ return;
+ }
+ if (!XawBooleanExpression(w, params[0], event))
+ return;
+
+ rlist = XawGetActionResList(XtClass(w));
+ vlist = XawGetActionVarList(w);
+
+ for (count = 1; count < *num_params; count += 2)
+ {
+ if ((value = XawConvertActionRes(rlist, w, params[count + 1])) == NULL)
+ continue;
+ XawDeclareActionVar(vlist, params[count], value);
+ }
+}
+
+void
+XawDeclareAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ XawActionVarList *vlist;
+ Cardinal count;
+
+ if (!(*num_params & 1))
+ {
+ XawPrintActionErrorMsg("declare", w, params, num_params);
+ return;
+ }
+ if (!XawBooleanExpression(w, params[0], event))
+ return;
+
+ vlist = XawGetActionVarList(w);
+
+ for (count = 1; count < *num_params; count += 2)
+ XawDeclareActionVar(vlist, params[count], params[count + 1]);
+}
+
+void
+XawCallProcAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ String *args;
+ Cardinal num_args;
+
+ if (*num_params < 2)
+ {
+ XawPrintActionErrorMsg("call-proc", w, params, num_params);
+ return;
+ }
+
+ if (*num_params && !XawBooleanExpression(w, params[0], event))
+ return;
+
+ if (*num_params > 2)
+ {
+ args = &params[2];
+ num_args = *num_params - 2;
+ }
+ else
+ {
+ args = NULL;
+ num_args = 0;
+ }
+
+ XtCallActionProc(w, params[1], event, args, num_args);
+}
+
+static String
+XawConvertActionRes(XawActionResList *list, Widget w, String name)
+{
+ XawActionRes *resource;
+ XrmValue from, to;
+ Arg arg;
+ char c_1;
+ short c_2;
+ int c_4;
+#ifdef LONG64
+ long c_8;
+#endif
+
+ if ((resource = _XawFindActionRes(list, w, name)) == NULL)
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "convert(): bad resource name \"%s\"", name);
+ XtAppWarning(XtWidgetToApplicationContext(w), msg);
+ return (NULL);
+ }
+
+ from.size = resource->size;
+ switch (from.size)
+ {
+ case 1:
+ XtSetArg(arg, XrmQuarkToString(resource->qname),
+ from.addr = (XPointer)&c_1);
+ break;
+ case 2:
+ XtSetArg(arg, XrmQuarkToString(resource->qname),
+ from.addr = (XPointer)&c_2);
+ break;
+ case 4:
+ XtSetArg(arg, XrmQuarkToString(resource->qname),
+ from.addr = (XPointer)&c_4);
+ break;
+#ifdef LONG64
+ case 8:
+ XtSetArg(arg, XrmQuarkToString(resource->qname),
+ from.addr = (XPointer)&c_8);
+ break;
+#endif
+ default:
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "convert(): bad resource size for \"%s\"", name);
+ XtAppWarning(XtWidgetToApplicationContext(w), name);
+ } return (NULL);
+ }
+
+ XtGetValues(w, &arg, 1);
+ to.size = sizeof(String);
+ to.addr = NULL;
+
+ if (strcmp(XtRString, XrmQuarkToString(resource->qtype)) == 0)
+ to.addr = *(char **)from.addr;
+ else if (!XtConvertAndStore(w, XrmQuarkToString(resource->qtype),
+ &from, XtRString, &to))
+ return (NULL);
+
+ return ((String)to.addr);
+}
+
+void
+XawPrintActionErrorMsg(String action_name, Widget w,
+ String *params, Cardinal *num_params)
+{
+ char msg[1024];
+ unsigned int size, idx;
+
+ size = XmuSnprintf(msg, sizeof(msg), "%s(): bad number of parameters.\n\t(",
+ action_name);
+
+ idx = 0;
+ while (idx < *num_params - 1 && size < sizeof(msg))
+ size += XmuSnprintf(&msg[size], sizeof(msg) - size, "%s, ",
+ params[idx++]);
+ if (*num_params)
+ XmuSnprintf(&msg[size], sizeof(msg) - size, "%s)", params[idx]);
+ else
+ XmuSnprintf(&msg[size], sizeof(msg) - size, ")");
+ XtAppWarning(XtWidgetToApplicationContext(w), msg);
+}
+
+XawActionResList *
+XawGetActionResList(WidgetClass wc)
+{
+ XawActionResList *list;
+
+ list = _XawFindActionResList(wc);
+
+ if (!list)
+ list = _XawCreateActionResList(wc);
+
+ return (list);
+}
+
+static int
+qcmp_action_resource_list(register _Xconst void *left,
+ register _Xconst void *right)
+{
+ return ((char *)((*(XawActionResList **)left)->widget_class) -
+ (char *)((*(XawActionResList **)right)->widget_class));
+}
+
+static XawActionResList *
+_XawCreateActionResList(WidgetClass wc)
+{
+ XawActionResList *list;
+
+ list = (XawActionResList *)XtMalloc(sizeof(XawActionResList));
+ list->widget_class = wc;
+ list->num_common_resources = list->num_constraint_resources = 0;
+ list->resources = NULL;
+
+ if (!resource_list)
+ {
+ num_resource_list = 1;
+ resource_list = (XawActionResList **)XtMalloc(sizeof(XawActionResList*));
+ resource_list[0] = list;
+ }
+ else
+ {
+ ++num_resource_list;
+ resource_list = (XawActionResList **)XtRealloc((char *)resource_list,
+ sizeof(XawActionResList*)
+ * num_resource_list);
+ resource_list[num_resource_list - 1] = list;
+ qsort(resource_list, num_resource_list, sizeof(XawActionResList*),
+ qcmp_action_resource_list);
+ }
+
+ _XawBindActionResList(list);
+
+ return (list);
+}
+
+static int
+bcmp_action_resource_list(register _Xconst void *wc,
+ register _Xconst void *list)
+{
+ return ((char *)wc - (char *)((*(XawActionResList **)list)->widget_class));
+}
+
+static XawActionResList *
+_XawFindActionResList(WidgetClass wc)
+{
+ XawActionResList **list;
+
+ if (!resource_list)
+ return (NULL);
+
+ list = (XawActionResList **)bsearch(wc, resource_list,
+ num_resource_list,
+ sizeof(XawActionResList*),
+ bcmp_action_resource_list);
+
+ return (list ? *list : NULL);
+}
+
+static int
+qcmp_action_resource(register _Xconst void *left,
+ register _Xconst void *right)
+{
+ return (strcmp(XrmQuarkToString((*(XawActionRes **)left)->qname),
+ XrmQuarkToString((*(XawActionRes **)right)->qname)));
+}
+
+static void
+_XawBindActionResList(XawActionResList *list)
+{
+ XtResourceList xt_list, cons_list;
+ Cardinal i, num_xt, num_cons;
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "(*) Creating resource list for class \'%s\'\n---------\n",
+ list->widget_class->core_class.class_name);
+#endif
+
+ XtGetResourceList(list->widget_class, &xt_list, &num_xt);
+ XtGetConstraintResourceList(list->widget_class, &cons_list, &num_cons);
+ list->num_common_resources = num_xt;
+ list->num_constraint_resources = num_cons;
+
+ list->resources = (XawActionRes **)
+ XtMalloc(sizeof(XawActionRes*) * (num_xt + num_cons));
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "Common resources\n---\n");
+#endif
+
+ for (i = 0; i < num_xt; i++)
+ {
+ list->resources[i] = (XawActionRes *)XtMalloc(sizeof(XawActionRes));
+ list->resources[i]->qname =
+ XrmPermStringToQuark(xt_list[i].resource_name);
+ list->resources[i]->qtype =
+ XrmPermStringToQuark(xt_list[i].resource_type);
+ list->resources[i]->size = xt_list[i].resource_size;
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "%-20s\t%-20s\t(%d)\n",
+ xt_list[i].resource_name,
+ xt_list[i].resource_type,
+ xt_list[i].resource_size);
+#endif
+ }
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "---\nContraint resources\n---");
+#endif
+
+ for (; i < num_xt + num_cons; i++)
+ {
+ list->resources[i] = (XawActionRes *)XtMalloc(sizeof(XawActionRes));
+ list->resources[i]->qname =
+ XrmPermStringToQuark(cons_list[i - num_xt].resource_name);
+ list->resources[i]->qtype =
+ XrmPermStringToQuark(cons_list[i - num_xt].resource_type);
+ list->resources[i]->size = cons_list[i - num_xt].resource_size;
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "%-20s\t%-20s\t(%d)\n",
+ cons_list[i - num_xt].resource_name,
+ cons_list[i - num_xt].resource_type,
+ cons_list[i - num_xt].resource_size);
+#endif
+ }
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "---\n");
+#endif
+
+ XtFree((char *)xt_list);
+ if (cons_list)
+ XtFree((char *)cons_list);
+
+ qsort(list->resources, list->num_common_resources, sizeof(XawActionRes*),
+ qcmp_action_resource);
+ if (num_cons)
+ qsort(&list->resources[num_xt], list->num_constraint_resources,
+ sizeof(XawActionRes*), qcmp_action_resource);
+}
+
+static int
+bcmp_action_resource(register _Xconst void *string,
+ register _Xconst void *resource)
+{
+ return (strcmp((String)string,
+ XrmQuarkToString((*(XawActionRes **)resource)->qname)));
+}
+
+static XawActionRes *
+_XawFindActionRes(XawActionResList *list, Widget detail, String name)
+{
+ XawActionRes **res;
+
+ if (!list->resources)
+ return (NULL);
+
+ res = (XawActionRes **)bsearch(name, list->resources,
+ list->num_common_resources,
+ sizeof(XawActionRes*), bcmp_action_resource);
+
+ if (!res && XtParent(detail)
+ && XtIsSubclass(XtParent(detail), constraintWidgetClass))
+ {
+ XawActionResList *cons = XawGetActionResList(XtClass(XtParent(detail)));
+
+ if (cons)
+ res = (XawActionRes **)
+ bsearch(name, &cons->resources[cons->num_common_resources],
+ cons->num_constraint_resources,
+ sizeof(XawActionRes*), bcmp_action_resource);
+ }
+
+ return (res ? *res : NULL);
+}
+
+/*
+ * Start of Variables Implementation Code
+ */
+/* For speed, only does memory allocation when really required */
+static String
+_XawEscapeActionVarValue(String value)
+{
+ String escape;
+
+ if (value[0] == '$' || value[0] == '\\')
+ {
+ escape = XtMalloc(strlen(value) + 2);
+ escape[0] = '\\';
+ strcpy(escape + 1, value);
+ return (escape);
+ }
+ return (NULL);
+}
+
+/* For speed, only does memory allocation when really required */
+static String
+_XawUnescapeActionVarValue(String value)
+{
+ String unescape;
+
+ if (value[0] == '\\')
+ {
+ unescape = XtMalloc(strlen(value));
+ strcpy(unescape, value + 1);
+ return (unescape);
+ }
+ return (NULL);
+}
+
+static void
+XawDeclareActionVar(XawActionVarList *list, String name, String value)
+{
+ XawActionVar *variable;
+ String escape = NULL;
+
+ if (name[0] != XAW_PRIV_VAR_PREFIX)
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg), "declare(): variable name must begin with "
+ "\'%c\', at %s = %s", XAW_PRIV_VAR_PREFIX, name, value);
+ XtAppWarning(XtWidgetToApplicationContext(list->widget), msg);
+ return;
+ }
+ variable = _XawFindActionVar(list, name);
+ if (!variable)
+ variable = _XawCreateActionVar(list, name);
+ if (value)
+ escape = _XawEscapeActionVarValue(value);
+
+ if (variable->qvalue)
+ {
+ String val = escape ? escape : value;
+
+ if (strcmp(XrmQuarkToString(variable->qvalue), val) == 0)
+ {
+ if (escape)
+ XtFree(escape);
+ return;
+ }
+ }
+ variable->qvalue = (escape ? XrmStringToQuark(escape) :
+ (value ? XrmStringToQuark(value) : NULLQUARK));
+ if (escape)
+ XtFree(escape);
+}
+
+static String
+XawConvertActionVar(XawActionVarList *list, String name)
+{
+ XawActionVar *variable;
+ String unescape;
+ XrmQuark quark;
+
+ if (name[0] != XAW_PRIV_VAR_PREFIX)
+ return (name);
+
+ variable = _XawFindActionVar(list, name);
+ if (!variable || variable->qvalue == NULLQUARK)
+ return (name);
+ unescape = _XawUnescapeActionVarValue(XrmQuarkToString(variable->qvalue));
+ if (unescape)
+ {
+ quark = XrmStringToQuark(unescape);
+ XtFree(unescape);
+ }
+ else
+ quark = variable->qvalue;
+
+ return (XrmQuarkToString(quark));
+}
+
+XawActionVarList *
+XawGetActionVarList(Widget w)
+{
+ XawActionVarList *list;
+
+ list = _XawFindActionVarList(w);
+ if (!list)
+ list = _XawCreateActionVarList(w);
+
+ return (list);
+}
+
+static int
+qcmp_action_variable_list(register _Xconst void *left,
+ register _Xconst void *right)
+{
+ return ((char *)((*(XawActionVarList **)left)->widget) -
+ (char *)((*(XawActionVarList **)right)->widget));
+}
+
+static XawActionVarList *
+_XawCreateActionVarList(Widget w)
+{
+ XawActionVarList *list;
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "(*) Creating action variable list for widget %s (%p)\n",
+ XtName(w), w);
+#endif
+
+ list = (XawActionVarList *)XtMalloc(sizeof(XawActionVarList));
+ list->widget = w;
+ list->num_variables = 0;
+ list->variables = NULL;
+
+ if (!variable_list)
+ {
+ num_variable_list = 1;
+ variable_list = (XawActionVarList **)XtMalloc(sizeof(XawActionVarList*));
+ variable_list[0] = list;
+ }
+ else
+ {
+ ++num_variable_list;
+ variable_list = (XawActionVarList **)
+ XtRealloc((char *)variable_list,
+ sizeof(XawActionVarList *) * num_variable_list);
+ variable_list[num_variable_list - 1] = list;
+ qsort(variable_list, num_variable_list, sizeof(XawActionVarList*),
+ qcmp_action_variable_list);
+ }
+
+ XtAddCallback(w, XtNdestroyCallback, _XawDestroyActionVarList,
+ (XtPointer)list);
+
+ return (list);
+}
+
+static int
+bcmp_action_variable_list(register _Xconst void *widget,
+ register _Xconst void *list)
+{
+ return ((char *)widget - (char *)((*(XawActionVarList **)list)->widget));
+}
+
+static XawActionVarList *
+_XawFindActionVarList(Widget w)
+{
+ XawActionVarList **list;
+
+ if (!num_variable_list)
+ return (NULL);
+
+ list = (XawActionVarList **)bsearch(w, variable_list, num_variable_list,
+ sizeof(XawActionVarList*),
+ bcmp_action_variable_list);
+
+ return (list ? *list : NULL);
+}
+
+static int
+qcmp_action_variable(register _Xconst void *left,
+ register _Xconst void *right)
+{
+ return (strcmp(XrmQuarkToString((*(XawActionVar **)left)->qname),
+ XrmQuarkToString((*(XawActionVar **)right)->qname)));
+}
+
+static XawActionVar *
+_XawCreateActionVar(XawActionVarList *list, String name)
+{
+ XawActionVar *variable;
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "(*) Creating action variable '%s' for widget %s (%p)\n",
+ name, XtName(list->widget), list->widget);
+#endif
+
+ variable = (XawActionVar *)XtMalloc(sizeof(XawActionVar));
+ variable->qname = XrmStringToQuark(name);
+ variable->qvalue = NULLQUARK;
+
+ if (!list->variables)
+ {
+ list->num_variables = 1;
+ list->variables = (XawActionVar **)XtMalloc(sizeof(XawActionVar*));
+ list->variables[0] = variable;
+ }
+ else
+ {
+ ++list->num_variables;
+ list->variables = (XawActionVar **)XtRealloc((char *)list->variables,
+ sizeof(XawActionVar *) *
+ list->num_variables);
+ list->variables[list->num_variables - 1] = variable;
+ qsort(list->variables, list->num_variables, sizeof(XawActionVar*),
+ qcmp_action_variable);
+ }
+ return (variable);
+}
+
+static int
+bcmp_action_variable(register _Xconst void *string,
+ register _Xconst void *variable)
+{
+ return (strcmp((String)string,
+ XrmQuarkToString((*(XawActionVar **)variable)->qname)));
+}
+
+static XawActionVar *
+_XawFindActionVar(XawActionVarList *list, String name)
+{
+ XawActionVar **var;
+
+ if (!list->variables)
+ return (NULL);
+
+ var = (XawActionVar **)bsearch(name, list->variables, list->num_variables,
+ sizeof(XawActionVar*), bcmp_action_variable);
+
+ return (var ? *var : NULL);
+}
+
+/*ARGSUSED*/
+static void
+_XawDestroyActionVarList(Widget w, XtPointer client_data, XtPointer call_data)
+{
+ XawActionVarList *list = (XawActionVarList *)client_data;
+ Cardinal i;
+
+ for (i = 0; i < num_variable_list; i++)
+ if (variable_list[i] == list)
+ break;
+ if (i >= num_variable_list || list->widget != w
+ || variable_list[i]->widget != w)
+ {
+ XtWarning("destroy-variable-list(): Bad widget argument.");
+ return;
+ }
+ if (--num_variable_list > 0)
+ {
+ memmove(&variable_list[i], &variable_list[i + 1],
+ (num_variable_list - i) * sizeof(XawActionVarList *));
+ variable_list = (XawActionVarList **)
+ XtRealloc((char *)variable_list, sizeof(XawActionVarList *) *
+ num_variable_list);
+ }
+ else
+ {
+ XtFree((char *)variable_list);
+ variable_list = NULL;
+ }
+
+ XtFree((char *)list->variables);
+ XtFree((char *)list);
+}
+
+#endif /* OLDXAW */
diff --git a/libXaw/src/AllWidgets.c b/libXaw/src/AllWidgets.c
index 4d95887d1..5d24e896b 100644
--- a/libXaw/src/AllWidgets.c
+++ b/libXaw/src/AllWidgets.c
@@ -1,127 +1,118 @@
-/* $Xorg: AllWidgets.c,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $ */
-
-/*
-
-Copyright (c) 1991, 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/AllWidgets.c,v 1.3 2001/08/23 21:49:51 tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/Xmu/WidgetNode.h>
-#include <X11/Xaw/AllWidgets.h>
-
-extern WidgetClass applicationShellWidgetClass;
-extern WidgetClass asciiSinkObjectClass;
-extern WidgetClass asciiSrcObjectClass;
-extern WidgetClass asciiTextWidgetClass;
-extern WidgetClass boxWidgetClass;
-extern WidgetClass commandWidgetClass;
-extern WidgetClass dialogWidgetClass;
-extern WidgetClass formWidgetClass;
-extern WidgetClass gripWidgetClass;
-extern WidgetClass labelWidgetClass;
-extern WidgetClass listWidgetClass;
-extern WidgetClass menuButtonWidgetClass;
-extern WidgetClass multiSinkObjectClass;
-extern WidgetClass multiSrcObjectClass;
-extern WidgetClass overrideShellWidgetClass;
-extern WidgetClass panedWidgetClass;
-extern WidgetClass pannerWidgetClass;
-extern WidgetClass portholeWidgetClass;
-extern WidgetClass repeaterWidgetClass;
-extern WidgetClass scrollbarWidgetClass;
-extern WidgetClass shellWidgetClass;
-extern WidgetClass simpleMenuWidgetClass;
-extern WidgetClass simpleWidgetClass;
-extern WidgetClass smeBSBObjectClass;
-extern WidgetClass smeLineObjectClass;
-extern WidgetClass smeObjectClass;
-extern WidgetClass stripChartWidgetClass;
-extern WidgetClass textSinkObjectClass;
-extern WidgetClass textSrcObjectClass;
-extern WidgetClass textWidgetClass;
-extern WidgetClass toggleWidgetClass;
-extern WidgetClass topLevelShellWidgetClass;
-extern WidgetClass transientShellWidgetClass;
-extern WidgetClass treeWidgetClass;
-extern WidgetClass vendorShellWidgetClass;
-extern WidgetClass viewportWidgetClass;
-extern WidgetClass wmShellWidgetClass;
-#if !defined(OLDXAW) && !defined(XAW7)
-extern WidgetClass xawPrintShellWidgetClass;
-#endif
-
-XmuWidgetNode XawWidgetArray[] = {
-{ "applicationShell", &applicationShellWidgetClass },
-{ "asciiSink", &asciiSinkObjectClass },
-{ "asciiSrc", &asciiSrcObjectClass },
-{ "asciiText", &asciiTextWidgetClass },
-{ "box", &boxWidgetClass },
-{ "command", &commandWidgetClass },
-{ "composite", &compositeWidgetClass },
-{ "constraint", &constraintWidgetClass },
-{ "core", &coreWidgetClass },
-{ "dialog", &dialogWidgetClass },
-{ "form", &formWidgetClass },
-{ "grip", &gripWidgetClass },
-{ "label", &labelWidgetClass },
-{ "list", &listWidgetClass },
-{ "menuButton", &menuButtonWidgetClass },
-{ "multiSink", &multiSinkObjectClass },
-{ "multiSrc", &multiSrcObjectClass },
-{ "object", &objectClass },
-{ "overrideShell", &overrideShellWidgetClass },
-{ "paned", &panedWidgetClass },
-{ "panner", &pannerWidgetClass },
-{ "porthole", &portholeWidgetClass },
-{ "rect", &rectObjClass },
-{ "repeater", &repeaterWidgetClass },
-{ "scrollbar", &scrollbarWidgetClass },
-{ "shell", &shellWidgetClass },
-{ "simpleMenu", &simpleMenuWidgetClass },
-{ "simple", &simpleWidgetClass },
-{ "smeBSB", &smeBSBObjectClass },
-{ "smeLine", &smeLineObjectClass },
-{ "sme", &smeObjectClass },
-{ "stripChart", &stripChartWidgetClass },
-{ "textSink", &textSinkObjectClass },
-{ "textSrc", &textSrcObjectClass },
-{ "text", &textWidgetClass },
-{ "toggle", &toggleWidgetClass },
-{ "topLevelShell", &topLevelShellWidgetClass },
-{ "transientShell", &transientShellWidgetClass },
-{ "tree", &treeWidgetClass },
-{ "vendorShell", &vendorShellWidgetClass },
-{ "viewport", &viewportWidgetClass },
-{ "wmShell", &wmShellWidgetClass },
-#if !defined(OLDXAW) && !defined(XAW7)
-{ "printShell", &xawPrintShellWidgetClass },
-#endif
-};
-
-int XawWidgetCount = XtNumber(XawWidgetArray);
-
+/*
+
+Copyright (c) 1991, 1994, 1998 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.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/Xmu/WidgetNode.h>
+#include <X11/Xaw/AllWidgets.h>
+
+extern WidgetClass applicationShellWidgetClass;
+extern WidgetClass asciiSinkObjectClass;
+extern WidgetClass asciiSrcObjectClass;
+extern WidgetClass asciiTextWidgetClass;
+extern WidgetClass boxWidgetClass;
+extern WidgetClass commandWidgetClass;
+extern WidgetClass dialogWidgetClass;
+extern WidgetClass formWidgetClass;
+extern WidgetClass gripWidgetClass;
+extern WidgetClass labelWidgetClass;
+extern WidgetClass listWidgetClass;
+extern WidgetClass menuButtonWidgetClass;
+extern WidgetClass multiSinkObjectClass;
+extern WidgetClass multiSrcObjectClass;
+extern WidgetClass overrideShellWidgetClass;
+extern WidgetClass panedWidgetClass;
+extern WidgetClass pannerWidgetClass;
+extern WidgetClass portholeWidgetClass;
+extern WidgetClass repeaterWidgetClass;
+extern WidgetClass scrollbarWidgetClass;
+extern WidgetClass shellWidgetClass;
+extern WidgetClass simpleMenuWidgetClass;
+extern WidgetClass simpleWidgetClass;
+extern WidgetClass smeBSBObjectClass;
+extern WidgetClass smeLineObjectClass;
+extern WidgetClass smeObjectClass;
+extern WidgetClass stripChartWidgetClass;
+extern WidgetClass textSinkObjectClass;
+extern WidgetClass textSrcObjectClass;
+extern WidgetClass textWidgetClass;
+extern WidgetClass toggleWidgetClass;
+extern WidgetClass topLevelShellWidgetClass;
+extern WidgetClass transientShellWidgetClass;
+extern WidgetClass treeWidgetClass;
+extern WidgetClass vendorShellWidgetClass;
+extern WidgetClass viewportWidgetClass;
+extern WidgetClass wmShellWidgetClass;
+
+XmuWidgetNode XawWidgetArray[] = {
+{ "applicationShell", &applicationShellWidgetClass },
+{ "asciiSink", &asciiSinkObjectClass },
+{ "asciiSrc", &asciiSrcObjectClass },
+{ "asciiText", &asciiTextWidgetClass },
+{ "box", &boxWidgetClass },
+{ "command", &commandWidgetClass },
+{ "composite", &compositeWidgetClass },
+{ "constraint", &constraintWidgetClass },
+{ "core", &coreWidgetClass },
+{ "dialog", &dialogWidgetClass },
+{ "form", &formWidgetClass },
+{ "grip", &gripWidgetClass },
+{ "label", &labelWidgetClass },
+{ "list", &listWidgetClass },
+{ "menuButton", &menuButtonWidgetClass },
+{ "multiSink", &multiSinkObjectClass },
+{ "multiSrc", &multiSrcObjectClass },
+{ "object", &objectClass },
+{ "overrideShell", &overrideShellWidgetClass },
+{ "paned", &panedWidgetClass },
+{ "panner", &pannerWidgetClass },
+{ "porthole", &portholeWidgetClass },
+{ "rect", &rectObjClass },
+{ "repeater", &repeaterWidgetClass },
+{ "scrollbar", &scrollbarWidgetClass },
+{ "shell", &shellWidgetClass },
+{ "simpleMenu", &simpleMenuWidgetClass },
+{ "simple", &simpleWidgetClass },
+{ "smeBSB", &smeBSBObjectClass },
+{ "smeLine", &smeLineObjectClass },
+{ "sme", &smeObjectClass },
+{ "stripChart", &stripChartWidgetClass },
+{ "textSink", &textSinkObjectClass },
+{ "textSrc", &textSrcObjectClass },
+{ "text", &textWidgetClass },
+{ "toggle", &toggleWidgetClass },
+{ "topLevelShell", &topLevelShellWidgetClass },
+{ "transientShell", &transientShellWidgetClass },
+{ "tree", &treeWidgetClass },
+{ "vendorShell", &vendorShellWidgetClass },
+{ "viewport", &viewportWidgetClass },
+{ "wmShell", &wmShellWidgetClass },
+};
+
+int XawWidgetCount = XtNumber(XawWidgetArray);
+
diff --git a/libXaw/src/AsciiSink.c b/libXaw/src/AsciiSink.c
index ad35a127c..a20cf63d3 100644
--- a/libXaw/src/AsciiSink.c
+++ b/libXaw/src/AsciiSink.c
@@ -1,1951 +1,1948 @@
-/* $Xorg: AsciiSink.c,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/AsciiSink.c,v 1.26 2001/12/14 19:54:38 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xatom.h>
-#include <X11/Xaw/XawInit.h>
-#include <X11/Xaw/AsciiSinkP.h>
-#include <X11/Xaw/AsciiSrcP.h>
-#include <X11/Xaw/TextP.h>
-#include "Private.h"
-
-#ifdef GETLASTPOS
-#undef GETLASTPOS /* We will use our own GETLASTPOS */
-#endif
-
-#define GETLASTPOS \
- XawTextSourceScan(source, 0, XawstAll, XawsdRight, 1, True)
-
-/*
- * Class Methods
- */
-static void XawAsciiSinkClassPartInitialize(WidgetClass);
-static void XawAsciiSinkInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawAsciiSinkDestroy(Widget);
-static void XawAsciiSinkResize(Widget);
-static Boolean XawAsciiSinkSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static int MaxLines(Widget, unsigned int);
-static int MaxHeight(Widget, int);
-static void SetTabs(Widget, int, short*);
-static void DisplayText(Widget, int, int,
- XawTextPosition, XawTextPosition, Bool);
-static void InsertCursor(Widget, int, int, XawTextInsertState);
-static void FindPosition(Widget, XawTextPosition, int, int, Bool,
- XawTextPosition*, int*, int*);
-static void FindDistance(Widget, XawTextPosition, int, XawTextPosition, int*,
- XawTextPosition*, int*);
-static void Resolve(Widget, XawTextPosition, int, int, XawTextPosition*);
-static void GetCursorBounds(Widget, XRectangle*);
-#ifndef OLDXAW
-static void AsciiPreparePaint(Widget, int, int,
- XawTextPosition, XawTextPosition, Bool);
-static void AsciiDoPaint(Widget);
-#endif
-
-/*
- * Prototypes
- */
-static void GetGC(AsciiSinkObject);
-static int CharWidth(AsciiSinkObject, XFontStruct*, int, unsigned int);
-static unsigned int PaintText(Widget w, GC gc, int x, int y,
- char *buf, int len, Bool);
-
-/*
- * Defined in TextSink.c
- */
-void _XawTextSinkClearToBackground(Widget, int, int, unsigned, unsigned);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(AsciiSinkRec, ascii_sink.field)
-static XtResource resources[] = {
- {
- XtNfont,
- XtCFont,
- XtRFontStruct,
- sizeof(XFontStruct*),
- offset(font),
- XtRString,
- XtDefaultFont
- },
- {
- XtNecho,
- XtCOutput,
- XtRBoolean,
- sizeof(Boolean),
- offset(echo),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNdisplayNonprinting,
- XtCOutput,
- XtRBoolean,
- sizeof(Boolean),
- offset(display_nonprinting),
- XtRImmediate,
- (XtPointer)
- True
- },
-};
-#undef offset
-
-#define Superclass (&textSinkClassRec)
-AsciiSinkClassRec asciiSinkClassRec = {
- /* object */
- {
- (WidgetClass)Superclass, /* superclass */
- "AsciiSink", /* class_name */
- sizeof(AsciiSinkRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- XawAsciiSinkClassPartInitialize, /* class_part_initialize */
- False, /* class_inited */
- XawAsciiSinkInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* obj1 */
- NULL, /* obj2 */
- 0, /* obj3 */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* obj4 */
- False, /* obj5 */
- False, /* obj6 */
- False, /* obj7 */
- XawAsciiSinkDestroy, /* destroy */
- (XtProc)XawAsciiSinkResize, /* obj8 */
- NULL, /* obj9 */
- XawAsciiSinkSetValues, /* set_values */
- NULL, /* set_values_hook */
- NULL, /* obj10 */
- NULL, /* get_values_hook */
- NULL, /* obj11 */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* obj12 */
- NULL, /* obj13 */
- NULL, /* obj14 */
- NULL, /* extension */
- },
- /* text_sink */
- {
- DisplayText, /* DisplayText */
- InsertCursor, /* InsertCursor */
- XtInheritClearToBackground, /* ClearToBackground */
- FindPosition, /* FindPosition */
- FindDistance, /* FindDistance */
- Resolve, /* Resolve */
- MaxLines, /* MaxLines */
- MaxHeight, /* MaxHeight */
- SetTabs, /* SetTabs */
- GetCursorBounds, /* GetCursorBounds */
-#ifndef OLDXAW
- NULL /* extension */
-#endif
- },
- /* ascii_sink */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass asciiSinkObjectClass = (WidgetClass)&asciiSinkClassRec;
-
-/*
- * Implementation
- */
-static void
-XawAsciiSinkClassPartInitialize(WidgetClass wc)
-{
-#ifndef OLDXAW
- AsciiSinkObjectClass cclass = (AsciiSinkObjectClass)wc;
- XrmQuark record_type = XrmPermStringToQuark("TextSink");
- TextSinkExt ext = cclass->text_sink_class.extension;
-
- while (ext) {
- if (ext->record_type == record_type &&
- ext->version == 1) {
- ext->PreparePaint = AsciiPreparePaint;
- ext->DoPaint = AsciiDoPaint;
- break;
- }
- ext = (TextSinkExt)ext->next_extension;
- }
- if (ext == NULL)
- XtError("TextSinkClass: cannot resolve extension.\n");
-#endif
-}
-
-static int
-CharWidth(AsciiSinkObject sink, XFontStruct *font, int x, unsigned int c)
-{
- int width = 0;
-
- if (c == XawLF)
- return (0);
-
- if (c == XawTAB) {
- int i;
- Position *tab;
-
- width = x;
- /* Adjust for Left Margin */
- x -= ((TextWidget)XtParent((Widget)sink))->text.left_margin;
-
- i = 0;
- tab = sink->text_sink.tabs;
- /*CONSTCOND*/
- while (1) {
- if (x >= 0 && x < *tab)
- return (*tab - x);
- /* Start again */
- if (++i >= sink->text_sink.tab_count) {
- x -= *tab;
- i = 0;
- tab = sink->text_sink.tabs;
- if (width == x)
- return (0);
- }
- else
- ++tab;
- }
- /*NOTREACHED*/
- }
-
- if ((c & 0177) < XawSP || c == 0177) {
- if (sink->ascii_sink.display_nonprinting) {
- if (c > 0177) {
- width = CharWidth(sink, font, x, '\\');
- width += CharWidth(sink, font, x, ((c >> 6) & 7) + '0');
- width += CharWidth(sink, font, x, ((c >> 3) & 7) + '0');
- c = (c & 7) + '0';
- }
- else {
- width = CharWidth(sink, font, x, '^');
- if ((c |= 0100) == 0177)
- c = '?';
- }
- }
- else
- c = XawSP;
- }
-
- if (font->per_char
- && (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2))
- width += font->per_char[c - font->min_char_or_byte2].width;
- else
- width += font->min_bounds.width;
-
- return (width);
-}
-
-#ifndef OLDXAW
-static int
-GetTextWidth(TextWidget ctx, int current_width, XFontStruct *font,
- XawTextPosition from, int length)
-{
- int i, width = 0;
- XawTextBlock block;
- XawTextPosition pos = from;
-
- while (length > 0) {
- pos = XawTextSourceRead(ctx->text.source, from, &block, length);
- length -= pos - from;
- from = pos;
- for (i = 0; i < block.length; i++)
- width += CharWidth((AsciiSinkObject)ctx->text.sink, font,
- current_width + width,
- (unsigned char)block.ptr[i]);
- }
-
- return (width);
-}
-
-static
-void CalculateBearing(TextWidget ctx, XawTextPosition position, int x, int y,
- int ascent, int descent, Bool highlight, Bool right)
-{
-/*
- * Sample case:
- *
- * lbearing| width |rbearing
- * | |
- * | ####
- * | ### |
- * | #### |
- * | #### |
- * | ########## |
- * | #### |
- * | #### |
- * | #### |
- * | #### |
- * |### |
- * #### |
- * | |
- *
- */
- AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextProperty *property;
- XawTextPaintStruct *paint;
- XawTextBlock block;
- XFontStruct *font;
-
- property = NULL;
- if (XawTextSourceAnchorAndEntity(ctx->text.source, position,
- &anchor, &entity) &&
- (property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- font = property->font;
- else
- font = sink->ascii_sink.font;
- if (right) {
- if (font->max_bounds.rbearing > 0) {
- int rbearing = font->max_bounds.rbearing - font->max_bounds.width;
- unsigned char c;
-
- (void)XawTextSourceRead(ctx->text.source, position, &block, 1);
- c = *(unsigned char*)block.ptr;
- if (c == '\t' || c == '\n')
- c = ' ';
- else if ((c & 0177) < XawSP || c == 0177) {
- if (sink->ascii_sink.display_nonprinting)
- c = c > 0177 ? (c & 7) + '0' : c + '@';
- else
- c = ' ';
- }
- if (font->per_char &&
- (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2))
- rbearing = font->per_char[c - font->min_char_or_byte2].rbearing -
- font->per_char[c - font->min_char_or_byte2].width;
- if (rbearing > 0) {
- paint = XtNew(XawTextPaintStruct);
- paint->next = sink->text_sink.paint->bearings;
- sink->text_sink.paint->bearings = paint;
- paint->x = x - (paint->width = CharWidth(sink, font, 0, c));
- paint->y = y + ascent;
- paint->property = property;
- paint->max_ascent = ascent;
- paint->max_descent = descent;
- paint->backtabs = NULL;
- paint->highlight = highlight;
- paint->length = 1;
- paint->text = XtMalloc(1);
- paint->text[0] = c;
- }
- }
- }
- else {
- if (font->min_bounds.lbearing < 0) {
- int lbearing = font->min_bounds.lbearing;
- unsigned char c;
-
- (void)XawTextSourceRead(ctx->text.source, position, &block, 1);
- c = *(unsigned char*)block.ptr;
- if (c == '\t' || c == '\n')
- c = ' ';
- else if ((c & 0177) < XawSP || c == 0177) {
- if (sink->ascii_sink.display_nonprinting)
- c = c > 0177 ? '\\' : c + '^';
- else
- c = ' ';
- }
- if (font->per_char &&
- (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2))
- lbearing = font->per_char[c - font->min_char_or_byte2].lbearing;
- if (lbearing < 0) {
- paint = XtNew(XawTextPaintStruct);
- paint->next = sink->text_sink.paint->bearings;
- sink->text_sink.paint->bearings = paint;
- paint->x = x;
- paint->width = -CharWidth(sink, font, 0, c);
- paint->y = y + ascent;
- paint->property = property;
- paint->max_ascent = ascent;
- paint->max_descent = descent;
- paint->backtabs = NULL;
- paint->highlight = highlight;
- paint->length = 1;
- paint->text = XtMalloc(1);
- paint->text[0] = c;
- }
- }
- }
-}
-
-static void
-AsciiPreparePaint(Widget w, int y, int line,
- XawTextPosition from, XawTextPosition to, Bool highlight)
-{
- static XmuSegment segment;
- static XmuScanline next;
- static XmuScanline scanline = {0, &segment, &next};
- static XmuArea area = {&scanline};
-
- TextWidget ctx = (TextWidget)XtParent(w);
- AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
- XawTextPosition left, right, pos, pos2, tmp, length;
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextProperty *property;
- int i, ascent = 0, descent = 0, xl, xr, x = ctx->text.left_margin, bufsiz;
- XawTextBlock block;
- XFontStruct *font;
- XawTextPaintStruct *paint;
-
- if (!sink->ascii_sink.echo)
- return;
-
- /* pass 1: calculate ascent/descent values and x coordinate */
- /* XXX the MAX ascent/descent value should be in the line table XXX */
- /* XXX the x coordinate can be a parameter, but since it is required
- to calculate the ascent/descent, do it here to avoid an extra
- search in the entities */
- pos = tmp = left = ctx->text.lt.info[line].position;
- right = ctx->text.lt.info[line + 1].position;
- right = XawMin(right, ctx->text.lastPos + 1);
- while (pos < right) {
- if (XawTextSourceAnchorAndEntity(ctx->text.source, pos,
- &anchor, &entity)) {
- if ((property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- font = property->font;
- else
- font = sink->ascii_sink.font;
- tmp = pos;
- pos = anchor->position + entity->offset + entity->length;
- if ((length = XawMin(from, pos) - tmp) > 0)
- x += GetTextWidth(ctx, x, font, tmp, length);
- ascent = XawMax(font->ascent, ascent);
- descent = XawMax(font->descent, descent);
- }
- else if (anchor) {
- ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
- descent = XawMax(sink->ascii_sink.font->descent, descent);
- while (entity && pos < right) {
- tmp = pos;
- if ((pos = anchor->position + entity->offset) < tmp)
- pos = tmp;
- else {
- if ((length = XawMin(from, pos) - tmp) > 0) {
- x += GetTextWidth(ctx, x, sink->ascii_sink.font, tmp,
- length);
- tmp += length;
- }
- if (pos < right) {
- pos += entity->length;
- if ((property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- font = property->font;
- else
- font = sink->ascii_sink.font;
- if ((length = XawMin(from, pos) - tmp) > 0)
- x += GetTextWidth(ctx, x, font, tmp, length);
- ascent = XawMax(font->ascent, ascent);
- descent = XawMax(font->descent, descent);
- }
- }
- entity = entity->next;
- }
-
- if (anchor->entities == NULL) {
- tmp = XawMin(pos, from);
- if ((length = from - tmp) > 0)
- x += GetTextWidth(ctx, x, sink->ascii_sink.font, tmp, length);
- break;
- }
- }
- else {
- tmp = XawMin(pos, from);
- if ((length = from - tmp) > 0)
- x += GetTextWidth(ctx, x, sink->ascii_sink.font, tmp, length);
- ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
- descent = XawMax(sink->ascii_sink.font->descent, descent);
- break;
- }
- }
- if (!ascent)
- ascent = sink->ascii_sink.font->ascent;
- if (!descent)
- descent = sink->ascii_sink.font->descent;
-
- xl = x;
-
- /* pass 2: feed the XawTextPaintStruct lists */
- pos = from;
- while (pos < to) {
- paint = XtNew(XawTextPaintStruct);
- paint->next = sink->text_sink.paint->paint;
- sink->text_sink.paint->paint = paint;
- paint->x = x;
- paint->y = y + ascent;
- paint->property = NULL;
- paint->max_ascent = ascent;
- paint->max_descent = descent;
- paint->backtabs = NULL;
- paint->highlight = highlight;
-
- tmp = pos;
- if (XawTextSourceAnchorAndEntity(ctx->text.source, pos,
- &anchor, &entity)) {
- pos = anchor->position + entity->offset + entity->length;
- if ((paint->property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (paint->property->mask & XAW_TPROP_FONT))
- font = paint->property->font;
- else
- font = sink->ascii_sink.font;
- }
- else {
- if (anchor) {
- while (entity && anchor->position + entity->offset < pos)
- entity = entity->next;
- if (entity)
- pos = anchor->position + entity->offset;
- else
- pos = to;
- }
- else
- pos = to;
- font = sink->ascii_sink.font;
- }
- pos = XawMin(pos, to);
- length = pos - tmp;
-
- paint->text = XtMalloc(bufsiz = pos - tmp + 4);
- paint->length = 0;
- segment.x1 = x;
-
- pos2 = tmp;
- while (length > 0) {
- pos2 = XawTextSourceRead(ctx->text.source, tmp, &block, length);
- length = pos - pos2;
- tmp = pos2;
- for (i = 0; i < block.length; i++) {
- unsigned char c = (unsigned char)block.ptr[i];
-
- if (paint->length + 4 > bufsiz)
- paint->text = XtRealloc(paint->text, bufsiz += 32);
- paint->text[paint->length] = c;
- if (c == '\n') {
- x += CharWidth(sink, font, 0, ' ');
- continue;
- }
- if (c == '\t') {
- x += XTextWidth(font, paint->text, paint->length);
- segment.x2 = x + CharWidth(sink, font, x, '\t');
-
- if (XmuValidSegment(&segment)) {
- if (!highlight && (paint->property &&
- (paint->property->mask & XAW_TPROP_BACKGROUND))) {
- if (ascent > font->ascent) {
- scanline.y = y;
- next.y = y + ascent - font->ascent;
- XmuAreaOr(sink->text_sink.paint->clip, &area);
- }
- if (descent >= font->descent) {
- scanline.y = y + ascent + font->descent;
- next.y = scanline.y + descent - font->descent + 1;
- XmuAreaOr(sink->text_sink.paint->clip, &area);
- }
- if (paint->backtabs == NULL)
- paint->backtabs = XmuCreateArea();
- scanline.y = y + ascent - font->ascent;
- next.y = y + ascent + font->descent;
- XmuAreaOr(paint->backtabs, &area);
- }
- else {
- scanline.y = y;
- next.y = ctx->text.lt.info[line + 1].y;
- if (highlight) {
- if (!sink->text_sink.paint->hightabs)
- sink->text_sink.paint->hightabs =
- XmuCreateArea();
- XmuAreaOr(sink->text_sink.paint->hightabs, &area);
- }
- else
- XmuAreaOr(sink->text_sink.paint->clip, &area);
- }
- }
-
- paint->width = segment.x2 - segment.x1;
- x = segment.x1 = segment.x2;
-
- if (paint->length == 0) {
- paint->x = x;
- continue;
- }
- paint->text = XtRealloc(paint->text, paint->length);
- property = paint->property;
- paint = XtNew(XawTextPaintStruct);
- paint->next = sink->text_sink.paint->paint;
- sink->text_sink.paint->paint = paint;
- paint->x = x;
- paint->y = y + ascent;
- paint->property = property;
- paint->max_ascent = ascent;
- paint->max_descent = descent;
- paint->backtabs = NULL;
- paint->highlight = highlight;
- paint->text = XtMalloc(bufsiz = pos - tmp - length +
- block.length - i + 4);
- paint->length = 0;
- continue;
- }
- if ((c & 0177) < XawSP || c == 0177) {
- if (sink->ascii_sink.display_nonprinting) {
- if (c > 0177) {
- paint->text[paint->length++] = '\\';
- paint->text[paint->length++] = ((c >> 6) & 7) + '0';
- paint->text[paint->length++] = ((c >> 3) & 7) + '0';
- paint->text[paint->length] = (c & 7) + '0';
- }
- else {
- c |= 0100;
- paint->text[paint->length++] = '^';
- paint->text[paint->length] = c == 0177 ? '?' : c;
- }
- }
- else
- paint->text[paint->length] = ' ';
- }
- paint->length++;
- }
- }
-
- x += XTextWidth(font, paint->text, paint->length);
- segment.x2 = x;
- if (XmuValidSegment(&segment)) {
- /* erase only what really is needed */
- /*if (!highlight || (paint->property &&
- (paint->property->mask & XAW_TPROP_BACKGROUND))) {
- if (ascent > font->ascent) {
- scanline.y = y;
- next.y = y + ascent - font->ascent;
- XmuAreaOr(sink->text_sink.paint->clip, &area);
- }
- if (descent > font->descent) {
- scanline.y = y + ascent + font->descent;
- next.y = scanline.y + descent - font->descent;
- XmuAreaOr(sink->text_sink.paint->clip, &area);
- }
- }
- else*/ {
- scanline.y = y;
- next.y = ctx->text.lt.info[line + 1].y;
- XmuAreaOr(sink->text_sink.paint->clip, &area);
- }
- }
-
- paint->width = x - segment.x1;
- }
-
- xr = x;
-
- /* pass 3: bearing clipping */
- if (left < from) {
- CalculateBearing(ctx, from - 1, xl, y, ascent, descent, highlight, True);
- if (ctx->text.s.left < ctx->text.s.right) {
- if (ctx->text.s.right == from)
- CalculateBearing(ctx, from, xl, y, ascent, descent, True, False);
- else if (ctx->text.s.left == from)
- CalculateBearing(ctx, from, xl, y, ascent, descent, False, False);
- }
- }
- right = XawMin(right, ctx->text.lastPos);
- if (right >= to && to > from) {
- if (to < right)
- CalculateBearing(ctx, to, xr, y, ascent, descent, highlight, False);
- if (ctx->text.s.left < ctx->text.s.right) {
- if (ctx->text.s.right == to)
- CalculateBearing(ctx, to - 1, xr, y, ascent, descent, False, True);
- else if (ctx->text.s.left == to)
- CalculateBearing(ctx, to - 1, xr, y, ascent, descent, True, True);
- }
- }
-}
-
-static int
-qcmp_paint_struct(_Xconst void *left, _Xconst void *right)
-{
- return ((*(XawTextPaintStruct**)left)->property -
- (*(XawTextPaintStruct**)right)->property);
-}
-
-static void
-AsciiDoPaint(Widget w)
-{
- TextWidget ctx = (TextWidget)XtParent(w);
- AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
- XmuScanline *scan;
- XmuSegment *seg;
- XawTextPaintList *list = sink->text_sink.paint;
-#if 0
- XawTextPaintStruct *base, *head;
-#endif
- XawTextPaintStruct *paint = list->paint;
- XawTextProperty *property;
- XFontStruct *font = NULL;
- XRectangle *rects;
- int n_rects, i_rects;
- GC gc;
- Bool highlight;
- XRectangle rect;
- int width, height, line_width = -1;
- XGCValues values;
-
- /* pass 1: clear clipping areas */
- /* XXX Don't use XDrawImageString because the font may be italic, and
- will get incorrectly drawn. Probably, it could be a good idea to
- check if this is the case, and do special processing. But this
- will need to be checked if required. */
- for (scan = list->clip->scanline; scan && scan->next; scan = scan->next)
- for (seg = scan->segment; seg; seg = seg->next)
- _XawTextSinkClearToBackground(ctx->text.sink,
- seg->x1, scan->y,
- seg->x2 - seg->x1,
- scan->next->y - scan->y);
-
- /* pass 2: optimize drawing list to avoid too much GC change requests */
- /* XXX this assumes there will not exist entities drawn over other
- entities. */
-#if 0
- while (paint) {
- base = paint;
- head = paint->next;
- while (head) {
- if (head->property == paint->property) {
- base->next = head->next;
- head->next = paint->next;
- paint->next = head;
- paint = head;
- }
- base = head;
- head = head->next;
- }
- paint = paint->next;
- }
-#endif
- if (paint && paint->next) {
- XawTextPaintStruct **paints;
- int i = 0, n_paints = 0;
-
- while (paint) {
- paint = paint->next;
- ++n_paints;
- }
- paints = (XawTextPaintStruct**)
- XtMalloc(n_paints * sizeof(XawTextPaintStruct));
- paint = list->paint;
- while (paint) {
- paints[i++] = paint;
- paint = paint->next;
- }
- qsort((void*)paints, n_paints, sizeof(XawTextPaintStruct*),
- qcmp_paint_struct);
- list->paint = paints[0];
- for (i = 0; i < n_paints - 1; i++)
- paints[i]->next = paints[i + 1];
- paints[i]->next = NULL;
- XtFree((XtPointer)paints);
- }
-
- /* pass 3: clip gc */
- gc = sink->ascii_sink.normgc;
-
- rect.x = ctx->text.r_margin.left;
- rect.y = ctx->text.r_margin.top;
- width = (int)XtWidth(ctx) - RHMargins(ctx);
- height = (int)XtHeight(ctx) - RVMargins(ctx);
- rect.width = width;
- rect.height = height;
- if (width >= 0 && height >= 0)
- XSetClipRectangles(XtDisplay((Widget)ctx), gc,
- 0, 0, &rect, 1, Unsorted);
- else
- XSetClipMask(XtDisplay((Widget)ctx), gc, None);
-
- /* pass 4: draw backgrounds */
- paint = list->paint;
- property = NULL;
- rects = NULL;
- i_rects = n_rects = 0;
- while (paint) {
- if (paint->property && (paint->property->mask & XAW_TPROP_BACKGROUND)) {
- if (property != paint->property) {
- if (i_rects)
- XFillRectangles(XtDisplay(ctx), XtWindow(ctx), gc,
- rects, i_rects);
- i_rects = 0;
- property = paint->property;
- if (property->mask & XAW_TPROP_FONT)
- font = property->font;
- else
- font = sink->ascii_sink.font;
- XSetForeground(XtDisplay(ctx), gc, property->background);
- }
- if (i_rects <= n_rects)
- rects = (XRectangle*)
- XtRealloc((XtPointer)rects, sizeof(XRectangle) *
- ++n_rects);
- rects[i_rects].x = paint->x;
- rects[i_rects].y = paint->y - font->ascent;
- rects[i_rects].width = paint->width;
- rects[i_rects++].height = font->ascent + font->descent;
-
- if (paint->backtabs) {
- for (scan = paint->backtabs->scanline; scan && scan->next;
- scan = scan->next)
- for (seg = scan->segment; seg; seg = seg->next) {
- if (i_rects <= n_rects)
- rects = (XRectangle*)
- XtRealloc((XtPointer)rects, sizeof(XRectangle) *
- ++n_rects);
- rects[i_rects].x = seg->x1;
- rects[i_rects].y = scan->y;
- rects[i_rects].width = seg->x2 - seg->x1;
- rects[i_rects++].height = scan->next->y - scan->y;
- }
- }
-
-
- }
- paint = paint->next;
- }
- if (i_rects)
- XFillRectangles(XtDisplay(ctx), XtWindow(ctx), gc, rects, i_rects);
-
- paint = list->paint;
- i_rects = 0;
- while (paint) {
- if (paint->highlight) {
- if (i_rects == 0)
- XSetForeground(XtDisplay(ctx), gc, sink->text_sink.cursor_color);
- if (i_rects <= n_rects)
- rects = (XRectangle*)
- XtRealloc((XtPointer)rects, sizeof(XRectangle) *
- ++n_rects);
- rects[i_rects].x = paint->x;
- rects[i_rects].y = paint->y - paint->max_ascent;
- rects[i_rects].width = paint->width;
- rects[i_rects++].height = paint->max_ascent + paint->max_descent + 1;
- }
- paint = paint->next;
- }
- if (list->hightabs) {
- for (scan = list->hightabs->scanline; scan && scan->next;
- scan = scan->next)
- for (seg = scan->segment; seg; seg = seg->next) {
- if (i_rects == 0)
- XSetForeground(XtDisplay(ctx), gc,
- sink->text_sink.cursor_color);
- if (i_rects <= n_rects)
- rects = (XRectangle*)
- XtRealloc((XtPointer)rects, sizeof(XRectangle) *
- ++n_rects);
- rects[i_rects].x = seg->x1;
- rects[i_rects].y = scan->y;
- rects[i_rects].width = seg->x2 - seg->x1;
- rects[i_rects++].height = scan->next->y - scan->y;
- }
- }
-
- if (i_rects)
- XFillRectangles(XtDisplay(ctx), XtWindow(ctx), gc, rects, i_rects);
- if (rects)
- XtFree((XtPointer)rects);
-
- /* pass 5: draw text! */
- paint = list->paint;
- if (paint && (property = paint->property) == NULL) {
- font = sink->ascii_sink.font;
- XSetFont(XtDisplay(ctx), gc, font->fid);
- if (!paint->highlight)
- XSetForeground(XtDisplay(ctx), gc, sink->text_sink.foreground);
- }
- else
- property = NULL;
- highlight = False;
- while (paint) {
- if (!highlight && paint->highlight)
- XSetForeground(XtDisplay(ctx), gc, sink->text_sink.background);
- if (highlight || paint->highlight || paint->property != property) {
- if (!paint->property || !(paint->property->mask & XAW_TPROP_FONT))
- font = sink->ascii_sink.font;
- else
- font = paint->property->font;
- XSetFont(XtDisplay(ctx), gc, font->fid);
- if (!paint->highlight) {
- if (!paint->property ||
- !(paint->property->mask & XAW_TPROP_FOREGROUND))
- XSetForeground(XtDisplay(ctx), gc,
- sink->text_sink.foreground);
- else
- XSetForeground(XtDisplay(ctx), gc,
- paint->property->foreground);
- }
- highlight = paint->highlight;
- property = paint->property;
- }
-
- if (paint->x < XtWidth(ctx) && paint->x + paint->width > 0) {
- XDrawString(XtDisplay(ctx), XtWindow(ctx), gc, paint->x, paint->y,
- paint->text, paint->length);
- if (property) {
- if (property->mask & XAW_TPROP_UNDERLINE) {
- if (line_width != property->underline_thickness) {
- values.line_width = line_width =
- property->underline_thickness;
- XChangeGC(XtDisplay(ctx), gc, GCLineWidth, &values);
- }
-
- XDrawLine(XtDisplay(ctx), XtWindow(ctx), gc, paint->x,
- paint->y + property->underline_position,
- paint->x + paint->width,
- paint->y + property->underline_position);
- }
- if (property->mask & XAW_TPROP_OVERSTRIKE) {
- if (line_width != property->underline_thickness) {
- values.line_width = line_width =
- property->underline_thickness;
- XChangeGC(XtDisplay(ctx), gc, GCLineWidth, &values);
- }
-
- XDrawLine(XtDisplay(ctx), XtWindow(ctx), gc, paint->x,
- paint->y - (font->ascent>>1) + (font->descent>>1),
- paint->x + paint->width,
- paint->y - (font->ascent>>1) + (font->descent>>1));
- }
- }
- }
-
- paint = paint->next;
- }
-
- /* pass 6: bearing clipping */
- /* dont care on order of drawing or caching of state (by now) */
- paint = list->bearings;
- while (paint) {
- XRectangle rect;
-
- if (paint->highlight)
- XSetForeground(XtDisplay(ctx), gc, sink->text_sink.background);
- if (!paint->property || !(paint->property->mask & XAW_TPROP_FONT))
- font = sink->ascii_sink.font;
- else
- font = paint->property->font;
- XSetFont(XtDisplay(ctx), gc, font->fid);
- if (!paint->highlight) {
- if (!paint->property ||
- !(paint->property->mask & XAW_TPROP_FOREGROUND))
- XSetForeground(XtDisplay(ctx), gc, sink->text_sink.foreground);
- else
- XSetForeground(XtDisplay(ctx), gc, paint->property->foreground);
- }
- if (paint->x < XtWidth(ctx) && paint->x + paint->width > 0) {
- rect.x = paint->x + paint->width;
- rect.width = XawAbs(paint->width); /* more than enough */
- rect.y = paint->y - font->ascent;
- rect.height = rect.y + font->ascent + font->descent;
- XSetClipRectangles(XtDisplay((Widget)ctx), gc,
- 0, 0, &rect, 1, Unsorted);
- XDrawString(XtDisplay(ctx), XtWindow(ctx), gc, paint->x, paint->y,
- paint->text, paint->length);
- }
- paint = paint->next;
- }
-}
-#endif
-
-/*
- * Function:
- * PaintText
- *
- * Parameters:
- * w - text sink object
- * gc - gc to paint text with
- * x - location to paint the text
- * y - ""
- * buf - buffer and length of text to paint.
- * len - ""
- * clear_bg - clear background before drawing ?
- *
- * Description:
- * Actually paints the text into the window.
- *
- * Returns:
- * the width of the text painted
- */
-static unsigned int
-PaintText(Widget w, GC gc, int x, int y, char *buf, int len, Bool clear_bg)
-{
- AsciiSinkObject sink = (AsciiSinkObject)w;
- TextWidget ctx = (TextWidget)XtParent(w);
- int width = XTextWidth(sink->ascii_sink.font, buf, len);
-
- if ((x > XtWidth(ctx)) || width <= -x) /* Don't draw if we can't see it */
- return (width);
-
- if (clear_bg) {
- _XawTextSinkClearToBackground(w, x, y - sink->ascii_sink.font->ascent,
- width, sink->ascii_sink.font->ascent
- + sink->ascii_sink.font->descent);
- XDrawString(XtDisplay(ctx), XtWindow(ctx), gc, x, y, buf, len);
- }
- else
- XDrawImageString(XtDisplay(ctx), XtWindow(ctx), gc, x, y, buf, len);
-
- return (width);
-}
-
-static void
-DisplayText(Widget w, int x, int y,
- XawTextPosition pos1, XawTextPosition pos2, Bool highlight)
-{
- TextWidget ctx = (TextWidget)XtParent(w);
- AsciiSinkObject sink = (AsciiSinkObject)w;
- XFontStruct *font = sink->ascii_sink.font;
- Widget source = XawTextGetSource(XtParent(w));
- unsigned char buf[260];
- int j, k;
- XawTextBlock blk;
- GC gc, invgc, tabgc;
- int max_x;
- Bool clear_bg;
-
- if (!sink->ascii_sink.echo || !ctx->text.lt.lines)
- return;
-
- max_x = (int)XtWidth(ctx) - ctx->text.r_margin.right;
- clear_bg = !highlight && ctx->core.background_pixmap != XtUnspecifiedPixmap;
-
- gc = highlight ? sink->ascii_sink.invgc : sink->ascii_sink.normgc;
- invgc = highlight ? sink->ascii_sink.normgc : sink->ascii_sink.invgc;
-
- if (highlight && sink->ascii_sink.xorgc)
- tabgc = sink->ascii_sink.xorgc;
- else
- tabgc = invgc;
-
- y += sink->ascii_sink.font->ascent;
- for (j = 0; pos1 < pos2;) {
- pos1 = XawTextSourceRead(source, pos1, &blk, pos2 - pos1);
- for (k = 0; k < blk.length; k++) {
- if (j >= sizeof(buf) - 4) { /* buffer full, dump the text */
- if ((x += PaintText(w, gc, x, y, (char*)buf, j, clear_bg))
- >= max_x)
- return;
- j = 0;
- }
- buf[j] = blk.ptr[k];
- if (buf[j] == XawLF) /* line feeds ('\n') are not printed */
- continue;
-
- else if (buf[j] == '\t') {
- int width;
-
- if (j != 0
- && (x += PaintText(w, gc, x, y, (char*)buf, j, clear_bg))
- >= max_x)
- return;
-
- if ((width = CharWidth(sink, font, x, '\t')) > -x) {
- if (clear_bg)
- _XawTextSinkClearToBackground(w, x, y-font->ascent, width,
- font->ascent+font->descent);
- else
- XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
- tabgc, x, y - font->ascent, width,
- font->ascent + font->descent);
- }
-
- if ((x += width) >= max_x)
- return;
-
- j = -1;
- }
- else if ((buf[j] & 0177) < XawSP || buf[j] == 0177) {
- if (sink->ascii_sink.display_nonprinting) {
- unsigned char c = buf[j];
-
- if (c > 0177) {
- buf[j++] = '\\';
- buf[j++] = ((c >> 6) & 7) + '0';
- buf[j++] = ((c >> 3) & 7) + '0';
- buf[j] = (c & 7) + '0';
- }
- else {
- c |= 0100;
- buf[j++] = '^';
- buf[j] = c == 0177 ? '?' : c;
- }
- }
- else
- buf[j] = ' ';
- }
- j++;
- }
- }
-
- if (j > 0)
- (void)PaintText(w, gc, x, y, (char*)buf, j, clear_bg);
-}
-
-/*
- * Function:
- * GetCursorBounds
- *
- * Parameters:
- * w - text sink object
- * rect - X rectangle to return the cursor bounds
- *
- * Description:
- * Returns the size and location of the cursor.
- */
-static void
-GetCursorBounds(Widget w, XRectangle *rect)
-{
- AsciiSinkObject sink = (AsciiSinkObject)w;
- XFontStruct *font = sink->ascii_sink.font;
- unsigned char ch;
-#ifndef OLDXAW
- TextWidget ctx = (TextWidget)XtParent(w);
- XawTextBlock block;
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextProperty *property;
-
- if (XawTextSourceAnchorAndEntity(XawTextGetSource(XtParent(w)),
- sink->ascii_sink.cursor_position,
- &anchor, &entity)) {
- if ((property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- font = property->font;
- }
- (void)XawTextSourceRead(XawTextGetSource((Widget)ctx),
- ctx->text.insertPos, &block, 1);
- if (!block.length || block.ptr[0] == '\n' || block.ptr[0] == '\t')
- ch = ' ';
- else if ((*((unsigned char*)block.ptr) & 0177) < XawSP ||
- *(unsigned char*)block.ptr == 0177) {
- if (sink->ascii_sink.display_nonprinting)
- ch = *((unsigned char*)block.ptr) > 0177 ? '\\' : '^';
- else
- ch = ' ';
- }
- else
- ch = *(unsigned char*)block.ptr;
-#else
- ch = ' ';
-#endif
-
- rect->width = CharWidth(sink, font, 0, ch);
- rect->height = font->descent + font->ascent + 1;
-
- rect->x = sink->ascii_sink.cursor_x;
- rect->y = sink->ascii_sink.cursor_y - font->ascent;
-}
-
-/* this function is required to support diferent fonts and correctly place
- * the cursor. There are better ways to calculate the base line, but there is
- * no place/code (yet) to store this information.
- */
-static int
-FindCursorY(TextWidget ctx, XawTextPosition position)
-{
- int y, line, ascent;
- AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
-#ifndef OLDXAW
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextProperty *property;
- XawTextPosition left, right;
-#endif
-
- for (line = 0; line < ctx->text.lt.lines; line++)
- if (position < ctx->text.lt.info[line + 1].position)
- break;
-
- y = ctx->text.lt.info[line].y;
-#ifndef OLDXAW
- ascent = 0;
- left = ctx->text.lt.info[line].position;
- right = ctx->text.lt.info[line + 1].position;
- right = XawMin(right, ctx->text.lastPos + 1);
- while (left < right) {
- if (XawTextSourceAnchorAndEntity(ctx->text.source, left,
- &anchor, &entity)) {
- if ((property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- ascent = XawMax(property->font->ascent, ascent);
- else
- ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
- left = anchor->position + entity->offset + entity->length;
- }
- else if (anchor) {
- ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
- while (entity) {
- XawTextPosition tmp = anchor->position + entity->offset + entity->length;
-
- if (tmp > left && tmp < right) {
- left = tmp;
- if ((property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- ascent = XawMax(property->font->ascent, ascent);
- else
- ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
- }
- entity = entity->next;
- }
- if (entity == NULL)
- break;
- }
- else {
- ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
- break;
- }
- }
- if (!ascent)
- ascent = sink->ascii_sink.font->ascent;
-#else
- ascent = sink->ascii_sink.font->ascent;
-#endif
-
- return (y + ascent);
-}
-
-static void
-InsertCursor(Widget w, int x, int y, XawTextInsertState state)
-{
- AsciiSinkObject sink = (AsciiSinkObject)w;
- XFontStruct *font = sink->ascii_sink.font;
- TextWidget ctx = (TextWidget)XtParent(w);
- XawTextPosition position = XawTextGetInsertionPoint((Widget)ctx);
- Boolean overflow = (x & 0xffff8000) != 0;
-#ifndef OLDXAW
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextProperty *property;
-#endif
-
- if (XtIsRealized((Widget)ctx)) {
- int fheight;
- XawTextBlock block;
- XawTextPosition selection_start, selection_end;
- Boolean has_selection;
-
- if (!sink->ascii_sink.echo) {
- if (sink->ascii_sink.laststate != state) {
- int width = CharWidth(sink, font, 0, ' ') - 1;
-
- x = ctx->text.margin.left;
- y = ctx->text.margin.top;
- font = sink->ascii_sink.font;
- fheight = font->ascent + font->descent;
- if (state == XawisOn) {
- if (ctx->text.hasfocus)
- XFillRectangle(XtDisplay(ctx), XtWindow(ctx),
- sink->ascii_sink.xorgc, x, y,
- width + 1, fheight + 1);
- else
- XDrawRectangle(XtDisplay(ctx), XtWindow(ctx),
- sink->ascii_sink.xorgc, x, y,
- width, fheight);
-
- }
- else
- _XawTextSinkClearToBackground(w, x, y,
- width + 1, fheight + 1);
- }
- sink->ascii_sink.cursor_x = x;
- sink->ascii_sink.cursor_y = y;
- sink->ascii_sink.laststate = state;
- return;
- }
-
-
- XawTextGetSelectionPos((Widget)ctx, &selection_start, &selection_end);
- has_selection = selection_start != selection_end;
-
- if (sink->ascii_sink.laststate != state) {
- unsigned char ch;
-
-#ifndef OLDXAW
- if (XawTextSourceAnchorAndEntity(ctx->text.source,
- position, &anchor, &entity) &&
- (property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- font = property->font;
- else
- font = sink->ascii_sink.font;
-#endif
-
- fheight = font->ascent + font->descent;
- (void)XawTextSourceRead(XawTextGetSource((Widget)ctx),
- position, &block, 1);
- if (!block.length || block.ptr[0] == '\n' || block.ptr[0] == '\t')
- ch = ' ';
- else if ((*((unsigned char*)block.ptr) & 0177) < XawSP
- || *(unsigned char*)block.ptr == 0177) {
- if (sink->ascii_sink.display_nonprinting)
- ch = *((unsigned char*)block.ptr) > 0177 ? '\\' : '^';
- else
- ch = ' ';
- }
- else
- ch = *(unsigned char*)block.ptr;
-
- y = FindCursorY(ctx, position);
- if (ctx->text.hasfocus && !has_selection)
- XFillRectangle(XtDisplay(ctx), XtWindow(ctx),
- sink->ascii_sink.xorgc, x, y - font->ascent,
- CharWidth(sink, font, 0, ch), fheight + 1);
- else
- XDrawRectangle(XtDisplay(ctx), XtWindow(ctx),
- sink->ascii_sink.xorgc, x, y - font->ascent,
- CharWidth(sink, font, 0, ch) - 1, fheight);
- }
- }
-
- sink->ascii_sink.cursor_x = overflow ? -16384 : x;
- sink->ascii_sink.cursor_y = y;
- sink->ascii_sink.laststate = state;
- sink->ascii_sink.cursor_position = position;
-}
-
-/*
- * Given two positions, find the distance between them
- */
-static void
-FindDistance(Widget w, XawTextPosition fromPos, int fromx,
- XawTextPosition toPos, int *resWidth,
- XawTextPosition *resPos, int *resHeight)
-{
-#ifndef OLDXAW
- AsciiSinkObject sink = (AsciiSinkObject)w;
- TextWidget ctx = (TextWidget)XtParent(w);
- XFontStruct *font = sink->ascii_sink.font;
- Widget source = ctx->text.source;
- XawTextPosition idx, pos;
- unsigned char c;
- XawTextBlock blk;
- int i, rWidth, ascent = 0, descent = 0;
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextProperty *property;
- Cardinal length;
- Bool done = False;
-
- pos = idx = fromPos;
- rWidth = 0;
- c = 0;
-
- while (!done) {
- if (XawTextSourceAnchorAndEntity(source, pos, &anchor, &entity)) {
- length = anchor->position + entity->offset + entity->length;
- length = XawMin(toPos, length) - pos;
- if ((property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- font = property->font;
- else
- font = sink->ascii_sink.font;
- }
- else {
- if (anchor) {
- while (entity && anchor->position + entity->offset < pos)
- entity = entity->next;
- if (entity) {
- length = anchor->position + entity->offset;
- length = XawMin(toPos, length) - pos;
- }
- else
- length = XawMin(toPos - pos, 4096);
- }
- else
- length = XawMin(toPos - pos, 4096);
- font = sink->ascii_sink.font;
- }
-
- ascent = XawMax(font->ascent, ascent);
- descent = XawMax(font->descent, descent);
-
- pos = XawTextSourceRead(source, pos, &blk, length);
- if (blk.length == 0 && pos == idx) /* eof reached */
- break;
-
- idx = blk.firstPos;
- for (i = 0; idx < toPos; i++, idx++) {
- if (i >= blk.length)
- break;
- c = blk.ptr[i];
- rWidth += CharWidth(sink, font, fromx + rWidth, c);
- if (c == XawLF) {
- idx++;
- done = True;
- break;
- }
- }
- if (idx >= toPos)
- break;
- }
-
- *resPos = idx;
- *resWidth = rWidth;
- *resHeight = ascent + descent + 1;
-#else
- AsciiSinkObject sink = (AsciiSinkObject)w;
- TextWidget ctx = (TextWidget)XtParent(w);
- XFontStruct *font = sink->ascii_sink.font;
- Widget source = ctx->text.source;
- XawTextPosition idx, pos;
- unsigned char c;
- XawTextBlock blk;
- int i, rWidth;
-
- pos = XawTextSourceRead(source, fromPos, &blk, toPos - fromPos);
- rWidth = 0;
- for (i = 0, idx = fromPos; idx < toPos; i++, idx++) {
- if (i >= blk.length) {
- i = 0;
- pos = XawTextSourceRead(source, pos, &blk, toPos - pos);
- if (blk.length == 0)
- break;
- }
- c = blk.ptr[i];
- rWidth += CharWidth(sink, font, fromx + rWidth, c);
- if (c == XawLF) {
- idx++;
- break;
- }
- }
-
- *resPos = idx;
- *resWidth = rWidth;
- *resHeight = font->ascent + font->descent + 1;
-#endif
-}
-
-static void
-FindPosition(Widget w, XawTextPosition fromPos, int fromx, int width,
- Bool stopAtWordBreak, XawTextPosition *resPos,
- int *resWidth, int *resHeight)
-{
-#ifndef OLDXAW
- AsciiSinkObject sink = (AsciiSinkObject)w;
- TextWidget ctx = (TextWidget)XtParent(w);
- Widget source = ctx->text.source;
- XFontStruct *font = sink->ascii_sink.font;
- XawTextPosition idx, pos, whiteSpacePosition = 0;
- int i, lastWidth, whiteSpaceWidth, rWidth, ascent = 0, descent = 0;
- Boolean whiteSpaceSeen;
- unsigned char c;
- XawTextBlock blk;
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextProperty *property;
- Cardinal length;
- Bool done = False;
-
- pos = idx = fromPos;
- rWidth = lastWidth = whiteSpaceWidth = 0;
- whiteSpaceSeen = False;
- c = 0;
-
- while (!done) {
- font = sink->ascii_sink.font;
- if (XawTextSourceAnchorAndEntity(source, pos, &anchor, &entity)) {
- length = anchor->position + entity->offset + entity->length - pos;
- if ((property = XawTextSinkGetProperty((Widget)sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- font = property->font;
- }
- else {
- if (anchor) {
- while (entity && anchor->position + entity->offset < pos)
- entity = entity->next;
- if (entity)
- length = anchor->position + entity->offset - pos;
- else
- length = 4096;
- }
- else
- length = 4096;
- }
-
- ascent = XawMax(font->ascent, ascent);
- descent = XawMax(font->descent, descent);
-
- pos = XawTextSourceRead(source, pos, &blk, length);
- if (blk.length == 0 && pos == idx) /* eof reached */
- break;
-
- idx = blk.firstPos;
- for (i = 0; rWidth <= width && i < blk.length; i++, idx++) {
- c = blk.ptr[i];
- lastWidth = rWidth;
- rWidth += CharWidth(sink, font, fromx + rWidth, c);
-
- if (c == XawLF) {
- idx++;
- done = True;
- break;
- }
- else if ((c == XawSP || c == XawTAB) && rWidth <= width) {
- whiteSpaceSeen = True;
- whiteSpacePosition = idx;
- whiteSpaceWidth = rWidth;
- }
- }
- if (rWidth > width)
- break;
- }
-
- if (rWidth > width && idx > fromPos) {
- idx--;
- rWidth = lastWidth;
- if (stopAtWordBreak && whiteSpaceSeen) {
- idx = whiteSpacePosition + 1;
- rWidth = whiteSpaceWidth;
- }
- }
-
- if (idx >= ctx->text.lastPos && c != XawLF)
- idx = ctx->text.lastPos + 1;
-
- *resPos = idx;
- *resWidth = rWidth;
- *resHeight = ascent + descent + 1;
-#else
- AsciiSinkObject sink = (AsciiSinkObject)w;
- TextWidget ctx = (TextWidget)XtParent(w);
- Widget source = ctx->text.source;
- XFontStruct *font = sink->ascii_sink.font;
- XawTextPosition idx, pos, whiteSpacePosition = 0;
- int i, lastWidth, whiteSpaceWidth, rWidth;
- Boolean whiteSpaceSeen;
- unsigned char c;
- XawTextBlock blk;
-
- pos = XawTextSourceRead(source, fromPos, &blk, BUFSIZ);
- rWidth = lastWidth = whiteSpaceWidth = 0;
- whiteSpaceSeen = False;
- c = 0;
-
- for (i = 0, idx = fromPos; rWidth <= width; i++, idx++) {
- if (i >= blk.length) {
- i = 0;
- pos = XawTextSourceRead(source, pos, &blk, BUFSIZ);
- if (blk.length == 0)
- break;
- }
- c = blk.ptr[i];
- lastWidth = rWidth;
- rWidth += CharWidth(sink, font, fromx + rWidth, c);
-
- if (c == XawLF) {
- idx++;
- break;
- }
- else if ((c == XawSP || c == XawTAB) && rWidth <= width) {
- whiteSpaceSeen = True;
- whiteSpacePosition = idx;
- whiteSpaceWidth = rWidth;
- }
- }
-
- if (rWidth > width && idx > fromPos) {
- idx--;
- rWidth = lastWidth;
- if (stopAtWordBreak && whiteSpaceSeen) {
- idx = whiteSpacePosition + 1;
- rWidth = whiteSpaceWidth;
- }
- }
-
- if (idx >= ctx->text.lastPos && c != XawLF)
- idx = ctx->text.lastPos + 1;
-
- *resPos = idx;
- *resWidth = rWidth;
- *resHeight = font->ascent + font->descent + 1;
-#endif
-}
-
-static void
-Resolve(Widget w, XawTextPosition pos, int fromx, int width,
- XawTextPosition *pos_return)
-{
- int resWidth, resHeight;
- Widget source = XawTextGetSource(XtParent(w));
-
- FindPosition(w, pos, fromx, width, False, pos_return, &resWidth, &resHeight);
- if (*pos_return > GETLASTPOS)
- *pos_return = GETLASTPOS;
-}
-
-static void
-GetGC(AsciiSinkObject sink)
-{
- XtGCMask valuemask = (GCFont | GCGraphicsExposures | GCClipXOrigin |
- GCForeground | GCBackground);
- XGCValues values;
-
- /* XXX We dont want do share a gc that will change the clip-mask */
- values.clip_x_origin = (long)sink;
- values.clip_mask = None;
- values.font = sink->ascii_sink.font->fid;
- values.graphics_exposures = False;
-
- values.foreground = sink->text_sink.foreground;
- values.background = sink->text_sink.background;
- sink->ascii_sink.normgc = XtAllocateGC((Widget)sink, 0, valuemask, &values,
- GCClipMask | GCFont | GCForeground |
- GCBackground, 0);
-
- values.foreground = sink->text_sink.background;
-#ifndef OLDXAW
- values.background = sink->text_sink.cursor_color;
-#else
- values.background = sink->text_sink.foreground;
-#endif
- sink->ascii_sink.invgc = XtAllocateGC((Widget)sink, 0, valuemask, &values,
- GCClipMask | GCFont, 0);
-
- valuemask |= GCFunction;
- values.function = GXxor;
-#ifndef OLDXAW
- values.foreground = sink->text_sink.background ^ sink->text_sink.cursor_color;
-#else
- values.foreground = sink->text_sink.background ^ sink->text_sink.foreground;
-#endif
- values.background = 0L;
- sink->ascii_sink.xorgc = XtAllocateGC((Widget)sink, 0, valuemask,
- &values, GCClipMask | GCFont, 0);
-
- XawAsciiSinkResize((Widget)sink);
-}
-
-/* Function:
- * XawAsciiSinkInitialize
- *
- * Parameters:
- * request - the requested and new values for the object instance
- * cnew - ""
- *
- * Description:
- * Initializes the TextSink Object.
- */
-/*ARGSUSED*/
-static void
-XawAsciiSinkInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- AsciiSinkObject sink = (AsciiSinkObject)cnew;
-
- GetGC(sink);
-
- if (!sink->ascii_sink.font) XtError("Aborting: no font found\n");
-
- sink->ascii_sink.cursor_position = 0;
- sink->ascii_sink.laststate = XawisOff;
- sink->ascii_sink.cursor_x = sink->ascii_sink.cursor_y = 0;
-}
-
-/*
- * Function:
- * XawAsciiSinkDestroy
- *
- * Parameters:
- * w - AsciiSink Object
- *
- * Description:
- * This function cleans up when the object is destroyed.
- */
-static void
-XawAsciiSinkDestroy(Widget w)
-{
- AsciiSinkObject sink = (AsciiSinkObject)w;
-
- XtReleaseGC(w, sink->ascii_sink.normgc);
- XtReleaseGC(w, sink->ascii_sink.invgc);
- XtReleaseGC(w, sink->ascii_sink.xorgc);
-
- sink->ascii_sink.normgc =
- sink->ascii_sink.invgc =
- sink->ascii_sink.xorgc = NULL;
-}
-
-static void
-XawAsciiSinkResize(Widget w)
-{
- TextWidget ctx = (TextWidget)XtParent(w);
- AsciiSinkObject sink = (AsciiSinkObject)w;
- XRectangle rect;
- int width, height;
-
- if (w->core.widget_class != asciiSinkObjectClass)
- return;
-
- rect.x = ctx->text.r_margin.left;
- rect.y = ctx->text.r_margin.top;
- width = (int)XtWidth(ctx) - RHMargins(ctx);
- height = (int)XtHeight(ctx) - RVMargins(ctx);
- rect.width = width;
- rect.height = height;
-
- if (sink->ascii_sink.normgc) {
- if (width >= 0 && height >= 0)
- XSetClipRectangles(XtDisplay((Widget)ctx), sink->ascii_sink.normgc,
- 0, 0, &rect, 1, Unsorted);
- else
- XSetClipMask(XtDisplay((Widget)ctx), sink->ascii_sink.normgc, None);
- }
- if (sink->ascii_sink.invgc) {
- if (width >= 0 && height >= 0)
- XSetClipRectangles(XtDisplay((Widget)ctx), sink->ascii_sink.invgc,
- 0, 0, &rect, 1, Unsorted);
- else
- XSetClipMask(XtDisplay((Widget)ctx), sink->ascii_sink.invgc, None);
- }
- if (sink->ascii_sink.xorgc) {
- if (width >= 0 && height >= 0)
- XSetClipRectangles(XtDisplay((Widget)ctx), sink->ascii_sink.xorgc,
- 0, 0, &rect, 1, Unsorted);
- else
- XSetClipMask(XtDisplay((Widget)ctx), sink->ascii_sink.xorgc, None);
- }
-}
-
-/*
- * Function:
- * XawAsciiSinkSetValues
- *
- * Parameters:
- * current - current state of the object
- * request - what was requested
- * cnew - what the object will become
- *
- * Description:
- * Sets the values for the AsciiSink.
- *
- * Returns:
- * True if redisplay is needed
- */
-/*ARGSUSED*/
-static Boolean
-XawAsciiSinkSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- AsciiSinkObject w = (AsciiSinkObject)cnew;
- AsciiSinkObject old_w = (AsciiSinkObject)current;
-
- if (w->ascii_sink.font != old_w->ascii_sink.font
- || w->text_sink.background != old_w->text_sink.background
- || w->text_sink.foreground != old_w->text_sink.foreground
-#ifndef OLDXAW
- || w->text_sink.cursor_color != old_w->text_sink.cursor_color
- || w->text_sink.properties != old_w->text_sink.properties
-#endif
- ) {
-#ifdef OLDXAW
- XtReleaseGC(cnew, w->ascii_sink.normgc);
- XtReleaseGC(cnew, w->ascii_sink.invgc);
- XtReleaseGC(cnew, w->ascii_sink.xorgc);
- GetGC(w);
-#endif
- ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
- }
- else if (w->ascii_sink.echo != old_w->ascii_sink.echo
- || w->ascii_sink.display_nonprinting
- != old_w->ascii_sink.display_nonprinting)
- ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
-#ifndef OLDXAW
- if (w->text_sink.properties != old_w->text_sink.properties) {
- XawTextProperty *property =
- XawTextSinkGetProperty(cnew, XrmStringToQuark("default"));
-
- if (property) {
- if (property->mask & XAW_TPROP_FONT)
- w->ascii_sink.font = property->font;
- if (property->mask & XAW_TPROP_FOREGROUND)
- w->text_sink.foreground = property->foreground;
- if (property->mask & XAW_TPROP_BACKGROUND)
- w->text_sink.background = property->background;
- }
- }
-#endif
-
- return (False);
-}
-
-/*
- * Function:
- * MaxLines
- *
- * Parameters:
- * w - AsciiSink Object
- * height - height to fit lines into
- *
- * Description:
- * Finds the Maximum number of lines that will fit in a given height.
- *
- * Returns:
- * The number of lines that will fit
- */
-/*ARGSUSED*/
-static int
-MaxLines(Widget w, unsigned int height)
-{
- AsciiSinkObject sink = (AsciiSinkObject)w;
- int font_height;
-
- font_height = sink->ascii_sink.font->ascent + sink->ascii_sink.font->descent + 1;
-
- return ((int)height / font_height);
-}
-
-/*
- * Function:
- * MaxHeight
- *
- * Parameters:
- * w - AsciiSink Object
- * lines - number of lines
- *
- * Description:
- * Finds the Minium height that will contain a given number lines.
- *
- * Returns:
- * the height
- */
-static int
-MaxHeight(Widget w, int lines)
-{
- AsciiSinkObject sink = (AsciiSinkObject)w;
-
- return (lines * (sink->ascii_sink.font->ascent +
- sink->ascii_sink.font->descent + 1));
-}
-
-/*
- * Function:
- * SetTabs
- *
- * Parameters:
- * w - AsciiSink Object
- * tab_count - number of tabs in the list
- * tabs - text positions of the tabs
- *
- * Description:
- * Sets the Tab stops.
- */
-static void
-SetTabs(Widget w, int tab_count, short *tabs)
-{
- AsciiSinkObject sink = (AsciiSinkObject)w;
- int i;
- Atom XA_FIGURE_WIDTH;
- unsigned long figure_width = 0;
- XFontStruct *font = sink->ascii_sink.font;
-
- /*
- * Find the figure width of the current font
- */
- XA_FIGURE_WIDTH = XInternAtom(XtDisplayOfObject(w), "FIGURE_WIDTH", False);
- if (XA_FIGURE_WIDTH != None
- && (!XGetFontProperty(font, XA_FIGURE_WIDTH, &figure_width)
- || figure_width == 0)) {
- if (font->per_char && font->min_char_or_byte2 <= '$'
- && font->max_char_or_byte2 >= '$')
- figure_width = font->per_char['$' - font->min_char_or_byte2].width;
- else
- figure_width = font->max_bounds.width;
- }
-
- if (tab_count > sink->text_sink.tab_count) {
- sink->text_sink.tabs = (Position *)
- XtRealloc((char*)sink->text_sink.tabs, tab_count * sizeof(Position));
- sink->text_sink.char_tabs = (short *)
- XtRealloc((char*)sink->text_sink.char_tabs, tab_count * sizeof(short));
- }
-
- for (i = 0 ; i < tab_count ; i++) {
- sink->text_sink.tabs[i] = tabs[i] * figure_width;
- sink->text_sink.char_tabs[i] = tabs[i];
- }
-
- sink->text_sink.tab_count = tab_count;
-
-#ifndef NO_TAB_FIX
- {
- TextWidget ctx = (TextWidget)XtParent(w);
- ctx->text.redisplay_needed = True;
- _XawTextBuildLineTable(ctx, ctx->text.lt.top, True);
- }
-#endif
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xatom.h>
+#include <X11/Xaw/XawInit.h>
+#include <X11/Xaw/AsciiSinkP.h>
+#include <X11/Xaw/AsciiSrcP.h>
+#include <X11/Xaw/TextP.h>
+#include "Private.h"
+
+#ifdef GETLASTPOS
+#undef GETLASTPOS /* We will use our own GETLASTPOS */
+#endif
+
+#define GETLASTPOS \
+ XawTextSourceScan(source, 0, XawstAll, XawsdRight, 1, True)
+
+/*
+ * Class Methods
+ */
+static void XawAsciiSinkClassPartInitialize(WidgetClass);
+static void XawAsciiSinkInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawAsciiSinkDestroy(Widget);
+static void XawAsciiSinkResize(Widget);
+static Boolean XawAsciiSinkSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static int MaxLines(Widget, unsigned int);
+static int MaxHeight(Widget, int);
+static void SetTabs(Widget, int, short*);
+static void DisplayText(Widget, int, int,
+ XawTextPosition, XawTextPosition, Bool);
+static void InsertCursor(Widget, int, int, XawTextInsertState);
+static void FindPosition(Widget, XawTextPosition, int, int, Bool,
+ XawTextPosition*, int*, int*);
+static void FindDistance(Widget, XawTextPosition, int, XawTextPosition, int*,
+ XawTextPosition*, int*);
+static void Resolve(Widget, XawTextPosition, int, int, XawTextPosition*);
+static void GetCursorBounds(Widget, XRectangle*);
+#ifndef OLDXAW
+static void AsciiPreparePaint(Widget, int, int,
+ XawTextPosition, XawTextPosition, Bool);
+static void AsciiDoPaint(Widget);
+#endif
+
+/*
+ * Prototypes
+ */
+static void GetGC(AsciiSinkObject);
+static int CharWidth(AsciiSinkObject, XFontStruct*, int, unsigned int);
+static unsigned int PaintText(Widget w, GC gc, int x, int y,
+ char *buf, int len, Bool);
+
+/*
+ * Defined in TextSink.c
+ */
+void _XawTextSinkClearToBackground(Widget, int, int, unsigned, unsigned);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(AsciiSinkRec, ascii_sink.field)
+static XtResource resources[] = {
+ {
+ XtNfont,
+ XtCFont,
+ XtRFontStruct,
+ sizeof(XFontStruct*),
+ offset(font),
+ XtRString,
+ XtDefaultFont
+ },
+ {
+ XtNecho,
+ XtCOutput,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(echo),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNdisplayNonprinting,
+ XtCOutput,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(display_nonprinting),
+ XtRImmediate,
+ (XtPointer)
+ True
+ },
+};
+#undef offset
+
+#define Superclass (&textSinkClassRec)
+AsciiSinkClassRec asciiSinkClassRec = {
+ /* object */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "AsciiSink", /* class_name */
+ sizeof(AsciiSinkRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ XawAsciiSinkClassPartInitialize, /* class_part_initialize */
+ False, /* class_inited */
+ XawAsciiSinkInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* obj1 */
+ NULL, /* obj2 */
+ 0, /* obj3 */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* obj4 */
+ False, /* obj5 */
+ False, /* obj6 */
+ False, /* obj7 */
+ XawAsciiSinkDestroy, /* destroy */
+ (XtProc)XawAsciiSinkResize, /* obj8 */
+ NULL, /* obj9 */
+ XawAsciiSinkSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ NULL, /* obj10 */
+ NULL, /* get_values_hook */
+ NULL, /* obj11 */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* obj12 */
+ NULL, /* obj13 */
+ NULL, /* obj14 */
+ NULL, /* extension */
+ },
+ /* text_sink */
+ {
+ DisplayText, /* DisplayText */
+ InsertCursor, /* InsertCursor */
+ XtInheritClearToBackground, /* ClearToBackground */
+ FindPosition, /* FindPosition */
+ FindDistance, /* FindDistance */
+ Resolve, /* Resolve */
+ MaxLines, /* MaxLines */
+ MaxHeight, /* MaxHeight */
+ SetTabs, /* SetTabs */
+ GetCursorBounds, /* GetCursorBounds */
+#ifndef OLDXAW
+ NULL /* extension */
+#endif
+ },
+ /* ascii_sink */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass asciiSinkObjectClass = (WidgetClass)&asciiSinkClassRec;
+
+/*
+ * Implementation
+ */
+static void
+XawAsciiSinkClassPartInitialize(WidgetClass wc)
+{
+#ifndef OLDXAW
+ AsciiSinkObjectClass cclass = (AsciiSinkObjectClass)wc;
+ XrmQuark record_type = XrmPermStringToQuark("TextSink");
+ TextSinkExt ext = cclass->text_sink_class.extension;
+
+ while (ext) {
+ if (ext->record_type == record_type &&
+ ext->version == 1) {
+ ext->PreparePaint = AsciiPreparePaint;
+ ext->DoPaint = AsciiDoPaint;
+ break;
+ }
+ ext = (TextSinkExt)ext->next_extension;
+ }
+ if (ext == NULL)
+ XtError("TextSinkClass: cannot resolve extension.\n");
+#endif
+}
+
+static int
+CharWidth(AsciiSinkObject sink, XFontStruct *font, int x, unsigned int c)
+{
+ int width = 0;
+
+ if (c == XawLF)
+ return (0);
+
+ if (c == XawTAB) {
+ int i;
+ Position *tab;
+
+ width = x;
+ /* Adjust for Left Margin */
+ x -= ((TextWidget)XtParent((Widget)sink))->text.left_margin;
+
+ i = 0;
+ tab = sink->text_sink.tabs;
+ /*CONSTCOND*/
+ while (1) {
+ if (x >= 0 && x < *tab)
+ return (*tab - x);
+ /* Start again */
+ if (++i >= sink->text_sink.tab_count) {
+ x -= *tab;
+ i = 0;
+ tab = sink->text_sink.tabs;
+ if (width == x)
+ return (0);
+ }
+ else
+ ++tab;
+ }
+ /*NOTREACHED*/
+ }
+
+ if ((c & 0177) < XawSP || c == 0177) {
+ if (sink->ascii_sink.display_nonprinting) {
+ if (c > 0177) {
+ width = CharWidth(sink, font, x, '\\');
+ width += CharWidth(sink, font, x, ((c >> 6) & 7) + '0');
+ width += CharWidth(sink, font, x, ((c >> 3) & 7) + '0');
+ c = (c & 7) + '0';
+ }
+ else {
+ width = CharWidth(sink, font, x, '^');
+ if ((c |= 0100) == 0177)
+ c = '?';
+ }
+ }
+ else
+ c = XawSP;
+ }
+
+ if (font->per_char
+ && (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2))
+ width += font->per_char[c - font->min_char_or_byte2].width;
+ else
+ width += font->min_bounds.width;
+
+ return (width);
+}
+
+#ifndef OLDXAW
+static int
+GetTextWidth(TextWidget ctx, int current_width, XFontStruct *font,
+ XawTextPosition from, int length)
+{
+ int i, width = 0;
+ XawTextBlock block;
+ XawTextPosition pos = from;
+
+ while (length > 0) {
+ pos = XawTextSourceRead(ctx->text.source, from, &block, length);
+ length -= pos - from;
+ from = pos;
+ for (i = 0; i < block.length; i++)
+ width += CharWidth((AsciiSinkObject)ctx->text.sink, font,
+ current_width + width,
+ (unsigned char)block.ptr[i]);
+ }
+
+ return (width);
+}
+
+static
+void CalculateBearing(TextWidget ctx, XawTextPosition position, int x, int y,
+ int ascent, int descent, Bool highlight, Bool right)
+{
+/*
+ * Sample case:
+ *
+ * lbearing| width |rbearing
+ * | |
+ * | ####
+ * | ### |
+ * | #### |
+ * | #### |
+ * | ########## |
+ * | #### |
+ * | #### |
+ * | #### |
+ * | #### |
+ * |### |
+ * #### |
+ * | |
+ *
+ */
+ AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextProperty *property;
+ XawTextPaintStruct *paint;
+ XawTextBlock block;
+ XFontStruct *font;
+
+ property = NULL;
+ if (XawTextSourceAnchorAndEntity(ctx->text.source, position,
+ &anchor, &entity) &&
+ (property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ font = property->font;
+ else
+ font = sink->ascii_sink.font;
+ if (right) {
+ if (font->max_bounds.rbearing > 0) {
+ int rbearing = font->max_bounds.rbearing - font->max_bounds.width;
+ unsigned char c;
+
+ (void)XawTextSourceRead(ctx->text.source, position, &block, 1);
+ c = *(unsigned char*)block.ptr;
+ if (c == '\t' || c == '\n')
+ c = ' ';
+ else if ((c & 0177) < XawSP || c == 0177) {
+ if (sink->ascii_sink.display_nonprinting)
+ c = c > 0177 ? (c & 7) + '0' : c + '@';
+ else
+ c = ' ';
+ }
+ if (font->per_char &&
+ (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2))
+ rbearing = font->per_char[c - font->min_char_or_byte2].rbearing -
+ font->per_char[c - font->min_char_or_byte2].width;
+ if (rbearing > 0) {
+ paint = XtNew(XawTextPaintStruct);
+ paint->next = sink->text_sink.paint->bearings;
+ sink->text_sink.paint->bearings = paint;
+ paint->x = x - (paint->width = CharWidth(sink, font, 0, c));
+ paint->y = y + ascent;
+ paint->property = property;
+ paint->max_ascent = ascent;
+ paint->max_descent = descent;
+ paint->backtabs = NULL;
+ paint->highlight = highlight;
+ paint->length = 1;
+ paint->text = XtMalloc(1);
+ paint->text[0] = c;
+ }
+ }
+ }
+ else {
+ if (font->min_bounds.lbearing < 0) {
+ int lbearing = font->min_bounds.lbearing;
+ unsigned char c;
+
+ (void)XawTextSourceRead(ctx->text.source, position, &block, 1);
+ c = *(unsigned char*)block.ptr;
+ if (c == '\t' || c == '\n')
+ c = ' ';
+ else if ((c & 0177) < XawSP || c == 0177) {
+ if (sink->ascii_sink.display_nonprinting)
+ c = c > 0177 ? '\\' : c + '^';
+ else
+ c = ' ';
+ }
+ if (font->per_char &&
+ (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2))
+ lbearing = font->per_char[c - font->min_char_or_byte2].lbearing;
+ if (lbearing < 0) {
+ paint = XtNew(XawTextPaintStruct);
+ paint->next = sink->text_sink.paint->bearings;
+ sink->text_sink.paint->bearings = paint;
+ paint->x = x;
+ paint->width = -CharWidth(sink, font, 0, c);
+ paint->y = y + ascent;
+ paint->property = property;
+ paint->max_ascent = ascent;
+ paint->max_descent = descent;
+ paint->backtabs = NULL;
+ paint->highlight = highlight;
+ paint->length = 1;
+ paint->text = XtMalloc(1);
+ paint->text[0] = c;
+ }
+ }
+ }
+}
+
+static void
+AsciiPreparePaint(Widget w, int y, int line,
+ XawTextPosition from, XawTextPosition to, Bool highlight)
+{
+ static XmuSegment segment;
+ static XmuScanline next;
+ static XmuScanline scanline = {0, &segment, &next};
+ static XmuArea area = {&scanline};
+
+ TextWidget ctx = (TextWidget)XtParent(w);
+ AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
+ XawTextPosition left, right, pos, pos2, tmp, length;
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextProperty *property;
+ int i, ascent = 0, descent = 0, xl, xr, x = ctx->text.left_margin, bufsiz;
+ XawTextBlock block;
+ XFontStruct *font;
+ XawTextPaintStruct *paint;
+
+ if (!sink->ascii_sink.echo)
+ return;
+
+ /* pass 1: calculate ascent/descent values and x coordinate */
+ /* XXX the MAX ascent/descent value should be in the line table XXX */
+ /* XXX the x coordinate can be a parameter, but since it is required
+ to calculate the ascent/descent, do it here to avoid an extra
+ search in the entities */
+ pos = tmp = left = ctx->text.lt.info[line].position;
+ right = ctx->text.lt.info[line + 1].position;
+ right = XawMin(right, ctx->text.lastPos + 1);
+ while (pos < right) {
+ if (XawTextSourceAnchorAndEntity(ctx->text.source, pos,
+ &anchor, &entity)) {
+ if ((property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ font = property->font;
+ else
+ font = sink->ascii_sink.font;
+ tmp = pos;
+ pos = anchor->position + entity->offset + entity->length;
+ if ((length = XawMin(from, pos) - tmp) > 0)
+ x += GetTextWidth(ctx, x, font, tmp, length);
+ ascent = XawMax(font->ascent, ascent);
+ descent = XawMax(font->descent, descent);
+ }
+ else if (anchor) {
+ ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
+ descent = XawMax(sink->ascii_sink.font->descent, descent);
+ while (entity && pos < right) {
+ tmp = pos;
+ if ((pos = anchor->position + entity->offset) < tmp)
+ pos = tmp;
+ else {
+ if ((length = XawMin(from, pos) - tmp) > 0) {
+ x += GetTextWidth(ctx, x, sink->ascii_sink.font, tmp,
+ length);
+ tmp += length;
+ }
+ if (pos < right) {
+ pos += entity->length;
+ if ((property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ font = property->font;
+ else
+ font = sink->ascii_sink.font;
+ if ((length = XawMin(from, pos) - tmp) > 0)
+ x += GetTextWidth(ctx, x, font, tmp, length);
+ ascent = XawMax(font->ascent, ascent);
+ descent = XawMax(font->descent, descent);
+ }
+ }
+ entity = entity->next;
+ }
+
+ if (anchor->entities == NULL) {
+ tmp = XawMin(pos, from);
+ if ((length = from - tmp) > 0)
+ x += GetTextWidth(ctx, x, sink->ascii_sink.font, tmp, length);
+ break;
+ }
+ }
+ else {
+ tmp = XawMin(pos, from);
+ if ((length = from - tmp) > 0)
+ x += GetTextWidth(ctx, x, sink->ascii_sink.font, tmp, length);
+ ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
+ descent = XawMax(sink->ascii_sink.font->descent, descent);
+ break;
+ }
+ }
+ if (!ascent)
+ ascent = sink->ascii_sink.font->ascent;
+ if (!descent)
+ descent = sink->ascii_sink.font->descent;
+
+ xl = x;
+
+ /* pass 2: feed the XawTextPaintStruct lists */
+ pos = from;
+ while (pos < to) {
+ paint = XtNew(XawTextPaintStruct);
+ paint->next = sink->text_sink.paint->paint;
+ sink->text_sink.paint->paint = paint;
+ paint->x = x;
+ paint->y = y + ascent;
+ paint->property = NULL;
+ paint->max_ascent = ascent;
+ paint->max_descent = descent;
+ paint->backtabs = NULL;
+ paint->highlight = highlight;
+
+ tmp = pos;
+ if (XawTextSourceAnchorAndEntity(ctx->text.source, pos,
+ &anchor, &entity)) {
+ pos = anchor->position + entity->offset + entity->length;
+ if ((paint->property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (paint->property->mask & XAW_TPROP_FONT))
+ font = paint->property->font;
+ else
+ font = sink->ascii_sink.font;
+ }
+ else {
+ if (anchor) {
+ while (entity && anchor->position + entity->offset < pos)
+ entity = entity->next;
+ if (entity)
+ pos = anchor->position + entity->offset;
+ else
+ pos = to;
+ }
+ else
+ pos = to;
+ font = sink->ascii_sink.font;
+ }
+ pos = XawMin(pos, to);
+ length = pos - tmp;
+
+ paint->text = XtMalloc(bufsiz = pos - tmp + 4);
+ paint->length = 0;
+ segment.x1 = x;
+
+ pos2 = tmp;
+ while (length > 0) {
+ pos2 = XawTextSourceRead(ctx->text.source, tmp, &block, length);
+ length = pos - pos2;
+ tmp = pos2;
+ for (i = 0; i < block.length; i++) {
+ unsigned char c = (unsigned char)block.ptr[i];
+
+ if (paint->length + 4 > bufsiz)
+ paint->text = XtRealloc(paint->text, bufsiz += 32);
+ paint->text[paint->length] = c;
+ if (c == '\n') {
+ x += CharWidth(sink, font, 0, ' ');
+ continue;
+ }
+ if (c == '\t') {
+ x += XTextWidth(font, paint->text, paint->length);
+ segment.x2 = x + CharWidth(sink, font, x, '\t');
+
+ if (XmuValidSegment(&segment)) {
+ if (!highlight && (paint->property &&
+ (paint->property->mask & XAW_TPROP_BACKGROUND))) {
+ if (ascent > font->ascent) {
+ scanline.y = y;
+ next.y = y + ascent - font->ascent;
+ XmuAreaOr(sink->text_sink.paint->clip, &area);
+ }
+ if (descent >= font->descent) {
+ scanline.y = y + ascent + font->descent;
+ next.y = scanline.y + descent - font->descent + 1;
+ XmuAreaOr(sink->text_sink.paint->clip, &area);
+ }
+ if (paint->backtabs == NULL)
+ paint->backtabs = XmuCreateArea();
+ scanline.y = y + ascent - font->ascent;
+ next.y = y + ascent + font->descent;
+ XmuAreaOr(paint->backtabs, &area);
+ }
+ else {
+ scanline.y = y;
+ next.y = ctx->text.lt.info[line + 1].y;
+ if (highlight) {
+ if (!sink->text_sink.paint->hightabs)
+ sink->text_sink.paint->hightabs =
+ XmuCreateArea();
+ XmuAreaOr(sink->text_sink.paint->hightabs, &area);
+ }
+ else
+ XmuAreaOr(sink->text_sink.paint->clip, &area);
+ }
+ }
+
+ paint->width = segment.x2 - segment.x1;
+ x = segment.x1 = segment.x2;
+
+ if (paint->length == 0) {
+ paint->x = x;
+ continue;
+ }
+ paint->text = XtRealloc(paint->text, paint->length);
+ property = paint->property;
+ paint = XtNew(XawTextPaintStruct);
+ paint->next = sink->text_sink.paint->paint;
+ sink->text_sink.paint->paint = paint;
+ paint->x = x;
+ paint->y = y + ascent;
+ paint->property = property;
+ paint->max_ascent = ascent;
+ paint->max_descent = descent;
+ paint->backtabs = NULL;
+ paint->highlight = highlight;
+ paint->text = XtMalloc(bufsiz = pos - tmp - length +
+ block.length - i + 4);
+ paint->length = 0;
+ continue;
+ }
+ if ((c & 0177) < XawSP || c == 0177) {
+ if (sink->ascii_sink.display_nonprinting) {
+ if (c > 0177) {
+ paint->text[paint->length++] = '\\';
+ paint->text[paint->length++] = ((c >> 6) & 7) + '0';
+ paint->text[paint->length++] = ((c >> 3) & 7) + '0';
+ paint->text[paint->length] = (c & 7) + '0';
+ }
+ else {
+ c |= 0100;
+ paint->text[paint->length++] = '^';
+ paint->text[paint->length] = c == 0177 ? '?' : c;
+ }
+ }
+ else
+ paint->text[paint->length] = ' ';
+ }
+ paint->length++;
+ }
+ }
+
+ x += XTextWidth(font, paint->text, paint->length);
+ segment.x2 = x;
+ if (XmuValidSegment(&segment)) {
+ /* erase only what really is needed */
+ /*if (!highlight || (paint->property &&
+ (paint->property->mask & XAW_TPROP_BACKGROUND))) {
+ if (ascent > font->ascent) {
+ scanline.y = y;
+ next.y = y + ascent - font->ascent;
+ XmuAreaOr(sink->text_sink.paint->clip, &area);
+ }
+ if (descent > font->descent) {
+ scanline.y = y + ascent + font->descent;
+ next.y = scanline.y + descent - font->descent;
+ XmuAreaOr(sink->text_sink.paint->clip, &area);
+ }
+ }
+ else*/ {
+ scanline.y = y;
+ next.y = ctx->text.lt.info[line + 1].y;
+ XmuAreaOr(sink->text_sink.paint->clip, &area);
+ }
+ }
+
+ paint->width = x - segment.x1;
+ }
+
+ xr = x;
+
+ /* pass 3: bearing clipping */
+ if (left < from) {
+ CalculateBearing(ctx, from - 1, xl, y, ascent, descent, highlight, True);
+ if (ctx->text.s.left < ctx->text.s.right) {
+ if (ctx->text.s.right == from)
+ CalculateBearing(ctx, from, xl, y, ascent, descent, True, False);
+ else if (ctx->text.s.left == from)
+ CalculateBearing(ctx, from, xl, y, ascent, descent, False, False);
+ }
+ }
+ right = XawMin(right, ctx->text.lastPos);
+ if (right >= to && to > from) {
+ if (to < right)
+ CalculateBearing(ctx, to, xr, y, ascent, descent, highlight, False);
+ if (ctx->text.s.left < ctx->text.s.right) {
+ if (ctx->text.s.right == to)
+ CalculateBearing(ctx, to - 1, xr, y, ascent, descent, False, True);
+ else if (ctx->text.s.left == to)
+ CalculateBearing(ctx, to - 1, xr, y, ascent, descent, True, True);
+ }
+ }
+}
+
+static int
+qcmp_paint_struct(_Xconst void *left, _Xconst void *right)
+{
+ return ((*(XawTextPaintStruct**)left)->property -
+ (*(XawTextPaintStruct**)right)->property);
+}
+
+static void
+AsciiDoPaint(Widget w)
+{
+ TextWidget ctx = (TextWidget)XtParent(w);
+ AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
+ XmuScanline *scan;
+ XmuSegment *seg;
+ XawTextPaintList *list = sink->text_sink.paint;
+#if 0
+ XawTextPaintStruct *base, *head;
+#endif
+ XawTextPaintStruct *paint = list->paint;
+ XawTextProperty *property;
+ XFontStruct *font = NULL;
+ XRectangle *rects;
+ int n_rects, i_rects;
+ GC gc;
+ Bool highlight;
+ XRectangle rect;
+ int width, height, line_width = -1;
+ XGCValues values;
+
+ /* pass 1: clear clipping areas */
+ /* XXX Don't use XDrawImageString because the font may be italic, and
+ will get incorrectly drawn. Probably, it could be a good idea to
+ check if this is the case, and do special processing. But this
+ will need to be checked if required. */
+ for (scan = list->clip->scanline; scan && scan->next; scan = scan->next)
+ for (seg = scan->segment; seg; seg = seg->next)
+ _XawTextSinkClearToBackground(ctx->text.sink,
+ seg->x1, scan->y,
+ seg->x2 - seg->x1,
+ scan->next->y - scan->y);
+
+ /* pass 2: optimize drawing list to avoid too much GC change requests */
+ /* XXX this assumes there will not exist entities drawn over other
+ entities. */
+#if 0
+ while (paint) {
+ base = paint;
+ head = paint->next;
+ while (head) {
+ if (head->property == paint->property) {
+ base->next = head->next;
+ head->next = paint->next;
+ paint->next = head;
+ paint = head;
+ }
+ base = head;
+ head = head->next;
+ }
+ paint = paint->next;
+ }
+#endif
+ if (paint && paint->next) {
+ XawTextPaintStruct **paints;
+ int i = 0, n_paints = 0;
+
+ while (paint) {
+ paint = paint->next;
+ ++n_paints;
+ }
+ paints = (XawTextPaintStruct**)
+ XtMalloc(n_paints * sizeof(XawTextPaintStruct));
+ paint = list->paint;
+ while (paint) {
+ paints[i++] = paint;
+ paint = paint->next;
+ }
+ qsort((void*)paints, n_paints, sizeof(XawTextPaintStruct*),
+ qcmp_paint_struct);
+ list->paint = paints[0];
+ for (i = 0; i < n_paints - 1; i++)
+ paints[i]->next = paints[i + 1];
+ paints[i]->next = NULL;
+ XtFree((XtPointer)paints);
+ }
+
+ /* pass 3: clip gc */
+ gc = sink->ascii_sink.normgc;
+
+ rect.x = ctx->text.r_margin.left;
+ rect.y = ctx->text.r_margin.top;
+ width = (int)XtWidth(ctx) - RHMargins(ctx);
+ height = (int)XtHeight(ctx) - RVMargins(ctx);
+ rect.width = width;
+ rect.height = height;
+ if (width >= 0 && height >= 0)
+ XSetClipRectangles(XtDisplay((Widget)ctx), gc,
+ 0, 0, &rect, 1, Unsorted);
+ else
+ XSetClipMask(XtDisplay((Widget)ctx), gc, None);
+
+ /* pass 4: draw backgrounds */
+ paint = list->paint;
+ property = NULL;
+ rects = NULL;
+ i_rects = n_rects = 0;
+ while (paint) {
+ if (paint->property && (paint->property->mask & XAW_TPROP_BACKGROUND)) {
+ if (property != paint->property) {
+ if (i_rects)
+ XFillRectangles(XtDisplay(ctx), XtWindow(ctx), gc,
+ rects, i_rects);
+ i_rects = 0;
+ property = paint->property;
+ if (property->mask & XAW_TPROP_FONT)
+ font = property->font;
+ else
+ font = sink->ascii_sink.font;
+ XSetForeground(XtDisplay(ctx), gc, property->background);
+ }
+ if (i_rects <= n_rects)
+ rects = (XRectangle*)
+ XtRealloc((XtPointer)rects, sizeof(XRectangle) *
+ ++n_rects);
+ rects[i_rects].x = paint->x;
+ rects[i_rects].y = paint->y - font->ascent;
+ rects[i_rects].width = paint->width;
+ rects[i_rects++].height = font->ascent + font->descent;
+
+ if (paint->backtabs) {
+ for (scan = paint->backtabs->scanline; scan && scan->next;
+ scan = scan->next)
+ for (seg = scan->segment; seg; seg = seg->next) {
+ if (i_rects <= n_rects)
+ rects = (XRectangle*)
+ XtRealloc((XtPointer)rects, sizeof(XRectangle) *
+ ++n_rects);
+ rects[i_rects].x = seg->x1;
+ rects[i_rects].y = scan->y;
+ rects[i_rects].width = seg->x2 - seg->x1;
+ rects[i_rects++].height = scan->next->y - scan->y;
+ }
+ }
+
+
+ }
+ paint = paint->next;
+ }
+ if (i_rects)
+ XFillRectangles(XtDisplay(ctx), XtWindow(ctx), gc, rects, i_rects);
+
+ paint = list->paint;
+ i_rects = 0;
+ while (paint) {
+ if (paint->highlight) {
+ if (i_rects == 0)
+ XSetForeground(XtDisplay(ctx), gc, sink->text_sink.cursor_color);
+ if (i_rects <= n_rects)
+ rects = (XRectangle*)
+ XtRealloc((XtPointer)rects, sizeof(XRectangle) *
+ ++n_rects);
+ rects[i_rects].x = paint->x;
+ rects[i_rects].y = paint->y - paint->max_ascent;
+ rects[i_rects].width = paint->width;
+ rects[i_rects++].height = paint->max_ascent + paint->max_descent + 1;
+ }
+ paint = paint->next;
+ }
+ if (list->hightabs) {
+ for (scan = list->hightabs->scanline; scan && scan->next;
+ scan = scan->next)
+ for (seg = scan->segment; seg; seg = seg->next) {
+ if (i_rects == 0)
+ XSetForeground(XtDisplay(ctx), gc,
+ sink->text_sink.cursor_color);
+ if (i_rects <= n_rects)
+ rects = (XRectangle*)
+ XtRealloc((XtPointer)rects, sizeof(XRectangle) *
+ ++n_rects);
+ rects[i_rects].x = seg->x1;
+ rects[i_rects].y = scan->y;
+ rects[i_rects].width = seg->x2 - seg->x1;
+ rects[i_rects++].height = scan->next->y - scan->y;
+ }
+ }
+
+ if (i_rects)
+ XFillRectangles(XtDisplay(ctx), XtWindow(ctx), gc, rects, i_rects);
+ if (rects)
+ XtFree((XtPointer)rects);
+
+ /* pass 5: draw text! */
+ paint = list->paint;
+ if (paint && (property = paint->property) == NULL) {
+ font = sink->ascii_sink.font;
+ XSetFont(XtDisplay(ctx), gc, font->fid);
+ if (!paint->highlight)
+ XSetForeground(XtDisplay(ctx), gc, sink->text_sink.foreground);
+ }
+ else
+ property = NULL;
+ highlight = False;
+ while (paint) {
+ if (!highlight && paint->highlight)
+ XSetForeground(XtDisplay(ctx), gc, sink->text_sink.background);
+ if (highlight || paint->highlight || paint->property != property) {
+ if (!paint->property || !(paint->property->mask & XAW_TPROP_FONT))
+ font = sink->ascii_sink.font;
+ else
+ font = paint->property->font;
+ XSetFont(XtDisplay(ctx), gc, font->fid);
+ if (!paint->highlight) {
+ if (!paint->property ||
+ !(paint->property->mask & XAW_TPROP_FOREGROUND))
+ XSetForeground(XtDisplay(ctx), gc,
+ sink->text_sink.foreground);
+ else
+ XSetForeground(XtDisplay(ctx), gc,
+ paint->property->foreground);
+ }
+ highlight = paint->highlight;
+ property = paint->property;
+ }
+
+ if (paint->x < XtWidth(ctx) && paint->x + paint->width > 0) {
+ XDrawString(XtDisplay(ctx), XtWindow(ctx), gc, paint->x, paint->y,
+ paint->text, paint->length);
+ if (property) {
+ if (property->mask & XAW_TPROP_UNDERLINE) {
+ if (line_width != property->underline_thickness) {
+ values.line_width = line_width =
+ property->underline_thickness;
+ XChangeGC(XtDisplay(ctx), gc, GCLineWidth, &values);
+ }
+
+ XDrawLine(XtDisplay(ctx), XtWindow(ctx), gc, paint->x,
+ paint->y + property->underline_position,
+ paint->x + paint->width,
+ paint->y + property->underline_position);
+ }
+ if (property->mask & XAW_TPROP_OVERSTRIKE) {
+ if (line_width != property->underline_thickness) {
+ values.line_width = line_width =
+ property->underline_thickness;
+ XChangeGC(XtDisplay(ctx), gc, GCLineWidth, &values);
+ }
+
+ XDrawLine(XtDisplay(ctx), XtWindow(ctx), gc, paint->x,
+ paint->y - (font->ascent>>1) + (font->descent>>1),
+ paint->x + paint->width,
+ paint->y - (font->ascent>>1) + (font->descent>>1));
+ }
+ }
+ }
+
+ paint = paint->next;
+ }
+
+ /* pass 6: bearing clipping */
+ /* dont care on order of drawing or caching of state (by now) */
+ paint = list->bearings;
+ while (paint) {
+ XRectangle rect;
+
+ if (paint->highlight)
+ XSetForeground(XtDisplay(ctx), gc, sink->text_sink.background);
+ if (!paint->property || !(paint->property->mask & XAW_TPROP_FONT))
+ font = sink->ascii_sink.font;
+ else
+ font = paint->property->font;
+ XSetFont(XtDisplay(ctx), gc, font->fid);
+ if (!paint->highlight) {
+ if (!paint->property ||
+ !(paint->property->mask & XAW_TPROP_FOREGROUND))
+ XSetForeground(XtDisplay(ctx), gc, sink->text_sink.foreground);
+ else
+ XSetForeground(XtDisplay(ctx), gc, paint->property->foreground);
+ }
+ if (paint->x < XtWidth(ctx) && paint->x + paint->width > 0) {
+ rect.x = paint->x + paint->width;
+ rect.width = XawAbs(paint->width); /* more than enough */
+ rect.y = paint->y - font->ascent;
+ rect.height = rect.y + font->ascent + font->descent;
+ XSetClipRectangles(XtDisplay((Widget)ctx), gc,
+ 0, 0, &rect, 1, Unsorted);
+ XDrawString(XtDisplay(ctx), XtWindow(ctx), gc, paint->x, paint->y,
+ paint->text, paint->length);
+ }
+ paint = paint->next;
+ }
+}
+#endif
+
+/*
+ * Function:
+ * PaintText
+ *
+ * Parameters:
+ * w - text sink object
+ * gc - gc to paint text with
+ * x - location to paint the text
+ * y - ""
+ * buf - buffer and length of text to paint.
+ * len - ""
+ * clear_bg - clear background before drawing ?
+ *
+ * Description:
+ * Actually paints the text into the window.
+ *
+ * Returns:
+ * the width of the text painted
+ */
+static unsigned int
+PaintText(Widget w, GC gc, int x, int y, char *buf, int len, Bool clear_bg)
+{
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ int width = XTextWidth(sink->ascii_sink.font, buf, len);
+
+ if ((x > XtWidth(ctx)) || width <= -x) /* Don't draw if we can't see it */
+ return (width);
+
+ if (clear_bg) {
+ _XawTextSinkClearToBackground(w, x, y - sink->ascii_sink.font->ascent,
+ width, sink->ascii_sink.font->ascent
+ + sink->ascii_sink.font->descent);
+ XDrawString(XtDisplay(ctx), XtWindow(ctx), gc, x, y, buf, len);
+ }
+ else
+ XDrawImageString(XtDisplay(ctx), XtWindow(ctx), gc, x, y, buf, len);
+
+ return (width);
+}
+
+static void
+DisplayText(Widget w, int x, int y,
+ XawTextPosition pos1, XawTextPosition pos2, Bool highlight)
+{
+ TextWidget ctx = (TextWidget)XtParent(w);
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ XFontStruct *font = sink->ascii_sink.font;
+ Widget source = XawTextGetSource(XtParent(w));
+ unsigned char buf[260];
+ int j, k;
+ XawTextBlock blk;
+ GC gc, invgc, tabgc;
+ int max_x;
+ Bool clear_bg;
+
+ if (!sink->ascii_sink.echo || !ctx->text.lt.lines)
+ return;
+
+ max_x = (int)XtWidth(ctx) - ctx->text.r_margin.right;
+ clear_bg = !highlight && ctx->core.background_pixmap != XtUnspecifiedPixmap;
+
+ gc = highlight ? sink->ascii_sink.invgc : sink->ascii_sink.normgc;
+ invgc = highlight ? sink->ascii_sink.normgc : sink->ascii_sink.invgc;
+
+ if (highlight && sink->ascii_sink.xorgc)
+ tabgc = sink->ascii_sink.xorgc;
+ else
+ tabgc = invgc;
+
+ y += sink->ascii_sink.font->ascent;
+ for (j = 0; pos1 < pos2;) {
+ pos1 = XawTextSourceRead(source, pos1, &blk, pos2 - pos1);
+ for (k = 0; k < blk.length; k++) {
+ if (j >= sizeof(buf) - 4) { /* buffer full, dump the text */
+ if ((x += PaintText(w, gc, x, y, (char*)buf, j, clear_bg))
+ >= max_x)
+ return;
+ j = 0;
+ }
+ buf[j] = blk.ptr[k];
+ if (buf[j] == XawLF) /* line feeds ('\n') are not printed */
+ continue;
+
+ else if (buf[j] == '\t') {
+ int width;
+
+ if (j != 0
+ && (x += PaintText(w, gc, x, y, (char*)buf, j, clear_bg))
+ >= max_x)
+ return;
+
+ if ((width = CharWidth(sink, font, x, '\t')) > -x) {
+ if (clear_bg)
+ _XawTextSinkClearToBackground(w, x, y-font->ascent, width,
+ font->ascent+font->descent);
+ else
+ XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
+ tabgc, x, y - font->ascent, width,
+ font->ascent + font->descent);
+ }
+
+ if ((x += width) >= max_x)
+ return;
+
+ j = -1;
+ }
+ else if ((buf[j] & 0177) < XawSP || buf[j] == 0177) {
+ if (sink->ascii_sink.display_nonprinting) {
+ unsigned char c = buf[j];
+
+ if (c > 0177) {
+ buf[j++] = '\\';
+ buf[j++] = ((c >> 6) & 7) + '0';
+ buf[j++] = ((c >> 3) & 7) + '0';
+ buf[j] = (c & 7) + '0';
+ }
+ else {
+ c |= 0100;
+ buf[j++] = '^';
+ buf[j] = c == 0177 ? '?' : c;
+ }
+ }
+ else
+ buf[j] = ' ';
+ }
+ j++;
+ }
+ }
+
+ if (j > 0)
+ (void)PaintText(w, gc, x, y, (char*)buf, j, clear_bg);
+}
+
+/*
+ * Function:
+ * GetCursorBounds
+ *
+ * Parameters:
+ * w - text sink object
+ * rect - X rectangle to return the cursor bounds
+ *
+ * Description:
+ * Returns the size and location of the cursor.
+ */
+static void
+GetCursorBounds(Widget w, XRectangle *rect)
+{
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ XFontStruct *font = sink->ascii_sink.font;
+ unsigned char ch;
+#ifndef OLDXAW
+ TextWidget ctx = (TextWidget)XtParent(w);
+ XawTextBlock block;
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextProperty *property;
+
+ if (XawTextSourceAnchorAndEntity(XawTextGetSource(XtParent(w)),
+ sink->ascii_sink.cursor_position,
+ &anchor, &entity)) {
+ if ((property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ font = property->font;
+ }
+ (void)XawTextSourceRead(XawTextGetSource((Widget)ctx),
+ ctx->text.insertPos, &block, 1);
+ if (!block.length || block.ptr[0] == '\n' || block.ptr[0] == '\t')
+ ch = ' ';
+ else if ((*((unsigned char*)block.ptr) & 0177) < XawSP ||
+ *(unsigned char*)block.ptr == 0177) {
+ if (sink->ascii_sink.display_nonprinting)
+ ch = *((unsigned char*)block.ptr) > 0177 ? '\\' : '^';
+ else
+ ch = ' ';
+ }
+ else
+ ch = *(unsigned char*)block.ptr;
+#else
+ ch = ' ';
+#endif
+
+ rect->width = CharWidth(sink, font, 0, ch);
+ rect->height = font->descent + font->ascent + 1;
+
+ rect->x = sink->ascii_sink.cursor_x;
+ rect->y = sink->ascii_sink.cursor_y - font->ascent;
+}
+
+/* this function is required to support diferent fonts and correctly place
+ * the cursor. There are better ways to calculate the base line, but there is
+ * no place/code (yet) to store this information.
+ */
+static int
+FindCursorY(TextWidget ctx, XawTextPosition position)
+{
+ int y, line, ascent;
+ AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
+#ifndef OLDXAW
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextProperty *property;
+ XawTextPosition left, right;
+#endif
+
+ for (line = 0; line < ctx->text.lt.lines; line++)
+ if (position < ctx->text.lt.info[line + 1].position)
+ break;
+
+ y = ctx->text.lt.info[line].y;
+#ifndef OLDXAW
+ ascent = 0;
+ left = ctx->text.lt.info[line].position;
+ right = ctx->text.lt.info[line + 1].position;
+ right = XawMin(right, ctx->text.lastPos + 1);
+ while (left < right) {
+ if (XawTextSourceAnchorAndEntity(ctx->text.source, left,
+ &anchor, &entity)) {
+ if ((property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ ascent = XawMax(property->font->ascent, ascent);
+ else
+ ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
+ left = anchor->position + entity->offset + entity->length;
+ }
+ else if (anchor) {
+ ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
+ while (entity) {
+ XawTextPosition tmp = anchor->position + entity->offset + entity->length;
+
+ if (tmp > left && tmp < right) {
+ left = tmp;
+ if ((property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ ascent = XawMax(property->font->ascent, ascent);
+ else
+ ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
+ }
+ entity = entity->next;
+ }
+ if (entity == NULL)
+ break;
+ }
+ else {
+ ascent = XawMax(sink->ascii_sink.font->ascent, ascent);
+ break;
+ }
+ }
+ if (!ascent)
+ ascent = sink->ascii_sink.font->ascent;
+#else
+ ascent = sink->ascii_sink.font->ascent;
+#endif
+
+ return (y + ascent);
+}
+
+static void
+InsertCursor(Widget w, int x, int y, XawTextInsertState state)
+{
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ XFontStruct *font = sink->ascii_sink.font;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ XawTextPosition position = XawTextGetInsertionPoint((Widget)ctx);
+ Boolean overflow = (x & 0xffff8000) != 0;
+#ifndef OLDXAW
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextProperty *property;
+#endif
+
+ if (XtIsRealized((Widget)ctx)) {
+ int fheight;
+ XawTextBlock block;
+ XawTextPosition selection_start, selection_end;
+ Boolean has_selection;
+
+ if (!sink->ascii_sink.echo) {
+ if (sink->ascii_sink.laststate != state) {
+ int width = CharWidth(sink, font, 0, ' ') - 1;
+
+ x = ctx->text.margin.left;
+ y = ctx->text.margin.top;
+ font = sink->ascii_sink.font;
+ fheight = font->ascent + font->descent;
+ if (state == XawisOn) {
+ if (ctx->text.hasfocus)
+ XFillRectangle(XtDisplay(ctx), XtWindow(ctx),
+ sink->ascii_sink.xorgc, x, y,
+ width + 1, fheight + 1);
+ else
+ XDrawRectangle(XtDisplay(ctx), XtWindow(ctx),
+ sink->ascii_sink.xorgc, x, y,
+ width, fheight);
+
+ }
+ else
+ _XawTextSinkClearToBackground(w, x, y,
+ width + 1, fheight + 1);
+ }
+ sink->ascii_sink.cursor_x = x;
+ sink->ascii_sink.cursor_y = y;
+ sink->ascii_sink.laststate = state;
+ return;
+ }
+
+
+ XawTextGetSelectionPos((Widget)ctx, &selection_start, &selection_end);
+ has_selection = selection_start != selection_end;
+
+ if (sink->ascii_sink.laststate != state) {
+ unsigned char ch;
+
+#ifndef OLDXAW
+ if (XawTextSourceAnchorAndEntity(ctx->text.source,
+ position, &anchor, &entity) &&
+ (property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ font = property->font;
+ else
+ font = sink->ascii_sink.font;
+#endif
+
+ fheight = font->ascent + font->descent;
+ (void)XawTextSourceRead(XawTextGetSource((Widget)ctx),
+ position, &block, 1);
+ if (!block.length || block.ptr[0] == '\n' || block.ptr[0] == '\t')
+ ch = ' ';
+ else if ((*((unsigned char*)block.ptr) & 0177) < XawSP
+ || *(unsigned char*)block.ptr == 0177) {
+ if (sink->ascii_sink.display_nonprinting)
+ ch = *((unsigned char*)block.ptr) > 0177 ? '\\' : '^';
+ else
+ ch = ' ';
+ }
+ else
+ ch = *(unsigned char*)block.ptr;
+
+ y = FindCursorY(ctx, position);
+ if (ctx->text.hasfocus && !has_selection)
+ XFillRectangle(XtDisplay(ctx), XtWindow(ctx),
+ sink->ascii_sink.xorgc, x, y - font->ascent,
+ CharWidth(sink, font, 0, ch), fheight + 1);
+ else
+ XDrawRectangle(XtDisplay(ctx), XtWindow(ctx),
+ sink->ascii_sink.xorgc, x, y - font->ascent,
+ CharWidth(sink, font, 0, ch) - 1, fheight);
+ }
+ }
+
+ sink->ascii_sink.cursor_x = overflow ? -16384 : x;
+ sink->ascii_sink.cursor_y = y;
+ sink->ascii_sink.laststate = state;
+ sink->ascii_sink.cursor_position = position;
+}
+
+/*
+ * Given two positions, find the distance between them
+ */
+static void
+FindDistance(Widget w, XawTextPosition fromPos, int fromx,
+ XawTextPosition toPos, int *resWidth,
+ XawTextPosition *resPos, int *resHeight)
+{
+#ifndef OLDXAW
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ XFontStruct *font = sink->ascii_sink.font;
+ Widget source = ctx->text.source;
+ XawTextPosition idx, pos;
+ unsigned char c;
+ XawTextBlock blk;
+ int i, rWidth, ascent = 0, descent = 0;
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextProperty *property;
+ Cardinal length;
+ Bool done = False;
+
+ pos = idx = fromPos;
+ rWidth = 0;
+ c = 0;
+
+ while (!done) {
+ if (XawTextSourceAnchorAndEntity(source, pos, &anchor, &entity)) {
+ length = anchor->position + entity->offset + entity->length;
+ length = XawMin(toPos, length) - pos;
+ if ((property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ font = property->font;
+ else
+ font = sink->ascii_sink.font;
+ }
+ else {
+ if (anchor) {
+ while (entity && anchor->position + entity->offset < pos)
+ entity = entity->next;
+ if (entity) {
+ length = anchor->position + entity->offset;
+ length = XawMin(toPos, length) - pos;
+ }
+ else
+ length = XawMin(toPos - pos, 4096);
+ }
+ else
+ length = XawMin(toPos - pos, 4096);
+ font = sink->ascii_sink.font;
+ }
+
+ ascent = XawMax(font->ascent, ascent);
+ descent = XawMax(font->descent, descent);
+
+ pos = XawTextSourceRead(source, pos, &blk, length);
+ if (blk.length == 0 && pos == idx) /* eof reached */
+ break;
+
+ idx = blk.firstPos;
+ for (i = 0; idx < toPos; i++, idx++) {
+ if (i >= blk.length)
+ break;
+ c = blk.ptr[i];
+ rWidth += CharWidth(sink, font, fromx + rWidth, c);
+ if (c == XawLF) {
+ idx++;
+ done = True;
+ break;
+ }
+ }
+ if (idx >= toPos)
+ break;
+ }
+
+ *resPos = idx;
+ *resWidth = rWidth;
+ *resHeight = ascent + descent + 1;
+#else
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ XFontStruct *font = sink->ascii_sink.font;
+ Widget source = ctx->text.source;
+ XawTextPosition idx, pos;
+ unsigned char c;
+ XawTextBlock blk;
+ int i, rWidth;
+
+ pos = XawTextSourceRead(source, fromPos, &blk, toPos - fromPos);
+ rWidth = 0;
+ for (i = 0, idx = fromPos; idx < toPos; i++, idx++) {
+ if (i >= blk.length) {
+ i = 0;
+ pos = XawTextSourceRead(source, pos, &blk, toPos - pos);
+ if (blk.length == 0)
+ break;
+ }
+ c = blk.ptr[i];
+ rWidth += CharWidth(sink, font, fromx + rWidth, c);
+ if (c == XawLF) {
+ idx++;
+ break;
+ }
+ }
+
+ *resPos = idx;
+ *resWidth = rWidth;
+ *resHeight = font->ascent + font->descent + 1;
+#endif
+}
+
+static void
+FindPosition(Widget w, XawTextPosition fromPos, int fromx, int width,
+ Bool stopAtWordBreak, XawTextPosition *resPos,
+ int *resWidth, int *resHeight)
+{
+#ifndef OLDXAW
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ Widget source = ctx->text.source;
+ XFontStruct *font = sink->ascii_sink.font;
+ XawTextPosition idx, pos, whiteSpacePosition = 0;
+ int i, lastWidth, whiteSpaceWidth, rWidth, ascent = 0, descent = 0;
+ Boolean whiteSpaceSeen;
+ unsigned char c;
+ XawTextBlock blk;
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextProperty *property;
+ Cardinal length;
+ Bool done = False;
+
+ pos = idx = fromPos;
+ rWidth = lastWidth = whiteSpaceWidth = 0;
+ whiteSpaceSeen = False;
+ c = 0;
+
+ while (!done) {
+ font = sink->ascii_sink.font;
+ if (XawTextSourceAnchorAndEntity(source, pos, &anchor, &entity)) {
+ length = anchor->position + entity->offset + entity->length - pos;
+ if ((property = XawTextSinkGetProperty((Widget)sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ font = property->font;
+ }
+ else {
+ if (anchor) {
+ while (entity && anchor->position + entity->offset < pos)
+ entity = entity->next;
+ if (entity)
+ length = anchor->position + entity->offset - pos;
+ else
+ length = 4096;
+ }
+ else
+ length = 4096;
+ }
+
+ ascent = XawMax(font->ascent, ascent);
+ descent = XawMax(font->descent, descent);
+
+ pos = XawTextSourceRead(source, pos, &blk, length);
+ if (blk.length == 0 && pos == idx) /* eof reached */
+ break;
+
+ idx = blk.firstPos;
+ for (i = 0; rWidth <= width && i < blk.length; i++, idx++) {
+ c = blk.ptr[i];
+ lastWidth = rWidth;
+ rWidth += CharWidth(sink, font, fromx + rWidth, c);
+
+ if (c == XawLF) {
+ idx++;
+ done = True;
+ break;
+ }
+ else if ((c == XawSP || c == XawTAB) && rWidth <= width) {
+ whiteSpaceSeen = True;
+ whiteSpacePosition = idx;
+ whiteSpaceWidth = rWidth;
+ }
+ }
+ if (rWidth > width)
+ break;
+ }
+
+ if (rWidth > width && idx > fromPos) {
+ idx--;
+ rWidth = lastWidth;
+ if (stopAtWordBreak && whiteSpaceSeen) {
+ idx = whiteSpacePosition + 1;
+ rWidth = whiteSpaceWidth;
+ }
+ }
+
+ if (idx >= ctx->text.lastPos && c != XawLF)
+ idx = ctx->text.lastPos + 1;
+
+ *resPos = idx;
+ *resWidth = rWidth;
+ *resHeight = ascent + descent + 1;
+#else
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ Widget source = ctx->text.source;
+ XFontStruct *font = sink->ascii_sink.font;
+ XawTextPosition idx, pos, whiteSpacePosition = 0;
+ int i, lastWidth, whiteSpaceWidth, rWidth;
+ Boolean whiteSpaceSeen;
+ unsigned char c;
+ XawTextBlock blk;
+
+ pos = XawTextSourceRead(source, fromPos, &blk, BUFSIZ);
+ rWidth = lastWidth = whiteSpaceWidth = 0;
+ whiteSpaceSeen = False;
+ c = 0;
+
+ for (i = 0, idx = fromPos; rWidth <= width; i++, idx++) {
+ if (i >= blk.length) {
+ i = 0;
+ pos = XawTextSourceRead(source, pos, &blk, BUFSIZ);
+ if (blk.length == 0)
+ break;
+ }
+ c = blk.ptr[i];
+ lastWidth = rWidth;
+ rWidth += CharWidth(sink, font, fromx + rWidth, c);
+
+ if (c == XawLF) {
+ idx++;
+ break;
+ }
+ else if ((c == XawSP || c == XawTAB) && rWidth <= width) {
+ whiteSpaceSeen = True;
+ whiteSpacePosition = idx;
+ whiteSpaceWidth = rWidth;
+ }
+ }
+
+ if (rWidth > width && idx > fromPos) {
+ idx--;
+ rWidth = lastWidth;
+ if (stopAtWordBreak && whiteSpaceSeen) {
+ idx = whiteSpacePosition + 1;
+ rWidth = whiteSpaceWidth;
+ }
+ }
+
+ if (idx >= ctx->text.lastPos && c != XawLF)
+ idx = ctx->text.lastPos + 1;
+
+ *resPos = idx;
+ *resWidth = rWidth;
+ *resHeight = font->ascent + font->descent + 1;
+#endif
+}
+
+static void
+Resolve(Widget w, XawTextPosition pos, int fromx, int width,
+ XawTextPosition *pos_return)
+{
+ int resWidth, resHeight;
+ Widget source = XawTextGetSource(XtParent(w));
+
+ FindPosition(w, pos, fromx, width, False, pos_return, &resWidth, &resHeight);
+ if (*pos_return > GETLASTPOS)
+ *pos_return = GETLASTPOS;
+}
+
+static void
+GetGC(AsciiSinkObject sink)
+{
+ XtGCMask valuemask = (GCFont | GCGraphicsExposures | GCClipXOrigin |
+ GCForeground | GCBackground);
+ XGCValues values;
+
+ /* XXX We dont want do share a gc that will change the clip-mask */
+ values.clip_x_origin = (long)sink;
+ values.clip_mask = None;
+ values.font = sink->ascii_sink.font->fid;
+ values.graphics_exposures = False;
+
+ values.foreground = sink->text_sink.foreground;
+ values.background = sink->text_sink.background;
+ sink->ascii_sink.normgc = XtAllocateGC((Widget)sink, 0, valuemask, &values,
+ GCClipMask | GCFont | GCForeground |
+ GCBackground, 0);
+
+ values.foreground = sink->text_sink.background;
+#ifndef OLDXAW
+ values.background = sink->text_sink.cursor_color;
+#else
+ values.background = sink->text_sink.foreground;
+#endif
+ sink->ascii_sink.invgc = XtAllocateGC((Widget)sink, 0, valuemask, &values,
+ GCClipMask | GCFont, 0);
+
+ valuemask |= GCFunction;
+ values.function = GXxor;
+#ifndef OLDXAW
+ values.foreground = sink->text_sink.background ^ sink->text_sink.cursor_color;
+#else
+ values.foreground = sink->text_sink.background ^ sink->text_sink.foreground;
+#endif
+ values.background = 0L;
+ sink->ascii_sink.xorgc = XtAllocateGC((Widget)sink, 0, valuemask,
+ &values, GCClipMask | GCFont, 0);
+
+ XawAsciiSinkResize((Widget)sink);
+}
+
+/* Function:
+ * XawAsciiSinkInitialize
+ *
+ * Parameters:
+ * request - the requested and new values for the object instance
+ * cnew - ""
+ *
+ * Description:
+ * Initializes the TextSink Object.
+ */
+/*ARGSUSED*/
+static void
+XawAsciiSinkInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ AsciiSinkObject sink = (AsciiSinkObject)cnew;
+
+ GetGC(sink);
+
+ if (!sink->ascii_sink.font) XtError("Aborting: no font found\n");
+
+ sink->ascii_sink.cursor_position = 0;
+ sink->ascii_sink.laststate = XawisOff;
+ sink->ascii_sink.cursor_x = sink->ascii_sink.cursor_y = 0;
+}
+
+/*
+ * Function:
+ * XawAsciiSinkDestroy
+ *
+ * Parameters:
+ * w - AsciiSink Object
+ *
+ * Description:
+ * This function cleans up when the object is destroyed.
+ */
+static void
+XawAsciiSinkDestroy(Widget w)
+{
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+
+ XtReleaseGC(w, sink->ascii_sink.normgc);
+ XtReleaseGC(w, sink->ascii_sink.invgc);
+ XtReleaseGC(w, sink->ascii_sink.xorgc);
+
+ sink->ascii_sink.normgc =
+ sink->ascii_sink.invgc =
+ sink->ascii_sink.xorgc = NULL;
+}
+
+static void
+XawAsciiSinkResize(Widget w)
+{
+ TextWidget ctx = (TextWidget)XtParent(w);
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ XRectangle rect;
+ int width, height;
+
+ if (w->core.widget_class != asciiSinkObjectClass)
+ return;
+
+ rect.x = ctx->text.r_margin.left;
+ rect.y = ctx->text.r_margin.top;
+ width = (int)XtWidth(ctx) - RHMargins(ctx);
+ height = (int)XtHeight(ctx) - RVMargins(ctx);
+ rect.width = width;
+ rect.height = height;
+
+ if (sink->ascii_sink.normgc) {
+ if (width >= 0 && height >= 0)
+ XSetClipRectangles(XtDisplay((Widget)ctx), sink->ascii_sink.normgc,
+ 0, 0, &rect, 1, Unsorted);
+ else
+ XSetClipMask(XtDisplay((Widget)ctx), sink->ascii_sink.normgc, None);
+ }
+ if (sink->ascii_sink.invgc) {
+ if (width >= 0 && height >= 0)
+ XSetClipRectangles(XtDisplay((Widget)ctx), sink->ascii_sink.invgc,
+ 0, 0, &rect, 1, Unsorted);
+ else
+ XSetClipMask(XtDisplay((Widget)ctx), sink->ascii_sink.invgc, None);
+ }
+ if (sink->ascii_sink.xorgc) {
+ if (width >= 0 && height >= 0)
+ XSetClipRectangles(XtDisplay((Widget)ctx), sink->ascii_sink.xorgc,
+ 0, 0, &rect, 1, Unsorted);
+ else
+ XSetClipMask(XtDisplay((Widget)ctx), sink->ascii_sink.xorgc, None);
+ }
+}
+
+/*
+ * Function:
+ * XawAsciiSinkSetValues
+ *
+ * Parameters:
+ * current - current state of the object
+ * request - what was requested
+ * cnew - what the object will become
+ *
+ * Description:
+ * Sets the values for the AsciiSink.
+ *
+ * Returns:
+ * True if redisplay is needed
+ */
+/*ARGSUSED*/
+static Boolean
+XawAsciiSinkSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ AsciiSinkObject w = (AsciiSinkObject)cnew;
+ AsciiSinkObject old_w = (AsciiSinkObject)current;
+
+ if (w->ascii_sink.font != old_w->ascii_sink.font
+ || w->text_sink.background != old_w->text_sink.background
+ || w->text_sink.foreground != old_w->text_sink.foreground
+#ifndef OLDXAW
+ || w->text_sink.cursor_color != old_w->text_sink.cursor_color
+ || w->text_sink.properties != old_w->text_sink.properties
+#endif
+ ) {
+#ifdef OLDXAW
+ XtReleaseGC(cnew, w->ascii_sink.normgc);
+ XtReleaseGC(cnew, w->ascii_sink.invgc);
+ XtReleaseGC(cnew, w->ascii_sink.xorgc);
+ GetGC(w);
+#endif
+ ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
+ }
+ else if (w->ascii_sink.echo != old_w->ascii_sink.echo
+ || w->ascii_sink.display_nonprinting
+ != old_w->ascii_sink.display_nonprinting)
+ ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
+#ifndef OLDXAW
+ if (w->text_sink.properties != old_w->text_sink.properties) {
+ XawTextProperty *property =
+ XawTextSinkGetProperty(cnew, XrmStringToQuark("default"));
+
+ if (property) {
+ if (property->mask & XAW_TPROP_FONT)
+ w->ascii_sink.font = property->font;
+ if (property->mask & XAW_TPROP_FOREGROUND)
+ w->text_sink.foreground = property->foreground;
+ if (property->mask & XAW_TPROP_BACKGROUND)
+ w->text_sink.background = property->background;
+ }
+ }
+#endif
+
+ return (False);
+}
+
+/*
+ * Function:
+ * MaxLines
+ *
+ * Parameters:
+ * w - AsciiSink Object
+ * height - height to fit lines into
+ *
+ * Description:
+ * Finds the Maximum number of lines that will fit in a given height.
+ *
+ * Returns:
+ * The number of lines that will fit
+ */
+/*ARGSUSED*/
+static int
+MaxLines(Widget w, unsigned int height)
+{
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ int font_height;
+
+ font_height = sink->ascii_sink.font->ascent + sink->ascii_sink.font->descent + 1;
+
+ return ((int)height / font_height);
+}
+
+/*
+ * Function:
+ * MaxHeight
+ *
+ * Parameters:
+ * w - AsciiSink Object
+ * lines - number of lines
+ *
+ * Description:
+ * Finds the Minium height that will contain a given number lines.
+ *
+ * Returns:
+ * the height
+ */
+static int
+MaxHeight(Widget w, int lines)
+{
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+
+ return (lines * (sink->ascii_sink.font->ascent +
+ sink->ascii_sink.font->descent + 1));
+}
+
+/*
+ * Function:
+ * SetTabs
+ *
+ * Parameters:
+ * w - AsciiSink Object
+ * tab_count - number of tabs in the list
+ * tabs - text positions of the tabs
+ *
+ * Description:
+ * Sets the Tab stops.
+ */
+static void
+SetTabs(Widget w, int tab_count, short *tabs)
+{
+ AsciiSinkObject sink = (AsciiSinkObject)w;
+ int i;
+ Atom XA_FIGURE_WIDTH;
+ unsigned long figure_width = 0;
+ XFontStruct *font = sink->ascii_sink.font;
+
+ /*
+ * Find the figure width of the current font
+ */
+ XA_FIGURE_WIDTH = XInternAtom(XtDisplayOfObject(w), "FIGURE_WIDTH", False);
+ if (XA_FIGURE_WIDTH != None
+ && (!XGetFontProperty(font, XA_FIGURE_WIDTH, &figure_width)
+ || figure_width == 0)) {
+ if (font->per_char && font->min_char_or_byte2 <= '$'
+ && font->max_char_or_byte2 >= '$')
+ figure_width = font->per_char['$' - font->min_char_or_byte2].width;
+ else
+ figure_width = font->max_bounds.width;
+ }
+
+ if (tab_count > sink->text_sink.tab_count) {
+ sink->text_sink.tabs = (Position *)
+ XtRealloc((char*)sink->text_sink.tabs, tab_count * sizeof(Position));
+ sink->text_sink.char_tabs = (short *)
+ XtRealloc((char*)sink->text_sink.char_tabs, tab_count * sizeof(short));
+ }
+
+ for (i = 0 ; i < tab_count ; i++) {
+ sink->text_sink.tabs[i] = tabs[i] * figure_width;
+ sink->text_sink.char_tabs[i] = tabs[i];
+ }
+
+ sink->text_sink.tab_count = tab_count;
+
+#ifndef NO_TAB_FIX
+ {
+ TextWidget ctx = (TextWidget)XtParent(w);
+ ctx->text.redisplay_needed = True;
+ _XawTextBuildLineTable(ctx, ctx->text.lt.top, True);
+ }
+#endif
+}
diff --git a/libXaw/src/AsciiSrc.c b/libXaw/src/AsciiSrc.c
index eb569fc9f..2a07e6220 100644
--- a/libXaw/src/AsciiSrc.c
+++ b/libXaw/src/AsciiSrc.c
@@ -1,1886 +1,1888 @@
-/* $Xorg: AsciiSrc.c,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $ */
-
-/*
-
-Copyright 1989, 1994, 1998 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.
-
-*/
-
-/* $XFree86: xc/lib/Xaw/AsciiSrc.c,v 1.33 2002/07/04 17:04:20 paulo Exp $ */
-
-/*
- * AsciiSrc.c - AsciiSrc object. (For use with the text widget).
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xos.h>
-#include <X11/Xfuncs.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/XawInit.h>
-#include <X11/Xaw/AsciiSrcP.h>
-#include <X11/Xaw/MultiSrcP.h>
-#ifndef OLDXAW
-#include <X11/Xaw/TextSinkP.h>
-#include <X11/Xaw/AsciiSinkP.h>
-#endif
-#include "Private.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#if (defined(ASCII_STRING) || defined(ASCII_DISK))
-#include <X11/Xaw/AsciiText.h> /* for Widget Classes */
-#endif
-
-#ifdef X_NOT_POSIX
-#define Off_t long
-#define Size_t unsigned int
-#else
-#define Off_t off_t
-#define Size_t size_t
-#endif
-
-#define MAGIC_VALUE ((XawTextPosition)-1)
-#define streq(a, b) (strcmp((a), (b)) == 0)
-
-/*
- * Class Methods
- */
-static void XawAsciiSrcClassInitialize(void);
-static void XawAsciiSrcDestroy(Widget);
-static void XawAsciiSrcGetValuesHook(Widget, ArgList, Cardinal*);
-static void XawAsciiSrcInitialize(Widget, Widget, ArgList, Cardinal*);
-static Boolean XawAsciiSrcSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static XawTextPosition ReadText(Widget, XawTextPosition, XawTextBlock*, int);
-static int ReplaceText(Widget, XawTextPosition, XawTextPosition,
- XawTextBlock*);
-static XawTextPosition Scan(Widget, XawTextPosition, XawTextScanType,
- XawTextScanDirection, int, Bool);
-static XawTextPosition Search(Widget, XawTextPosition, XawTextScanDirection,
- XawTextBlock*);
-
-/*
- * Prototypes
- */
-static Piece *AllocNewPiece(AsciiSrcObject, Piece*);
-static void BreakPiece(AsciiSrcObject, Piece*);
-static Boolean CvtAsciiTypeToString(Display*, XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr, XtPointer*);
-static void CvtStringToAsciiType(XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr);
-static Piece *FindPiece(AsciiSrcObject, XawTextPosition, XawTextPosition*);
-static void FreeAllPieces(AsciiSrcObject);
-static FILE *InitStringOrFile(AsciiSrcObject, Bool);
-static void LoadPieces(AsciiSrcObject, FILE*, char*);
-static void RemoveOldStringOrFile(AsciiSrcObject, Bool);
-static void RemovePiece(AsciiSrcObject, Piece*);
-static String StorePiecesInString(AsciiSrcObject);
-static Bool WriteToFile(String, String, unsigned);
-static Bool WritePiecesToFile(AsciiSrcObject, String);
-static void GetDefaultPieceSize(Widget, int, XrmValue*);
-
-/*
- * More Prototypes
- */
-#ifdef ASCII_DISK
-Widget XawAsciiDiskSourceCreate(Widget, ArgList, Cardinal);
-#endif
-#ifdef ASCII_STRING
-Widget XawStringSourceCreate(Widget, ArgList, Cardinal);
-void XawTextSetLastPos(Widget, XawTextPosition);
-#endif
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(AsciiSrcRec, ascii_src.field)
-static XtResource resources[] = {
- {
- XtNstring,
- XtCString,
- XtRString,
- sizeof(char*),
- offset(string),
- XtRString,
- NULL
- },
- {
- XtNtype,
- XtCType,
- XtRAsciiType,
- sizeof(XawAsciiType),
- offset(type),
- XtRImmediate,
- (XtPointer)XawAsciiString
- },
- {
- XtNdataCompression,
- XtCDataCompression,
- XtRBoolean,
- sizeof(Boolean),
- offset(data_compression),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNpieceSize,
- XtCPieceSize,
- XtRInt,
- sizeof(XawTextPosition),
- offset(piece_size),
- XtRCallProc,
- (XtPointer)GetDefaultPieceSize
- },
-#ifdef OLDXAW
- {
- XtNcallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(callback),
- XtRCallback,
- (XtPointer)NULL
- },
-#endif
- {
- XtNuseStringInPlace,
- XtCUseStringInPlace,
- XtRBoolean,
- sizeof(Boolean),
- offset(use_string_in_place),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNlength,
- XtCLength,
- XtRInt,
- sizeof(int),
- offset(ascii_length),
- XtRImmediate,
- (XtPointer)MAGIC_VALUE
- },
-#ifdef ASCII_DISK
- {
- XtNfile,
- XtCFile,
- XtRString,
- sizeof(String),
- offset(filename),
- XtRString,
- NULL
- },
-#endif /* ASCII_DISK */
-};
-#undef offset
-
-
-#define Superclass (&textSrcClassRec)
-AsciiSrcClassRec asciiSrcClassRec = {
- /* object */
- {
- (WidgetClass)Superclass, /* superclass */
- "AsciiSrc", /* class_name */
- sizeof(AsciiSrcRec), /* widget_size */
- XawAsciiSrcClassInitialize, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawAsciiSrcInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* compress_motion */
- False, /* compress_exposure */
- False, /* compress_enterleave */
- False, /* visible_interest */
- XawAsciiSrcDestroy, /* destroy */
- NULL, /* resize */
- NULL, /* expose */
- XawAsciiSrcSetValues, /* set_values */
- NULL, /* set_values_hook */
- NULL, /* set_values_almost */
- XawAsciiSrcGetValuesHook, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- NULL, /* query_geometry */
- NULL, /* display_accelerator */
- NULL, /* extension */
- },
- /* text_src */
- {
- ReadText, /* Read */
- ReplaceText, /* Replace */
- Scan, /* Scan */
- Search, /* Search */
- XtInheritSetSelection, /* SetSelection */
- XtInheritConvertSelection, /* ConvertSelection */
- },
- /* ascii_src */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass asciiSrcObjectClass = (WidgetClass)&asciiSrcClassRec;
-
-static XrmQuark Qstring, Qfile;
-
-/*
- * Implementation
- */
-/*
- * Function:
- * XawAsciiSrcClassInitialize()
- *
- * Description:
- * Initializes the asciiSrcObjectClass and install the converters for
- * AsciiType <-> String.
- */
-static void
-XawAsciiSrcClassInitialize(void)
-{
- XawInitializeWidgetSet();
- Qstring = XrmPermStringToQuark(XtEstring);
- Qfile = XrmPermStringToQuark(XtEfile);
- XtAddConverter(XtRString, XtRAsciiType, CvtStringToAsciiType, NULL, 0);
- XtSetTypeConverter(XtRAsciiType, XtRString, CvtAsciiTypeToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-/*
- * Function:
- * XawAsciiSrcInitialize
- *
- * Parameters:
- * request - widget requested by the argument list
- * cnew - new widget with both resource and non resource values
- * args - (unused)
- * num_args - (unused)
- *
- * Description:
- * Initializes the ascii src object.
- */
-/*ARGSUSED*/
-static void
-XawAsciiSrcInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- AsciiSrcObject src = (AsciiSrcObject)cnew;
- FILE *file;
-
- /*
- * Set correct flags (override resources) depending upon widget class
- */
- src->text_src.text_format = XawFmt8Bit;
-
-#ifdef ASCII_DISK
- if (XtIsSubclass(XtParent(cnew), asciiDiskWidgetClass)) {
- src->ascii_src.type = XawAsciiFile;
- src->ascii_src.string = src->ascii_src.filename;
- }
-#endif
-
-#ifdef ASCII_STRING
- if (XtIsSubclass(XtParent(cnew), asciiStringWidgetClass)) {
- src->ascii_src.use_string_in_place = True;
- src->ascii_src.type = XawAsciiString;
- }
-#endif
-
-#ifdef OLDXAW
- src->ascii_src.changes = False;
-#else
- src->text_src.changed = False;
-#endif
- src->ascii_src.allocated_string = False;
-
- if (src->ascii_src.use_string_in_place && src->ascii_src.string == NULL)
- src->ascii_src.use_string_in_place = False;
-
- file = InitStringOrFile(src, src->ascii_src.type == XawAsciiFile);
- LoadPieces(src, file, NULL);
-
- if (file != NULL)
- fclose(file);
-}
-
-/*
- * Function:
- * ReadText
- *
- * Parameters:
- * w - AsciiSource widget
- * pos - position of the text to retreive.
- * text - text block that will contain returned text
- * length - maximum number of characters to read
- *
- * Description:
- * This function reads the source.
- *
- * Returns:
- * The character position following the retrieved text.
- */
-static XawTextPosition
-ReadText(Widget w, XawTextPosition pos, XawTextBlock *text, int length)
-{
- AsciiSrcObject src = (AsciiSrcObject)w;
- XawTextPosition count, start;
- Piece *piece;
-#ifndef OLDXAW
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextPosition offset, end = pos + length;
- Bool state;
-
- end = XawMin(end, src->ascii_src.length);
- while ((state = XawTextSourceAnchorAndEntity(w, pos, &anchor, &entity)) &&
- (entity->flags & XAW_TENTF_HIDE))
- pos = anchor->position + entity->offset + entity->length;
- if (state == False ||
- !(entity->flags & XAW_TENTF_REPLACE)) {
- while (entity) {
- offset = anchor->position + entity->offset;
- if (offset >= end)
- break;
- if (offset > pos &&
- (entity->flags & (XAW_TENTF_HIDE | XAW_TENTF_REPLACE))) {
- end = XawMin(end, offset);
- break;
- }
- if ((entity = entity->next) == NULL &&
- (anchor = XawTextSourceNextAnchor(w, anchor)) != NULL)
- entity = anchor->entities;
- }
- }
- else if (state && (entity->flags & XAW_TENTF_REPLACE) && pos < end) {
- XawTextBlock *block = (XawTextBlock*)entity->data;
-
- offset = anchor->position + entity->offset;
- end = XawMin(end, offset + block->length);
- if ((length = end - pos) < 0)
- length = 0;
- text->length = length;
- text->format = XawFmt8Bit;
- if (length == 0) {
- text->firstPos = end = offset + entity->length;
- text->ptr = "";
- }
- else {
- text->firstPos = pos;
- text->ptr = block->ptr + (pos - offset);
- if (pos + length < offset + block->length)
- end = pos + length; /* there is data left to be read */
- else
- end = offset + entity->length;
- }
-
- return (end);
- }
-
- if ((length = end - pos) < 0)
- length = 0;
-#endif
-
- piece = FindPiece(src, pos, &start);
- text->firstPos = pos;
- text->ptr = piece->text + (pos - start);
- count = piece->used - (pos - start);
- text->length = Max(0, (length > count) ? count : length);
- text->format = XawFmt8Bit;
-
- return (pos + text->length);
-}
-
-/*
- * Function:
- * ReplaceText
- *
- * Parameters:
- * w - AsciiSource object
- * startPos - ends of text that will be replaced
- * endPos - ""
- * text - new text to be inserted into buffer at startPos
- *
- * Description:
- * Replaces a block of text with new text.
- *
- * Returns:
- * XawEditDone on success, XawEditError otherwise
- */
-/*ARGSUSED*/
-static int
-ReplaceText(Widget w, XawTextPosition startPos, XawTextPosition endPos,
- XawTextBlock *text)
-{
- AsciiSrcObject src = (AsciiSrcObject)w;
- Piece *start_piece, *end_piece, *temp_piece;
- XawTextPosition start_first, end_first;
- int length, firstPos;
-
- /*
- * Editing a read only source is not allowed
- */
- if (src->text_src.edit_mode == XawtextRead)
- return (XawEditError);
-
- start_piece = FindPiece(src, startPos, &start_first);
- end_piece = FindPiece(src, endPos, &end_first);
-
-#ifndef OLDXAW
- /*
- * This is a big hack, but I can't think about a clever way to know
- * if the character being moved forward has a negative lbearing.
- *
- */
- if (start_piece->used) {
- int i;
-
- for (i = 0; i < src->text_src.num_text; i++) {
- int line;
- TextWidget ctx = (TextWidget)src->text_src.text[i];
-
- for (line = 0; line < ctx->text.lt.lines; line++)
- if (startPos < ctx->text.lt.info[line + 1].position)
- break;
- if (i < ctx->text.lt.lines &&
- startPos > ctx->text.lt.info[i].position) {
- AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
- XawTextAnchor *anchor;
- XawTextEntity *entity;
- XawTextProperty *property;
- XFontStruct *font;
-
- if (XawTextSourceAnchorAndEntity(w, startPos, &anchor, &entity) &&
- (property = XawTextSinkGetProperty(ctx->text.sink,
- entity->property)) != NULL &&
- (property->mask & XAW_TPROP_FONT))
- font = property->font;
- else
- font = sink->ascii_sink.font;
-
- if (font->min_bounds.lbearing < 0) {
- int lbearing = font->min_bounds.lbearing;
- unsigned char c = *(unsigned char*)
- (start_piece->text + (startPos - start_first));
-
- if (c == '\t' || c == '\n')
- c = ' ';
- else if ((c & 0177) < XawSP || c == 0177) {
- if (sink->ascii_sink.display_nonprinting)
- c = c > 0177 ? '\\' : c + '^';
- else
- c = ' ';
- }
- if (font->per_char &&
- (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2))
- lbearing = font->per_char[c - font->min_char_or_byte2].lbearing;
- if (lbearing < 0)
- _XawTextNeedsUpdating(ctx, startPos - 1, startPos);
- }
- }
- }
- }
-
-
-#endif
-
- /*
- * Remove Old Stuff
- */
- if (start_piece != end_piece) {
- temp_piece = start_piece->next;
-
- /*
- * If empty and not the only piece then remove it.
- */
- if (((start_piece->used = startPos - start_first) == 0)
- && !(start_piece->next == NULL && start_piece->prev == NULL))
- RemovePiece(src, start_piece);
-
- while (temp_piece != end_piece) {
- temp_piece = temp_piece->next;
- RemovePiece(src, temp_piece->prev);
- }
-
- end_piece->used -= endPos - end_first;
- if (end_piece->used != 0)
- memmove(end_piece->text, end_piece->text + endPos - end_first,
- (unsigned)end_piece->used);
- }
- else { /* We are fully in one piece */
- if ((start_piece->used -= endPos - startPos) == 0) {
- if (!(start_piece->next == NULL && start_piece->prev == NULL))
- RemovePiece(src, start_piece);
- }
- else {
- memmove(start_piece->text + (startPos - start_first),
- start_piece->text + (endPos - start_first),
- (unsigned)(start_piece->used - (startPos - start_first)));
- if (src->ascii_src.use_string_in_place
- && src->ascii_src.length - (endPos - startPos)
- < src->ascii_src.piece_size - 1)
- start_piece->text[src->ascii_src.length - (endPos - startPos)] =
- '\0';
- }
- }
-
- src->ascii_src.length += -(endPos - startPos) + text->length;
-
- if ( text->length != 0) {
- /*
- * Put in the New Stuff
- */
- start_piece = FindPiece(src, startPos, &start_first);
-
- length = text->length;
- firstPos = text->firstPos;
-
- while (length > 0) {
- char *ptr;
- int fill;
-
- if (src->ascii_src.use_string_in_place) {
- if (start_piece->used == src->ascii_src.piece_size - 1) {
- /*
- * If we are in ascii string emulation mode. Then the
- * string is not allowed to grow
- */
- start_piece->used = src->ascii_src.length =
- src->ascii_src.piece_size - 1;
- start_piece->text[src->ascii_src.length] = '\0';
- return (XawEditError);
- }
- }
-
- if (start_piece->used == src->ascii_src.piece_size) {
- BreakPiece(src, start_piece);
- start_piece = FindPiece(src, startPos, &start_first);
- }
-
- fill = Min((int)(src->ascii_src.piece_size - start_piece->used),
- length);
-
- ptr = start_piece->text + (startPos - start_first);
- memmove(ptr + fill, ptr,
- (unsigned)(start_piece->used - (startPos - start_first)));
- memcpy(ptr, text->ptr + firstPos, (unsigned)fill);
-
- startPos += fill;
- firstPos += fill;
- start_piece->used += fill;
- length -= fill;
- }
- }
-
- if (src->ascii_src.use_string_in_place)
- start_piece->text[start_piece->used] = '\0';
-
-#ifdef OLDXAW
- src->ascii_src.changes = True;
- XtCallCallbacks(w, XtNcallback, NULL);
-#endif
-
- return (XawEditDone);
-}
-
-/*
- * Function:
- * Scan
- *
- * Parameters:
- * w - AsciiSource object
- * position - position to start scanning
- * type - type of thing to scan for
- * dir - direction to scan
- * count - which occurance if this thing to search for.
- * include - whether or not to include the character found in
- * the position that is returned
- *
- * Description:
- * Scans the text source for the number and type of item specified.
- *
- * Returns:
- * The position of the item found
- *
- * Note:
- * While there are only 'n' characters in the file there are n+1
- * possible cursor positions (one before the first character and
- * one after the last character
- */
-static XawTextPosition
-Scan(Widget w, register XawTextPosition position, XawTextScanType type,
- XawTextScanDirection dir, int count, Bool include)
-{
- AsciiSrcObject src = (AsciiSrcObject)w;
- Piece *piece;
- XawTextPosition first, first_eol_position = 0;
- register char *ptr, *lim;
- register int cnt = count;
- register unsigned char c;
-
- if (dir == XawsdLeft) {
- if (position <= 0)
- return (0);
- --position;
- }
- else if (position >= src->ascii_src.length)
- return (src->ascii_src.length);
-
- piece = FindPiece(src, position, &first);
- if (piece->used == 0)
- return (0);
-
- ptr = (position - first) + piece->text;
-
- if (dir == XawsdRight) {
- lim = piece->text + piece->used;
- switch (type) {
- case XawstEOL:
- case XawstParagraph:
- case XawstWhiteSpace:
- case XawstAlphaNumeric:
- for (; cnt > 0; cnt--) {
- Bool non_space = False, first_eol = True;
-
- /*CONSTCOND*/
- while (True) {
- if (ptr >= lim) {
- piece = piece->next;
- if (piece == NULL) /* End of text */
- return (src->ascii_src.length);
- ptr = piece->text;
- lim = piece->text + piece->used;
- }
-
- c = *ptr++;
- ++position;
-
- if (type == XawstEOL) {
- if (c == '\n')
- break;
- }
- else if (type == XawstAlphaNumeric) {
- if (!isalnum(c)) {
- if (non_space)
- break;
- }
- else
- non_space = True;
- }
- else if (type == XawstWhiteSpace) {
- if (isspace(c)) {
- if (non_space)
- break;
- }
- else
- non_space = True;
- }
- else { /* XawstParagraph */
- if (first_eol) {
- if (c == '\n') {
- first_eol_position = position;
- first_eol = False;
- }
- }
- else if (c == '\n')
- break;
- else if (!isspace(c))
- first_eol = True;
- }
- }
- }
- break;
- case XawstPositions:
- position += count;
- return (position < src->ascii_src.length ?
- position : src->ascii_src.length);
- case XawstAll:
- return (src->ascii_src.length);
- default:
- break;
- }
- if (!include) {
- if (type == XawstParagraph)
- position = first_eol_position;
- if (count)
- --position;
- }
- }
- else {
- lim = piece->text;
- switch (type) {
- case XawstEOL:
- case XawstParagraph:
- case XawstWhiteSpace:
- case XawstAlphaNumeric:
- for (; cnt > 0; cnt--) {
- Bool non_space = False, first_eol = True;
-
- /*CONSTCOND*/
- while (True) {
- if (ptr < lim) {
- piece = piece->prev;
- if (piece == NULL) /* Begining of text */
- return (0);
- ptr = piece->text + piece->used - 1;
- lim = piece->text;
- }
-
- c = *ptr--;
- --position;
-
- if (type == XawstEOL) {
- if (c == '\n')
- break;
- }
- else if (type == XawstAlphaNumeric) {
- if (!isalnum(c)) {
- if (non_space)
- break;
- }
- else
- non_space = True;
- }
- else if (type == XawstWhiteSpace) {
- if (isspace(c)) {
- if (non_space)
- break;
- }
- else
- non_space = True;
- }
- else { /* XawstParagraph */
- if (first_eol) {
- if (c == '\n') {
- first_eol_position = position;
- first_eol = False;
- }
- }
- else if (c == '\n')
- break;
- else if (!isspace(c))
- first_eol = True;
- }
- }
- }
- break;
- case XawstPositions:
- position -= count - 1;
- return (position > 0 ? position : 0);
- case XawstAll:
- return (0);
- default:
- break;
- }
- if (!include) {
- if (type == XawstParagraph)
- position = first_eol_position;
- if (count)
- ++position;
- }
- position++;
- }
-
- return (position);
-}
-
-/*
- * Function:
- * Search
- *
- * Parameters:
- * w - AsciiSource object
- * position - the position to start scanning
- * dir - direction to scan
- * text - text block to search for
- *
- * Description:
- * Searchs the text source for the text block passed.
- *
- * Returns:
- * The position of the item found
- */
-static XawTextPosition
-Search(Widget w, register XawTextPosition position, XawTextScanDirection dir,
- XawTextBlock *text)
-{
- AsciiSrcObject src = (AsciiSrcObject)w;
- register int count = 0;
- register char *ptr, c;
- char *str;
- Piece *piece;
- char *buf;
- XawTextPosition first;
- int cnt, case_sensitive;
-
- if (dir == XawsdLeft) {
- if (position == 0)
- return (XawTextSearchError);
- position--;
- }
-
- buf = XtMalloc((unsigned)sizeof(unsigned char) * text->length);
- memcpy(buf, text->ptr, (unsigned)text->length);
- piece = FindPiece(src, position, &first);
- ptr = (position - first) + piece->text;
- case_sensitive = text->firstPos;
-
- if (dir == XawsdRight) {
- str = buf;
- c = *str;
- /*CONSTCOND*/
- while (1) {
- if (*ptr++ == c
- || (case_sensitive && isalpha(c) && isalpha(ptr[-1])
- && toupper(c) == toupper(ptr[-1]))) {
- if (++count == text->length)
- break;
- c = *++str;
- }
- else if (count) {
- ptr -= count;
- str -= count;
- position -= count;
- count = 0;
- c = *str;
-
- if (ptr < piece->text) {
- do {
- cnt = piece->text - ptr;
- piece = piece->prev;
- if (piece == NULL) {
- XtFree(buf);
- return (XawTextSearchError);
- }
- ptr = piece->text + piece->used - cnt;
- } while (ptr < piece->text);
- }
- }
- position++;
- if (ptr >= (piece->text + piece->used)) {
- do {
- cnt = ptr - (piece->text + piece->used);
- piece = piece->next;
- if (piece == NULL) {
- XtFree(buf);
- return (XawTextSearchError);
- }
- ptr = piece->text + cnt;
- } while (ptr >= (piece->text + piece->used));
- }
- }
-
- position -= text->length - 1;
- }
- else {
- str = buf + text->length - 1;
- c = *str;
- /*CONSTCOND*/
- while (1) {
- if (*ptr-- == c
- || (case_sensitive && isalpha(c) && isalpha(ptr[1])
- && toupper(c) == toupper(ptr[1]))) {
- if (++count == text->length)
- break;
- c = *--str;
- }
- else if (count) {
- ptr += count;
- str += count;
- position += count;
- count = 0;
- c = *str;
-
- if (ptr >= (piece->text + piece->used)) {
- do {
- cnt = ptr - (piece->text + piece->used);
- piece = piece->next;
- if (piece == NULL) {
- XtFree(buf);
- return (XawTextSearchError);
- }
- ptr = piece->text + cnt;
- } while (ptr >= (piece->text + piece->used));
- }
- }
- position--;
- if (ptr < piece->text) {
- do {
- cnt = piece->text - ptr;
- piece = piece->prev;
- if (piece == NULL) {
- XtFree(buf);
- return (XawTextSearchError);
- }
- ptr = piece->text + piece->used - cnt;
- } while (ptr < piece->text);
- }
- }
- }
-
- XtFree(buf);
-
- return (position);
-}
-
-/*
- * Function:
- * XawAsciiSrcSetValues
- *
- * Parameters:
- * current - current state of the widget
- * request - what was requested
- * cnew - what the widget will become
- * args - representation of changed resources
- * num_args - number of resources that have changed
- *
- * Description:
- * Sets the values for the AsciiSource.
- *
- * Returns:
- * True if redisplay is needed
- */
-static Boolean
-XawAsciiSrcSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- AsciiSrcObject src = (AsciiSrcObject)cnew;
- AsciiSrcObject old_src = (AsciiSrcObject)current;
- Bool total_reset = False, string_set = False;
- FILE *file;
- unsigned int i;
-
- if (old_src->ascii_src.use_string_in_place
- != src->ascii_src.use_string_in_place) {
- XtAppWarning(XtWidgetToApplicationContext(cnew),
- "AsciiSrc: The XtNuseStringInPlace resource may "
- "not be changed.");
- src->ascii_src.use_string_in_place =
- old_src->ascii_src.use_string_in_place;
- }
-
- for (i = 0; i < *num_args ; i++)
- if (streq(args[i].name, XtNstring)) {
- string_set = True;
- break;
- }
-
- if (string_set || (old_src->ascii_src.type != src->ascii_src.type)) {
- RemoveOldStringOrFile(old_src, string_set); /* remove old info */
- file = InitStringOrFile(src, string_set); /* Init new info */
- LoadPieces(src, file, NULL); /* load new info into internal buffers */
- if (file != NULL)
- fclose(file);
-#ifndef OLDXAW
- for (i = 0; i < src->text_src.num_text; i++)
- /* Tell text widget what happened */
- XawTextSetSource(src->text_src.text[i], cnew, 0);
-#else
- XawTextSetSource(XtParent(cnew), cnew, 0);
-#endif
- total_reset = True;
- }
-
- if (old_src->ascii_src.ascii_length != src->ascii_src.ascii_length)
- src->ascii_src.piece_size = src->ascii_src.ascii_length + 1;
-
- if (!total_reset &&
- old_src->ascii_src.piece_size != src->ascii_src.piece_size) {
- String string = StorePiecesInString(old_src);
-
- FreeAllPieces(old_src);
- LoadPieces(src, NULL, string);
- XtFree(string);
- }
-
- return (False);
-}
-
-/*
- * Function:
- * XawAsciiSrcGetValuesHook
- *
- * Parameters:
- * w - AsciiSource Widget
- * args - argument list
- * num_args - number of args
- *
- * Description:
- * This is a get values hook routine that sets the
- * values specific to the ascii source.
- */
-static void
-XawAsciiSrcGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
-{
- AsciiSrcObject src = (AsciiSrcObject)w;
- unsigned int i;
-
- if (src->ascii_src.type == XawAsciiString) {
- for (i = 0; i < *num_args ; i++)
- if (streq(args[i].name, XtNstring)) {
- if (src->ascii_src.use_string_in_place)
- *((char **)args[i].value) = src->ascii_src.first_piece->text;
- else if (XawAsciiSave(w)) /* If save sucessful */
- *((char **)args[i].value) = src->ascii_src.string;
- break;
- }
- }
- }
-
-/*
- * Function:
- * XawAsciiSrcDestroy
- *
- * Parameters:
- * src - Ascii source object to free
- *
- * Description:
- * Destroys an ascii source (frees all data)
- */
-static void
-XawAsciiSrcDestroy(Widget w)
-{
- RemoveOldStringOrFile((AsciiSrcObject) w, True);
-}
-
-/*
- * Public routines
- */
-/*
- * Function:
- * XawAsciiSourceFreeString
- *
- * Parameters:
- * w - AsciiSrc widget
- *
- * Description:
- * Frees the string returned by a get values call
- * on the string when the source is of type string.
- */
-void
-XawAsciiSourceFreeString(Widget w)
-{
- AsciiSrcObject src = (AsciiSrcObject)w;
-
- /* If the src is really a multi, call the multi routine */
- if (XtIsSubclass(w, multiSrcObjectClass)) {
- _XawMultiSourceFreeString(w);
- return;
- }
- else if (!XtIsSubclass(w, asciiSrcObjectClass)) {
- XtErrorMsg("bad argument", "asciiSource", "XawError",
- "XawAsciiSourceFreeString's parameter must be "
- "an asciiSrc or multiSrc.",
- NULL, NULL);
- }
-
- if (src->ascii_src.allocated_string && src->ascii_src.type != XawAsciiFile) {
- src->ascii_src.allocated_string = False;
- XtFree(src->ascii_src.string);
- src->ascii_src.string = NULL;
- }
-}
-
-/*
- * Function:
- * XawAsciiSave
- *
- * Parameters:
- * w - asciiSrc Widget
- *
- * Description:
- * Saves all the pieces into a file or string as required.
- *
- * Returns:
- * True if the save was successful
- */
-Bool
-XawAsciiSave(Widget w)
-{
- AsciiSrcObject src = (AsciiSrcObject)w;
-
- /* If the src is really a multi, call the multi save */
- if (XtIsSubclass(w, multiSrcObjectClass ))
- return (_XawMultiSave(w));
-
- else if (!XtIsSubclass(w, asciiSrcObjectClass))
- XtErrorMsg("bad argument", "asciiSource", "XawError",
- "XawAsciiSave's parameter must be an asciiSrc or multiSrc.",
- NULL, NULL);
-
- /*
- * If using the string in place then there is no need to play games
- * to get the internal info into a readable string.
- */
- if (src->ascii_src.use_string_in_place)
- return (True);
-
- if (src->ascii_src.type == XawAsciiFile) {
-#ifdef OLDXAW
- if (!src->ascii_src.changes)
-#else
- if (!src->text_src.changed) /* No changes to save */
-#endif
- return (True);
-
- if (WritePiecesToFile(src, src->ascii_src.string) == False)
- return (False);
- }
- else {
- if (src->ascii_src.allocated_string == True)
- XtFree(src->ascii_src.string);
- else
- src->ascii_src.allocated_string = True;
-
- src->ascii_src.string = StorePiecesInString(src);
- }
-#ifdef OLDXAW
- src->ascii_src.changes = False;
-#else
- src->text_src.changed = False;
-#endif
-
- return (True);
-}
-
-/*
- * Function:
- * XawAsciiSaveAsFile
- *
- * Arguments:
- * w - AsciiSrc widget
- * name - name of the file to save this file into
- *
- * Description:
- * Save the current buffer as a file.
- *
- * Returns:
- * True if the save was sucessful
- */
-Bool
-XawAsciiSaveAsFile(Widget w, _Xconst char *name)
-{
- AsciiSrcObject src = (AsciiSrcObject)w;
- Bool ret;
-
- /* If the src is really a multi, call the multi save */
-
- if (XtIsSubclass( w, multiSrcObjectClass))
- return (_XawMultiSaveAsFile(w, name));
-
- else if (!XtIsSubclass(w, asciiSrcObjectClass))
- XtErrorMsg("bad argument", "asciiSource", "XawError",
- "XawAsciiSaveAsFile's 1st parameter must be an "
- "asciiSrc or multiSrc.",
- NULL, NULL);
-
- if (src->ascii_src.type == XawAsciiFile)
- ret = WritePiecesToFile(src, (String)name);
- else {
- String string = StorePiecesInString(src);
-
- ret = WriteToFile(string, (String)name, src->ascii_src.length);
- XtFree(string);
- }
-
- return (ret);
-}
-
-/*
- * Function:
- * XawAsciiSourceChanged
- *
- * Parameters:
- * w - ascii source widget
- *
- * Description:
- * Returns true if the source has changed since last saved.
- *
- * Returns:
- * A Boolean (see description).
- */
-Bool
-XawAsciiSourceChanged(Widget w)
-{
-#ifdef OLDXAW
- if (XtIsSubclass(w, multiSrcObjectClass))
- return (((MultiSrcObject)w)->multi_src.changes);
-
- if (XtIsSubclass(w, asciiSrcObjectClass))
- return (((AsciiSrcObject)w)->ascii_src.changes);
-#else
- if (XtIsSubclass(w, textSrcObjectClass))
- return (((TextSrcObject)w)->textSrc.changed);
-#endif
- XtErrorMsg("bad argument", "asciiSource", "XawError",
- "XawAsciiSourceChanged parameter must be an "
- "asciiSrc or multiSrc.",
- NULL, NULL);
-
- return (True);
-}
-
-/*
- * Private Functions
- */
-static void
-RemoveOldStringOrFile(AsciiSrcObject src, Bool checkString)
-{
- FreeAllPieces(src);
-
- if (checkString && src->ascii_src.allocated_string) {
- XtFree(src->ascii_src.string);
- src->ascii_src.allocated_string = False;
- src->ascii_src.string = NULL;
- }
-}
-
-/*
- * Function:
- * WriteToFile
- *
- * Parameters:
- * string - string to write
- * name - the name of the file
- *
- * Description:
- * Write the string specified to the begining of the file specified.
- *
- * Returns:
- * returns True if sucessful, False otherwise
- */
-static Bool
-WriteToFile(String string, String name, unsigned length)
-{
- int fd;
-
- if ((fd = creat(name, 0666)) == -1
- || write(fd, string, length) == -1)
- return (False);
-
- if (close(fd) == -1)
- return (False);
-
- return (True);
-}
-
-/*
- * Function:
- * WritePiecesToFile
- *
- * Parameters:
- * src - ascii source object
- * name - name of the file
- *
- * Description:
- * Almost identical to WriteToFile, but only works for ascii src objects
- * of type XawAsciiFile. This function avoids allocating temporary memory,
- * what can be useful when editing very large files.
- *
- * Returns:
- * returns True if sucessful, False otherwise
- */
-static Bool
-WritePiecesToFile(AsciiSrcObject src, String name)
-{
- Piece *piece;
- int fd;
-
- if (src->ascii_src.data_compression) {
- Piece *tmp;
-
- piece = src->ascii_src.first_piece;
- while (piece) {
- int bytes = src->ascii_src.piece_size - piece->used;
-
- if (bytes > 0 && (tmp = piece->next) != NULL) {
- bytes = XawMin(bytes, tmp->used);
- memcpy(piece->text + piece->used, tmp->text, bytes);
- memmove(tmp->text, tmp->text + bytes, tmp->used - bytes);
- piece->used += bytes;
- if ((tmp->used -= bytes) == 0) {
- RemovePiece(src, tmp);
- continue;
- }
- }
- piece = piece->next;
- }
- }
-
- if ((fd = creat(name, 0666)) == -1)
- return (False);
-
- for (piece = src->ascii_src.first_piece; piece; piece = piece->next)
- if (write(fd, piece->text, piece->used) == -1)
- return (False);
-
- if (close(fd) == -1)
- return (False);
-
- return (True);
-}
-
-/*
- * Function:
- * StorePiecesInString
- *
- * Parameters:
- * data - ascii pointer data
- *
- * Description:
- * Store the pieces in memory into a standard ascii string.
- */
-static String
-StorePiecesInString(AsciiSrcObject src)
-{
- String string;
- XawTextPosition first;
- Piece *piece;
-
- string = XtMalloc((unsigned)(src->ascii_src.length + 1));
-
- for (first = 0, piece = src->ascii_src.first_piece ; piece != NULL;
- first += piece->used, piece = piece->next)
- memcpy(string + first, piece->text, (unsigned)piece->used);
-
- string[src->ascii_src.length] = '\0';
-
- /*
- * This will refill all pieces to capacity
- */
- if (src->ascii_src.data_compression) {
- FreeAllPieces(src);
- LoadPieces(src, NULL, string);
- }
-
- return (string);
-}
-
-/*
- * Function:
- * InitStringOrFile
- *
- * Parameters:
- * src - AsciiSource
- *
- * Description:
- * Initializes the string or file.
- */
-static FILE *
-InitStringOrFile(AsciiSrcObject src, Bool newString)
-{
- mode_t open_mode = 0;
- const char *fdopen_mode = NULL;
- int fd;
- FILE *file;
-
- if (src->ascii_src.type == XawAsciiString) {
- if (src->ascii_src.string == NULL)
- src->ascii_src.length = 0;
-
- else if (!src->ascii_src.use_string_in_place) {
- src->ascii_src.string = XtNewString(src->ascii_src.string);
- src->ascii_src.allocated_string = True;
- src->ascii_src.length = strlen(src->ascii_src.string);
- }
-
- if (src->ascii_src.use_string_in_place) {
- if (src->ascii_src.string != NULL)
- src->ascii_src.length = strlen(src->ascii_src.string);
- /* In case the length resource is incorrectly set */
- if (src->ascii_src.length > src->ascii_src.ascii_length)
- src->ascii_src.ascii_length = src->ascii_src.length;
-
- if (src->ascii_src.ascii_length == MAGIC_VALUE)
- src->ascii_src.piece_size = src->ascii_src.length;
- else
- src->ascii_src.piece_size = src->ascii_src.ascii_length + 1;
- }
-
- return (NULL);
- }
-
- /*
- * type is XawAsciiFile
- */
- src->ascii_src.is_tempfile = False;
-
- switch (src->text_src.edit_mode) {
- case XawtextRead:
- if (src->ascii_src.string == NULL)
- XtErrorMsg("NoFile", "asciiSourceCreate", "XawError",
- "Creating a read only disk widget and no file specified.",
- NULL, NULL);
- open_mode = O_RDONLY;
- fdopen_mode = "r";
- break;
- case XawtextAppend:
- case XawtextEdit:
- if (src->ascii_src.string == NULL) {
- src->ascii_src.string = "*ascii-src*";
- src->ascii_src.is_tempfile = True;
- }
- else {
-/* O_NOFOLLOW is a FreeBSD & Linux extension */
-#ifdef O_NOFOLLOW
- open_mode = O_RDWR | O_NOFOLLOW;
-#else
- open_mode = O_RDWR; /* unsafe; subject to race conditions */
-#endif /* O_NOFOLLOW */
- fdopen_mode = "r+";
- }
- break;
- default:
- XtErrorMsg("badMode", "asciiSourceCreate", "XawError",
- "Bad editMode for ascii source; must be Read, "
- "Append or Edit.",
- NULL, NULL);
- }
-
- /* If is_tempfile, allocate a private copy of the text
- * Unlikely to be changed, just to set allocated_string */
- if (newString || src->ascii_src.is_tempfile) {
- src->ascii_src.string = XtNewString(src->ascii_src.string);
- src->ascii_src.allocated_string = True;
- }
-
- if (!src->ascii_src.is_tempfile) {
- if ((fd = open(src->ascii_src.string, open_mode, 0666)) != -1) {
- if ((file = fdopen(fd, fdopen_mode))) {
- (void)fseek(file, 0, SEEK_END);
- src->ascii_src.length = (XawTextPosition)ftell(file);
- return (file);
- }
- }
- {
- String params[2];
- Cardinal num_params = 2;
-
- params[0] = src->ascii_src.string;
- params[1] = strerror(errno);
- XtAppWarningMsg(XtWidgetToApplicationContext((Widget)src),
- "openError", "asciiSourceCreate", "XawWarning",
- "Cannot open file %s; %s", params, &num_params);
- }
- }
- src->ascii_src.length = 0;
- return (NULL);
-}
-
-static void
-LoadPieces(AsciiSrcObject src, FILE *file, char *string)
-{
- char *ptr;
- Piece *piece = NULL;
- XawTextPosition left;
-
- if (string == NULL) {
- if (src->ascii_src.type == XawAsciiFile) {
- if (src->ascii_src.length != 0) {
- int len;
-
- left = 0;
- fseek(file, 0, 0);
- while (left < src->ascii_src.length) {
- ptr = XtMalloc((unsigned)src->ascii_src.piece_size);
- if ((len = fread(ptr, (Size_t)sizeof(unsigned char),
- (Size_t)src->ascii_src.piece_size, file)) < 0)
- XtErrorMsg("readError", "asciiSourceCreate", "XawError",
- "fread returned error.", NULL, NULL);
- piece = AllocNewPiece(src, piece);
- piece->text = ptr;
- piece->used = XawMin(len, src->ascii_src.piece_size);
- left += piece->used;
- }
- }
- else {
- piece = AllocNewPiece(src, NULL);
- piece->text = XtMalloc((unsigned)src->ascii_src.piece_size);
- piece->used = 0;
- }
- return;
- }
- else
- string = src->ascii_src.string;
- }
-
- if (src->ascii_src.use_string_in_place) {
- piece = AllocNewPiece(src, piece);
- piece->used = XawMin(src->ascii_src.length, src->ascii_src.piece_size);
- piece->text = src->ascii_src.string;
- return;
- }
-
- ptr = string;
- left = src->ascii_src.length;
- do {
- piece = AllocNewPiece(src, piece);
-
- piece->text = XtMalloc((unsigned)src->ascii_src.piece_size);
- piece->used = XawMin(left, src->ascii_src.piece_size);
- if (piece->used != 0)
- memcpy(piece->text, ptr, (unsigned)piece->used);
-
- left -= piece->used;
- ptr += piece->used;
- } while (left > 0);
-}
-
-/*
- * Function:
- * AllocNewPiece
- *
- * Parameters:
- * src - AsciiSrc Widget
- * prev - piece just before this one, or NULL
- *
- * Description:
- * Allocates a new piece of memory.
- *
- * Returns:
- * The allocated piece
- */
-static Piece *
-AllocNewPiece(AsciiSrcObject src, Piece *prev)
-{
- Piece *piece = XtNew(Piece);
-
- if (prev == NULL) {
- src->ascii_src.first_piece = piece;
- piece->next = NULL;
- }
- else {
- if (prev->next != NULL)
- (prev->next)->prev = piece;
- piece->next = prev->next;
- prev->next = piece;
- }
-
- piece->prev = prev;
-
- return (piece);
-}
-
-/*
- * Function:
- * FreeAllPieces
- *
- * Parameters:
- * src - AsciiSrc Widget
- *
- * Description:
- * Frees all the pieces.
- */
-static void
-FreeAllPieces(AsciiSrcObject src)
-{
- Piece *next, * first = src->ascii_src.first_piece;
-
-#ifdef DEBUG
- if (first->prev != NULL)
- printf("Xaw AsciiSrc Object: possible memory leak in FreeAllPieces().\n");
-#endif
-
- for (; first != NULL ; first = next) {
- next = first->next;
- RemovePiece(src, first);
- }
-}
-
-/*
- * Function:
- * RemovePiece
- *
- * Parameters:
- * piece - piece to remove
- *
- * Description:
- * Removes a piece from the list.
- */
-static void
-RemovePiece(AsciiSrcObject src, Piece *piece)
-{
- if (piece->prev == NULL)
- src->ascii_src.first_piece = piece->next;
- else
- piece->prev->next = piece->next;
-
- if (piece->next != NULL)
- piece->next->prev = piece->prev;
-
- if (!src->ascii_src.use_string_in_place)
- XtFree(piece->text);
-
- XtFree((char *)piece);
-}
-
-/*
- * Function:
- * FindPiece
- *
- * Parameters:
- * src - AsciiSrc Widget
- * position - position that we are searching for
- * first - position of the first character in this piece (return)
- *
- * Description:
- * Finds the piece containing the position indicated.
- *
- * Returns:
- * the piece that contains this position
- */
-static Piece *
-FindPiece(AsciiSrcObject src, XawTextPosition position, XawTextPosition *first)
-{
- Piece *old_piece, *piece;
- XawTextPosition temp;
-
- for (old_piece = NULL, piece = src->ascii_src.first_piece, temp = 0;
- piece; old_piece = piece, piece = piece->next)
- if ((temp += piece->used) > position) {
- *first = temp - piece->used;
- return (piece);
- }
-
- *first = temp - (old_piece ? old_piece->used : 0);
-
- return (old_piece); /* if we run off the end the return the last piece */
-}
-
-/*
- * Function:
- * BreakPiece
- *
- * Parameters:
- * src - AsciiSrc Widget
- * piece - piece to break
- *
- * Description:
- * Breaks a full piece into two new pieces.
- */
-#define HALF_PIECE (src->ascii_src.piece_size >> 1)
-static void
-BreakPiece(AsciiSrcObject src, Piece *piece)
-{
- Piece *cnew = AllocNewPiece(src, piece);
-
- cnew->text = XtMalloc((unsigned)src->ascii_src.piece_size);
- memcpy(cnew->text, piece->text + HALF_PIECE,
- (unsigned)(src->ascii_src.piece_size - HALF_PIECE));
- piece->used = HALF_PIECE;
- cnew->used = src->ascii_src.piece_size - HALF_PIECE;
-}
-
-/*ARGSUSED*/
-static void
-CvtStringToAsciiType(XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal)
-{
- static XawAsciiType type;
- XrmQuark q;
- char name[7];
-
- XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
- q = XrmStringToQuark(name);
-
- if (q == Qstring)
- type = XawAsciiString;
- else if (q == Qfile)
- type = XawAsciiFile;
- else {
- toVal->size = 0;
- toVal->addr = NULL;
- XtStringConversionWarning((char *)fromVal->addr, XtRAsciiType);
- }
-
- toVal->size = sizeof(XawAsciiType);
- toVal->addr = (XPointer)&type;
-}
-
-/*ARGSUSED*/
-static Boolean
-CvtAsciiTypeToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal,
- XtPointer *data)
-{
- static String buffer;
- Cardinal size;
-
- switch (*(XawAsciiType *)fromVal->addr) {
- case XawAsciiFile:
- buffer = XtEfile;
- break;
- case XawAsciiString:
- buffer = XtEstring;
- break;
- default:
- XawTypeToStringWarning(dpy, XtRAsciiType);
- toVal->addr = NULL;
- toVal->size = 0;
- return (False);
- }
-
- size = strlen(buffer) + 1;
- if (toVal->addr != NULL) {
- if (toVal->size < size) {
- toVal->size = size;
- return (False);
- }
- strcpy((char *)toVal->addr, buffer);
- }
- else
- toVal->addr = (XPointer)buffer;
- toVal->size = sizeof(String);
-
- return (True);
-}
-
-/*ARGSUSED*/
-static void
-GetDefaultPieceSize(Widget w, int offset, XrmValue *value)
-{
- static XPointer pagesize;
-
- if (pagesize == NULL) {
- pagesize = (XPointer)((long)_XawGetPageSize());
- if (pagesize < (XPointer)BUFSIZ)
- pagesize = (XPointer)BUFSIZ;
- }
-
- value->addr = (XPointer)&pagesize;
-}
-
-#if (defined(ASCII_STRING) || defined(ASCII_DISK))
-# include <X11/Xaw/Cardinals.h>
-#endif
-
-#ifdef ASCII_STRING
-/*
- * Compatability functions.
- */
-/*
- * Function:
- * AsciiStringSourceCreate
- *
- * Parameters:
- * parent - widget that will own this source
- * args - the argument list
- * num_args - ""
- *
- * Description:
- * Creates a string source.
- *
- * Returns:
- * A pointer to the new text source.
- */
-Widget
-XawStringSourceCreate(Widget parent, ArgList args, Cardinal num_args)
-{
- XawTextSource src;
- ArgList ascii_args;
- Arg temp[2];
-
- XtSetArg(temp[0], XtNtype, XawAsciiString);
- XtSetArg(temp[1], XtNuseStringInPlace, True);
- ascii_args = XtMergeArgLists(temp, TWO, args, num_args);
-
- src = XtCreateWidget("genericAsciiString", asciiSrcObjectClass, parent,
- ascii_args, num_args + TWO);
- XtFree((char *)ascii_args);
-
- return (src);
-}
-
-/*
- * This is hacked up to try to emulate old functionality, it
- * may not work, as I have not old code to test it on.
- *
- * Chris D. Peterson 8/31/89.
- */
-void
-XawTextSetLastPos(Widget w, XawTextPosition lastPos)
-{
- AsciiSrcObject src = (AsciiSrcObject)XawTextGetSource(w);
-
- src->ascii_src.piece_size = lastPos;
-}
-#endif /* ASCII_STRING */
-
-#ifdef ASCII_DISK
-/*
- * Function:
- * AsciiDiskSourceCreate
- *
- * Parameters:
- * parent - widget that will own this source
- * args - argument list
- * num_args - ""
- *
- * Description:
- * Creates a disk source.
- *
- * Returns:
- * A pointer to the new text source
- */
-Widget
-XawDiskSourceCreate(Widget parent, ArgList args, Cardinal num_args)
-{
- XawTextSource src;
- ArgList ascii_args;
- Arg temp[1];
- int i;
-
- XtSetArg(temp[0], XtNtype, XawAsciiFile);
- ascii_args = XtMergeArgLists(temp, ONE, args, num_args);
- num_args++;
-
- for (i = 0; i < num_args; i++)
- if (streq(ascii_args[i].name, XtNfile)
- || streq(ascii_args[i].name, XtCFile))
- ascii_args[i].name = XtNstring;
-
- src = XtCreateWidget("genericAsciiDisk", asciiSrcObjectClass, parent,
- ascii_args, num_args);
- XtFree((char *)ascii_args);
-
- return (src);
-}
-#endif /* ASCII_DISK */
+/*
+
+Copyright 1989, 1994, 1998 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.
+
+*/
+
+/*
+ * AsciiSrc.c - AsciiSrc object. (For use with the text widget).
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xfuncs.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/XawInit.h>
+#include <X11/Xaw/AsciiSrcP.h>
+#include <X11/Xaw/MultiSrcP.h>
+#ifndef OLDXAW
+#include <X11/Xaw/TextSinkP.h>
+#include <X11/Xaw/AsciiSinkP.h>
+#endif
+#include "Private.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#if (defined(ASCII_STRING) || defined(ASCII_DISK))
+#include <X11/Xaw/AsciiText.h> /* for Widget Classes */
+#endif
+
+#ifdef X_NOT_POSIX
+#define Off_t long
+#define Size_t unsigned int
+#else
+#define Off_t off_t
+#define Size_t size_t
+#endif
+
+#define MAGIC_VALUE ((XawTextPosition)-1)
+#define streq(a, b) (strcmp((a), (b)) == 0)
+
+/*
+ * Class Methods
+ */
+static void XawAsciiSrcClassInitialize(void);
+static void XawAsciiSrcDestroy(Widget);
+static void XawAsciiSrcGetValuesHook(Widget, ArgList, Cardinal*);
+static void XawAsciiSrcInitialize(Widget, Widget, ArgList, Cardinal*);
+static Boolean XawAsciiSrcSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static XawTextPosition ReadText(Widget, XawTextPosition, XawTextBlock*, int);
+static int ReplaceText(Widget, XawTextPosition, XawTextPosition,
+ XawTextBlock*);
+static XawTextPosition Scan(Widget, XawTextPosition, XawTextScanType,
+ XawTextScanDirection, int, Bool);
+static XawTextPosition Search(Widget, XawTextPosition, XawTextScanDirection,
+ XawTextBlock*);
+
+/*
+ * Prototypes
+ */
+static Piece *AllocNewPiece(AsciiSrcObject, Piece*);
+static void BreakPiece(AsciiSrcObject, Piece*);
+static Boolean CvtAsciiTypeToString(Display*, XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr, XtPointer*);
+static void CvtStringToAsciiType(XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr);
+static Piece *FindPiece(AsciiSrcObject, XawTextPosition, XawTextPosition*);
+static void FreeAllPieces(AsciiSrcObject);
+static FILE *InitStringOrFile(AsciiSrcObject, Bool);
+static void LoadPieces(AsciiSrcObject, FILE*, char*);
+static void RemoveOldStringOrFile(AsciiSrcObject, Bool);
+static void RemovePiece(AsciiSrcObject, Piece*);
+static String StorePiecesInString(AsciiSrcObject);
+static Bool WriteToFile(String, String, unsigned);
+static Bool WritePiecesToFile(AsciiSrcObject, String);
+static void GetDefaultPieceSize(Widget, int, XrmValue*);
+
+/*
+ * More Prototypes
+ */
+#ifdef ASCII_DISK
+Widget XawAsciiDiskSourceCreate(Widget, ArgList, Cardinal);
+#endif
+#ifdef ASCII_STRING
+Widget XawStringSourceCreate(Widget, ArgList, Cardinal);
+void XawTextSetLastPos(Widget, XawTextPosition);
+#endif
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(AsciiSrcRec, ascii_src.field)
+static XtResource resources[] = {
+ {
+ XtNstring,
+ XtCString,
+ XtRString,
+ sizeof(char*),
+ offset(string),
+ XtRString,
+ NULL
+ },
+ {
+ XtNtype,
+ XtCType,
+ XtRAsciiType,
+ sizeof(XawAsciiType),
+ offset(type),
+ XtRImmediate,
+ (XtPointer)XawAsciiString
+ },
+ {
+ XtNdataCompression,
+ XtCDataCompression,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(data_compression),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNpieceSize,
+ XtCPieceSize,
+ XtRInt,
+ sizeof(XawTextPosition),
+ offset(piece_size),
+ XtRCallProc,
+ (XtPointer)GetDefaultPieceSize
+ },
+#ifdef OLDXAW
+ {
+ XtNcallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(callback),
+ XtRCallback,
+ (XtPointer)NULL
+ },
+#endif
+ {
+ XtNuseStringInPlace,
+ XtCUseStringInPlace,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(use_string_in_place),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNlength,
+ XtCLength,
+ XtRInt,
+ sizeof(int),
+ offset(ascii_length),
+ XtRImmediate,
+ (XtPointer)MAGIC_VALUE
+ },
+#ifdef ASCII_DISK
+ {
+ XtNfile,
+ XtCFile,
+ XtRString,
+ sizeof(String),
+ offset(filename),
+ XtRString,
+ NULL
+ },
+#endif /* ASCII_DISK */
+};
+#undef offset
+
+
+#define Superclass (&textSrcClassRec)
+AsciiSrcClassRec asciiSrcClassRec = {
+ /* object */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "AsciiSrc", /* class_name */
+ sizeof(AsciiSrcRec), /* widget_size */
+ XawAsciiSrcClassInitialize, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawAsciiSrcInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* compress_motion */
+ False, /* compress_exposure */
+ False, /* compress_enterleave */
+ False, /* visible_interest */
+ XawAsciiSrcDestroy, /* destroy */
+ NULL, /* resize */
+ NULL, /* expose */
+ XawAsciiSrcSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ NULL, /* set_values_almost */
+ XawAsciiSrcGetValuesHook, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ NULL, /* query_geometry */
+ NULL, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* text_src */
+ {
+ ReadText, /* Read */
+ ReplaceText, /* Replace */
+ Scan, /* Scan */
+ Search, /* Search */
+ XtInheritSetSelection, /* SetSelection */
+ XtInheritConvertSelection, /* ConvertSelection */
+ },
+ /* ascii_src */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass asciiSrcObjectClass = (WidgetClass)&asciiSrcClassRec;
+
+static XrmQuark Qstring, Qfile;
+
+/*
+ * Implementation
+ */
+/*
+ * Function:
+ * XawAsciiSrcClassInitialize()
+ *
+ * Description:
+ * Initializes the asciiSrcObjectClass and install the converters for
+ * AsciiType <-> String.
+ */
+static void
+XawAsciiSrcClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ Qstring = XrmPermStringToQuark(XtEstring);
+ Qfile = XrmPermStringToQuark(XtEfile);
+ XtAddConverter(XtRString, XtRAsciiType, CvtStringToAsciiType, NULL, 0);
+ XtSetTypeConverter(XtRAsciiType, XtRString, CvtAsciiTypeToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+/*
+ * Function:
+ * XawAsciiSrcInitialize
+ *
+ * Parameters:
+ * request - widget requested by the argument list
+ * cnew - new widget with both resource and non resource values
+ * args - (unused)
+ * num_args - (unused)
+ *
+ * Description:
+ * Initializes the ascii src object.
+ */
+/*ARGSUSED*/
+static void
+XawAsciiSrcInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ AsciiSrcObject src = (AsciiSrcObject)cnew;
+ FILE *file;
+
+ /*
+ * Set correct flags (override resources) depending upon widget class
+ */
+ src->text_src.text_format = XawFmt8Bit;
+
+#ifdef ASCII_DISK
+ if (XtIsSubclass(XtParent(cnew), asciiDiskWidgetClass)) {
+ src->ascii_src.type = XawAsciiFile;
+ src->ascii_src.string = src->ascii_src.filename;
+ }
+#endif
+
+#ifdef ASCII_STRING
+ if (XtIsSubclass(XtParent(cnew), asciiStringWidgetClass)) {
+ src->ascii_src.use_string_in_place = True;
+ src->ascii_src.type = XawAsciiString;
+ }
+#endif
+
+#ifdef OLDXAW
+ src->ascii_src.changes = False;
+#else
+ src->text_src.changed = False;
+#endif
+ src->ascii_src.allocated_string = False;
+
+ if (src->ascii_src.use_string_in_place && src->ascii_src.string == NULL)
+ src->ascii_src.use_string_in_place = False;
+
+ file = InitStringOrFile(src, src->ascii_src.type == XawAsciiFile);
+ LoadPieces(src, file, NULL);
+
+ if (file != NULL)
+ fclose(file);
+}
+
+/*
+ * Function:
+ * ReadText
+ *
+ * Parameters:
+ * w - AsciiSource widget
+ * pos - position of the text to retreive.
+ * text - text block that will contain returned text
+ * length - maximum number of characters to read
+ *
+ * Description:
+ * This function reads the source.
+ *
+ * Returns:
+ * The character position following the retrieved text.
+ */
+static XawTextPosition
+ReadText(Widget w, XawTextPosition pos, XawTextBlock *text, int length)
+{
+ AsciiSrcObject src = (AsciiSrcObject)w;
+ XawTextPosition count, start;
+ Piece *piece;
+#ifndef OLDXAW
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextPosition offset, end = pos + length;
+ Bool state;
+
+ end = XawMin(end, src->ascii_src.length);
+ while ((state = XawTextSourceAnchorAndEntity(w, pos, &anchor, &entity)) &&
+ (entity->flags & XAW_TENTF_HIDE))
+ pos = anchor->position + entity->offset + entity->length;
+ if (state == False ||
+ !(entity->flags & XAW_TENTF_REPLACE)) {
+ while (entity) {
+ offset = anchor->position + entity->offset;
+ if (offset >= end)
+ break;
+ if (offset > pos &&
+ (entity->flags & (XAW_TENTF_HIDE | XAW_TENTF_REPLACE))) {
+ end = XawMin(end, offset);
+ break;
+ }
+ if ((entity = entity->next) == NULL &&
+ (anchor = XawTextSourceNextAnchor(w, anchor)) != NULL)
+ entity = anchor->entities;
+ }
+ }
+ else if (state && (entity->flags & XAW_TENTF_REPLACE) && pos < end) {
+ XawTextBlock *block = (XawTextBlock*)entity->data;
+
+ offset = anchor->position + entity->offset;
+ end = XawMin(end, offset + block->length);
+ if ((length = end - pos) < 0)
+ length = 0;
+ text->length = length;
+ text->format = XawFmt8Bit;
+ if (length == 0) {
+ text->firstPos = end = offset + entity->length;
+ text->ptr = "";
+ }
+ else {
+ text->firstPos = pos;
+ text->ptr = block->ptr + (pos - offset);
+ if (pos + length < offset + block->length)
+ end = pos + length; /* there is data left to be read */
+ else
+ end = offset + entity->length;
+ }
+
+ return (end);
+ }
+
+ if ((length = end - pos) < 0)
+ length = 0;
+#endif
+
+ piece = FindPiece(src, pos, &start);
+ text->firstPos = pos;
+ text->ptr = piece->text + (pos - start);
+ count = piece->used - (pos - start);
+ text->length = Max(0, (length > count) ? count : length);
+ text->format = XawFmt8Bit;
+
+ return (pos + text->length);
+}
+
+/*
+ * Function:
+ * ReplaceText
+ *
+ * Parameters:
+ * w - AsciiSource object
+ * startPos - ends of text that will be replaced
+ * endPos - ""
+ * text - new text to be inserted into buffer at startPos
+ *
+ * Description:
+ * Replaces a block of text with new text.
+ *
+ * Returns:
+ * XawEditDone on success, XawEditError otherwise
+ */
+/*ARGSUSED*/
+static int
+ReplaceText(Widget w, XawTextPosition startPos, XawTextPosition endPos,
+ XawTextBlock *text)
+{
+ AsciiSrcObject src = (AsciiSrcObject)w;
+ Piece *start_piece, *end_piece, *temp_piece;
+ XawTextPosition start_first, end_first;
+ int length, firstPos;
+
+ /*
+ * Editing a read only source is not allowed
+ */
+ if (src->text_src.edit_mode == XawtextRead)
+ return (XawEditError);
+
+ start_piece = FindPiece(src, startPos, &start_first);
+ end_piece = FindPiece(src, endPos, &end_first);
+
+#ifndef OLDXAW
+ /*
+ * This is a big hack, but I can't think about a clever way to know
+ * if the character being moved forward has a negative lbearing.
+ *
+ */
+ if (start_piece->used) {
+ int i;
+
+ for (i = 0; i < src->text_src.num_text; i++) {
+ int line;
+ TextWidget ctx = (TextWidget)src->text_src.text[i];
+
+ for (line = 0; line < ctx->text.lt.lines; line++)
+ if (startPos < ctx->text.lt.info[line + 1].position)
+ break;
+ if (i < ctx->text.lt.lines &&
+ startPos > ctx->text.lt.info[i].position) {
+ AsciiSinkObject sink = (AsciiSinkObject)ctx->text.sink;
+ XawTextAnchor *anchor;
+ XawTextEntity *entity;
+ XawTextProperty *property;
+ XFontStruct *font;
+
+ if (XawTextSourceAnchorAndEntity(w, startPos, &anchor, &entity) &&
+ (property = XawTextSinkGetProperty(ctx->text.sink,
+ entity->property)) != NULL &&
+ (property->mask & XAW_TPROP_FONT))
+ font = property->font;
+ else
+ font = sink->ascii_sink.font;
+
+ if (font->min_bounds.lbearing < 0) {
+ int lbearing = font->min_bounds.lbearing;
+ unsigned char c = *(unsigned char*)
+ (start_piece->text + (startPos - start_first));
+
+ if (c == '\t' || c == '\n')
+ c = ' ';
+ else if ((c & 0177) < XawSP || c == 0177) {
+ if (sink->ascii_sink.display_nonprinting)
+ c = c > 0177 ? '\\' : c + '^';
+ else
+ c = ' ';
+ }
+ if (font->per_char &&
+ (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2))
+ lbearing = font->per_char[c - font->min_char_or_byte2].lbearing;
+ if (lbearing < 0)
+ _XawTextNeedsUpdating(ctx, startPos - 1, startPos);
+ }
+ }
+ }
+ }
+
+
+#endif
+
+ /*
+ * Remove Old Stuff
+ */
+ if (start_piece != end_piece) {
+ temp_piece = start_piece->next;
+
+ /*
+ * If empty and not the only piece then remove it.
+ */
+ if (((start_piece->used = startPos - start_first) == 0)
+ && !(start_piece->next == NULL && start_piece->prev == NULL))
+ RemovePiece(src, start_piece);
+
+ while (temp_piece != end_piece) {
+ temp_piece = temp_piece->next;
+ RemovePiece(src, temp_piece->prev);
+ }
+
+ end_piece->used -= endPos - end_first;
+ if (end_piece->used != 0)
+ memmove(end_piece->text, end_piece->text + endPos - end_first,
+ (unsigned)end_piece->used);
+ }
+ else { /* We are fully in one piece */
+ if ((start_piece->used -= endPos - startPos) == 0) {
+ if (!(start_piece->next == NULL && start_piece->prev == NULL))
+ RemovePiece(src, start_piece);
+ }
+ else {
+ memmove(start_piece->text + (startPos - start_first),
+ start_piece->text + (endPos - start_first),
+ (unsigned)(start_piece->used - (startPos - start_first)));
+ if (src->ascii_src.use_string_in_place
+ && src->ascii_src.length - (endPos - startPos)
+ < src->ascii_src.piece_size - 1)
+ start_piece->text[src->ascii_src.length - (endPos - startPos)] =
+ '\0';
+ }
+ }
+
+ src->ascii_src.length += -(endPos - startPos) + text->length;
+
+ if ( text->length != 0) {
+ /*
+ * Put in the New Stuff
+ */
+ start_piece = FindPiece(src, startPos, &start_first);
+
+ length = text->length;
+ firstPos = text->firstPos;
+
+ while (length > 0) {
+ char *ptr;
+ int fill;
+
+ if (src->ascii_src.use_string_in_place) {
+ if (start_piece->used == src->ascii_src.piece_size - 1) {
+ /*
+ * If we are in ascii string emulation mode. Then the
+ * string is not allowed to grow
+ */
+ start_piece->used = src->ascii_src.length =
+ src->ascii_src.piece_size - 1;
+ start_piece->text[src->ascii_src.length] = '\0';
+ return (XawEditError);
+ }
+ }
+
+ if (start_piece->used == src->ascii_src.piece_size) {
+ BreakPiece(src, start_piece);
+ start_piece = FindPiece(src, startPos, &start_first);
+ }
+
+ fill = Min((int)(src->ascii_src.piece_size - start_piece->used),
+ length);
+
+ ptr = start_piece->text + (startPos - start_first);
+ memmove(ptr + fill, ptr,
+ (unsigned)(start_piece->used - (startPos - start_first)));
+ memcpy(ptr, text->ptr + firstPos, (unsigned)fill);
+
+ startPos += fill;
+ firstPos += fill;
+ start_piece->used += fill;
+ length -= fill;
+ }
+ }
+
+ if (src->ascii_src.use_string_in_place)
+ start_piece->text[start_piece->used] = '\0';
+
+#ifdef OLDXAW
+ src->ascii_src.changes = True;
+ XtCallCallbacks(w, XtNcallback, NULL);
+#endif
+
+ return (XawEditDone);
+}
+
+/*
+ * Function:
+ * Scan
+ *
+ * Parameters:
+ * w - AsciiSource object
+ * position - position to start scanning
+ * type - type of thing to scan for
+ * dir - direction to scan
+ * count - which occurance if this thing to search for.
+ * include - whether or not to include the character found in
+ * the position that is returned
+ *
+ * Description:
+ * Scans the text source for the number and type of item specified.
+ *
+ * Returns:
+ * The position of the item found
+ *
+ * Note:
+ * While there are only 'n' characters in the file there are n+1
+ * possible cursor positions (one before the first character and
+ * one after the last character
+ */
+static XawTextPosition
+Scan(Widget w, register XawTextPosition position, XawTextScanType type,
+ XawTextScanDirection dir, int count, Bool include)
+{
+ AsciiSrcObject src = (AsciiSrcObject)w;
+ Piece *piece;
+ XawTextPosition first, first_eol_position = 0;
+ register char *ptr, *lim;
+ register int cnt = count;
+ register unsigned char c;
+
+ if (dir == XawsdLeft) {
+ if (position <= 0)
+ return (0);
+ --position;
+ }
+ else if (position >= src->ascii_src.length)
+ return (src->ascii_src.length);
+
+ piece = FindPiece(src, position, &first);
+ if (piece->used == 0)
+ return (0);
+
+ ptr = (position - first) + piece->text;
+
+ if (dir == XawsdRight) {
+ lim = piece->text + piece->used;
+ switch (type) {
+ case XawstEOL:
+ case XawstParagraph:
+ case XawstWhiteSpace:
+ case XawstAlphaNumeric:
+ for (; cnt > 0; cnt--) {
+ Bool non_space = False, first_eol = True;
+
+ /*CONSTCOND*/
+ while (True) {
+ if (ptr >= lim) {
+ piece = piece->next;
+ if (piece == NULL) /* End of text */
+ return (src->ascii_src.length);
+ ptr = piece->text;
+ lim = piece->text + piece->used;
+ }
+
+ c = *ptr++;
+ ++position;
+
+ if (type == XawstEOL) {
+ if (c == '\n')
+ break;
+ }
+ else if (type == XawstAlphaNumeric) {
+ if (!isalnum(c)) {
+ if (non_space)
+ break;
+ }
+ else
+ non_space = True;
+ }
+ else if (type == XawstWhiteSpace) {
+ if (isspace(c)) {
+ if (non_space)
+ break;
+ }
+ else
+ non_space = True;
+ }
+ else { /* XawstParagraph */
+ if (first_eol) {
+ if (c == '\n') {
+ first_eol_position = position;
+ first_eol = False;
+ }
+ }
+ else if (c == '\n')
+ break;
+ else if (!isspace(c))
+ first_eol = True;
+ }
+ }
+ }
+ break;
+ case XawstPositions:
+ position += count;
+ return (position < src->ascii_src.length ?
+ position : src->ascii_src.length);
+ case XawstAll:
+ return (src->ascii_src.length);
+ default:
+ break;
+ }
+ if (!include) {
+ if (type == XawstParagraph)
+ position = first_eol_position;
+ if (count)
+ --position;
+ }
+ }
+ else {
+ lim = piece->text;
+ switch (type) {
+ case XawstEOL:
+ case XawstParagraph:
+ case XawstWhiteSpace:
+ case XawstAlphaNumeric:
+ for (; cnt > 0; cnt--) {
+ Bool non_space = False, first_eol = True;
+
+ /*CONSTCOND*/
+ while (True) {
+ if (ptr < lim) {
+ piece = piece->prev;
+ if (piece == NULL) /* Begining of text */
+ return (0);
+ ptr = piece->text + piece->used - 1;
+ lim = piece->text;
+ }
+
+ c = *ptr--;
+ --position;
+
+ if (type == XawstEOL) {
+ if (c == '\n')
+ break;
+ }
+ else if (type == XawstAlphaNumeric) {
+ if (!isalnum(c)) {
+ if (non_space)
+ break;
+ }
+ else
+ non_space = True;
+ }
+ else if (type == XawstWhiteSpace) {
+ if (isspace(c)) {
+ if (non_space)
+ break;
+ }
+ else
+ non_space = True;
+ }
+ else { /* XawstParagraph */
+ if (first_eol) {
+ if (c == '\n') {
+ first_eol_position = position;
+ first_eol = False;
+ }
+ }
+ else if (c == '\n')
+ break;
+ else if (!isspace(c))
+ first_eol = True;
+ }
+ }
+ }
+ break;
+ case XawstPositions:
+ position -= count - 1;
+ return (position > 0 ? position : 0);
+ case XawstAll:
+ return (0);
+ default:
+ break;
+ }
+ if (!include) {
+ if (type == XawstParagraph)
+ position = first_eol_position;
+ if (count)
+ ++position;
+ }
+ position++;
+ }
+
+ return (position);
+}
+
+/*
+ * Function:
+ * Search
+ *
+ * Parameters:
+ * w - AsciiSource object
+ * position - the position to start scanning
+ * dir - direction to scan
+ * text - text block to search for
+ *
+ * Description:
+ * Searchs the text source for the text block passed.
+ *
+ * Returns:
+ * The position of the item found
+ */
+static XawTextPosition
+Search(Widget w, register XawTextPosition position, XawTextScanDirection dir,
+ XawTextBlock *text)
+{
+ AsciiSrcObject src = (AsciiSrcObject)w;
+ register int count = 0;
+ register char *ptr, c;
+ char *str;
+ Piece *piece;
+ char *buf;
+ XawTextPosition first;
+ int cnt, case_sensitive;
+
+ if (dir == XawsdLeft) {
+ if (position == 0)
+ return (XawTextSearchError);
+ position--;
+ }
+
+ buf = XtMalloc((unsigned)sizeof(unsigned char) * text->length);
+ memcpy(buf, text->ptr, (unsigned)text->length);
+ piece = FindPiece(src, position, &first);
+ ptr = (position - first) + piece->text;
+ case_sensitive = text->firstPos;
+
+ if (dir == XawsdRight) {
+ str = buf;
+ c = *str;
+ /*CONSTCOND*/
+ while (1) {
+ if (*ptr++ == c
+ || (case_sensitive && isalpha(c) && isalpha(ptr[-1])
+ && toupper(c) == toupper(ptr[-1]))) {
+ if (++count == text->length)
+ break;
+ c = *++str;
+ }
+ else if (count) {
+ ptr -= count;
+ str -= count;
+ position -= count;
+ count = 0;
+ c = *str;
+
+ if (ptr < piece->text) {
+ do {
+ cnt = piece->text - ptr;
+ piece = piece->prev;
+ if (piece == NULL) {
+ XtFree(buf);
+ return (XawTextSearchError);
+ }
+ ptr = piece->text + piece->used - cnt;
+ } while (ptr < piece->text);
+ }
+ }
+ position++;
+ if (ptr >= (piece->text + piece->used)) {
+ do {
+ cnt = ptr - (piece->text + piece->used);
+ piece = piece->next;
+ if (piece == NULL) {
+ XtFree(buf);
+ return (XawTextSearchError);
+ }
+ ptr = piece->text + cnt;
+ } while (ptr >= (piece->text + piece->used));
+ }
+ }
+
+ position -= text->length - 1;
+ }
+ else {
+ str = buf + text->length - 1;
+ c = *str;
+ /*CONSTCOND*/
+ while (1) {
+ if (*ptr-- == c
+ || (case_sensitive && isalpha(c) && isalpha(ptr[1])
+ && toupper(c) == toupper(ptr[1]))) {
+ if (++count == text->length)
+ break;
+ c = *--str;
+ }
+ else if (count) {
+ ptr += count;
+ str += count;
+ position += count;
+ count = 0;
+ c = *str;
+
+ if (ptr >= (piece->text + piece->used)) {
+ do {
+ cnt = ptr - (piece->text + piece->used);
+ piece = piece->next;
+ if (piece == NULL) {
+ XtFree(buf);
+ return (XawTextSearchError);
+ }
+ ptr = piece->text + cnt;
+ } while (ptr >= (piece->text + piece->used));
+ }
+ }
+ position--;
+ if (ptr < piece->text) {
+ do {
+ cnt = piece->text - ptr;
+ piece = piece->prev;
+ if (piece == NULL) {
+ XtFree(buf);
+ return (XawTextSearchError);
+ }
+ ptr = piece->text + piece->used - cnt;
+ } while (ptr < piece->text);
+ }
+ }
+ }
+
+ XtFree(buf);
+
+ return (position);
+}
+
+/*
+ * Function:
+ * XawAsciiSrcSetValues
+ *
+ * Parameters:
+ * current - current state of the widget
+ * request - what was requested
+ * cnew - what the widget will become
+ * args - representation of changed resources
+ * num_args - number of resources that have changed
+ *
+ * Description:
+ * Sets the values for the AsciiSource.
+ *
+ * Returns:
+ * True if redisplay is needed
+ */
+static Boolean
+XawAsciiSrcSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ AsciiSrcObject src = (AsciiSrcObject)cnew;
+ AsciiSrcObject old_src = (AsciiSrcObject)current;
+ Bool total_reset = False, string_set = False;
+ FILE *file;
+ unsigned int i;
+
+ if (old_src->ascii_src.use_string_in_place
+ != src->ascii_src.use_string_in_place) {
+ XtAppWarning(XtWidgetToApplicationContext(cnew),
+ "AsciiSrc: The XtNuseStringInPlace resource may "
+ "not be changed.");
+ src->ascii_src.use_string_in_place =
+ old_src->ascii_src.use_string_in_place;
+ }
+
+ for (i = 0; i < *num_args ; i++)
+ if (streq(args[i].name, XtNstring)) {
+ string_set = True;
+ break;
+ }
+
+ if (string_set || (old_src->ascii_src.type != src->ascii_src.type)) {
+ RemoveOldStringOrFile(old_src, string_set); /* remove old info */
+ file = InitStringOrFile(src, string_set); /* Init new info */
+ LoadPieces(src, file, NULL); /* load new info into internal buffers */
+ if (file != NULL)
+ fclose(file);
+#ifndef OLDXAW
+ for (i = 0; i < src->text_src.num_text; i++)
+ /* Tell text widget what happened */
+ XawTextSetSource(src->text_src.text[i], cnew, 0);
+#else
+ XawTextSetSource(XtParent(cnew), cnew, 0);
+#endif
+ total_reset = True;
+ }
+
+ if (old_src->ascii_src.ascii_length != src->ascii_src.ascii_length)
+ src->ascii_src.piece_size = src->ascii_src.ascii_length + 1;
+
+ if (!total_reset &&
+ old_src->ascii_src.piece_size != src->ascii_src.piece_size) {
+ String string = StorePiecesInString(old_src);
+
+ FreeAllPieces(old_src);
+ LoadPieces(src, NULL, string);
+ XtFree(string);
+ }
+
+ return (False);
+}
+
+/*
+ * Function:
+ * XawAsciiSrcGetValuesHook
+ *
+ * Parameters:
+ * w - AsciiSource Widget
+ * args - argument list
+ * num_args - number of args
+ *
+ * Description:
+ * This is a get values hook routine that sets the
+ * values specific to the ascii source.
+ */
+static void
+XawAsciiSrcGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
+{
+ AsciiSrcObject src = (AsciiSrcObject)w;
+ unsigned int i;
+
+ if (src->ascii_src.type == XawAsciiString) {
+ for (i = 0; i < *num_args ; i++)
+ if (streq(args[i].name, XtNstring)) {
+ if (src->ascii_src.use_string_in_place)
+ *((char **)args[i].value) = src->ascii_src.first_piece->text;
+ else if (XawAsciiSave(w)) /* If save sucessful */
+ *((char **)args[i].value) = src->ascii_src.string;
+ break;
+ }
+ }
+ }
+
+/*
+ * Function:
+ * XawAsciiSrcDestroy
+ *
+ * Parameters:
+ * src - Ascii source object to free
+ *
+ * Description:
+ * Destroys an ascii source (frees all data)
+ */
+static void
+XawAsciiSrcDestroy(Widget w)
+{
+ RemoveOldStringOrFile((AsciiSrcObject) w, True);
+}
+
+/*
+ * Public routines
+ */
+/*
+ * Function:
+ * XawAsciiSourceFreeString
+ *
+ * Parameters:
+ * w - AsciiSrc widget
+ *
+ * Description:
+ * Frees the string returned by a get values call
+ * on the string when the source is of type string.
+ */
+void
+XawAsciiSourceFreeString(Widget w)
+{
+ AsciiSrcObject src = (AsciiSrcObject)w;
+
+ /* If the src is really a multi, call the multi routine */
+ if (XtIsSubclass(w, multiSrcObjectClass)) {
+ _XawMultiSourceFreeString(w);
+ return;
+ }
+ else if (!XtIsSubclass(w, asciiSrcObjectClass)) {
+ XtErrorMsg("bad argument", "asciiSource", "XawError",
+ "XawAsciiSourceFreeString's parameter must be "
+ "an asciiSrc or multiSrc.",
+ NULL, NULL);
+ }
+
+ if (src->ascii_src.allocated_string && src->ascii_src.type != XawAsciiFile) {
+ src->ascii_src.allocated_string = False;
+ XtFree(src->ascii_src.string);
+ src->ascii_src.string = NULL;
+ }
+}
+
+/*
+ * Function:
+ * XawAsciiSave
+ *
+ * Parameters:
+ * w - asciiSrc Widget
+ *
+ * Description:
+ * Saves all the pieces into a file or string as required.
+ *
+ * Returns:
+ * True if the save was successful
+ */
+Bool
+XawAsciiSave(Widget w)
+{
+ AsciiSrcObject src = (AsciiSrcObject)w;
+
+ /* If the src is really a multi, call the multi save */
+ if (XtIsSubclass(w, multiSrcObjectClass ))
+ return (_XawMultiSave(w));
+
+ else if (!XtIsSubclass(w, asciiSrcObjectClass))
+ XtErrorMsg("bad argument", "asciiSource", "XawError",
+ "XawAsciiSave's parameter must be an asciiSrc or multiSrc.",
+ NULL, NULL);
+
+ /*
+ * If using the string in place then there is no need to play games
+ * to get the internal info into a readable string.
+ */
+ if (src->ascii_src.use_string_in_place)
+ return (True);
+
+ if (src->ascii_src.type == XawAsciiFile) {
+#ifdef OLDXAW
+ if (!src->ascii_src.changes)
+#else
+ if (!src->text_src.changed) /* No changes to save */
+#endif
+ return (True);
+
+ if (WritePiecesToFile(src, src->ascii_src.string) == False)
+ return (False);
+ }
+ else {
+ if (src->ascii_src.allocated_string == True)
+ XtFree(src->ascii_src.string);
+ else
+ src->ascii_src.allocated_string = True;
+
+ src->ascii_src.string = StorePiecesInString(src);
+ }
+#ifdef OLDXAW
+ src->ascii_src.changes = False;
+#else
+ src->text_src.changed = False;
+#endif
+
+ return (True);
+}
+
+/*
+ * Function:
+ * XawAsciiSaveAsFile
+ *
+ * Arguments:
+ * w - AsciiSrc widget
+ * name - name of the file to save this file into
+ *
+ * Description:
+ * Save the current buffer as a file.
+ *
+ * Returns:
+ * True if the save was sucessful
+ */
+Bool
+XawAsciiSaveAsFile(Widget w, _Xconst char *name)
+{
+ AsciiSrcObject src = (AsciiSrcObject)w;
+ Bool ret;
+
+ /* If the src is really a multi, call the multi save */
+
+ if (XtIsSubclass( w, multiSrcObjectClass))
+ return (_XawMultiSaveAsFile(w, name));
+
+ else if (!XtIsSubclass(w, asciiSrcObjectClass))
+ XtErrorMsg("bad argument", "asciiSource", "XawError",
+ "XawAsciiSaveAsFile's 1st parameter must be an "
+ "asciiSrc or multiSrc.",
+ NULL, NULL);
+
+ if (src->ascii_src.type == XawAsciiFile)
+ ret = WritePiecesToFile(src, (String)name);
+ else {
+ String string = StorePiecesInString(src);
+
+ ret = WriteToFile(string, (String)name, src->ascii_src.length);
+ XtFree(string);
+ }
+
+ return (ret);
+}
+
+/*
+ * Function:
+ * XawAsciiSourceChanged
+ *
+ * Parameters:
+ * w - ascii source widget
+ *
+ * Description:
+ * Returns true if the source has changed since last saved.
+ *
+ * Returns:
+ * A Boolean (see description).
+ */
+Bool
+XawAsciiSourceChanged(Widget w)
+{
+#ifdef OLDXAW
+ if (XtIsSubclass(w, multiSrcObjectClass))
+ return (((MultiSrcObject)w)->multi_src.changes);
+
+ if (XtIsSubclass(w, asciiSrcObjectClass))
+ return (((AsciiSrcObject)w)->ascii_src.changes);
+#else
+ if (XtIsSubclass(w, textSrcObjectClass))
+ return (((TextSrcObject)w)->textSrc.changed);
+#endif
+ XtErrorMsg("bad argument", "asciiSource", "XawError",
+ "XawAsciiSourceChanged parameter must be an "
+ "asciiSrc or multiSrc.",
+ NULL, NULL);
+
+ return (True);
+}
+
+/*
+ * Private Functions
+ */
+static void
+RemoveOldStringOrFile(AsciiSrcObject src, Bool checkString)
+{
+ FreeAllPieces(src);
+
+ if (checkString && src->ascii_src.allocated_string) {
+ XtFree(src->ascii_src.string);
+ src->ascii_src.allocated_string = False;
+ src->ascii_src.string = NULL;
+ }
+}
+
+/*
+ * Function:
+ * WriteToFile
+ *
+ * Parameters:
+ * string - string to write
+ * name - the name of the file
+ *
+ * Description:
+ * Write the string specified to the begining of the file specified.
+ *
+ * Returns:
+ * returns True if sucessful, False otherwise
+ */
+static Bool
+WriteToFile(String string, String name, unsigned length)
+{
+ int fd;
+
+ if ((fd = creat(name, 0666)) == -1)
+ return (False);
+
+ if (write(fd, string, length) == -1) {
+ close(fd);
+ return (False);
+ }
+
+ if (close(fd) == -1)
+ return (False);
+
+ return (True);
+}
+
+/*
+ * Function:
+ * WritePiecesToFile
+ *
+ * Parameters:
+ * src - ascii source object
+ * name - name of the file
+ *
+ * Description:
+ * Almost identical to WriteToFile, but only works for ascii src objects
+ * of type XawAsciiFile. This function avoids allocating temporary memory,
+ * what can be useful when editing very large files.
+ *
+ * Returns:
+ * returns True if sucessful, False otherwise
+ */
+static Bool
+WritePiecesToFile(AsciiSrcObject src, String name)
+{
+ Piece *piece;
+ int fd;
+
+ if (src->ascii_src.data_compression) {
+ Piece *tmp;
+
+ piece = src->ascii_src.first_piece;
+ while (piece) {
+ int bytes = src->ascii_src.piece_size - piece->used;
+
+ if (bytes > 0 && (tmp = piece->next) != NULL) {
+ bytes = XawMin(bytes, tmp->used);
+ memcpy(piece->text + piece->used, tmp->text, bytes);
+ memmove(tmp->text, tmp->text + bytes, tmp->used - bytes);
+ piece->used += bytes;
+ if ((tmp->used -= bytes) == 0) {
+ RemovePiece(src, tmp);
+ continue;
+ }
+ }
+ piece = piece->next;
+ }
+ }
+
+ if ((fd = creat(name, 0666)) == -1)
+ return (False);
+
+ for (piece = src->ascii_src.first_piece; piece; piece = piece->next)
+ if (write(fd, piece->text, piece->used) == -1) {
+ close(fd);
+ return (False);
+ }
+
+ if (close(fd) == -1)
+ return (False);
+
+ return (True);
+}
+
+/*
+ * Function:
+ * StorePiecesInString
+ *
+ * Parameters:
+ * data - ascii pointer data
+ *
+ * Description:
+ * Store the pieces in memory into a standard ascii string.
+ */
+static String
+StorePiecesInString(AsciiSrcObject src)
+{
+ String string;
+ XawTextPosition first;
+ Piece *piece;
+
+ string = XtMalloc((unsigned)(src->ascii_src.length + 1));
+
+ for (first = 0, piece = src->ascii_src.first_piece ; piece != NULL;
+ first += piece->used, piece = piece->next)
+ memcpy(string + first, piece->text, (unsigned)piece->used);
+
+ string[src->ascii_src.length] = '\0';
+
+ /*
+ * This will refill all pieces to capacity
+ */
+ if (src->ascii_src.data_compression) {
+ FreeAllPieces(src);
+ LoadPieces(src, NULL, string);
+ }
+
+ return (string);
+}
+
+/*
+ * Function:
+ * InitStringOrFile
+ *
+ * Parameters:
+ * src - AsciiSource
+ *
+ * Description:
+ * Initializes the string or file.
+ */
+static FILE *
+InitStringOrFile(AsciiSrcObject src, Bool newString)
+{
+ mode_t open_mode = 0;
+ const char *fdopen_mode = NULL;
+ int fd;
+ FILE *file;
+
+ if (src->ascii_src.type == XawAsciiString) {
+ if (src->ascii_src.string == NULL)
+ src->ascii_src.length = 0;
+
+ else if (!src->ascii_src.use_string_in_place) {
+ src->ascii_src.string = XtNewString(src->ascii_src.string);
+ src->ascii_src.allocated_string = True;
+ src->ascii_src.length = strlen(src->ascii_src.string);
+ }
+
+ if (src->ascii_src.use_string_in_place) {
+ if (src->ascii_src.string != NULL)
+ src->ascii_src.length = strlen(src->ascii_src.string);
+ /* In case the length resource is incorrectly set */
+ if (src->ascii_src.length > src->ascii_src.ascii_length)
+ src->ascii_src.ascii_length = src->ascii_src.length;
+
+ if (src->ascii_src.ascii_length == MAGIC_VALUE)
+ src->ascii_src.piece_size = src->ascii_src.length;
+ else
+ src->ascii_src.piece_size = src->ascii_src.ascii_length + 1;
+ }
+
+ return (NULL);
+ }
+
+ /*
+ * type is XawAsciiFile
+ */
+ src->ascii_src.is_tempfile = False;
+
+ switch (src->text_src.edit_mode) {
+ case XawtextRead:
+ if (src->ascii_src.string == NULL)
+ XtErrorMsg("NoFile", "asciiSourceCreate", "XawError",
+ "Creating a read only disk widget and no file specified.",
+ NULL, NULL);
+ open_mode = O_RDONLY;
+ fdopen_mode = "r";
+ break;
+ case XawtextAppend:
+ case XawtextEdit:
+ if (src->ascii_src.string == NULL) {
+ src->ascii_src.string = "*ascii-src*";
+ src->ascii_src.is_tempfile = True;
+ }
+ else {
+/* O_NOFOLLOW is a FreeBSD & Linux extension */
+#ifdef O_NOFOLLOW
+ open_mode = O_RDWR | O_NOFOLLOW;
+#else
+ open_mode = O_RDWR; /* unsafe; subject to race conditions */
+#endif /* O_NOFOLLOW */
+ fdopen_mode = "r+";
+ }
+ break;
+ default:
+ XtErrorMsg("badMode", "asciiSourceCreate", "XawError",
+ "Bad editMode for ascii source; must be Read, "
+ "Append or Edit.",
+ NULL, NULL);
+ }
+
+ /* If is_tempfile, allocate a private copy of the text
+ * Unlikely to be changed, just to set allocated_string */
+ if (newString || src->ascii_src.is_tempfile) {
+ src->ascii_src.string = XtNewString(src->ascii_src.string);
+ src->ascii_src.allocated_string = True;
+ }
+
+ if (!src->ascii_src.is_tempfile) {
+ if ((fd = open(src->ascii_src.string, open_mode, 0666)) != -1) {
+ if ((file = fdopen(fd, fdopen_mode))) {
+ (void)fseek(file, 0, SEEK_END);
+ src->ascii_src.length = (XawTextPosition)ftell(file);
+ return (file);
+ }
+ }
+ {
+ String params[2];
+ Cardinal num_params = 2;
+
+ params[0] = src->ascii_src.string;
+ params[1] = strerror(errno);
+ XtAppWarningMsg(XtWidgetToApplicationContext((Widget)src),
+ "openError", "asciiSourceCreate", "XawWarning",
+ "Cannot open file %s; %s", params, &num_params);
+ }
+ }
+ src->ascii_src.length = 0;
+ return (NULL);
+}
+
+static void
+LoadPieces(AsciiSrcObject src, FILE *file, char *string)
+{
+ char *ptr;
+ Piece *piece = NULL;
+ XawTextPosition left;
+
+ if (string == NULL) {
+ if (src->ascii_src.type == XawAsciiFile) {
+ if (src->ascii_src.length != 0) {
+ int len;
+
+ left = 0;
+ fseek(file, 0, 0);
+ while (left < src->ascii_src.length) {
+ ptr = XtMalloc((unsigned)src->ascii_src.piece_size);
+ if ((len = fread(ptr, (Size_t)sizeof(unsigned char),
+ (Size_t)src->ascii_src.piece_size, file)) < 0)
+ XtErrorMsg("readError", "asciiSourceCreate", "XawError",
+ "fread returned error.", NULL, NULL);
+ piece = AllocNewPiece(src, piece);
+ piece->text = ptr;
+ piece->used = XawMin(len, src->ascii_src.piece_size);
+ left += piece->used;
+ }
+ }
+ else {
+ piece = AllocNewPiece(src, NULL);
+ piece->text = XtMalloc((unsigned)src->ascii_src.piece_size);
+ piece->used = 0;
+ }
+ return;
+ }
+ else
+ string = src->ascii_src.string;
+ }
+
+ if (src->ascii_src.use_string_in_place) {
+ piece = AllocNewPiece(src, piece);
+ piece->used = XawMin(src->ascii_src.length, src->ascii_src.piece_size);
+ piece->text = src->ascii_src.string;
+ return;
+ }
+
+ ptr = string;
+ left = src->ascii_src.length;
+ do {
+ piece = AllocNewPiece(src, piece);
+
+ piece->text = XtMalloc((unsigned)src->ascii_src.piece_size);
+ piece->used = XawMin(left, src->ascii_src.piece_size);
+ if (piece->used != 0)
+ memcpy(piece->text, ptr, (unsigned)piece->used);
+
+ left -= piece->used;
+ ptr += piece->used;
+ } while (left > 0);
+}
+
+/*
+ * Function:
+ * AllocNewPiece
+ *
+ * Parameters:
+ * src - AsciiSrc Widget
+ * prev - piece just before this one, or NULL
+ *
+ * Description:
+ * Allocates a new piece of memory.
+ *
+ * Returns:
+ * The allocated piece
+ */
+static Piece *
+AllocNewPiece(AsciiSrcObject src, Piece *prev)
+{
+ Piece *piece = XtNew(Piece);
+
+ if (prev == NULL) {
+ src->ascii_src.first_piece = piece;
+ piece->next = NULL;
+ }
+ else {
+ if (prev->next != NULL)
+ (prev->next)->prev = piece;
+ piece->next = prev->next;
+ prev->next = piece;
+ }
+
+ piece->prev = prev;
+
+ return (piece);
+}
+
+/*
+ * Function:
+ * FreeAllPieces
+ *
+ * Parameters:
+ * src - AsciiSrc Widget
+ *
+ * Description:
+ * Frees all the pieces.
+ */
+static void
+FreeAllPieces(AsciiSrcObject src)
+{
+ Piece *next, * first = src->ascii_src.first_piece;
+
+#ifdef DEBUG
+ if (first->prev != NULL)
+ printf("Xaw AsciiSrc Object: possible memory leak in FreeAllPieces().\n");
+#endif
+
+ for (; first != NULL ; first = next) {
+ next = first->next;
+ RemovePiece(src, first);
+ }
+}
+
+/*
+ * Function:
+ * RemovePiece
+ *
+ * Parameters:
+ * piece - piece to remove
+ *
+ * Description:
+ * Removes a piece from the list.
+ */
+static void
+RemovePiece(AsciiSrcObject src, Piece *piece)
+{
+ if (piece->prev == NULL)
+ src->ascii_src.first_piece = piece->next;
+ else
+ piece->prev->next = piece->next;
+
+ if (piece->next != NULL)
+ piece->next->prev = piece->prev;
+
+ if (!src->ascii_src.use_string_in_place)
+ XtFree(piece->text);
+
+ XtFree((char *)piece);
+}
+
+/*
+ * Function:
+ * FindPiece
+ *
+ * Parameters:
+ * src - AsciiSrc Widget
+ * position - position that we are searching for
+ * first - position of the first character in this piece (return)
+ *
+ * Description:
+ * Finds the piece containing the position indicated.
+ *
+ * Returns:
+ * the piece that contains this position
+ */
+static Piece *
+FindPiece(AsciiSrcObject src, XawTextPosition position, XawTextPosition *first)
+{
+ Piece *old_piece, *piece;
+ XawTextPosition temp;
+
+ for (old_piece = NULL, piece = src->ascii_src.first_piece, temp = 0;
+ piece; old_piece = piece, piece = piece->next)
+ if ((temp += piece->used) > position) {
+ *first = temp - piece->used;
+ return (piece);
+ }
+
+ *first = temp - (old_piece ? old_piece->used : 0);
+
+ return (old_piece); /* if we run off the end the return the last piece */
+}
+
+/*
+ * Function:
+ * BreakPiece
+ *
+ * Parameters:
+ * src - AsciiSrc Widget
+ * piece - piece to break
+ *
+ * Description:
+ * Breaks a full piece into two new pieces.
+ */
+#define HALF_PIECE (src->ascii_src.piece_size >> 1)
+static void
+BreakPiece(AsciiSrcObject src, Piece *piece)
+{
+ Piece *cnew = AllocNewPiece(src, piece);
+
+ cnew->text = XtMalloc((unsigned)src->ascii_src.piece_size);
+ memcpy(cnew->text, piece->text + HALF_PIECE,
+ (unsigned)(src->ascii_src.piece_size - HALF_PIECE));
+ piece->used = HALF_PIECE;
+ cnew->used = src->ascii_src.piece_size - HALF_PIECE;
+}
+
+/*ARGSUSED*/
+static void
+CvtStringToAsciiType(XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal)
+{
+ static XawAsciiType type;
+ XrmQuark q;
+ char name[7];
+
+ XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
+ q = XrmStringToQuark(name);
+
+ if (q == Qstring)
+ type = XawAsciiString;
+ else if (q == Qfile)
+ type = XawAsciiFile;
+ else {
+ toVal->size = 0;
+ toVal->addr = NULL;
+ XtStringConversionWarning((char *)fromVal->addr, XtRAsciiType);
+ }
+
+ toVal->size = sizeof(XawAsciiType);
+ toVal->addr = (XPointer)&type;
+}
+
+/*ARGSUSED*/
+static Boolean
+CvtAsciiTypeToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal,
+ XtPointer *data)
+{
+ static String buffer;
+ Cardinal size;
+
+ switch (*(XawAsciiType *)fromVal->addr) {
+ case XawAsciiFile:
+ buffer = XtEfile;
+ break;
+ case XawAsciiString:
+ buffer = XtEstring;
+ break;
+ default:
+ XawTypeToStringWarning(dpy, XtRAsciiType);
+ toVal->addr = NULL;
+ toVal->size = 0;
+ return (False);
+ }
+
+ size = strlen(buffer) + 1;
+ if (toVal->addr != NULL) {
+ if (toVal->size < size) {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = (XPointer)buffer;
+ toVal->size = sizeof(String);
+
+ return (True);
+}
+
+/*ARGSUSED*/
+static void
+GetDefaultPieceSize(Widget w, int offset, XrmValue *value)
+{
+ static XPointer pagesize;
+
+ if (pagesize == NULL) {
+ pagesize = (XPointer)((long)_XawGetPageSize());
+ if (pagesize < (XPointer)BUFSIZ)
+ pagesize = (XPointer)BUFSIZ;
+ }
+
+ value->addr = (XPointer)&pagesize;
+}
+
+#if (defined(ASCII_STRING) || defined(ASCII_DISK))
+# include <X11/Xaw/Cardinals.h>
+#endif
+
+#ifdef ASCII_STRING
+/*
+ * Compatability functions.
+ */
+/*
+ * Function:
+ * AsciiStringSourceCreate
+ *
+ * Parameters:
+ * parent - widget that will own this source
+ * args - the argument list
+ * num_args - ""
+ *
+ * Description:
+ * Creates a string source.
+ *
+ * Returns:
+ * A pointer to the new text source.
+ */
+Widget
+XawStringSourceCreate(Widget parent, ArgList args, Cardinal num_args)
+{
+ XawTextSource src;
+ ArgList ascii_args;
+ Arg temp[2];
+
+ XtSetArg(temp[0], XtNtype, XawAsciiString);
+ XtSetArg(temp[1], XtNuseStringInPlace, True);
+ ascii_args = XtMergeArgLists(temp, TWO, args, num_args);
+
+ src = XtCreateWidget("genericAsciiString", asciiSrcObjectClass, parent,
+ ascii_args, num_args + TWO);
+ XtFree((char *)ascii_args);
+
+ return (src);
+}
+
+/*
+ * This is hacked up to try to emulate old functionality, it
+ * may not work, as I have not old code to test it on.
+ *
+ * Chris D. Peterson 8/31/89.
+ */
+void
+XawTextSetLastPos(Widget w, XawTextPosition lastPos)
+{
+ AsciiSrcObject src = (AsciiSrcObject)XawTextGetSource(w);
+
+ src->ascii_src.piece_size = lastPos;
+}
+#endif /* ASCII_STRING */
+
+#ifdef ASCII_DISK
+/*
+ * Function:
+ * AsciiDiskSourceCreate
+ *
+ * Parameters:
+ * parent - widget that will own this source
+ * args - argument list
+ * num_args - ""
+ *
+ * Description:
+ * Creates a disk source.
+ *
+ * Returns:
+ * A pointer to the new text source
+ */
+Widget
+XawDiskSourceCreate(Widget parent, ArgList args, Cardinal num_args)
+{
+ XawTextSource src;
+ ArgList ascii_args;
+ Arg temp[1];
+ int i;
+
+ XtSetArg(temp[0], XtNtype, XawAsciiFile);
+ ascii_args = XtMergeArgLists(temp, ONE, args, num_args);
+ num_args++;
+
+ for (i = 0; i < num_args; i++)
+ if (streq(ascii_args[i].name, XtNfile)
+ || streq(ascii_args[i].name, XtCFile))
+ ascii_args[i].name = XtNstring;
+
+ src = XtCreateWidget("genericAsciiDisk", asciiSrcObjectClass, parent,
+ ascii_args, num_args);
+ XtFree((char *)ascii_args);
+
+ return (src);
+}
+#endif /* ASCII_DISK */
diff --git a/libXaw/src/AsciiText.c b/libXaw/src/AsciiText.c
index 7305100f6..6d76b154f 100644
--- a/libXaw/src/AsciiText.c
+++ b/libXaw/src/AsciiText.c
@@ -1,360 +1,357 @@
-/* $Xorg: AsciiText.c,v 1.4 2001/02/09 02:03:42 xorgcvs Exp $ */
-
-/*
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/AsciiText.c,v 3.9 2001/01/17 19:42:25 dawes Exp $ */
-
-/*
- * AsciiText.c - Source code for AsciiText Widget
- *
- * This Widget is intended to be used as a simple front end to the
- * text widget with an ascii source and ascii sink attached to it
- *
- * Date: June 29, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xaw/AsciiTextP.h>
-#include <X11/Xaw/AsciiSrcP.h>
-#include <X11/Xaw/AsciiSink.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/MultiSinkP.h>
-#include <X11/Xaw/MultiSrc.h>
-#include <X11/Xaw/XawImP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#define TAB_COUNT 32
-
-/*
- * Class Methods
- */
-static void XawAsciiInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawAsciiDestroy(Widget);
-
-/*
- * From TextSrc.c
- */
-void _XawSourceAddText(Widget, Widget);
-void _XawSourceRemoveText(Widget, Widget, Bool);
-
-#define Superclass (&textClassRec)
-AsciiTextClassRec asciiTextClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Text", /* class_name */
- sizeof(AsciiRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_init */
- False, /* class_inited */
- XawAsciiInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- NULL, /* resources */
- 0, /* num_resource */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- XtExposeGraphicsExpose | /* compress_exposure */
- XtExposeNoExpose,
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawAsciiDestroy, /* destroy */
- XtInheritResize, /* resize */
- XtInheritExpose, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- XtInheritAcceptFocus, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- XtInheritTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* text */
- {
- NULL, /* extension */
- },
- /* ascii */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass asciiTextWidgetClass = (WidgetClass)&asciiTextClassRec;
-
-#ifdef ASCII_STRING
-AsciiStringClassRec asciiStringClassRec = {
- /* core */
- {
- (WidgetClass)&asciiTextClassRec, /* superclass */
- "Text", /* class_name */
- sizeof(AsciiStringRec), /* widget_size */
- NULL, /* class_initialize */
- NULL, /* class_part_init */
- False, /* class_inited */
- NULL, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- NULL, /* resources */
- 0, /* num_resource */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- XtExposeGraphicsExpose | /* compress_exposure */
- XtExposeNoExpose,
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XtInheritResize, /* resize */
- XtInheritExpose, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- XtInheritAcceptFocus, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- XtInheritTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* text */
- {
- NULL, /* extension */
- },
- /* ascii */
- {
- NULL, /* extension */
- },
- /* string */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass asciiStringWidgetClass = (WidgetClass)&asciiStringClassRec;
-#endif /* ASCII_STRING */
-
-#ifdef ASCII_DISK
-AsciiDiskClassRec asciiDiskClassRec = {
- /* core */
- {
- (WidgetClass)&asciiTextClassRec, /* superclass */
- "Text", /* class_name */
- sizeof(AsciiDiskRec), /* widget_size */
- NULL, /* class_initialize */
- NULL, /* class_part_init */
- False, /* class_inited */
- NULL, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- NULL, /* resources */
- 0, /* num_resource */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- XtExposeGraphicsExpose | /* compress_enterleave */
- XtExposeNoExpose,
- False, /* visible_interest */
- NULL, /* destroy */
- XtInheritResize, /* resize */
- XtInheritExpose, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- XtInheritAcceptFocus, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- XtInheritTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* text */
- {
- NULL, /* extension */
- },
- /* ascii */
- {
- NULL, /* extension */
- },
- /* disk */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass asciiDiskWidgetClass = (WidgetClass)&asciiDiskClassRec;
-#endif /* ASCII_DISK */
-
-/*
- * Implementation
- */
-static void
-XawAsciiInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- AsciiWidget w = (AsciiWidget)cnew;
- int i;
- int tabs[TAB_COUNT], tab;
-
- MultiSinkObject sink;
-
- /* superclass Initialize can't set the following,
- * as it didn't know the source or sink when it was called
- */
- if (XtHeight(request) == DEFAULT_TEXT_HEIGHT)
- XtHeight(cnew) = DEFAULT_TEXT_HEIGHT;
-
- /* This is the main change for internationalization */
- if (w->simple.international == True) { /* The multi* are international */
- if (w->text.sink == NULL)
- w->text.sink = XtCreateWidget("textSink", multiSinkObjectClass,
- cnew, args, *num_args);
- else if (!XtIsSubclass(w->text.sink, multiSinkObjectClass))
- XtError("Sink object is not a subclass of multiSink");
-
- if (w->text.source == NULL)
- w->text.source = XtCreateWidget("textSource", multiSrcObjectClass,
- cnew, args, *num_args);
- else if (!XtIsSubclass(w->text.source, multiSrcObjectClass))
- XtError("Source object is not a subclass of multiSrc");
-#ifndef OLDXAW
- else
- _XawSourceAddText(w->text.source, cnew);
-#endif
- }
- else {
- if (w->text.sink == NULL)
- w->text.sink = XtCreateWidget("textSink", asciiSinkObjectClass,
- cnew, args, *num_args);
- else if (!XtIsSubclass(w->text.source, asciiSinkObjectClass))
- XtError("Sink object is not a subclass of asciiSink");
-
- if (w->text.source == NULL)
- w->text.source = XtCreateWidget("textSource", asciiSrcObjectClass,
- cnew, args, *num_args);
- else if (!XtIsSubclass(w->text.source, asciiSrcObjectClass))
- XtError("Source object is not a subclass of asciiSrc");
-#ifndef OLDXAW
- else
- _XawSourceAddText(w->text.source, cnew);
-#endif
- }
-
- if (XtHeight(w) == DEFAULT_TEXT_HEIGHT)
- XtHeight(w) = VMargins(w) + XawTextSinkMaxHeight(w->text.sink, 1);
-
- for (i = 0, tab = 0; i < TAB_COUNT; i++)
- tabs[i] = (tab += 8);
-
- XawTextSinkSetTabs(w->text.sink, TAB_COUNT, tabs);
-
- XawTextDisableRedisplay(cnew);
- XawTextEnableRedisplay(cnew);
-
- _XawImRegister(cnew);
-
- /* If we are using a MultiSink we need to tell the input method stuff */
- if (w->simple.international == True) {
- Arg list[4];
- Cardinal ac = 0;
-
- sink = (MultiSinkObject)w->text.sink;
- XtSetArg(list[ac], XtNfontSet, sink->multi_sink.fontset); ac++;
- XtSetArg(list[ac], XtNinsertPosition, w->text.insertPos); ac++;
- XtSetArg(list[ac], XtNforeground, sink->text_sink.foreground); ac++;
- XtSetArg(list[ac], XtNbackground, sink->text_sink.background); ac++;
- _XawImSetValues(cnew, list, ac);
- }
-}
-
-static void
-XawAsciiDestroy(Widget w)
-{
- AsciiWidget ascii = (AsciiWidget)w;
-
- _XawImUnregister(w);
-
- if (w == XtParent(ascii->text.sink))
- XtDestroyWidget(ascii->text.sink);
-
-#ifdef OLDXAW
- if (w == XtParent(ascii->text.source))
- XtDestroyWidget(ascii->text.source);
-#else
- _XawSourceRemoveText(ascii->text.source, w,
- ascii->text.source &&
- w == XtParent(ascii->text.source));
-#endif
-}
+/*
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+*/
+
+/*
+ * AsciiText.c - Source code for AsciiText Widget
+ *
+ * This Widget is intended to be used as a simple front end to the
+ * text widget with an ascii source and ascii sink attached to it
+ *
+ * Date: June 29, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/AsciiTextP.h>
+#include <X11/Xaw/AsciiSrcP.h>
+#include <X11/Xaw/AsciiSink.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/MultiSinkP.h>
+#include <X11/Xaw/MultiSrc.h>
+#include <X11/Xaw/XawImP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#define TAB_COUNT 32
+
+/*
+ * Class Methods
+ */
+static void XawAsciiInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawAsciiDestroy(Widget);
+
+/*
+ * From TextSrc.c
+ */
+void _XawSourceAddText(Widget, Widget);
+void _XawSourceRemoveText(Widget, Widget, Bool);
+
+#define Superclass (&textClassRec)
+AsciiTextClassRec asciiTextClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Text", /* class_name */
+ sizeof(AsciiRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_init */
+ False, /* class_inited */
+ XawAsciiInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ NULL, /* resources */
+ 0, /* num_resource */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ XtExposeGraphicsExpose | /* compress_exposure */
+ XtExposeNoExpose,
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawAsciiDestroy, /* destroy */
+ XtInheritResize, /* resize */
+ XtInheritExpose, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ XtInheritAcceptFocus, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ XtInheritTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* text */
+ {
+ NULL, /* extension */
+ },
+ /* ascii */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass asciiTextWidgetClass = (WidgetClass)&asciiTextClassRec;
+
+#ifdef ASCII_STRING
+AsciiStringClassRec asciiStringClassRec = {
+ /* core */
+ {
+ (WidgetClass)&asciiTextClassRec, /* superclass */
+ "Text", /* class_name */
+ sizeof(AsciiStringRec), /* widget_size */
+ NULL, /* class_initialize */
+ NULL, /* class_part_init */
+ False, /* class_inited */
+ NULL, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ NULL, /* resources */
+ 0, /* num_resource */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ XtExposeGraphicsExpose | /* compress_exposure */
+ XtExposeNoExpose,
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XtInheritResize, /* resize */
+ XtInheritExpose, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ XtInheritAcceptFocus, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ XtInheritTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* text */
+ {
+ NULL, /* extension */
+ },
+ /* ascii */
+ {
+ NULL, /* extension */
+ },
+ /* string */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass asciiStringWidgetClass = (WidgetClass)&asciiStringClassRec;
+#endif /* ASCII_STRING */
+
+#ifdef ASCII_DISK
+AsciiDiskClassRec asciiDiskClassRec = {
+ /* core */
+ {
+ (WidgetClass)&asciiTextClassRec, /* superclass */
+ "Text", /* class_name */
+ sizeof(AsciiDiskRec), /* widget_size */
+ NULL, /* class_initialize */
+ NULL, /* class_part_init */
+ False, /* class_inited */
+ NULL, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ NULL, /* resources */
+ 0, /* num_resource */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ XtExposeGraphicsExpose | /* compress_enterleave */
+ XtExposeNoExpose,
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XtInheritResize, /* resize */
+ XtInheritExpose, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ XtInheritAcceptFocus, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ XtInheritTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* text */
+ {
+ NULL, /* extension */
+ },
+ /* ascii */
+ {
+ NULL, /* extension */
+ },
+ /* disk */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass asciiDiskWidgetClass = (WidgetClass)&asciiDiskClassRec;
+#endif /* ASCII_DISK */
+
+/*
+ * Implementation
+ */
+static void
+XawAsciiInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ AsciiWidget w = (AsciiWidget)cnew;
+ int i;
+ int tabs[TAB_COUNT], tab;
+
+ MultiSinkObject sink;
+
+ /* superclass Initialize can't set the following,
+ * as it didn't know the source or sink when it was called
+ */
+ if (XtHeight(request) == DEFAULT_TEXT_HEIGHT)
+ XtHeight(cnew) = DEFAULT_TEXT_HEIGHT;
+
+ /* This is the main change for internationalization */
+ if (w->simple.international == True) { /* The multi* are international */
+ if (w->text.sink == NULL)
+ w->text.sink = XtCreateWidget("textSink", multiSinkObjectClass,
+ cnew, args, *num_args);
+ else if (!XtIsSubclass(w->text.sink, multiSinkObjectClass))
+ XtError("Sink object is not a subclass of multiSink");
+
+ if (w->text.source == NULL)
+ w->text.source = XtCreateWidget("textSource", multiSrcObjectClass,
+ cnew, args, *num_args);
+ else if (!XtIsSubclass(w->text.source, multiSrcObjectClass))
+ XtError("Source object is not a subclass of multiSrc");
+#ifndef OLDXAW
+ else
+ _XawSourceAddText(w->text.source, cnew);
+#endif
+ }
+ else {
+ if (w->text.sink == NULL)
+ w->text.sink = XtCreateWidget("textSink", asciiSinkObjectClass,
+ cnew, args, *num_args);
+ else if (!XtIsSubclass(w->text.source, asciiSinkObjectClass))
+ XtError("Sink object is not a subclass of asciiSink");
+
+ if (w->text.source == NULL)
+ w->text.source = XtCreateWidget("textSource", asciiSrcObjectClass,
+ cnew, args, *num_args);
+ else if (!XtIsSubclass(w->text.source, asciiSrcObjectClass))
+ XtError("Source object is not a subclass of asciiSrc");
+#ifndef OLDXAW
+ else
+ _XawSourceAddText(w->text.source, cnew);
+#endif
+ }
+
+ if (XtHeight(w) == DEFAULT_TEXT_HEIGHT)
+ XtHeight(w) = VMargins(w) + XawTextSinkMaxHeight(w->text.sink, 1);
+
+ for (i = 0, tab = 0; i < TAB_COUNT; i++)
+ tabs[i] = (tab += 8);
+
+ XawTextSinkSetTabs(w->text.sink, TAB_COUNT, tabs);
+
+ XawTextDisableRedisplay(cnew);
+ XawTextEnableRedisplay(cnew);
+
+ _XawImRegister(cnew);
+
+ /* If we are using a MultiSink we need to tell the input method stuff */
+ if (w->simple.international == True) {
+ Arg list[4];
+ Cardinal ac = 0;
+
+ sink = (MultiSinkObject)w->text.sink;
+ XtSetArg(list[ac], XtNfontSet, sink->multi_sink.fontset); ac++;
+ XtSetArg(list[ac], XtNinsertPosition, w->text.insertPos); ac++;
+ XtSetArg(list[ac], XtNforeground, sink->text_sink.foreground); ac++;
+ XtSetArg(list[ac], XtNbackground, sink->text_sink.background); ac++;
+ _XawImSetValues(cnew, list, ac);
+ }
+}
+
+static void
+XawAsciiDestroy(Widget w)
+{
+ AsciiWidget ascii = (AsciiWidget)w;
+
+ _XawImUnregister(w);
+
+ if (w == XtParent(ascii->text.sink))
+ XtDestroyWidget(ascii->text.sink);
+
+#ifdef OLDXAW
+ if (w == XtParent(ascii->text.source))
+ XtDestroyWidget(ascii->text.source);
+#else
+ _XawSourceRemoveText(ascii->text.source, w,
+ ascii->text.source &&
+ w == XtParent(ascii->text.source));
+#endif
+}
diff --git a/libXaw/src/Box.c b/libXaw/src/Box.c
index f4f293926..5c6cfa2a2 100644
--- a/libXaw/src/Box.c
+++ b/libXaw/src/Box.c
@@ -1,675 +1,672 @@
-/* $Xorg: Box.c,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Box.c,v 1.14 2001/01/17 19:42:25 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/BoxP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Class Methods
- */
-static void XawBoxChangeManaged(Widget);
-static void XawBoxClassInitialize(void);
-#ifndef OLDXAW
-static void XawBoxExpose(Widget, XEvent*, Region);
-#endif
-static XtGeometryResult XawBoxGeometryManager(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawBoxInitialize(Widget, Widget, ArgList, Cardinal*);
-static XtGeometryResult XawBoxQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawBoxRealize(Widget, Mask*, XSetWindowAttributes*);
-static void XawBoxResize(Widget);
-static Boolean XawBoxSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void DoLayout(BoxWidget, unsigned int, unsigned int,
- Dimension*, Dimension*, Bool);
-static Bool TryNewLayout(BoxWidget);
-
-/*
- * Initialization
- */
-#ifndef OLDXAW
-static XtActionsRec actions[] = {
- {"set-values", XawSetValuesAction},
- {"get-values", XawGetValuesAction},
- {"declare", XawDeclareAction},
- {"call-proc", XawCallProcAction},
-};
-#endif
-
-static XtResource resources[] = {
- {
- XtNhSpace,
- XtCHSpace,
- XtRDimension,
- sizeof(Dimension),
- XtOffsetOf(BoxRec, box.h_space),
- XtRImmediate,
- (XtPointer)4
- },
- {
- XtNvSpace,
- XtCVSpace,
- XtRDimension,
- sizeof(Dimension),
- XtOffsetOf(BoxRec, box.v_space),
- XtRImmediate,
- (XtPointer)4
- },
- {
- XtNorientation,
- XtCOrientation,
- XtROrientation,
- sizeof(XtOrientation),
- XtOffsetOf(BoxRec, box.orientation),
- XtRImmediate,
- (XtPointer)XtorientVertical
- },
-#ifndef OLDXAW
- {
- XawNdisplayList,
- XawCDisplayList,
- XawRDisplayList,
- sizeof(XawDisplayList*),
- XtOffsetOf(BoxRec, box.display_list),
- XtRImmediate,
- NULL
- },
-#endif
-};
-
-BoxClassRec boxClassRec = {
- /* core */
- {
- (WidgetClass)&compositeClassRec, /* superclass */
- "Box", /* class_name */
- sizeof(BoxRec), /* widget_size */
- XawBoxClassInitialize, /* class_initialize */
- NULL, /* class_part_init */
- False, /* class_inited */
- XawBoxInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawBoxRealize, /* realize */
-#ifndef OLDXAW
- actions, /* actions */
- XtNumber(actions), /* num_actions */
-#else
- NULL, /* actions */
- 0, /* num_actions */
-#endif
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XawBoxResize, /* resize */
-#ifndef OLDXAW
- XawBoxExpose, /* expose */
-#else
- NULL, /* expose */
-#endif
- XawBoxSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XawBoxQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* composite */
- {
- XawBoxGeometryManager, /* geometry_manager */
- XawBoxChangeManaged, /* change_managed */
- XtInheritInsertChild, /* insert_child */
- XtInheritDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- /* box */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass boxWidgetClass = (WidgetClass)&boxClassRec;
-
-/*
- * Do a layout, either actually assigning positions, or just calculating size.
- * Returns minimum width and height that will preserve the same layout.
- */
-static void
-DoLayout(BoxWidget bbw, unsigned int width, unsigned int height,
- Dimension *reply_width, Dimension *reply_height, Bool position)
-{
- Boolean vbox = (bbw->box.orientation == XtorientVertical);
- Cardinal i;
- Dimension w, h; /* Width and height needed for box */
- Dimension lw, lh; /* Width and height needed for current line */
- Dimension bw, bh; /* Width and height needed for current widget */
- Dimension h_space; /* Local copy of bbw->box.h_space */
- Widget widget; /* Current widget */
- unsigned int num_mapped_children = 0;
-
- /* Box width and height */
- h_space = bbw->box.h_space;
-
- w = 0;
- for (i = 0; i < bbw->composite.num_children; i++) {
- if (XtIsManaged(bbw->composite.children[i])
- && bbw->composite.children[i]->core.width > w)
- w = bbw->composite.children[i]->core.width;
- }
- w += h_space;
- if (w > width)
- width = w;
- h = bbw->box.v_space;
-
- /* Line width and height */
- lh = 0;
- lw = h_space;
-
- for (i = 0; i < bbw->composite.num_children; i++) {
- widget = bbw->composite.children[i];
- if (widget->core.managed) {
- if (widget->core.mapped_when_managed)
- num_mapped_children++;
- /* Compute widget width */
- bw = XtWidth(widget) + (XtBorderWidth(widget)<<1) + h_space;
- if ((Dimension)(lw + bw) > width) {
- if (lw > h_space) {
- /* At least one widget on this line, and
- * can't fit any more. Start new line if vbox
- */
- AssignMax(w, lw);
- if (vbox) {
- h += lh + bbw->box.v_space;
- lh = 0;
- lw = h_space;
- }
- }
- else if (!position) {
- /* too narrow for this widget; we'll assume we can grow */
- DoLayout(bbw, (unsigned)(lw + bw), height, reply_width,
- reply_height, position);
- return;
- }
- }
- if (position && (lw != XtX(widget) || h != XtY(widget))) {
- /* It would be nice to use window gravity, but there isn't
- * sufficient fine-grain control to nicely handle all
- * situations (e.g. when only the height changes --
- * a common case). Explicit unmapping is a cheap hack
- * to speed things up & avoid the visual jitter as
- * things slide around.
- *
- * %%% perhaps there should be a client resource to
- * control this. If so, we'll have to optimize to
- * perform the moves from the correct end so we don't
- * force extra exposures as children occlude each other.
- */
- if (XtIsRealized(widget) && widget->core.mapped_when_managed)
- XUnmapWindow( XtDisplay(widget), XtWindow(widget));
- XtMoveWidget(widget, (int)lw, (int)h);
- }
- lw += bw;
- bh = XtHeight(widget) + (XtBorderWidth(widget) << 1);
- AssignMax(lh, bh);
- }
- }
-
- if (!vbox && width && lw > width && lh < height) {
- /* reduce width if too wide and height not filled */
- Dimension sw = lw, sh = lh;
- Dimension width_needed = width;
- XtOrientation orientation = bbw->box.orientation;
-
- bbw->box.orientation = XtorientVertical;
- while (sh < height && sw > width) {
- width_needed = sw;
- DoLayout(bbw, (unsigned)(sw-1), height, &sw, &sh, False);
- }
- if (sh < height)
- width_needed = sw;
- if (width_needed != lw) {
- DoLayout(bbw, width_needed, height,
- reply_width, reply_height, position);
- bbw->box.orientation = orientation;
- return;
- }
- bbw->box.orientation = orientation;
- }
- if (vbox && (width < w || width < lw)) {
- AssignMax(w, lw);
- DoLayout(bbw, w, height, reply_width, reply_height, position);
- return;
- }
- if (position && XtIsRealized((Widget)bbw)) {
- if (bbw->composite.num_children == num_mapped_children)
- XMapSubwindows(XtDisplay((Widget)bbw), XtWindow((Widget)bbw));
- else {
- int ii = bbw->composite.num_children;
- Widget *childP = bbw->composite.children;
-
- for (; ii > 0; childP++, ii--)
- if (XtIsRealized(*childP) && XtIsManaged(*childP)
- && (*childP)->core.mapped_when_managed)
- XtMapWidget(*childP);
- }
- }
-
- /* Finish off last line */
- if (lw > h_space) {
- AssignMax(w, lw);
- h += lh + bbw->box.v_space;
- }
-
- *reply_width = Max(w, 1);
- *reply_height = Max(h, 1);
-}
-
-/*
- * Calculate preferred size, given constraining box, caching it in the widget
- */
-static XtGeometryResult
-XawBoxQueryGeometry(Widget widget, XtWidgetGeometry *constraint,
- XtWidgetGeometry *preferred)
-{
- BoxWidget w = (BoxWidget)widget;
- Dimension width;
- Dimension preferred_width = w->box.preferred_width;
- Dimension preferred_height = w->box.preferred_height;
-
- constraint->request_mode &= CWWidth | CWHeight;
-
- if (constraint->request_mode == 0)
- /* parent isn't going to change w or h, so nothing to re-compute */
- return (XtGeometryYes);
-
- if (constraint->request_mode == w->box.last_query_mode
- && (!(constraint->request_mode & CWWidth)
- || constraint->width == w->box.last_query_width)
- && (!(constraint->request_mode & CWHeight)
- || constraint->height == w->box.last_query_height)) {
- /* same query; current preferences are still valid */
- preferred->request_mode = CWWidth | CWHeight;
- preferred->width = preferred_width;
- preferred->height = preferred_height;
- if (constraint->request_mode == (CWWidth | CWHeight)
- && constraint->width == preferred_width
- && constraint->height == preferred_height)
- return (XtGeometryYes);
- else
- return (XtGeometryAlmost);
- }
-
- /* else gotta do it the long way...
- I have a preference for tall and narrow, so if my width is
- constrained, I'll accept it; otherwise, I'll compute the minimum
- width that will fit me within the height constraint */
-
- w->box.last_query_mode = constraint->request_mode;
- w->box.last_query_width = constraint->width;
- w->box.last_query_height= constraint->height;
-
- if (constraint->request_mode & CWWidth)
- width = constraint->width;
- else { /* if (constraint->request_mode & CWHeight) */
- /* let's see if I can become any narrower */
- width = 0;
- constraint->width = 65535;
- }
-
- /* height is currently ignored by DoLayout.
- height = (constraint->request_mode & CWHeight) ? constraint->height
- : *preferred_height;
- */
- DoLayout(w, width, 0, &preferred_width, &preferred_height, False);
-
- if (constraint->request_mode & CWHeight
- && preferred_height > constraint->height) {
- /* find minimum width for this height */
- if (preferred_width <= constraint->width) {
- width = preferred_width;
- do { /* find some width big enough to stay within this height */
- width <<= 1;
- if (width > constraint->width)
- width = constraint->width;
- DoLayout(w, width, 0, &preferred_width, &preferred_height, False);
- } while (preferred_height > constraint->height
- && width < constraint->width);
- if (width != constraint->width) {
- do { /* find minimum width */
- width = preferred_width;
- DoLayout(w, (unsigned)(preferred_width - 1), 0,
- &preferred_width, &preferred_height, False);
- } while (preferred_height < constraint->height);
- /* one last time */
- DoLayout(w, width, 0, &preferred_width, &preferred_height, False);
- }
- }
- }
-
- preferred->request_mode = CWWidth | CWHeight;
- preferred->width = w->box.preferred_width = preferred_width;
- preferred->height = w->box.preferred_height = preferred_height;
-
- if (constraint->request_mode == (CWWidth|CWHeight)
- && constraint->width == preferred_width
- && constraint->height == preferred_height)
- return (XtGeometryYes);
-
- return (XtGeometryAlmost);
-}
-
-/*
- * Actually layout the box
- */
-static void
-XawBoxResize(Widget w)
-{
- Dimension tmp;
-
- DoLayout((BoxWidget)w, XtWidth(w), XtHeight(w), &tmp, &tmp, True);
-}
-
-/*
- * Try to do a new layout within the current width and height;
- * if that fails try to resize and do it within the box returne
- * by XawBoxQueryGeometry
- *
- * TryNewLayout just says if it's possible, and doesn't actually move the kids
- */
-static Bool
-TryNewLayout(BoxWidget bbw)
-{
- Dimension preferred_width, preferred_height;
- Dimension proposed_width, proposed_height;
- int iterations;
-
- DoLayout(bbw, bbw->core.width, bbw->core.height,
- &preferred_width, &preferred_height, False);
-
- /* at this point, preferred_width is guaranteed to not be greater
- than bbw->core.width unless some child is larger, so there's no
- point in re-computing another layout */
-
- if (XtWidth(bbw) == preferred_width && XtHeight(bbw) == preferred_height)
- return (True);
-
- /* let's see if our parent will go for a new size */
- iterations = 0;
- proposed_width = preferred_width;
- proposed_height = preferred_height;
- do {
- switch (XtMakeResizeRequest((Widget)bbw,proposed_width,proposed_height,
- &proposed_width, &proposed_height)) {
- case XtGeometryYes:
- return (True);
- case XtGeometryNo:
- if (iterations > 0)
- /* protect from malicious parents who change their minds */
- DoLayout(bbw, bbw->core.width, bbw->core.height,
- &preferred_width, &preferred_height, False);
- if (preferred_width <= XtWidth(bbw)
- && preferred_height <= XtHeight(bbw))
- return (True);
- else
- return (False);
- case XtGeometryAlmost:
- if (proposed_height >= preferred_height &&
- proposed_width >= preferred_width) {
- /*
- * Take it, and assume the parent knows what it is doing.
- *
- * The parent must accept this since it was returned in
- * almost.
- */
- (void)XtMakeResizeRequest((Widget)bbw,
- proposed_width, proposed_height,
- &proposed_width, &proposed_height);
- return (True);
- }
- else if (proposed_width != preferred_width) {
- /* recalc bounding box; height might change */
- DoLayout(bbw, proposed_width, 0,
- &preferred_width, &preferred_height, False);
- proposed_height = preferred_height;
- }
- else { /* proposed_height != preferred_height */
- XtWidgetGeometry constraints, reply;
-
- constraints.request_mode = CWHeight;
- constraints.height = proposed_height;
- (void)XawBoxQueryGeometry((Widget)bbw, &constraints, &reply);
- proposed_width = preferred_width;
- }
- /*FALLTHROUGH*/
- default:
- break;
- }
- iterations++;
- } while (iterations < 10);
-
- return (False);
-}
-
-/*
- * Geometry Manager
- *
- * 'reply' is unused; we say only yeay or nay, never almost.
- */
-/*ARGSUSED*/
-static XtGeometryResult
-XawBoxGeometryManager(Widget w, XtWidgetGeometry *request,
- XtWidgetGeometry *reply)
-{
- Dimension width, height, borderWidth;
- BoxWidget bbw;
-
- /* Position request always denied */
- if (((request->request_mode & CWX) && request->x != XtX(w))
- || ((request->request_mode & CWY) && request->y != XtY(w)))
- return (XtGeometryNo);
-
- /* Size changes must see if the new size can be accomodated */
- if (request->request_mode & (CWWidth | CWHeight | CWBorderWidth)) {
- /* Make all three fields in the request valid */
- if ((request->request_mode & CWWidth) == 0)
- request->width = XtWidth(w);
- if ((request->request_mode & CWHeight) == 0)
- request->height = XtHeight(w);
- if ((request->request_mode & CWBorderWidth) == 0)
- request->border_width = XtBorderWidth(w);
-
- /* Save current size and set to new size */
- width = XtWidth(w);
- height = XtHeight(w);
- borderWidth = XtBorderWidth(w);
- XtWidth(w) = request->width;
- XtHeight(w) = request->height;
- XtBorderWidth(w) = request->border_width;
-
- /* Decide if new layout works:
- (1) new widget is smaller,
- (2) new widget fits in existing Box,
- (3) Box can be expanded to allow new widget to fit
- */
-
- bbw = (BoxWidget) w->core.parent;
-
- if (TryNewLayout(bbw)) {
- /* Fits in existing or new space, relayout */
- (*XtClass((Widget)bbw)->core_class.resize)((Widget)bbw);
- return (XtGeometryYes);
- }
- else {
- /* Cannot satisfy request, change back to original geometry */
- XtWidth(w) = width;
- XtHeight(w) = height;
- XtBorderWidth(w) = borderWidth;
- return (XtGeometryNo);
- }
- }
-
- /* Any stacking changes don't make a difference, so allow if that's all */
- return (XtGeometryYes);
-}
-
-static void
-XawBoxChangeManaged(Widget w)
-{
- /* Reconfigure the box */
- (void)TryNewLayout((BoxWidget)w);
- XawBoxResize(w);
-}
-
-static void
-XawBoxClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation,
- NULL, 0);
- XtSetTypeConverter(XtROrientation, XtRString, XmuCvtOrientationToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-/*ARGSUSED*/
-static void
-XawBoxInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- BoxWidget newbbw = (BoxWidget)cnew;
-
- newbbw->box.last_query_mode = CWWidth | CWHeight;
- newbbw->box.last_query_width = newbbw->box.last_query_height = 0;
- newbbw->box.preferred_width = Max(newbbw->box.h_space, 1);
- newbbw->box.preferred_height = Max(newbbw->box.v_space, 1);
-
- if (XtWidth(newbbw) == 0)
- XtWidth(newbbw) = newbbw->box.preferred_width;
-
- if (XtHeight(newbbw) == 0)
- XtHeight(newbbw) = newbbw->box.preferred_height;
-}
-
-static void
-XawBoxRealize(Widget w, Mask *valueMask, XSetWindowAttributes *attributes)
-{
-#ifndef OLDXAW
- XawPixmap *pixmap;
-#endif
-
- XtCreateWindow(w, InputOutput, (Visual *)CopyFromParent,
- *valueMask, attributes);
-
-#ifndef OLDXAW
- if (w->core.background_pixmap > XtUnspecifiedPixmap) {
- pixmap = XawPixmapFromXPixmap(w->core.background_pixmap, XtScreen(w),
- w->core.colormap, w->core.depth);
- if (pixmap && pixmap->mask)
- XawReshapeWidget(w, pixmap);
- }
-#endif
-}
-
-/*ARGSUSED*/
-static Boolean
-XawBoxSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- /* need to relayout if h_space or v_space change */
-#ifndef OLDXAW
- BoxWidget b_old = (BoxWidget)current;
- BoxWidget b_new = (BoxWidget)cnew;
-
- if (b_old->core.background_pixmap != b_new->core.background_pixmap) {
- XawPixmap *opix, *npix;
-
- opix = XawPixmapFromXPixmap(b_old->core.background_pixmap,
- XtScreen(b_old), b_old->core.colormap,
- b_old->core.depth);
- npix = XawPixmapFromXPixmap(b_new->core.background_pixmap,
- XtScreen(b_new), b_new->core.colormap,
- b_new->core.depth);
- if ((npix && npix->mask) || (opix && opix->mask))
- XawReshapeWidget(cnew, npix);
- }
-#endif /* OLDXAW */
-
- return (False);
-}
-
-#ifndef OLDXAW
-static void
-XawBoxExpose(Widget w, XEvent *event, Region region)
-{
- BoxWidget xaw = (BoxWidget)w;
-
- if (xaw->box.display_list)
- XawRunDisplayList(w, xaw->box.display_list, event, region);
-}
-#endif /* OLDXAW */
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/BoxP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Class Methods
+ */
+static void XawBoxChangeManaged(Widget);
+static void XawBoxClassInitialize(void);
+#ifndef OLDXAW
+static void XawBoxExpose(Widget, XEvent*, Region);
+#endif
+static XtGeometryResult XawBoxGeometryManager(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawBoxInitialize(Widget, Widget, ArgList, Cardinal*);
+static XtGeometryResult XawBoxQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawBoxRealize(Widget, Mask*, XSetWindowAttributes*);
+static void XawBoxResize(Widget);
+static Boolean XawBoxSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void DoLayout(BoxWidget, unsigned int, unsigned int,
+ Dimension*, Dimension*, Bool);
+static Bool TryNewLayout(BoxWidget);
+
+/*
+ * Initialization
+ */
+#ifndef OLDXAW
+static XtActionsRec actions[] = {
+ {"set-values", XawSetValuesAction},
+ {"get-values", XawGetValuesAction},
+ {"declare", XawDeclareAction},
+ {"call-proc", XawCallProcAction},
+};
+#endif
+
+static XtResource resources[] = {
+ {
+ XtNhSpace,
+ XtCHSpace,
+ XtRDimension,
+ sizeof(Dimension),
+ XtOffsetOf(BoxRec, box.h_space),
+ XtRImmediate,
+ (XtPointer)4
+ },
+ {
+ XtNvSpace,
+ XtCVSpace,
+ XtRDimension,
+ sizeof(Dimension),
+ XtOffsetOf(BoxRec, box.v_space),
+ XtRImmediate,
+ (XtPointer)4
+ },
+ {
+ XtNorientation,
+ XtCOrientation,
+ XtROrientation,
+ sizeof(XtOrientation),
+ XtOffsetOf(BoxRec, box.orientation),
+ XtRImmediate,
+ (XtPointer)XtorientVertical
+ },
+#ifndef OLDXAW
+ {
+ XawNdisplayList,
+ XawCDisplayList,
+ XawRDisplayList,
+ sizeof(XawDisplayList*),
+ XtOffsetOf(BoxRec, box.display_list),
+ XtRImmediate,
+ NULL
+ },
+#endif
+};
+
+BoxClassRec boxClassRec = {
+ /* core */
+ {
+ (WidgetClass)&compositeClassRec, /* superclass */
+ "Box", /* class_name */
+ sizeof(BoxRec), /* widget_size */
+ XawBoxClassInitialize, /* class_initialize */
+ NULL, /* class_part_init */
+ False, /* class_inited */
+ XawBoxInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawBoxRealize, /* realize */
+#ifndef OLDXAW
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+#else
+ NULL, /* actions */
+ 0, /* num_actions */
+#endif
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XawBoxResize, /* resize */
+#ifndef OLDXAW
+ XawBoxExpose, /* expose */
+#else
+ NULL, /* expose */
+#endif
+ XawBoxSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XawBoxQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* composite */
+ {
+ XawBoxGeometryManager, /* geometry_manager */
+ XawBoxChangeManaged, /* change_managed */
+ XtInheritInsertChild, /* insert_child */
+ XtInheritDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ /* box */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass boxWidgetClass = (WidgetClass)&boxClassRec;
+
+/*
+ * Do a layout, either actually assigning positions, or just calculating size.
+ * Returns minimum width and height that will preserve the same layout.
+ */
+static void
+DoLayout(BoxWidget bbw, unsigned int width, unsigned int height,
+ Dimension *reply_width, Dimension *reply_height, Bool position)
+{
+ Boolean vbox = (bbw->box.orientation == XtorientVertical);
+ Cardinal i;
+ Dimension w, h; /* Width and height needed for box */
+ Dimension lw, lh; /* Width and height needed for current line */
+ Dimension bw, bh; /* Width and height needed for current widget */
+ Dimension h_space; /* Local copy of bbw->box.h_space */
+ Widget widget; /* Current widget */
+ unsigned int num_mapped_children = 0;
+
+ /* Box width and height */
+ h_space = bbw->box.h_space;
+
+ w = 0;
+ for (i = 0; i < bbw->composite.num_children; i++) {
+ if (XtIsManaged(bbw->composite.children[i])
+ && bbw->composite.children[i]->core.width > w)
+ w = bbw->composite.children[i]->core.width;
+ }
+ w += h_space;
+ if (w > width)
+ width = w;
+ h = bbw->box.v_space;
+
+ /* Line width and height */
+ lh = 0;
+ lw = h_space;
+
+ for (i = 0; i < bbw->composite.num_children; i++) {
+ widget = bbw->composite.children[i];
+ if (widget->core.managed) {
+ if (widget->core.mapped_when_managed)
+ num_mapped_children++;
+ /* Compute widget width */
+ bw = XtWidth(widget) + (XtBorderWidth(widget)<<1) + h_space;
+ if ((Dimension)(lw + bw) > width) {
+ if (lw > h_space) {
+ /* At least one widget on this line, and
+ * can't fit any more. Start new line if vbox
+ */
+ AssignMax(w, lw);
+ if (vbox) {
+ h += lh + bbw->box.v_space;
+ lh = 0;
+ lw = h_space;
+ }
+ }
+ else if (!position) {
+ /* too narrow for this widget; we'll assume we can grow */
+ DoLayout(bbw, (unsigned)(lw + bw), height, reply_width,
+ reply_height, position);
+ return;
+ }
+ }
+ if (position && (lw != XtX(widget) || h != XtY(widget))) {
+ /* It would be nice to use window gravity, but there isn't
+ * sufficient fine-grain control to nicely handle all
+ * situations (e.g. when only the height changes --
+ * a common case). Explicit unmapping is a cheap hack
+ * to speed things up & avoid the visual jitter as
+ * things slide around.
+ *
+ * %%% perhaps there should be a client resource to
+ * control this. If so, we'll have to optimize to
+ * perform the moves from the correct end so we don't
+ * force extra exposures as children occlude each other.
+ */
+ if (XtIsRealized(widget) && widget->core.mapped_when_managed)
+ XUnmapWindow( XtDisplay(widget), XtWindow(widget));
+ XtMoveWidget(widget, (int)lw, (int)h);
+ }
+ lw += bw;
+ bh = XtHeight(widget) + (XtBorderWidth(widget) << 1);
+ AssignMax(lh, bh);
+ }
+ }
+
+ if (!vbox && width && lw > width && lh < height) {
+ /* reduce width if too wide and height not filled */
+ Dimension sw = lw, sh = lh;
+ Dimension width_needed = width;
+ XtOrientation orientation = bbw->box.orientation;
+
+ bbw->box.orientation = XtorientVertical;
+ while (sh < height && sw > width) {
+ width_needed = sw;
+ DoLayout(bbw, (unsigned)(sw-1), height, &sw, &sh, False);
+ }
+ if (sh < height)
+ width_needed = sw;
+ if (width_needed != lw) {
+ DoLayout(bbw, width_needed, height,
+ reply_width, reply_height, position);
+ bbw->box.orientation = orientation;
+ return;
+ }
+ bbw->box.orientation = orientation;
+ }
+ if (vbox && (width < w || width < lw)) {
+ AssignMax(w, lw);
+ DoLayout(bbw, w, height, reply_width, reply_height, position);
+ return;
+ }
+ if (position && XtIsRealized((Widget)bbw)) {
+ if (bbw->composite.num_children == num_mapped_children)
+ XMapSubwindows(XtDisplay((Widget)bbw), XtWindow((Widget)bbw));
+ else {
+ int ii = bbw->composite.num_children;
+ Widget *childP = bbw->composite.children;
+
+ for (; ii > 0; childP++, ii--)
+ if (XtIsRealized(*childP) && XtIsManaged(*childP)
+ && (*childP)->core.mapped_when_managed)
+ XtMapWidget(*childP);
+ }
+ }
+
+ /* Finish off last line */
+ if (lw > h_space) {
+ AssignMax(w, lw);
+ h += lh + bbw->box.v_space;
+ }
+
+ *reply_width = Max(w, 1);
+ *reply_height = Max(h, 1);
+}
+
+/*
+ * Calculate preferred size, given constraining box, caching it in the widget
+ */
+static XtGeometryResult
+XawBoxQueryGeometry(Widget widget, XtWidgetGeometry *constraint,
+ XtWidgetGeometry *preferred)
+{
+ BoxWidget w = (BoxWidget)widget;
+ Dimension width;
+ Dimension preferred_width = w->box.preferred_width;
+ Dimension preferred_height = w->box.preferred_height;
+
+ constraint->request_mode &= CWWidth | CWHeight;
+
+ if (constraint->request_mode == 0)
+ /* parent isn't going to change w or h, so nothing to re-compute */
+ return (XtGeometryYes);
+
+ if (constraint->request_mode == w->box.last_query_mode
+ && (!(constraint->request_mode & CWWidth)
+ || constraint->width == w->box.last_query_width)
+ && (!(constraint->request_mode & CWHeight)
+ || constraint->height == w->box.last_query_height)) {
+ /* same query; current preferences are still valid */
+ preferred->request_mode = CWWidth | CWHeight;
+ preferred->width = preferred_width;
+ preferred->height = preferred_height;
+ if (constraint->request_mode == (CWWidth | CWHeight)
+ && constraint->width == preferred_width
+ && constraint->height == preferred_height)
+ return (XtGeometryYes);
+ else
+ return (XtGeometryAlmost);
+ }
+
+ /* else gotta do it the long way...
+ I have a preference for tall and narrow, so if my width is
+ constrained, I'll accept it; otherwise, I'll compute the minimum
+ width that will fit me within the height constraint */
+
+ w->box.last_query_mode = constraint->request_mode;
+ w->box.last_query_width = constraint->width;
+ w->box.last_query_height= constraint->height;
+
+ if (constraint->request_mode & CWWidth)
+ width = constraint->width;
+ else { /* if (constraint->request_mode & CWHeight) */
+ /* let's see if I can become any narrower */
+ width = 0;
+ constraint->width = 65535;
+ }
+
+ /* height is currently ignored by DoLayout.
+ height = (constraint->request_mode & CWHeight) ? constraint->height
+ : *preferred_height;
+ */
+ DoLayout(w, width, 0, &preferred_width, &preferred_height, False);
+
+ if (constraint->request_mode & CWHeight
+ && preferred_height > constraint->height) {
+ /* find minimum width for this height */
+ if (preferred_width <= constraint->width) {
+ width = preferred_width;
+ do { /* find some width big enough to stay within this height */
+ width <<= 1;
+ if (width > constraint->width)
+ width = constraint->width;
+ DoLayout(w, width, 0, &preferred_width, &preferred_height, False);
+ } while (preferred_height > constraint->height
+ && width < constraint->width);
+ if (width != constraint->width) {
+ do { /* find minimum width */
+ width = preferred_width;
+ DoLayout(w, (unsigned)(preferred_width - 1), 0,
+ &preferred_width, &preferred_height, False);
+ } while (preferred_height < constraint->height);
+ /* one last time */
+ DoLayout(w, width, 0, &preferred_width, &preferred_height, False);
+ }
+ }
+ }
+
+ preferred->request_mode = CWWidth | CWHeight;
+ preferred->width = w->box.preferred_width = preferred_width;
+ preferred->height = w->box.preferred_height = preferred_height;
+
+ if (constraint->request_mode == (CWWidth|CWHeight)
+ && constraint->width == preferred_width
+ && constraint->height == preferred_height)
+ return (XtGeometryYes);
+
+ return (XtGeometryAlmost);
+}
+
+/*
+ * Actually layout the box
+ */
+static void
+XawBoxResize(Widget w)
+{
+ Dimension tmp;
+
+ DoLayout((BoxWidget)w, XtWidth(w), XtHeight(w), &tmp, &tmp, True);
+}
+
+/*
+ * Try to do a new layout within the current width and height;
+ * if that fails try to resize and do it within the box returne
+ * by XawBoxQueryGeometry
+ *
+ * TryNewLayout just says if it's possible, and doesn't actually move the kids
+ */
+static Bool
+TryNewLayout(BoxWidget bbw)
+{
+ Dimension preferred_width, preferred_height;
+ Dimension proposed_width, proposed_height;
+ int iterations;
+
+ DoLayout(bbw, bbw->core.width, bbw->core.height,
+ &preferred_width, &preferred_height, False);
+
+ /* at this point, preferred_width is guaranteed to not be greater
+ than bbw->core.width unless some child is larger, so there's no
+ point in re-computing another layout */
+
+ if (XtWidth(bbw) == preferred_width && XtHeight(bbw) == preferred_height)
+ return (True);
+
+ /* let's see if our parent will go for a new size */
+ iterations = 0;
+ proposed_width = preferred_width;
+ proposed_height = preferred_height;
+ do {
+ switch (XtMakeResizeRequest((Widget)bbw,proposed_width,proposed_height,
+ &proposed_width, &proposed_height)) {
+ case XtGeometryYes:
+ return (True);
+ case XtGeometryNo:
+ if (iterations > 0)
+ /* protect from malicious parents who change their minds */
+ DoLayout(bbw, bbw->core.width, bbw->core.height,
+ &preferred_width, &preferred_height, False);
+ if (preferred_width <= XtWidth(bbw)
+ && preferred_height <= XtHeight(bbw))
+ return (True);
+ else
+ return (False);
+ case XtGeometryAlmost:
+ if (proposed_height >= preferred_height &&
+ proposed_width >= preferred_width) {
+ /*
+ * Take it, and assume the parent knows what it is doing.
+ *
+ * The parent must accept this since it was returned in
+ * almost.
+ */
+ (void)XtMakeResizeRequest((Widget)bbw,
+ proposed_width, proposed_height,
+ &proposed_width, &proposed_height);
+ return (True);
+ }
+ else if (proposed_width != preferred_width) {
+ /* recalc bounding box; height might change */
+ DoLayout(bbw, proposed_width, 0,
+ &preferred_width, &preferred_height, False);
+ proposed_height = preferred_height;
+ }
+ else { /* proposed_height != preferred_height */
+ XtWidgetGeometry constraints, reply;
+
+ constraints.request_mode = CWHeight;
+ constraints.height = proposed_height;
+ (void)XawBoxQueryGeometry((Widget)bbw, &constraints, &reply);
+ proposed_width = preferred_width;
+ }
+ /*FALLTHROUGH*/
+ default:
+ break;
+ }
+ iterations++;
+ } while (iterations < 10);
+
+ return (False);
+}
+
+/*
+ * Geometry Manager
+ *
+ * 'reply' is unused; we say only yeay or nay, never almost.
+ */
+/*ARGSUSED*/
+static XtGeometryResult
+XawBoxGeometryManager(Widget w, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply)
+{
+ Dimension width, height, borderWidth;
+ BoxWidget bbw;
+
+ /* Position request always denied */
+ if (((request->request_mode & CWX) && request->x != XtX(w))
+ || ((request->request_mode & CWY) && request->y != XtY(w)))
+ return (XtGeometryNo);
+
+ /* Size changes must see if the new size can be accomodated */
+ if (request->request_mode & (CWWidth | CWHeight | CWBorderWidth)) {
+ /* Make all three fields in the request valid */
+ if ((request->request_mode & CWWidth) == 0)
+ request->width = XtWidth(w);
+ if ((request->request_mode & CWHeight) == 0)
+ request->height = XtHeight(w);
+ if ((request->request_mode & CWBorderWidth) == 0)
+ request->border_width = XtBorderWidth(w);
+
+ /* Save current size and set to new size */
+ width = XtWidth(w);
+ height = XtHeight(w);
+ borderWidth = XtBorderWidth(w);
+ XtWidth(w) = request->width;
+ XtHeight(w) = request->height;
+ XtBorderWidth(w) = request->border_width;
+
+ /* Decide if new layout works:
+ (1) new widget is smaller,
+ (2) new widget fits in existing Box,
+ (3) Box can be expanded to allow new widget to fit
+ */
+
+ bbw = (BoxWidget) w->core.parent;
+
+ if (TryNewLayout(bbw)) {
+ /* Fits in existing or new space, relayout */
+ (*XtClass((Widget)bbw)->core_class.resize)((Widget)bbw);
+ return (XtGeometryYes);
+ }
+ else {
+ /* Cannot satisfy request, change back to original geometry */
+ XtWidth(w) = width;
+ XtHeight(w) = height;
+ XtBorderWidth(w) = borderWidth;
+ return (XtGeometryNo);
+ }
+ }
+
+ /* Any stacking changes don't make a difference, so allow if that's all */
+ return (XtGeometryYes);
+}
+
+static void
+XawBoxChangeManaged(Widget w)
+{
+ /* Reconfigure the box */
+ (void)TryNewLayout((BoxWidget)w);
+ XawBoxResize(w);
+}
+
+static void
+XawBoxClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation,
+ NULL, 0);
+ XtSetTypeConverter(XtROrientation, XtRString, XmuCvtOrientationToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+/*ARGSUSED*/
+static void
+XawBoxInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ BoxWidget newbbw = (BoxWidget)cnew;
+
+ newbbw->box.last_query_mode = CWWidth | CWHeight;
+ newbbw->box.last_query_width = newbbw->box.last_query_height = 0;
+ newbbw->box.preferred_width = Max(newbbw->box.h_space, 1);
+ newbbw->box.preferred_height = Max(newbbw->box.v_space, 1);
+
+ if (XtWidth(newbbw) == 0)
+ XtWidth(newbbw) = newbbw->box.preferred_width;
+
+ if (XtHeight(newbbw) == 0)
+ XtHeight(newbbw) = newbbw->box.preferred_height;
+}
+
+static void
+XawBoxRealize(Widget w, Mask *valueMask, XSetWindowAttributes *attributes)
+{
+#ifndef OLDXAW
+ XawPixmap *pixmap;
+#endif
+
+ XtCreateWindow(w, InputOutput, (Visual *)CopyFromParent,
+ *valueMask, attributes);
+
+#ifndef OLDXAW
+ if (w->core.background_pixmap > XtUnspecifiedPixmap) {
+ pixmap = XawPixmapFromXPixmap(w->core.background_pixmap, XtScreen(w),
+ w->core.colormap, w->core.depth);
+ if (pixmap && pixmap->mask)
+ XawReshapeWidget(w, pixmap);
+ }
+#endif
+}
+
+/*ARGSUSED*/
+static Boolean
+XawBoxSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ /* need to relayout if h_space or v_space change */
+#ifndef OLDXAW
+ BoxWidget b_old = (BoxWidget)current;
+ BoxWidget b_new = (BoxWidget)cnew;
+
+ if (b_old->core.background_pixmap != b_new->core.background_pixmap) {
+ XawPixmap *opix, *npix;
+
+ opix = XawPixmapFromXPixmap(b_old->core.background_pixmap,
+ XtScreen(b_old), b_old->core.colormap,
+ b_old->core.depth);
+ npix = XawPixmapFromXPixmap(b_new->core.background_pixmap,
+ XtScreen(b_new), b_new->core.colormap,
+ b_new->core.depth);
+ if ((npix && npix->mask) || (opix && opix->mask))
+ XawReshapeWidget(cnew, npix);
+ }
+#endif /* OLDXAW */
+
+ return (False);
+}
+
+#ifndef OLDXAW
+static void
+XawBoxExpose(Widget w, XEvent *event, Region region)
+{
+ BoxWidget xaw = (BoxWidget)w;
+
+ if (xaw->box.display_list)
+ XawRunDisplayList(w, xaw->box.display_list, event, region);
+}
+#endif /* OLDXAW */
diff --git a/libXaw/src/Command.c b/libXaw/src/Command.c
index 845ffb8b6..268fc19a7 100644
--- a/libXaw/src/Command.c
+++ b/libXaw/src/Command.c
@@ -1,660 +1,657 @@
-/* $Xorg: Command.c,v 1.5 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Command.c,v 1.15tsi Exp $ */
-
-/*
- * Command.c - Command button widget
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/extensions/shape.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xmu/Drawing.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/CommandP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#define DEFAULT_HIGHLIGHT_THICKNESS 2
-#define DEFAULT_SHAPE_HIGHLIGHT 32767
-#define STR_EQUAL(str1, str2) (str1 == str2 || strcmp(str1, str2) == 0)
-
-/*
- * Class Methods
- */
-static void XawCommandClassInitialize(void);
-static void XawCommandDestroy(Widget);
-static void XawCommandInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawCommandRealize(Widget, Mask*, XSetWindowAttributes*);
-static void XawCommandResize(Widget);
-static void XawCommandRedisplay(Widget, XEvent*, Region);
-static Boolean XawCommandSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-static void XawCommandGetValuesHook(Widget, ArgList, Cardinal*);
-static Bool ChangeSensitive(Widget);
-
-/*
- * Prototypes
- */
-static GC Get_GC(CommandWidget, Pixel, Pixel);
-static void PaintCommandWidget(Widget, XEvent*, Region, Bool);
-static Region HighlightRegion(CommandWidget);
-static Bool ShapeButton(CommandWidget, Bool);
-static void XawCommandToggle(Widget);
-
-/*
- * Actions
- */
-static void Highlight(Widget, XEvent*, String*, Cardinal*);
-static void Notify(Widget, XEvent*, String*, Cardinal*);
-static void Reset(Widget, XEvent*, String*, Cardinal*);
-static void Set(Widget, XEvent*, String*, Cardinal*);
-static void Unhighlight(Widget, XEvent*, String*, Cardinal*);
-static void Unset(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-static char defaultTranslations[] =
-"<Enter>:" "highlight()\n"
-"<Leave>:" "reset()\n"
-"<Btn1Down>:" "set()\n"
-"<Btn1Up>:" "notify() unset()\n"
-;
-
-#define offset(field) XtOffsetOf(CommandRec, field)
-static XtResource resources[] = {
- {
- XtNcallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(command.callbacks),
- XtRCallback,
- NULL
- },
- {
- XtNhighlightThickness,
- XtCThickness,
- XtRDimension,
- sizeof(Dimension),
- offset(command.highlight_thickness),
- XtRImmediate,
- (XtPointer)DEFAULT_SHAPE_HIGHLIGHT
- },
- {
- XtNshapeStyle,
- XtCShapeStyle,
- XtRShapeStyle,
- sizeof(int),
- offset(command.shape_style),
- XtRImmediate,
- (XtPointer)XawShapeRectangle
- },
- {
- XtNcornerRoundPercent,
- XtCCornerRoundPercent,
- XtRDimension,
- sizeof(Dimension),
- offset(command.corner_round),
- XtRImmediate,
- (XtPointer)25
- },
-};
-#undef offset
-
-static XtActionsRec actionsList[] = {
- {"set", Set},
- {"notify", Notify},
- {"highlight", Highlight},
- {"reset", Reset},
- {"unset", Unset},
- {"unhighlight", Unhighlight}
-};
-
-#define SuperClass ((LabelWidgetClass)&labelClassRec)
-
-CommandClassRec commandClassRec = {
- /* core */
- {
- (WidgetClass)SuperClass, /* superclass */
- "Command", /* class_name */
- sizeof(CommandRec), /* size */
- XawCommandClassInitialize, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawCommandInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawCommandRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawCommandDestroy, /* destroy */
- XawCommandResize, /* resize */
- XawCommandRedisplay, /* expose */
- XawCommandSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- XawCommandGetValuesHook, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- ChangeSensitive, /* change_sensitive */
- },
- /* label */
- {
- NULL, /* not used */
- },
- /* command */
- {
- NULL, /* not used */
- },
-};
-
-WidgetClass commandWidgetClass = (WidgetClass)&commandClassRec;
-
-/*
- * Implementation
- */
-static GC
-Get_GC(CommandWidget cbw, Pixel fg, Pixel bg)
-{
- XGCValues values;
-
- values.foreground = fg;
- values.background = bg;
- values.font = cbw->label.font->fid;
- values.cap_style = CapProjecting;
-
- if (cbw->command.highlight_thickness > 1)
- values.line_width = cbw->command.highlight_thickness;
- else
- values.line_width = 0;
-
- if (cbw->simple.international == True)
- return (XtAllocateGC((Widget)cbw, 0,
- GCForeground | GCBackground | GCLineWidth |
- GCCapStyle, &values, GCFont, 0));
- else
- return (XtGetGC((Widget)cbw,
- GCForeground | GCBackground | GCFont | GCLineWidth |
- GCCapStyle, &values));
-}
-
-/*ARGSUSED*/
-static void
-XawCommandInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- CommandWidget cbw = (CommandWidget)cnew;
- int shape_event_base, shape_error_base;
-
- if (!cbw->label.font) XtError("Aborting: no font found\n");
-
- if (cbw->command.shape_style != XawShapeRectangle &&
- !XShapeQueryExtension(XtDisplay(cnew), &shape_event_base,
- &shape_error_base))
- cbw->command.shape_style = XawShapeRectangle;
-
- if (cbw->command.highlight_thickness == DEFAULT_SHAPE_HIGHLIGHT) {
- if (cbw->command.shape_style != XawShapeRectangle)
- cbw->command.highlight_thickness = 0;
- else
- cbw->command.highlight_thickness = DEFAULT_HIGHLIGHT_THICKNESS;
- }
-
- cbw->command.normal_GC = Get_GC(cbw, cbw->label.foreground,
- cbw->core.background_pixel);
- cbw->command.inverse_GC = Get_GC(cbw, cbw->core.background_pixel,
- cbw->label.foreground);
- XtReleaseGC(cnew, cbw->label.normal_GC);
- cbw->label.normal_GC = cbw->command.normal_GC;
-
- cbw->command.set = False;
- cbw->command.highlighted = HighlightNone;
-}
-
-static Region
-HighlightRegion(CommandWidget cbw)
-{
- static Region outerRegion = NULL, innerRegion, emptyRegion;
- XRectangle rect;
-
- if (cbw->command.highlight_thickness == 0 ||
- cbw->command.highlight_thickness > Min(XtWidth(cbw), XtHeight(cbw)) / 2)
- return (NULL);
-
- if (outerRegion == NULL) {
- /* save time by allocating scratch regions only once. */
- outerRegion = XCreateRegion();
- innerRegion = XCreateRegion();
- emptyRegion = XCreateRegion();
- }
-
- rect.x = rect.y = 0;
- rect.width = XtWidth(cbw);
- rect.height = XtHeight(cbw);
- XUnionRectWithRegion(&rect, emptyRegion, outerRegion);
- rect.x = rect.y = cbw->command.highlight_thickness;
- rect.width -= cbw->command.highlight_thickness * 2;
- rect.height -= cbw->command.highlight_thickness * 2;
- XUnionRectWithRegion(&rect, emptyRegion, innerRegion);
- XSubtractRegion(outerRegion, innerRegion, outerRegion);
-
- return (outerRegion);
-}
-
-/***************************
-* Action Procedures
-***************************/
-static void
-XawCommandToggle(Widget w)
-{
- CommandWidget xaw = (CommandWidget)w;
- Arg args[2];
- Cardinal num_args;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNbackground,
- xaw->label.foreground); ++num_args;
- XtSetArg(args[num_args], XtNforeground,
- xaw->core.background_pixel); ++num_args;
- XtSetValues(w, args, num_args);
-}
-
-/*ARGSUSED*/
-static void
-Set(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CommandWidget cbw = (CommandWidget)w;
-
- if (cbw->command.set)
- return;
-
- XawCommandToggle(w);
- cbw->command.set= True;
-}
-
-/*ARGSUSED*/
-static void
-Unset(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CommandWidget cbw = (CommandWidget)w;
-
- if (!cbw->command.set)
- return;
-
- cbw->command.set = False;
- XawCommandToggle(w);
-}
-
-/*ARGSUSED*/
-static void
-Reset(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CommandWidget cbw = (CommandWidget)w;
-
- if (cbw->command.set) {
- cbw->command.highlighted = HighlightNone;
- Unset(w, event, params, num_params);
- }
- else
- Unhighlight(w, event, params, num_params);
-}
-
-/*ARGSUSED*/
-static void
-Highlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CommandWidget cbw = (CommandWidget)w;
-
- if (*num_params == (Cardinal)0)
- cbw->command.highlighted = HighlightWhenUnset;
- else {
- if (*num_params != (Cardinal)1)
- XtWarning("Too many parameters passed to highlight action table.");
- switch (params[0][0]) {
- case 'A':
- case 'a':
- cbw->command.highlighted = HighlightAlways;
- break;
- default:
- cbw->command.highlighted = HighlightWhenUnset;
- break;
- }
- }
-
- if (XtIsRealized(w))
- PaintCommandWidget(w, event, HighlightRegion(cbw), True);
-}
-
-/*ARGSUSED*/
-static void
-Unhighlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CommandWidget cbw = (CommandWidget)w;
-
- cbw->command.highlighted = HighlightNone;
- if (XtIsRealized(w))
- PaintCommandWidget(w, event, HighlightRegion(cbw), True);
-}
-
-/*ARGSUSED*/
-static void
-Notify(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CommandWidget cbw = (CommandWidget)w;
-
- /* check to be sure state is still Set so that user can cancel
- the action (e.g. by moving outside the window, in the default
- bindings.
- */
- if (cbw->command.set)
- XtCallCallbackList(w, cbw->command.callbacks, (XtPointer) NULL);
-}
-
-static void
-XawCommandRedisplay(Widget w, XEvent *event, Region region)
-{
- PaintCommandWidget(w, event, region, False);
-}
-
-/*
- * Function:
- * PaintCommandWidget
- * Parameters:
- * w - command widget
- * region - region to paint (passed to the superclass)
- * change - did it change either set or highlight state?
- */
-static void
-PaintCommandWidget(Widget w, XEvent *event, Region region, Bool change)
-{
- CommandWidget cbw = (CommandWidget)w;
- Bool very_thick;
- GC rev_gc;
-
- very_thick = cbw->command.highlight_thickness
- > Min(XtWidth(cbw), XtHeight(cbw)) / 2;
-
- if (cbw->command.highlight_thickness == 0) {
- (*SuperClass->core_class.expose) (w, event, region);
- return;
- }
-
- /*
- * If we are set then use the same colors as if we are not highlighted
- */
-
- if (cbw->command.highlighted != HighlightNone) {
- rev_gc = cbw->command.normal_GC;
- }
- else {
- rev_gc = cbw->command.inverse_GC;
- }
-
- if (!((!change && cbw->command.highlighted == HighlightNone)
- || (cbw->command.highlighted == HighlightWhenUnset
- && cbw->command.set))) {
- if (very_thick)
- XFillRectangle(XtDisplay(w),XtWindow(w), rev_gc,
- 0, 0, XtWidth(cbw), XtHeight(cbw));
- else {
- /* wide lines are centered on the path, so indent it */
- if (cbw->core.background_pixmap != XtUnspecifiedPixmap &&
- rev_gc == cbw->command.inverse_GC) {
- XClearArea(XtDisplay(w), XtWindow(w),
- 0, 0, XtWidth(cbw), cbw->command.highlight_thickness,
- False);
- XClearArea(XtDisplay(w), XtWindow(w),
- 0, cbw->command.highlight_thickness,
- cbw->command.highlight_thickness,
- XtHeight(cbw) - (cbw->command.highlight_thickness<<1),
- False);
- XClearArea(XtDisplay(w), XtWindow(w),
- XtWidth(cbw) - cbw->command.highlight_thickness,
- cbw->command.highlight_thickness,
- cbw->command.highlight_thickness,
- XtHeight(cbw) - (cbw->command.highlight_thickness<<1),
- False);
- XClearArea(XtDisplay(w), XtWindow(w),
- 0, XtHeight(cbw) - cbw->command.highlight_thickness,
- XtWidth(cbw), cbw->command.highlight_thickness,
- False);
- }
- else {
- int offset = cbw->command.highlight_thickness / 2;
-
- XDrawRectangle(XtDisplay(w),XtWindow(w), rev_gc, offset, offset,
- XtWidth(cbw) - cbw->command.highlight_thickness,
- XtHeight(cbw) - cbw->command.highlight_thickness);
- }
- }
- }
-
- (*SuperClass->core_class.expose)(w, event, region);
-}
-
-static void
-XawCommandDestroy(Widget w)
-{
- CommandWidget cbw = (CommandWidget)w;
-
- /* Label will release cbw->command.normal_GC */
- XtReleaseGC(w, cbw->command.inverse_GC);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawCommandSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- CommandWidget oldcbw = (CommandWidget)current;
- CommandWidget cbw = (CommandWidget)cnew;
- Boolean redisplay = False;
-
- if (oldcbw->core.sensitive != cbw->core.sensitive && !cbw->core.sensitive) {
- cbw->command.highlighted = HighlightNone;
- redisplay = True;
- }
-
- if (cbw->command.set) {
- unsigned int i;
- Pixel foreground, background;
-
- foreground = oldcbw->label.foreground;
- background = oldcbw->core.background_pixel;
- for (i = 0; i < *num_args; i++) {
- if (STR_EQUAL(args[i].name, XtNforeground))
- background = cbw->label.foreground;
- else if (STR_EQUAL(args[i].name, XtNbackground))
- foreground = cbw->core.background_pixel;
- }
- cbw->label.foreground = foreground;
- cbw->core.background_pixel = background;
- }
-
- if (oldcbw->label.foreground != cbw->label.foreground
- || oldcbw->core.background_pixel != cbw->core.background_pixel
- || oldcbw->command.highlight_thickness
- != cbw->command.highlight_thickness
- || oldcbw->label.font != cbw->label.font) {
- XtReleaseGC(cnew, cbw->command.inverse_GC);
-
- cbw->command.normal_GC = Get_GC(cbw, cbw->label.foreground,
- cbw->core.background_pixel);
- cbw->command.inverse_GC = Get_GC(cbw, cbw->core.background_pixel,
- cbw->label.foreground);
- XtReleaseGC(cnew, cbw->label.normal_GC);
- cbw->label.normal_GC = cbw->command.normal_GC;
-
- redisplay = True;
- }
-
- if (XtIsRealized(cnew)
- && oldcbw->command.shape_style != cbw->command.shape_style
- && !ShapeButton(cbw, True))
- cbw->command.shape_style = oldcbw->command.shape_style;
-
- return (redisplay);
-}
-
-static void
-XawCommandGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
-{
- CommandWidget cbw = (CommandWidget)w;
- unsigned int i;
-
- for (i = 0; i < *num_args; i++) {
- if (STR_EQUAL(args[i].name, XtNforeground))
- *((String*)args[i].value) = cbw->command.set ?
- (String)cbw->core.background_pixel : (String)cbw->label.foreground;
- else if (STR_EQUAL(args[i].name, XtNbackground))
- *((String*)args[i].value) = cbw->command.set ?
- (String)cbw->label.foreground : (String)cbw->core.background_pixel;
- }
-}
-
-static void
-XawCommandClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtSetTypeConverter(XtRString, XtRShapeStyle, XmuCvtStringToShapeStyle,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRShapeStyle, XtRString, XmuCvtShapeStyleToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-static Bool
-ShapeButton(CommandWidget cbw, Bool checkRectangular)
-{
- Dimension corner_size = 0;
-
- if (cbw->command.shape_style == XawShapeRoundedRectangle) {
- corner_size = XtWidth(cbw) < XtHeight(cbw) ?
- XtWidth(cbw) : XtHeight(cbw);
- corner_size = (corner_size * cbw->command.corner_round) / 100;
- }
-
- if (checkRectangular || cbw->command.shape_style != XawShapeRectangle) {
- if (!XmuReshapeWidget((Widget)cbw, cbw->command.shape_style,
- corner_size, corner_size)) {
- cbw->command.shape_style = XawShapeRectangle;
- return (False);
- }
- }
-
- return (True);
-}
-
-static void
-XawCommandRealize(Widget w, Mask *valueMask, XSetWindowAttributes *attributes)
-{
- (*commandWidgetClass->core_class.superclass->core_class.realize)
- (w, valueMask, attributes);
-
- ShapeButton((CommandWidget)w, False);
-}
-
-static void
-XawCommandResize(Widget w)
-{
- if (XtIsRealized(w))
- ShapeButton((CommandWidget)w, False);
-
- (*commandWidgetClass->core_class.superclass->core_class.resize)(w);
-}
-
-static Bool
-ChangeSensitive(Widget w)
-{
- CommandWidget cbw = (CommandWidget)w;
-
- if (XtIsRealized(w)) {
- if (XtIsSensitive(w)) {
- if (w->core.border_pixmap != XtUnspecifiedPixmap)
- XSetWindowBorderPixmap(XtDisplay(w), XtWindow(w),
- w->core.border_pixmap);
- else
- XSetWindowBorder(XtDisplay(w), XtWindow(w),
- w->core.border_pixel);
- }
- else {
- if (cbw->simple.insensitive_border == None)
- cbw->simple.insensitive_border =
- XmuCreateStippledPixmap(XtScreen(w),
- w->core.border_pixel,
- cbw->command.set ?
- cbw->label.foreground :
- w->core.background_pixel,
- w->core.depth);
- XSetWindowBorderPixmap(XtDisplay(w), XtWindow(w),
- cbw->simple.insensitive_border);
- }
- }
-
- return (False);
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * Command.c - Command button widget
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/extensions/shape.h>
+#include <X11/Xmu/Converters.h>
+#include <X11/Xmu/Drawing.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/CommandP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#define DEFAULT_HIGHLIGHT_THICKNESS 2
+#define DEFAULT_SHAPE_HIGHLIGHT 32767
+#define STR_EQUAL(str1, str2) (str1 == str2 || strcmp(str1, str2) == 0)
+
+/*
+ * Class Methods
+ */
+static void XawCommandClassInitialize(void);
+static void XawCommandDestroy(Widget);
+static void XawCommandInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawCommandRealize(Widget, Mask*, XSetWindowAttributes*);
+static void XawCommandResize(Widget);
+static void XawCommandRedisplay(Widget, XEvent*, Region);
+static Boolean XawCommandSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+static void XawCommandGetValuesHook(Widget, ArgList, Cardinal*);
+static Bool ChangeSensitive(Widget);
+
+/*
+ * Prototypes
+ */
+static GC Get_GC(CommandWidget, Pixel, Pixel);
+static void PaintCommandWidget(Widget, XEvent*, Region, Bool);
+static Region HighlightRegion(CommandWidget);
+static Bool ShapeButton(CommandWidget, Bool);
+static void XawCommandToggle(Widget);
+
+/*
+ * Actions
+ */
+static void Highlight(Widget, XEvent*, String*, Cardinal*);
+static void Notify(Widget, XEvent*, String*, Cardinal*);
+static void Reset(Widget, XEvent*, String*, Cardinal*);
+static void Set(Widget, XEvent*, String*, Cardinal*);
+static void Unhighlight(Widget, XEvent*, String*, Cardinal*);
+static void Unset(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+static char defaultTranslations[] =
+"<Enter>:" "highlight()\n"
+"<Leave>:" "reset()\n"
+"<Btn1Down>:" "set()\n"
+"<Btn1Up>:" "notify() unset()\n"
+;
+
+#define offset(field) XtOffsetOf(CommandRec, field)
+static XtResource resources[] = {
+ {
+ XtNcallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(command.callbacks),
+ XtRCallback,
+ NULL
+ },
+ {
+ XtNhighlightThickness,
+ XtCThickness,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(command.highlight_thickness),
+ XtRImmediate,
+ (XtPointer)DEFAULT_SHAPE_HIGHLIGHT
+ },
+ {
+ XtNshapeStyle,
+ XtCShapeStyle,
+ XtRShapeStyle,
+ sizeof(int),
+ offset(command.shape_style),
+ XtRImmediate,
+ (XtPointer)XawShapeRectangle
+ },
+ {
+ XtNcornerRoundPercent,
+ XtCCornerRoundPercent,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(command.corner_round),
+ XtRImmediate,
+ (XtPointer)25
+ },
+};
+#undef offset
+
+static XtActionsRec actionsList[] = {
+ {"set", Set},
+ {"notify", Notify},
+ {"highlight", Highlight},
+ {"reset", Reset},
+ {"unset", Unset},
+ {"unhighlight", Unhighlight}
+};
+
+#define SuperClass ((LabelWidgetClass)&labelClassRec)
+
+CommandClassRec commandClassRec = {
+ /* core */
+ {
+ (WidgetClass)SuperClass, /* superclass */
+ "Command", /* class_name */
+ sizeof(CommandRec), /* size */
+ XawCommandClassInitialize, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawCommandInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawCommandRealize, /* realize */
+ actionsList, /* actions */
+ XtNumber(actionsList), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawCommandDestroy, /* destroy */
+ XawCommandResize, /* resize */
+ XawCommandRedisplay, /* expose */
+ XawCommandSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ XawCommandGetValuesHook, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ defaultTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ ChangeSensitive, /* change_sensitive */
+ },
+ /* label */
+ {
+ NULL, /* not used */
+ },
+ /* command */
+ {
+ NULL, /* not used */
+ },
+};
+
+WidgetClass commandWidgetClass = (WidgetClass)&commandClassRec;
+
+/*
+ * Implementation
+ */
+static GC
+Get_GC(CommandWidget cbw, Pixel fg, Pixel bg)
+{
+ XGCValues values;
+
+ values.foreground = fg;
+ values.background = bg;
+ values.font = cbw->label.font->fid;
+ values.cap_style = CapProjecting;
+
+ if (cbw->command.highlight_thickness > 1)
+ values.line_width = cbw->command.highlight_thickness;
+ else
+ values.line_width = 0;
+
+ if (cbw->simple.international == True)
+ return (XtAllocateGC((Widget)cbw, 0,
+ GCForeground | GCBackground | GCLineWidth |
+ GCCapStyle, &values, GCFont, 0));
+ else
+ return (XtGetGC((Widget)cbw,
+ GCForeground | GCBackground | GCFont | GCLineWidth |
+ GCCapStyle, &values));
+}
+
+/*ARGSUSED*/
+static void
+XawCommandInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ CommandWidget cbw = (CommandWidget)cnew;
+ int shape_event_base, shape_error_base;
+
+ if (!cbw->label.font) XtError("Aborting: no font found\n");
+
+ if (cbw->command.shape_style != XawShapeRectangle &&
+ !XShapeQueryExtension(XtDisplay(cnew), &shape_event_base,
+ &shape_error_base))
+ cbw->command.shape_style = XawShapeRectangle;
+
+ if (cbw->command.highlight_thickness == DEFAULT_SHAPE_HIGHLIGHT) {
+ if (cbw->command.shape_style != XawShapeRectangle)
+ cbw->command.highlight_thickness = 0;
+ else
+ cbw->command.highlight_thickness = DEFAULT_HIGHLIGHT_THICKNESS;
+ }
+
+ cbw->command.normal_GC = Get_GC(cbw, cbw->label.foreground,
+ cbw->core.background_pixel);
+ cbw->command.inverse_GC = Get_GC(cbw, cbw->core.background_pixel,
+ cbw->label.foreground);
+ XtReleaseGC(cnew, cbw->label.normal_GC);
+ cbw->label.normal_GC = cbw->command.normal_GC;
+
+ cbw->command.set = False;
+ cbw->command.highlighted = HighlightNone;
+}
+
+static Region
+HighlightRegion(CommandWidget cbw)
+{
+ static Region outerRegion = NULL, innerRegion, emptyRegion;
+ XRectangle rect;
+
+ if (cbw->command.highlight_thickness == 0 ||
+ cbw->command.highlight_thickness > Min(XtWidth(cbw), XtHeight(cbw)) / 2)
+ return (NULL);
+
+ if (outerRegion == NULL) {
+ /* save time by allocating scratch regions only once. */
+ outerRegion = XCreateRegion();
+ innerRegion = XCreateRegion();
+ emptyRegion = XCreateRegion();
+ }
+
+ rect.x = rect.y = 0;
+ rect.width = XtWidth(cbw);
+ rect.height = XtHeight(cbw);
+ XUnionRectWithRegion(&rect, emptyRegion, outerRegion);
+ rect.x = rect.y = cbw->command.highlight_thickness;
+ rect.width -= cbw->command.highlight_thickness * 2;
+ rect.height -= cbw->command.highlight_thickness * 2;
+ XUnionRectWithRegion(&rect, emptyRegion, innerRegion);
+ XSubtractRegion(outerRegion, innerRegion, outerRegion);
+
+ return (outerRegion);
+}
+
+/***************************
+* Action Procedures
+***************************/
+static void
+XawCommandToggle(Widget w)
+{
+ CommandWidget xaw = (CommandWidget)w;
+ Arg args[2];
+ Cardinal num_args;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNbackground,
+ xaw->label.foreground); ++num_args;
+ XtSetArg(args[num_args], XtNforeground,
+ xaw->core.background_pixel); ++num_args;
+ XtSetValues(w, args, num_args);
+}
+
+/*ARGSUSED*/
+static void
+Set(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CommandWidget cbw = (CommandWidget)w;
+
+ if (cbw->command.set)
+ return;
+
+ XawCommandToggle(w);
+ cbw->command.set= True;
+}
+
+/*ARGSUSED*/
+static void
+Unset(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CommandWidget cbw = (CommandWidget)w;
+
+ if (!cbw->command.set)
+ return;
+
+ cbw->command.set = False;
+ XawCommandToggle(w);
+}
+
+/*ARGSUSED*/
+static void
+Reset(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CommandWidget cbw = (CommandWidget)w;
+
+ if (cbw->command.set) {
+ cbw->command.highlighted = HighlightNone;
+ Unset(w, event, params, num_params);
+ }
+ else
+ Unhighlight(w, event, params, num_params);
+}
+
+/*ARGSUSED*/
+static void
+Highlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CommandWidget cbw = (CommandWidget)w;
+
+ if (*num_params == (Cardinal)0)
+ cbw->command.highlighted = HighlightWhenUnset;
+ else {
+ if (*num_params != (Cardinal)1)
+ XtWarning("Too many parameters passed to highlight action table.");
+ switch (params[0][0]) {
+ case 'A':
+ case 'a':
+ cbw->command.highlighted = HighlightAlways;
+ break;
+ default:
+ cbw->command.highlighted = HighlightWhenUnset;
+ break;
+ }
+ }
+
+ if (XtIsRealized(w))
+ PaintCommandWidget(w, event, HighlightRegion(cbw), True);
+}
+
+/*ARGSUSED*/
+static void
+Unhighlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CommandWidget cbw = (CommandWidget)w;
+
+ cbw->command.highlighted = HighlightNone;
+ if (XtIsRealized(w))
+ PaintCommandWidget(w, event, HighlightRegion(cbw), True);
+}
+
+/*ARGSUSED*/
+static void
+Notify(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CommandWidget cbw = (CommandWidget)w;
+
+ /* check to be sure state is still Set so that user can cancel
+ the action (e.g. by moving outside the window, in the default
+ bindings.
+ */
+ if (cbw->command.set)
+ XtCallCallbackList(w, cbw->command.callbacks, (XtPointer) NULL);
+}
+
+static void
+XawCommandRedisplay(Widget w, XEvent *event, Region region)
+{
+ PaintCommandWidget(w, event, region, False);
+}
+
+/*
+ * Function:
+ * PaintCommandWidget
+ * Parameters:
+ * w - command widget
+ * region - region to paint (passed to the superclass)
+ * change - did it change either set or highlight state?
+ */
+static void
+PaintCommandWidget(Widget w, XEvent *event, Region region, Bool change)
+{
+ CommandWidget cbw = (CommandWidget)w;
+ Bool very_thick;
+ GC rev_gc;
+
+ very_thick = cbw->command.highlight_thickness
+ > Min(XtWidth(cbw), XtHeight(cbw)) / 2;
+
+ if (cbw->command.highlight_thickness == 0) {
+ (*SuperClass->core_class.expose) (w, event, region);
+ return;
+ }
+
+ /*
+ * If we are set then use the same colors as if we are not highlighted
+ */
+
+ if (cbw->command.highlighted != HighlightNone) {
+ rev_gc = cbw->command.normal_GC;
+ }
+ else {
+ rev_gc = cbw->command.inverse_GC;
+ }
+
+ if (!((!change && cbw->command.highlighted == HighlightNone)
+ || (cbw->command.highlighted == HighlightWhenUnset
+ && cbw->command.set))) {
+ if (very_thick)
+ XFillRectangle(XtDisplay(w),XtWindow(w), rev_gc,
+ 0, 0, XtWidth(cbw), XtHeight(cbw));
+ else {
+ /* wide lines are centered on the path, so indent it */
+ if (cbw->core.background_pixmap != XtUnspecifiedPixmap &&
+ rev_gc == cbw->command.inverse_GC) {
+ XClearArea(XtDisplay(w), XtWindow(w),
+ 0, 0, XtWidth(cbw), cbw->command.highlight_thickness,
+ False);
+ XClearArea(XtDisplay(w), XtWindow(w),
+ 0, cbw->command.highlight_thickness,
+ cbw->command.highlight_thickness,
+ XtHeight(cbw) - (cbw->command.highlight_thickness<<1),
+ False);
+ XClearArea(XtDisplay(w), XtWindow(w),
+ XtWidth(cbw) - cbw->command.highlight_thickness,
+ cbw->command.highlight_thickness,
+ cbw->command.highlight_thickness,
+ XtHeight(cbw) - (cbw->command.highlight_thickness<<1),
+ False);
+ XClearArea(XtDisplay(w), XtWindow(w),
+ 0, XtHeight(cbw) - cbw->command.highlight_thickness,
+ XtWidth(cbw), cbw->command.highlight_thickness,
+ False);
+ }
+ else {
+ int offset = cbw->command.highlight_thickness / 2;
+
+ XDrawRectangle(XtDisplay(w),XtWindow(w), rev_gc, offset, offset,
+ XtWidth(cbw) - cbw->command.highlight_thickness,
+ XtHeight(cbw) - cbw->command.highlight_thickness);
+ }
+ }
+ }
+
+ (*SuperClass->core_class.expose)(w, event, region);
+}
+
+static void
+XawCommandDestroy(Widget w)
+{
+ CommandWidget cbw = (CommandWidget)w;
+
+ /* Label will release cbw->command.normal_GC */
+ XtReleaseGC(w, cbw->command.inverse_GC);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawCommandSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ CommandWidget oldcbw = (CommandWidget)current;
+ CommandWidget cbw = (CommandWidget)cnew;
+ Boolean redisplay = False;
+
+ if (oldcbw->core.sensitive != cbw->core.sensitive && !cbw->core.sensitive) {
+ cbw->command.highlighted = HighlightNone;
+ redisplay = True;
+ }
+
+ if (cbw->command.set) {
+ unsigned int i;
+ Pixel foreground, background;
+
+ foreground = oldcbw->label.foreground;
+ background = oldcbw->core.background_pixel;
+ for (i = 0; i < *num_args; i++) {
+ if (STR_EQUAL(args[i].name, XtNforeground))
+ background = cbw->label.foreground;
+ else if (STR_EQUAL(args[i].name, XtNbackground))
+ foreground = cbw->core.background_pixel;
+ }
+ cbw->label.foreground = foreground;
+ cbw->core.background_pixel = background;
+ }
+
+ if (oldcbw->label.foreground != cbw->label.foreground
+ || oldcbw->core.background_pixel != cbw->core.background_pixel
+ || oldcbw->command.highlight_thickness
+ != cbw->command.highlight_thickness
+ || oldcbw->label.font != cbw->label.font) {
+ XtReleaseGC(cnew, cbw->command.inverse_GC);
+
+ cbw->command.normal_GC = Get_GC(cbw, cbw->label.foreground,
+ cbw->core.background_pixel);
+ cbw->command.inverse_GC = Get_GC(cbw, cbw->core.background_pixel,
+ cbw->label.foreground);
+ XtReleaseGC(cnew, cbw->label.normal_GC);
+ cbw->label.normal_GC = cbw->command.normal_GC;
+
+ redisplay = True;
+ }
+
+ if (XtIsRealized(cnew)
+ && oldcbw->command.shape_style != cbw->command.shape_style
+ && !ShapeButton(cbw, True))
+ cbw->command.shape_style = oldcbw->command.shape_style;
+
+ return (redisplay);
+}
+
+static void
+XawCommandGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
+{
+ CommandWidget cbw = (CommandWidget)w;
+ unsigned int i;
+
+ for (i = 0; i < *num_args; i++) {
+ if (STR_EQUAL(args[i].name, XtNforeground))
+ *((String*)args[i].value) = cbw->command.set ?
+ (String)cbw->core.background_pixel : (String)cbw->label.foreground;
+ else if (STR_EQUAL(args[i].name, XtNbackground))
+ *((String*)args[i].value) = cbw->command.set ?
+ (String)cbw->label.foreground : (String)cbw->core.background_pixel;
+ }
+}
+
+static void
+XawCommandClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtSetTypeConverter(XtRString, XtRShapeStyle, XmuCvtStringToShapeStyle,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRShapeStyle, XtRString, XmuCvtShapeStyleToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+static Bool
+ShapeButton(CommandWidget cbw, Bool checkRectangular)
+{
+ Dimension corner_size = 0;
+
+ if (cbw->command.shape_style == XawShapeRoundedRectangle) {
+ corner_size = XtWidth(cbw) < XtHeight(cbw) ?
+ XtWidth(cbw) : XtHeight(cbw);
+ corner_size = (corner_size * cbw->command.corner_round) / 100;
+ }
+
+ if (checkRectangular || cbw->command.shape_style != XawShapeRectangle) {
+ if (!XmuReshapeWidget((Widget)cbw, cbw->command.shape_style,
+ corner_size, corner_size)) {
+ cbw->command.shape_style = XawShapeRectangle;
+ return (False);
+ }
+ }
+
+ return (True);
+}
+
+static void
+XawCommandRealize(Widget w, Mask *valueMask, XSetWindowAttributes *attributes)
+{
+ (*commandWidgetClass->core_class.superclass->core_class.realize)
+ (w, valueMask, attributes);
+
+ ShapeButton((CommandWidget)w, False);
+}
+
+static void
+XawCommandResize(Widget w)
+{
+ if (XtIsRealized(w))
+ ShapeButton((CommandWidget)w, False);
+
+ (*commandWidgetClass->core_class.superclass->core_class.resize)(w);
+}
+
+static Bool
+ChangeSensitive(Widget w)
+{
+ CommandWidget cbw = (CommandWidget)w;
+
+ if (XtIsRealized(w)) {
+ if (XtIsSensitive(w)) {
+ if (w->core.border_pixmap != XtUnspecifiedPixmap)
+ XSetWindowBorderPixmap(XtDisplay(w), XtWindow(w),
+ w->core.border_pixmap);
+ else
+ XSetWindowBorder(XtDisplay(w), XtWindow(w),
+ w->core.border_pixel);
+ }
+ else {
+ if (cbw->simple.insensitive_border == None)
+ cbw->simple.insensitive_border =
+ XmuCreateStippledPixmap(XtScreen(w),
+ w->core.border_pixel,
+ cbw->command.set ?
+ cbw->label.foreground :
+ w->core.background_pixel,
+ w->core.depth);
+ XSetWindowBorderPixmap(XtDisplay(w), XtWindow(w),
+ cbw->simple.insensitive_border);
+ }
+ }
+
+ return (False);
+}
diff --git a/libXaw/src/Converters.c b/libXaw/src/Converters.c
index 24c01ca14..5fcda7c3b 100644
--- a/libXaw/src/Converters.c
+++ b/libXaw/src/Converters.c
@@ -1,701 +1,699 @@
-/*
- * Copyright (c) 1998 by The XFree86 Project, 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 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.
- */
-
-/* $XFree86: xc/lib/Xaw/Converters.c,v 3.13 1999/06/06 08:47:54 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/Simple.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#ifndef OLDXAW
-
-/*
- * Definitions
- */
-#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); \
-}
-
-#define string_done(value) \
-{ \
- if (toVal->addr != NULL) \
- { \
- if (toVal->size < size) \
- { \
- toVal->size = size; \
- return (False); \
- } \
- strcpy((char *)toVal->addr, (value)); \
- } \
- else \
- toVal->addr = (XPointer)(value); \
- toVal->size = size; \
- return (True); \
-}
-
-/*
- * Prototypes
- */
-static Boolean _XawCvtAtomToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtBooleanToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtBoolToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtCARD32ToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtCardinalToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtDimensionToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtDisplayListToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtFontStructToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtIntToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtPixelToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtPixmapToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtShortToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtPositionToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtStringToDisplayList(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtStringToPixmap(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean _XawCvtUnsignedCharToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static void TypeToStringNoArgsWarning(Display*, String);
-
-/*
- * Initialization
- */
-static XtConvertArgRec PixelArgs[] = {
- {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.colormap),
- sizeof(Colormap)},
-};
-
-static XtConvertArgRec DLArgs[] = {
- {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.screen),
- sizeof(Screen *)},
- {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.colormap),
- sizeof(Colormap)},
- {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.depth),
- sizeof(int)},
-};
-#endif /* OLDXAW */
-
-static String XtCToolkitError = "ToolkitError";
-static String XtNconversionError = "conversionError";
-
-#ifndef OLDXAW
-static String XtNwrongParameters = "wrongParameters";
-
-/*
- * Implementation
- */
-void
-XawInitializeDefaultConverters(void)
-{
- static Boolean first_time = True;
-
- if (first_time == False)
- return;
-
- first_time = False;
-
- /* Replace with more apropriate converters */
- XtSetTypeConverter(XtRCallback, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRColormap, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRFunction, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRPointer, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRScreen, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRStringArray, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRVisual, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRWidget, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRWidgetList, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRWindow, XtRString, _XawCvtCARD32ToString,
- NULL, 0, XtCacheNone, NULL);
-
- XtSetTypeConverter(XtRAtom, XtRString, _XawCvtAtomToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRBool, XtRString, _XawCvtBoolToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRBoolean, XtRString, _XawCvtBooleanToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRCardinal, XtRString, _XawCvtCardinalToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRDimension, XtRString, _XawCvtDimensionToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XawRDisplayList, XtRString, _XawCvtDisplayListToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRFontStruct, XtRString, _XawCvtFontStructToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRInt, XtRString, _XawCvtIntToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRPixel, XtRString, _XawCvtPixelToString,
- &PixelArgs[0], XtNumber(PixelArgs), XtCacheNone, NULL);
- XtSetTypeConverter(XtRPixmap, XtRString, _XawCvtPixmapToString,
- &DLArgs[0], XtNumber(DLArgs), XtCacheNone, NULL);
- XtSetTypeConverter(XtRPosition, XtRString, _XawCvtPositionToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRShort, XtRString, _XawCvtShortToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRString, XawRDisplayList, _XawCvtStringToDisplayList,
- &DLArgs[0], XtNumber(DLArgs), XtCacheAll, NULL);
- XtSetTypeConverter(XtRString, XtRPixmap, _XawCvtStringToPixmap,
- &DLArgs[0], XtNumber(DLArgs), XtCacheAll, NULL);
- XtSetTypeConverter(XtRUnsignedChar, XtRString, _XawCvtUnsignedCharToString,
- NULL, 0, XtCacheNone, NULL);
-}
-#endif /* OLDXAW */
-
-void
-XawTypeToStringWarning(Display *dpy, String type)
-{
- char fname[64];
- String params[1];
- Cardinal num_params;
-
- XmuSnprintf(fname, sizeof(fname), "cvt%sToString", type);
-
- params[0] = type;
- num_params = 1;
- XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
- XtNconversionError, fname, XtCToolkitError,
- "Cannot convert %s to String",
- params, &num_params);
-}
-
-#ifndef OLDXAW
-static void
-TypeToStringNoArgsWarning(Display *dpy, String type)
-{
- char fname[64];
- String params[1];
- Cardinal num_params;
-
- XmuSnprintf(fname, sizeof(fname), "cvt%sToString", type);
-
- params[0] = type;
- num_params = 1;
- XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
- XtNconversionError, fname,
- XtCToolkitError,
- "%s to String conversion needs no extra arguments",
- params, &num_params);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtBooleanToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[6];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRBoolean);
-
- XmuSnprintf(buffer, sizeof(buffer), "%s",
- *(Boolean *)fromVal->addr ? XtEtrue : XtEfalse);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtBoolToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[6];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRBool);
-
- XmuSnprintf(buffer, sizeof(buffer), "%s",
- *(Bool *)fromVal->addr ? XtEtrue : XtEfalse);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtPositionToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[7];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRPosition);
-
- XmuSnprintf(buffer, sizeof(buffer), "%d", *(Position *)fromVal->addr);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtShortToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[7];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRShort);
-
- XmuSnprintf(buffer, sizeof(buffer), "%d", *(short *)fromVal->addr);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtDimensionToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[6];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRDimension);
-
- XmuSnprintf(buffer, sizeof(buffer), "%u", *(Dimension *)fromVal->addr);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtCARD32ToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[11];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, "CARD32");
-
- XmuSnprintf(buffer, sizeof(buffer), "0x%08hx", *(int *)fromVal->addr);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtIntToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[12];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRInt);
-
- XmuSnprintf(buffer, sizeof(buffer), "%d", *(int *)fromVal->addr);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtCardinalToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[11];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRCardinal);
-
- XmuSnprintf(buffer, sizeof(buffer), "%u", *(Cardinal *)fromVal->addr);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtAtomToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char *buffer = NULL;
- static char *nullatom = "NULL";
- Cardinal size;
- Atom atom;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRAtom);
-
- if (buffer && buffer != nullatom)
- XFree(buffer);
-
- atom = *(Atom *)fromVal[0].addr;
- if (atom == 0)
- buffer = nullatom;
- else if ((buffer = XGetAtomName(dpy, *(Atom *)fromVal[0].addr)) == NULL)
- {
- XawTypeToStringWarning(dpy, XtRAtom);
- toVal->addr = NULL;
- toVal->size = sizeof(String);
- return (False);
- }
-
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtPixelToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[19];
- Cardinal size;
- Colormap colormap;
- XColor color;
-
- if (*num_args != 1)
- {
- XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
- XtNwrongParameters, "cvtPixelToString",
- XtCToolkitError,
- "Pixel to String conversion needs colormap argument",
- NULL, NULL);
- return (False);
- }
-
- colormap = *(Colormap *)args[0].addr;
- color.pixel = *(Pixel *)fromVal->addr;
-
- /* Note:
- * If we know the visual type, we can calculate the xcolor
- * without asking Xlib.
- */
- XQueryColor(dpy, colormap, &color);
- XmuSnprintf(buffer, sizeof(buffer), "rgb:%04hx/%04hx/%04hx",
- color.red, color.green, color.blue);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtFontStructToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[128];
- Cardinal size;
- Atom atom;
- unsigned long value;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRFontStruct);
-
- if ((atom = XInternAtom(dpy, "FONT", True)) == None)
- return (False);
-
- size = 0;
-
- if (XGetFontProperty(*(XFontStruct **)fromVal->addr, atom, &value))
- {
- char *tmp = XGetAtomName(dpy, value);
-
- if (tmp)
- {
- XmuSnprintf(buffer, sizeof(buffer), "%s", tmp);
- size = strlen(tmp);
- XFree(tmp);
- }
- }
-
- if (size)
- {
- ++size;
- string_done(buffer);
- }
-
- XawTypeToStringWarning(dpy, XtRFontStruct);
-
- return (False);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtUnsignedCharToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char buffer[4];
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XtRUnsignedChar);
-
- XmuSnprintf(buffer, sizeof(buffer), "%u",
- *(unsigned char *)fromVal->addr);
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtStringToDisplayList(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- XawDisplayList *dlist;
- Screen *screen;
- Colormap colormap;
- int depth;
- String commands;
-
- if (*num_args != 3)
- {
- XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
- XtNwrongParameters, "cvtStringToDisplayList",
- XtCToolkitError,
- "String to DisplayList conversion needs screen, "
- "colormap, and depth arguments",
- NULL, NULL);
- return (False);
- }
-
- screen = *(Screen **)args[0].addr;
- colormap = *(Colormap *)args[1].addr;
- depth = *(int *)args[2].addr;
-
- commands = (String)(fromVal[0].addr);
-
- dlist = XawCreateDisplayList(commands, screen, colormap, depth);
-
- if (!dlist)
- {
- XtDisplayStringConversionWarning(dpy, (String)fromVal->addr,
- XawRDisplayList);
- toVal->addr = NULL;
- toVal->size = sizeof(XawDisplayList*);
- return (False);
- }
-
- done(XawDisplayList*, dlist);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtDisplayListToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- String buffer;
- Cardinal size;
-
- if (*num_args != 0)
- TypeToStringNoArgsWarning(dpy, XawRDisplayList);
-
- buffer = XawDisplayListString(*(XawDisplayList **)(fromVal[0].addr));
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtStringToPixmap(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- XawPixmap *xaw_pixmap;
- Pixmap pixmap;
- Screen *screen;
- Colormap colormap;
- int depth;
- String name;
-
- if (*num_args != 3)
- {
- XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
- XtNwrongParameters, "cvtStringToPixmap",
- XtCToolkitError,
- "String to Pixmap conversion needs screen, "
- "colormap, and depth arguments",
- NULL, NULL);
- return (False);
- }
-
- screen = *(Screen **)args[0].addr;
- colormap = *(Colormap *)args[1].addr;
- depth = *(int *)args[2].addr;
-
- name = (String)(fromVal[0].addr);
-
- if (XmuCompareISOLatin1(name, "None") == 0)
- pixmap = None;
- else if (XmuCompareISOLatin1(name, "ParentRelative") == 0)
- pixmap = ParentRelative;
- else if (XmuCompareISOLatin1(name, "XtUnspecifiedPixmap") == 0)
- pixmap = XtUnspecifiedPixmap;
- else
- {
- xaw_pixmap = XawLoadPixmap(name, screen, colormap, depth);
- if (!xaw_pixmap)
- {
- XtDisplayStringConversionWarning(dpy, (String)fromVal->addr,
- XtRPixmap);
- toVal->addr = (XtPointer)XtUnspecifiedPixmap;
- toVal->size = sizeof(Pixmap);
- return (False);
- }
- else
- pixmap = xaw_pixmap->pixmap;
- }
-
- done(Pixmap, pixmap);
-}
-
-/*ARGSUSED*/
-static Boolean
-_XawCvtPixmapToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- XawPixmap *xaw_pixmap;
- Pixmap pixmap;
- Screen *screen;
- Colormap colormap;
- int depth;
- String buffer = NULL;
- Cardinal size;
-
- if (*num_args != 3)
- {
- XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
- XtNwrongParameters, "cvtPixmapToString",
- XtCToolkitError,
- "Pixmap to String conversion needs screen, "
- "colormap, and depth arguments",
- NULL, NULL);
- return (False);
- }
-
- screen = *(Screen **)args[0].addr;
- colormap = *(Colormap *)args[1].addr;
- depth = *(int *)args[2].addr;
-
- pixmap = *(Pixmap *)(fromVal[0].addr);
-
- switch (pixmap)
- {
- case None:
- buffer = "None";
- break;
- case ParentRelative:
- buffer = "ParentRelative";
- break;
- case XtUnspecifiedPixmap:
- buffer = "XtUnspecifiedPixmap";
- break;
- default:
- xaw_pixmap = XawPixmapFromXPixmap(pixmap, screen, colormap, depth);
- if (xaw_pixmap)
- buffer = xaw_pixmap->name;
- break;
- }
-
- if (!buffer)
- /* Bad Pixmap or Pixmap was not loaded by XawLoadPixmap() */
- return (_XawCvtCARD32ToString(dpy, args, num_args, fromVal, toVal,
- converter_data));
-
- size = strlen(buffer) + 1;
-
- string_done(buffer);
-}
-
-#endif /* OLDXAW */
+/*
+ * Copyright (c) 1998 by The XFree86 Project, 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/Simple.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#ifndef OLDXAW
+
+/*
+ * Definitions
+ */
+#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); \
+}
+
+#define string_done(value) \
+{ \
+ if (toVal->addr != NULL) \
+ { \
+ if (toVal->size < size) \
+ { \
+ toVal->size = size; \
+ return (False); \
+ } \
+ strcpy((char *)toVal->addr, (value)); \
+ } \
+ else \
+ toVal->addr = (XPointer)(value); \
+ toVal->size = size; \
+ return (True); \
+}
+
+/*
+ * Prototypes
+ */
+static Boolean _XawCvtAtomToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtBooleanToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtBoolToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtCARD32ToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtCardinalToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtDimensionToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtDisplayListToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtFontStructToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtIntToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtPixelToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtPixmapToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtShortToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtPositionToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtStringToDisplayList(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtStringToPixmap(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean _XawCvtUnsignedCharToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static void TypeToStringNoArgsWarning(Display*, String);
+
+/*
+ * Initialization
+ */
+static XtConvertArgRec PixelArgs[] = {
+ {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.colormap),
+ sizeof(Colormap)},
+};
+
+static XtConvertArgRec DLArgs[] = {
+ {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.screen),
+ sizeof(Screen *)},
+ {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.colormap),
+ sizeof(Colormap)},
+ {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.depth),
+ sizeof(int)},
+};
+#endif /* OLDXAW */
+
+static String XtCToolkitError = "ToolkitError";
+static String XtNconversionError = "conversionError";
+
+#ifndef OLDXAW
+static String XtNwrongParameters = "wrongParameters";
+
+/*
+ * Implementation
+ */
+void
+XawInitializeDefaultConverters(void)
+{
+ static Boolean first_time = True;
+
+ if (first_time == False)
+ return;
+
+ first_time = False;
+
+ /* Replace with more apropriate converters */
+ XtSetTypeConverter(XtRCallback, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRColormap, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRFunction, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRPointer, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRScreen, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRStringArray, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRVisual, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRWidget, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRWidgetList, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRWindow, XtRString, _XawCvtCARD32ToString,
+ NULL, 0, XtCacheNone, NULL);
+
+ XtSetTypeConverter(XtRAtom, XtRString, _XawCvtAtomToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRBool, XtRString, _XawCvtBoolToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRBoolean, XtRString, _XawCvtBooleanToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRCardinal, XtRString, _XawCvtCardinalToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRDimension, XtRString, _XawCvtDimensionToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XawRDisplayList, XtRString, _XawCvtDisplayListToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRFontStruct, XtRString, _XawCvtFontStructToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRInt, XtRString, _XawCvtIntToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRPixel, XtRString, _XawCvtPixelToString,
+ &PixelArgs[0], XtNumber(PixelArgs), XtCacheNone, NULL);
+ XtSetTypeConverter(XtRPixmap, XtRString, _XawCvtPixmapToString,
+ &DLArgs[0], XtNumber(DLArgs), XtCacheNone, NULL);
+ XtSetTypeConverter(XtRPosition, XtRString, _XawCvtPositionToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRShort, XtRString, _XawCvtShortToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRString, XawRDisplayList, _XawCvtStringToDisplayList,
+ &DLArgs[0], XtNumber(DLArgs), XtCacheAll, NULL);
+ XtSetTypeConverter(XtRString, XtRPixmap, _XawCvtStringToPixmap,
+ &DLArgs[0], XtNumber(DLArgs), XtCacheAll, NULL);
+ XtSetTypeConverter(XtRUnsignedChar, XtRString, _XawCvtUnsignedCharToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+#endif /* OLDXAW */
+
+void
+XawTypeToStringWarning(Display *dpy, String type)
+{
+ char fname[64];
+ String params[1];
+ Cardinal num_params;
+
+ XmuSnprintf(fname, sizeof(fname), "cvt%sToString", type);
+
+ params[0] = type;
+ num_params = 1;
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ XtNconversionError, fname, XtCToolkitError,
+ "Cannot convert %s to String",
+ params, &num_params);
+}
+
+#ifndef OLDXAW
+static void
+TypeToStringNoArgsWarning(Display *dpy, String type)
+{
+ char fname[64];
+ String params[1];
+ Cardinal num_params;
+
+ XmuSnprintf(fname, sizeof(fname), "cvt%sToString", type);
+
+ params[0] = type;
+ num_params = 1;
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ XtNconversionError, fname,
+ XtCToolkitError,
+ "%s to String conversion needs no extra arguments",
+ params, &num_params);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtBooleanToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[6];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRBoolean);
+
+ XmuSnprintf(buffer, sizeof(buffer), "%s",
+ *(Boolean *)fromVal->addr ? XtEtrue : XtEfalse);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtBoolToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[6];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRBool);
+
+ XmuSnprintf(buffer, sizeof(buffer), "%s",
+ *(Bool *)fromVal->addr ? XtEtrue : XtEfalse);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtPositionToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[7];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRPosition);
+
+ XmuSnprintf(buffer, sizeof(buffer), "%d", *(Position *)fromVal->addr);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtShortToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[7];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRShort);
+
+ XmuSnprintf(buffer, sizeof(buffer), "%d", *(short *)fromVal->addr);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtDimensionToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[6];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRDimension);
+
+ XmuSnprintf(buffer, sizeof(buffer), "%u", *(Dimension *)fromVal->addr);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtCARD32ToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[11];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, "CARD32");
+
+ XmuSnprintf(buffer, sizeof(buffer), "0x%08hx", *(int *)fromVal->addr);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtIntToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[12];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRInt);
+
+ XmuSnprintf(buffer, sizeof(buffer), "%d", *(int *)fromVal->addr);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtCardinalToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[11];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRCardinal);
+
+ XmuSnprintf(buffer, sizeof(buffer), "%u", *(Cardinal *)fromVal->addr);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtAtomToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char *buffer = NULL;
+ static char *nullatom = "NULL";
+ Cardinal size;
+ Atom atom;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRAtom);
+
+ if (buffer && buffer != nullatom)
+ XFree(buffer);
+
+ atom = *(Atom *)fromVal[0].addr;
+ if (atom == 0)
+ buffer = nullatom;
+ else if ((buffer = XGetAtomName(dpy, *(Atom *)fromVal[0].addr)) == NULL)
+ {
+ XawTypeToStringWarning(dpy, XtRAtom);
+ toVal->addr = NULL;
+ toVal->size = sizeof(String);
+ return (False);
+ }
+
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtPixelToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[19];
+ Cardinal size;
+ Colormap colormap;
+ XColor color;
+
+ if (*num_args != 1)
+ {
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ XtNwrongParameters, "cvtPixelToString",
+ XtCToolkitError,
+ "Pixel to String conversion needs colormap argument",
+ NULL, NULL);
+ return (False);
+ }
+
+ colormap = *(Colormap *)args[0].addr;
+ color.pixel = *(Pixel *)fromVal->addr;
+
+ /* Note:
+ * If we know the visual type, we can calculate the xcolor
+ * without asking Xlib.
+ */
+ XQueryColor(dpy, colormap, &color);
+ XmuSnprintf(buffer, sizeof(buffer), "rgb:%04hx/%04hx/%04hx",
+ color.red, color.green, color.blue);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtFontStructToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[128];
+ Cardinal size;
+ Atom atom;
+ unsigned long value;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRFontStruct);
+
+ if ((atom = XInternAtom(dpy, "FONT", True)) == None)
+ return (False);
+
+ size = 0;
+
+ if (XGetFontProperty(*(XFontStruct **)fromVal->addr, atom, &value))
+ {
+ char *tmp = XGetAtomName(dpy, value);
+
+ if (tmp)
+ {
+ XmuSnprintf(buffer, sizeof(buffer), "%s", tmp);
+ size = strlen(tmp);
+ XFree(tmp);
+ }
+ }
+
+ if (size)
+ {
+ ++size;
+ string_done(buffer);
+ }
+
+ XawTypeToStringWarning(dpy, XtRFontStruct);
+
+ return (False);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtUnsignedCharToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char buffer[4];
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XtRUnsignedChar);
+
+ XmuSnprintf(buffer, sizeof(buffer), "%u",
+ *(unsigned char *)fromVal->addr);
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtStringToDisplayList(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ XawDisplayList *dlist;
+ Screen *screen;
+ Colormap colormap;
+ int depth;
+ String commands;
+
+ if (*num_args != 3)
+ {
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ XtNwrongParameters, "cvtStringToDisplayList",
+ XtCToolkitError,
+ "String to DisplayList conversion needs screen, "
+ "colormap, and depth arguments",
+ NULL, NULL);
+ return (False);
+ }
+
+ screen = *(Screen **)args[0].addr;
+ colormap = *(Colormap *)args[1].addr;
+ depth = *(int *)args[2].addr;
+
+ commands = (String)(fromVal[0].addr);
+
+ dlist = XawCreateDisplayList(commands, screen, colormap, depth);
+
+ if (!dlist)
+ {
+ XtDisplayStringConversionWarning(dpy, (String)fromVal->addr,
+ XawRDisplayList);
+ toVal->addr = NULL;
+ toVal->size = sizeof(XawDisplayList*);
+ return (False);
+ }
+
+ done(XawDisplayList*, dlist);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtDisplayListToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ String buffer;
+ Cardinal size;
+
+ if (*num_args != 0)
+ TypeToStringNoArgsWarning(dpy, XawRDisplayList);
+
+ buffer = XawDisplayListString(*(XawDisplayList **)(fromVal[0].addr));
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtStringToPixmap(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ XawPixmap *xaw_pixmap;
+ Pixmap pixmap;
+ Screen *screen;
+ Colormap colormap;
+ int depth;
+ String name;
+
+ if (*num_args != 3)
+ {
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ XtNwrongParameters, "cvtStringToPixmap",
+ XtCToolkitError,
+ "String to Pixmap conversion needs screen, "
+ "colormap, and depth arguments",
+ NULL, NULL);
+ return (False);
+ }
+
+ screen = *(Screen **)args[0].addr;
+ colormap = *(Colormap *)args[1].addr;
+ depth = *(int *)args[2].addr;
+
+ name = (String)(fromVal[0].addr);
+
+ if (XmuCompareISOLatin1(name, "None") == 0)
+ pixmap = None;
+ else if (XmuCompareISOLatin1(name, "ParentRelative") == 0)
+ pixmap = ParentRelative;
+ else if (XmuCompareISOLatin1(name, "XtUnspecifiedPixmap") == 0)
+ pixmap = XtUnspecifiedPixmap;
+ else
+ {
+ xaw_pixmap = XawLoadPixmap(name, screen, colormap, depth);
+ if (!xaw_pixmap)
+ {
+ XtDisplayStringConversionWarning(dpy, (String)fromVal->addr,
+ XtRPixmap);
+ toVal->addr = (XtPointer)XtUnspecifiedPixmap;
+ toVal->size = sizeof(Pixmap);
+ return (False);
+ }
+ else
+ pixmap = xaw_pixmap->pixmap;
+ }
+
+ done(Pixmap, pixmap);
+}
+
+/*ARGSUSED*/
+static Boolean
+_XawCvtPixmapToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ XawPixmap *xaw_pixmap;
+ Pixmap pixmap;
+ Screen *screen;
+ Colormap colormap;
+ int depth;
+ String buffer = NULL;
+ Cardinal size;
+
+ if (*num_args != 3)
+ {
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ XtNwrongParameters, "cvtPixmapToString",
+ XtCToolkitError,
+ "Pixmap to String conversion needs screen, "
+ "colormap, and depth arguments",
+ NULL, NULL);
+ return (False);
+ }
+
+ screen = *(Screen **)args[0].addr;
+ colormap = *(Colormap *)args[1].addr;
+ depth = *(int *)args[2].addr;
+
+ pixmap = *(Pixmap *)(fromVal[0].addr);
+
+ switch (pixmap)
+ {
+ case None:
+ buffer = "None";
+ break;
+ case ParentRelative:
+ buffer = "ParentRelative";
+ break;
+ case XtUnspecifiedPixmap:
+ buffer = "XtUnspecifiedPixmap";
+ break;
+ default:
+ xaw_pixmap = XawPixmapFromXPixmap(pixmap, screen, colormap, depth);
+ if (xaw_pixmap)
+ buffer = xaw_pixmap->name;
+ break;
+ }
+
+ if (!buffer)
+ /* Bad Pixmap or Pixmap was not loaded by XawLoadPixmap() */
+ return (_XawCvtCARD32ToString(dpy, args, num_args, fromVal, toVal,
+ converter_data));
+
+ size = strlen(buffer) + 1;
+
+ string_done(buffer);
+}
+
+#endif /* OLDXAW */
diff --git a/libXaw/src/Dialog.c b/libXaw/src/Dialog.c
index 62d91b883..7bb232b12 100644
--- a/libXaw/src/Dialog.c
+++ b/libXaw/src/Dialog.c
@@ -1,463 +1,460 @@
-/* $Xorg: Dialog.c,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Dialog.c,v 1.7 2001/01/17 19:42:26 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xos.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/AsciiText.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/Command.h>
-#include <X11/Xaw/Label.h>
-#include <X11/Xaw/DialogP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * After we have set the string in the value widget we set the
- * string to a magic value. So that when a SetValues request is made
- * on the dialog value we will notice it, and reset the string
- */
-#define MAGIC_VALUE ((char *)3)
-
-#define streq(a,b) (strcmp((a), (b)) == 0)
-
-/*
- * Class Methods
- */
-static void XawDialogConstraintInitialize(Widget, Widget,
- ArgList, Cardinal*);
-static void XawDialogGetValuesHook(Widget, ArgList, Cardinal*);
-static void XawDialogInitialize(Widget, Widget, ArgList, Cardinal*);
-static Boolean XawDialogSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void CreateDialogValueWidget(Widget);
-
-/*
- * Initialization
- */
-static XtResource resources[] = {
- {
- XtNlabel,
- XtCLabel,
- XtRString,
- sizeof(String),
- XtOffsetOf(DialogRec, dialog.label),
- XtRString,
- NULL
- },
- {
- XtNvalue,
- XtCValue,
- XtRString,
- sizeof(String),
- XtOffsetOf(DialogRec, dialog.value),
- XtRString,
- NULL
- },
- {
- XtNicon,
- XtCIcon,
- XtRBitmap,
- sizeof(Pixmap),
- XtOffsetOf(DialogRec, dialog.icon),
- XtRImmediate,
- NULL
- },
-};
-
-DialogClassRec dialogClassRec = {
- /* core */
- {
- (WidgetClass)&formClassRec, /* superclass */
- "Dialog", /* class_name */
- sizeof(DialogRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part init */
- False, /* class_inited */
- XawDialogInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XtInheritResize, /* resize */
- XtInheritExpose, /* expose */
- XawDialogSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- XawDialogGetValuesHook, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* composite */
- {
- XtInheritGeometryManager, /* geometry_manager */
- XtInheritChangeManaged, /* change_managed */
- XtInheritInsertChild, /* insert_child */
- XtInheritDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- /* constraint */
- {
- NULL, /* subresourses */
- 0, /* subresource_count */
- sizeof(DialogConstraintsRec), /* constraint_size */
- XawDialogConstraintInitialize, /* initialize */
- NULL, /* destroy */
- NULL, /* set_values */
- NULL, /* extension */
- },
- /* form */
- {
- XtInheritLayout, /* layout */
- },
- /* dialog */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass dialogWidgetClass = (WidgetClass)&dialogClassRec;
-
-/*
- * Implementation
- */
-/*ARGSUSED*/
-static void
-XawDialogInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- DialogWidget dw = (DialogWidget)cnew;
- Arg arglist[9];
- Cardinal arg_cnt = 0;
-
- XtSetArg(arglist[arg_cnt], XtNborderWidth, 0); arg_cnt++;
- XtSetArg(arglist[arg_cnt], XtNleft, XtChainLeft); arg_cnt++;
-
- if (dw->dialog.icon != (Pixmap)0) {
- XtSetArg(arglist[arg_cnt], XtNbitmap, dw->dialog.icon); arg_cnt++;
- XtSetArg(arglist[arg_cnt], XtNright, XtChainLeft); arg_cnt++;
- dw->dialog.iconW = XtCreateManagedWidget("icon", labelWidgetClass,
- cnew, arglist, arg_cnt);
- arg_cnt = 2;
- XtSetArg(arglist[arg_cnt], XtNfromHoriz, dw->dialog.iconW); arg_cnt++;
- }
- else
- dw->dialog.iconW = NULL;
-
- XtSetArg(arglist[arg_cnt], XtNlabel, dw->dialog.label); arg_cnt++;
- XtSetArg(arglist[arg_cnt], XtNright, XtChainRight); arg_cnt++;
-
- dw->dialog.labelW = XtCreateManagedWidget("label", labelWidgetClass,
- cnew, arglist, arg_cnt);
-
- if (dw->dialog.iconW != NULL &&
- XtHeight(dw->dialog.labelW) < XtHeight(dw->dialog.iconW)) {
- XtSetArg(arglist[0], XtNheight, XtHeight(dw->dialog.iconW));
- XtSetValues(dw->dialog.labelW, arglist, 1);
- }
- if (dw->dialog.value != NULL)
- CreateDialogValueWidget((Widget)dw);
- else
- dw->dialog.valueW = NULL;
-}
-
-/*ARGSUSED*/
-static void
-XawDialogConstraintInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- DialogWidget dw = (DialogWidget)cnew->core.parent;
- DialogConstraints constraint = (DialogConstraints)cnew->core.constraints;
-
- if (!XtIsSubclass(cnew, commandWidgetClass)) /* if not a button */
- return; /* then just use defaults */
-
- constraint->form.left = constraint->form.right = XtChainLeft;
- if (dw->dialog.valueW == NULL)
- constraint->form.vert_base = dw->dialog.labelW;
- else
- constraint->form.vert_base = dw->dialog.valueW;
-
- if (dw->composite.num_children > 1) {
- WidgetList children = dw->composite.children;
- Widget *childP;
-
- for (childP = children + dw->composite.num_children - 1;
- childP >= children; childP-- ) {
- if (*childP == dw->dialog.labelW || *childP == dw->dialog.valueW)
- break;
- if (XtIsManaged(*childP) &&
- XtIsSubclass(*childP, commandWidgetClass)) {
- constraint->form.horiz_base = *childP;
- break;
- }
- }
- }
-}
-
-#define ICON 0
-#define LABEL 1
-#define NUM_CHECKS 2
-/*ARGSUSED*/
-static Boolean
-XawDialogSetValues(Widget current, Widget request, Widget cnew,
- ArgList in_args, Cardinal *in_num_args)
-{
- DialogWidget w = (DialogWidget)cnew;
- DialogWidget old = (DialogWidget)current;
- Arg args[5];
- Cardinal num_args;
- unsigned int i;
- Bool checks[NUM_CHECKS];
-
- for (i = 0; i < NUM_CHECKS; i++)
- checks[i] = False;
-
- for (i = 0; i < *in_num_args; i++) {
- if (streq(XtNicon, in_args[i].name))
- checks[ICON] = True;
- else if (streq(XtNlabel, in_args[i].name))
- checks[LABEL] = True;
- }
-
- if (checks[ICON]) {
- if (w->dialog.icon != 0) {
- XtSetArg(args[0], XtNbitmap, w->dialog.icon);
- if (old->dialog.iconW != NULL)
- XtSetValues(old->dialog.iconW, args, 1);
- else {
- XtSetArg(args[1], XtNborderWidth, 0);
- XtSetArg(args[2], XtNleft, XtChainLeft);
- XtSetArg(args[3], XtNright, XtChainLeft);
- w->dialog.iconW = XtCreateWidget("icon", labelWidgetClass,
- cnew, args, 4);
- ((DialogConstraints)w->dialog.labelW->core.constraints)->
- form.horiz_base = w->dialog.iconW;
- XtManageChild(w->dialog.iconW);
- }
- }
- else if (old->dialog.icon != 0) {
- ((DialogConstraints)w->dialog.labelW->core.constraints)->
- form.horiz_base = NULL;
- XtDestroyWidget(old->dialog.iconW);
- w->dialog.iconW = NULL;
- }
- }
-
- if (checks[LABEL]) {
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, w->dialog.label); num_args++;
- if (w->dialog.iconW != NULL &&
- XtHeight(w->dialog.labelW) <= XtHeight(w->dialog.iconW)) {
- XtSetArg(args[num_args], XtNheight, XtHeight(w->dialog.iconW));
- num_args++;
- }
- XtSetValues(w->dialog.labelW, args, num_args);
- }
-
- if (w->dialog.value != old->dialog.value) {
- if (w->dialog.value == NULL) /* only get here if it
- wasn't NULL before */
- XtDestroyWidget(old->dialog.valueW);
- else if (old->dialog.value == NULL) { /* create a new value widget */
- XtWidth(w) = XtWidth(old);
- XtHeight(w) = XtHeight(old);
- CreateDialogValueWidget(cnew);
- }
- else { /* Widget ok, just change string */
- Arg nargs[1];
-
- XtSetArg(nargs[0], XtNstring, w->dialog.value);
- XtSetValues(w->dialog.valueW, nargs, 1);
- w->dialog.value = MAGIC_VALUE;
- }
- }
-
- return (False);
-}
-
-/*
- * Function:
- * XawDialogGetValuesHook
- *
- * Parameters:
- * w - Dialog Widget
- * args - argument list
- * num_args - number of args
- *
- * Description:
- * This is a get values hook routine that gets the values in the dialog.
- */
-static void
-XawDialogGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
-{
- Arg a[1];
- String s;
- DialogWidget src = (DialogWidget)w;
- unsigned int i;
-
- for (i = 0; i < *num_args; i++)
- if (streq(args[i].name, XtNvalue)) {
- XtSetArg(a[0], XtNstring, &s);
- XtGetValues(src->dialog.valueW, a, 1);
- *((char **)args[i].value) = s;
- }
- else if (streq(args[i].name, XtNlabel)) {
- XtSetArg(a[0], XtNlabel, &s);
- XtGetValues(src->dialog.labelW, a, 1);
- *((char **)args[i].value) = s;
- }
-}
-
-/*
- * Function:
- * CreateDialogValueWidget
- *
- * Parameters:
- * w - dialog widget
- *
- * Description:
- * Creates the dialog widgets value widget.
- *
- * Note
- * Must be called only when w->dialog.value is non-nil
- */
-static void
-CreateDialogValueWidget(Widget w)
-{
- DialogWidget dw = (DialogWidget)w;
- Arg arglist[10];
- Cardinal num_args = 0;
-
- XtSetArg(arglist[num_args], XtNstring, dw->dialog.value); num_args++;
- XtSetArg(arglist[num_args], XtNresizable, True); num_args++;
- XtSetArg(arglist[num_args], XtNeditType, XawtextEdit); num_args++;
- XtSetArg(arglist[num_args], XtNfromVert, dw->dialog.labelW); num_args++;
- XtSetArg(arglist[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(arglist[num_args], XtNright, XtChainRight); num_args++;
-
- dw->dialog.valueW = XtCreateWidget("value", asciiTextWidgetClass,
- w, arglist, num_args);
-
- /* if the value widget is being added after buttons,
- * then the buttons need new layout constraints
- */
- if (dw->composite.num_children > 1) {
- WidgetList children = dw->composite.children;
- Widget *childP;
-
- for (childP = children + dw->composite.num_children - 1;
- childP >= children; childP-- ) {
- if (*childP == dw->dialog.labelW || *childP == dw->dialog.valueW)
- continue;
-
- if (XtIsManaged(*childP) &&
- XtIsSubclass(*childP, commandWidgetClass)) {
- ((DialogConstraints)(*childP)->core.constraints)->
- form.vert_base = dw->dialog.valueW;
- }
- }
- }
- XtManageChild(dw->dialog.valueW);
-
- /*
- * Value widget gets the keyboard focus
- */
- XtSetKeyboardFocus(w, dw->dialog.valueW);
- dw->dialog.value = MAGIC_VALUE;
-}
-
-void
-XawDialogAddButton(Widget dialog, _Xconst char* name, XtCallbackProc function,
- XtPointer param)
-{
- /*
- * Correct Constraints are all set in ConstraintInitialize()
- */
- Widget button;
-
- button = XtCreateManagedWidget(name, commandWidgetClass, dialog, NULL, 0);
-
- if (function != NULL) /* don't add NULL callback func */
- XtAddCallback(button, XtNcallback, function, param);
-}
-
-char *
-XawDialogGetValueString(Widget w)
-{
- Arg args[1];
- char *value;
-
- XtSetArg(args[0], XtNstring, &value);
- XtGetValues(((DialogWidget)w)->dialog.valueW, args, 1);
-
- return(value);
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/Command.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/DialogP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * After we have set the string in the value widget we set the
+ * string to a magic value. So that when a SetValues request is made
+ * on the dialog value we will notice it, and reset the string
+ */
+#define MAGIC_VALUE ((char *)3)
+
+#define streq(a,b) (strcmp((a), (b)) == 0)
+
+/*
+ * Class Methods
+ */
+static void XawDialogConstraintInitialize(Widget, Widget,
+ ArgList, Cardinal*);
+static void XawDialogGetValuesHook(Widget, ArgList, Cardinal*);
+static void XawDialogInitialize(Widget, Widget, ArgList, Cardinal*);
+static Boolean XawDialogSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void CreateDialogValueWidget(Widget);
+
+/*
+ * Initialization
+ */
+static XtResource resources[] = {
+ {
+ XtNlabel,
+ XtCLabel,
+ XtRString,
+ sizeof(String),
+ XtOffsetOf(DialogRec, dialog.label),
+ XtRString,
+ NULL
+ },
+ {
+ XtNvalue,
+ XtCValue,
+ XtRString,
+ sizeof(String),
+ XtOffsetOf(DialogRec, dialog.value),
+ XtRString,
+ NULL
+ },
+ {
+ XtNicon,
+ XtCIcon,
+ XtRBitmap,
+ sizeof(Pixmap),
+ XtOffsetOf(DialogRec, dialog.icon),
+ XtRImmediate,
+ NULL
+ },
+};
+
+DialogClassRec dialogClassRec = {
+ /* core */
+ {
+ (WidgetClass)&formClassRec, /* superclass */
+ "Dialog", /* class_name */
+ sizeof(DialogRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part init */
+ False, /* class_inited */
+ XawDialogInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XtInheritResize, /* resize */
+ XtInheritExpose, /* expose */
+ XawDialogSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ XawDialogGetValuesHook, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* composite */
+ {
+ XtInheritGeometryManager, /* geometry_manager */
+ XtInheritChangeManaged, /* change_managed */
+ XtInheritInsertChild, /* insert_child */
+ XtInheritDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ /* constraint */
+ {
+ NULL, /* subresourses */
+ 0, /* subresource_count */
+ sizeof(DialogConstraintsRec), /* constraint_size */
+ XawDialogConstraintInitialize, /* initialize */
+ NULL, /* destroy */
+ NULL, /* set_values */
+ NULL, /* extension */
+ },
+ /* form */
+ {
+ XtInheritLayout, /* layout */
+ },
+ /* dialog */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass dialogWidgetClass = (WidgetClass)&dialogClassRec;
+
+/*
+ * Implementation
+ */
+/*ARGSUSED*/
+static void
+XawDialogInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ DialogWidget dw = (DialogWidget)cnew;
+ Arg arglist[9];
+ Cardinal arg_cnt = 0;
+
+ XtSetArg(arglist[arg_cnt], XtNborderWidth, 0); arg_cnt++;
+ XtSetArg(arglist[arg_cnt], XtNleft, XtChainLeft); arg_cnt++;
+
+ if (dw->dialog.icon != (Pixmap)0) {
+ XtSetArg(arglist[arg_cnt], XtNbitmap, dw->dialog.icon); arg_cnt++;
+ XtSetArg(arglist[arg_cnt], XtNright, XtChainLeft); arg_cnt++;
+ dw->dialog.iconW = XtCreateManagedWidget("icon", labelWidgetClass,
+ cnew, arglist, arg_cnt);
+ arg_cnt = 2;
+ XtSetArg(arglist[arg_cnt], XtNfromHoriz, dw->dialog.iconW); arg_cnt++;
+ }
+ else
+ dw->dialog.iconW = NULL;
+
+ XtSetArg(arglist[arg_cnt], XtNlabel, dw->dialog.label); arg_cnt++;
+ XtSetArg(arglist[arg_cnt], XtNright, XtChainRight); arg_cnt++;
+
+ dw->dialog.labelW = XtCreateManagedWidget("label", labelWidgetClass,
+ cnew, arglist, arg_cnt);
+
+ if (dw->dialog.iconW != NULL &&
+ XtHeight(dw->dialog.labelW) < XtHeight(dw->dialog.iconW)) {
+ XtSetArg(arglist[0], XtNheight, XtHeight(dw->dialog.iconW));
+ XtSetValues(dw->dialog.labelW, arglist, 1);
+ }
+ if (dw->dialog.value != NULL)
+ CreateDialogValueWidget((Widget)dw);
+ else
+ dw->dialog.valueW = NULL;
+}
+
+/*ARGSUSED*/
+static void
+XawDialogConstraintInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ DialogWidget dw = (DialogWidget)cnew->core.parent;
+ DialogConstraints constraint = (DialogConstraints)cnew->core.constraints;
+
+ if (!XtIsSubclass(cnew, commandWidgetClass)) /* if not a button */
+ return; /* then just use defaults */
+
+ constraint->form.left = constraint->form.right = XtChainLeft;
+ if (dw->dialog.valueW == NULL)
+ constraint->form.vert_base = dw->dialog.labelW;
+ else
+ constraint->form.vert_base = dw->dialog.valueW;
+
+ if (dw->composite.num_children > 1) {
+ WidgetList children = dw->composite.children;
+ Widget *childP;
+
+ for (childP = children + dw->composite.num_children - 1;
+ childP >= children; childP-- ) {
+ if (*childP == dw->dialog.labelW || *childP == dw->dialog.valueW)
+ break;
+ if (XtIsManaged(*childP) &&
+ XtIsSubclass(*childP, commandWidgetClass)) {
+ constraint->form.horiz_base = *childP;
+ break;
+ }
+ }
+ }
+}
+
+#define ICON 0
+#define LABEL 1
+#define NUM_CHECKS 2
+/*ARGSUSED*/
+static Boolean
+XawDialogSetValues(Widget current, Widget request, Widget cnew,
+ ArgList in_args, Cardinal *in_num_args)
+{
+ DialogWidget w = (DialogWidget)cnew;
+ DialogWidget old = (DialogWidget)current;
+ Arg args[5];
+ Cardinal num_args;
+ unsigned int i;
+ Bool checks[NUM_CHECKS];
+
+ for (i = 0; i < NUM_CHECKS; i++)
+ checks[i] = False;
+
+ for (i = 0; i < *in_num_args; i++) {
+ if (streq(XtNicon, in_args[i].name))
+ checks[ICON] = True;
+ else if (streq(XtNlabel, in_args[i].name))
+ checks[LABEL] = True;
+ }
+
+ if (checks[ICON]) {
+ if (w->dialog.icon != 0) {
+ XtSetArg(args[0], XtNbitmap, w->dialog.icon);
+ if (old->dialog.iconW != NULL)
+ XtSetValues(old->dialog.iconW, args, 1);
+ else {
+ XtSetArg(args[1], XtNborderWidth, 0);
+ XtSetArg(args[2], XtNleft, XtChainLeft);
+ XtSetArg(args[3], XtNright, XtChainLeft);
+ w->dialog.iconW = XtCreateWidget("icon", labelWidgetClass,
+ cnew, args, 4);
+ ((DialogConstraints)w->dialog.labelW->core.constraints)->
+ form.horiz_base = w->dialog.iconW;
+ XtManageChild(w->dialog.iconW);
+ }
+ }
+ else if (old->dialog.icon != 0) {
+ ((DialogConstraints)w->dialog.labelW->core.constraints)->
+ form.horiz_base = NULL;
+ XtDestroyWidget(old->dialog.iconW);
+ w->dialog.iconW = NULL;
+ }
+ }
+
+ if (checks[LABEL]) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, w->dialog.label); num_args++;
+ if (w->dialog.iconW != NULL &&
+ XtHeight(w->dialog.labelW) <= XtHeight(w->dialog.iconW)) {
+ XtSetArg(args[num_args], XtNheight, XtHeight(w->dialog.iconW));
+ num_args++;
+ }
+ XtSetValues(w->dialog.labelW, args, num_args);
+ }
+
+ if (w->dialog.value != old->dialog.value) {
+ if (w->dialog.value == NULL) /* only get here if it
+ wasn't NULL before */
+ XtDestroyWidget(old->dialog.valueW);
+ else if (old->dialog.value == NULL) { /* create a new value widget */
+ XtWidth(w) = XtWidth(old);
+ XtHeight(w) = XtHeight(old);
+ CreateDialogValueWidget(cnew);
+ }
+ else { /* Widget ok, just change string */
+ Arg nargs[1];
+
+ XtSetArg(nargs[0], XtNstring, w->dialog.value);
+ XtSetValues(w->dialog.valueW, nargs, 1);
+ w->dialog.value = MAGIC_VALUE;
+ }
+ }
+
+ return (False);
+}
+
+/*
+ * Function:
+ * XawDialogGetValuesHook
+ *
+ * Parameters:
+ * w - Dialog Widget
+ * args - argument list
+ * num_args - number of args
+ *
+ * Description:
+ * This is a get values hook routine that gets the values in the dialog.
+ */
+static void
+XawDialogGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
+{
+ Arg a[1];
+ String s;
+ DialogWidget src = (DialogWidget)w;
+ unsigned int i;
+
+ for (i = 0; i < *num_args; i++)
+ if (streq(args[i].name, XtNvalue)) {
+ XtSetArg(a[0], XtNstring, &s);
+ XtGetValues(src->dialog.valueW, a, 1);
+ *((char **)args[i].value) = s;
+ }
+ else if (streq(args[i].name, XtNlabel)) {
+ XtSetArg(a[0], XtNlabel, &s);
+ XtGetValues(src->dialog.labelW, a, 1);
+ *((char **)args[i].value) = s;
+ }
+}
+
+/*
+ * Function:
+ * CreateDialogValueWidget
+ *
+ * Parameters:
+ * w - dialog widget
+ *
+ * Description:
+ * Creates the dialog widgets value widget.
+ *
+ * Note
+ * Must be called only when w->dialog.value is non-nil
+ */
+static void
+CreateDialogValueWidget(Widget w)
+{
+ DialogWidget dw = (DialogWidget)w;
+ Arg arglist[10];
+ Cardinal num_args = 0;
+
+ XtSetArg(arglist[num_args], XtNstring, dw->dialog.value); num_args++;
+ XtSetArg(arglist[num_args], XtNresizable, True); num_args++;
+ XtSetArg(arglist[num_args], XtNeditType, XawtextEdit); num_args++;
+ XtSetArg(arglist[num_args], XtNfromVert, dw->dialog.labelW); num_args++;
+ XtSetArg(arglist[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(arglist[num_args], XtNright, XtChainRight); num_args++;
+
+ dw->dialog.valueW = XtCreateWidget("value", asciiTextWidgetClass,
+ w, arglist, num_args);
+
+ /* if the value widget is being added after buttons,
+ * then the buttons need new layout constraints
+ */
+ if (dw->composite.num_children > 1) {
+ WidgetList children = dw->composite.children;
+ Widget *childP;
+
+ for (childP = children + dw->composite.num_children - 1;
+ childP >= children; childP-- ) {
+ if (*childP == dw->dialog.labelW || *childP == dw->dialog.valueW)
+ continue;
+
+ if (XtIsManaged(*childP) &&
+ XtIsSubclass(*childP, commandWidgetClass)) {
+ ((DialogConstraints)(*childP)->core.constraints)->
+ form.vert_base = dw->dialog.valueW;
+ }
+ }
+ }
+ XtManageChild(dw->dialog.valueW);
+
+ /*
+ * Value widget gets the keyboard focus
+ */
+ XtSetKeyboardFocus(w, dw->dialog.valueW);
+ dw->dialog.value = MAGIC_VALUE;
+}
+
+void
+XawDialogAddButton(Widget dialog, _Xconst char* name, XtCallbackProc function,
+ XtPointer param)
+{
+ /*
+ * Correct Constraints are all set in ConstraintInitialize()
+ */
+ Widget button;
+
+ button = XtCreateManagedWidget(name, commandWidgetClass, dialog, NULL, 0);
+
+ if (function != NULL) /* don't add NULL callback func */
+ XtAddCallback(button, XtNcallback, function, param);
+}
+
+char *
+XawDialogGetValueString(Widget w)
+{
+ Arg args[1];
+ char *value;
+
+ XtSetArg(args[0], XtNstring, &value);
+ XtGetValues(((DialogWidget)w)->dialog.valueW, args, 1);
+
+ return(value);
+}
diff --git a/libXaw/src/DisplayList.c b/libXaw/src/DisplayList.c
index 1704286ca..1bef9945f 100644
--- a/libXaw/src/DisplayList.c
+++ b/libXaw/src/DisplayList.c
@@ -1,2257 +1,2255 @@
-/*
- * Copyright (c) 1998 by The XFree86 Project, 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 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.
- *
- * Author: Paulo César Pereira de Andrade
- */
-
-/* $XFree86: xc/lib/Xaw/DisplayList.c,v 3.18 2003/05/23 14:51:15 tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <ctype.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/CoreP.h>
-#include <X11/Xfuncs.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/SysUtil.h>
-#include "Private.h"
-
-#ifdef __UNIXOS2__
-static char dummy;
-#endif
-
-#ifndef OLDXAW
-
-/*
- * Types
- */
-typedef struct _XawDLProc XawDLProc;
-typedef struct _XawDLData XawDLData;
-typedef struct _XawDLInfo XawDLInfo;
-
-struct _XawDLProc {
- XrmQuark qname;
- String *params;
- Cardinal num_params;
- XawDisplayListProc proc;
- XtPointer args;
- XawDLData *data;
-};
-
-struct _XawDLData {
- XawDLClass *dlclass;
- XtPointer data;
-};
-
-struct _XawDLInfo {
- String name;
- XrmQuark qname;
- XawDisplayListProc proc;
-};
-
-struct _XawDL {
- XawDLProc **procs;
- Cardinal num_procs;
- XawDLData **data;
- Cardinal num_data;
- Screen *screen;
- Colormap colormap;
- int depth;
- XrmQuark qrep; /* for cache lookup */
-};
-
-struct _XawDLClass {
- String name;
- XawDLInfo **infos;
- Cardinal num_infos;
- XawDLArgsInitProc args_init;
- XawDLArgsDestructor args_destructor;
- XawDLDataInitProc data_init;
- XawDLDataDestructor data_destructor;
-};
-
-/*
- * Private Methods
- */
-static XawDLClass *_XawFindDLClass(String);
-static int qcmp_dlist_class(_Xconst void*, _Xconst void*);
-static int bcmp_dlist_class(_Xconst void*, _Xconst void*);
-static XawDLInfo *_XawFindDLInfo(XawDLClass*, String);
-static int qcmp_dlist_info(_Xconst void*, _Xconst void*);
-static int bcmp_dlist_info(_Xconst void*, _Xconst void*);
-static void *_Xaw_Xlib_ArgsInitProc(String, String*, Cardinal*,
- Screen*, Colormap, int);
-static void _Xaw_Xlib_ArgsDestructor(Display*, String, XtPointer,
- String*, Cardinal*);
-static void *_Xaw_Xlib_DataInitProc(String, Screen*, Colormap, int);
-static void _Xaw_Xlib_DataDestructor(Display*, String, XtPointer);
-
-/*
- * Initialization
- */
-static XawDLClass **classes;
-static Cardinal num_classes;
-static String xlib = "xlib";
-
-/*
- * Implementation
- */
-void
-XawRunDisplayList(Widget w, _XawDisplayList *list,
- XEvent *event, Region region)
-{
- XawDLProc *proc;
- Cardinal i;
-
- if (!XtIsRealized(w))
- return;
-
- for (i = 0; i < list->num_procs; i++)
- {
- proc = list->procs[i];
- proc->proc(w, proc->args, proc->data->data, event, region);
- }
-}
-
-#define DLERR -2
-#define DLEOF -1
-#define DLEND 1
-#define DLNAME 2
-#define DLARG 3
-static char *
-read_token(char *src, char *dst, Cardinal size, int *status)
-{
- int ch;
- Bool esc, quote;
- Cardinal i;
-
- i = 0;
- esc = quote = False;
-
- /*CONSTCOND*/
- while (1)
- {
- ch = *src;
- if (ch != '\n' && isspace(ch))
- ++src;
- else
- break;
- }
-
- for (; i < size - 1; src++)
- {
- ch = *src;
- if (ch == '"')
- {
- if (quote)
- {
- quote = False;
- continue;
- }
- quote = True;
- continue;
- }
- if (ch == '\\')
- {
- if (esc)
- {
- dst[i++] = ch;
- esc = False;
- continue;
- }
- esc = True;
- continue;
- }
- if (ch == '\0')
- {
- *status = DLEOF;
- dst[i] = '\0';
- return (src);
- }
- else if (!esc)
- {
- if (!quote)
- {
- if (ch == ',')
- {
- *status = DLARG;
- dst[i] = '\0';
- return (++src);
- }
- else if (ch == ' ' || ch == '\t')
- {
- *status = DLNAME;
- dst[i] = '\0';
- return (++src);
- }
- else if (ch == ';' || ch == '\n')
- {
- *status = DLEND;
- dst[i] = '\0';
- return (++src);
- }
- }
- }
- else
- esc = False;
- dst[i++] = ch;
- }
-
- *status = DLERR;
- dst[i] = '\0';
-
- return (src);
-}
-
-_XawDisplayList *XawCreateDisplayList(String string, Screen *screen,
- Colormap colormap, int depth)
-{
- _XawDisplayList *dlist;
- XawDLClass *lc, *xlibc;
- XawDLData *data;
- XawDLInfo *info;
- XawDLProc *proc;
- char cname[64], fname[64], aname[1024];
- Cardinal i;
- char *cp, *fp, *lp;
- int status;
-
- xlibc = XawGetDisplayListClass(xlib);
- if (!xlibc)
- {
- XawDisplayListInitialize();
- xlibc = XawGetDisplayListClass(xlib);
- }
-
- dlist = (_XawDisplayList *)XtMalloc(sizeof(_XawDisplayList));
- dlist->procs = NULL;
- dlist->num_procs = 0;
- dlist->data = NULL;
- dlist->num_data = 0;
- dlist->screen = screen;
- dlist->colormap = colormap;
- dlist->depth = depth;
- dlist->qrep = NULLQUARK;
- if (!string || !string[0])
- return (dlist);
-
- cp = string;
-
- status = 0;
- while (status != DLEOF)
- {
- lp = cp;
- cp = read_token(cp, fname, sizeof(fname), &status);
-
- if (status != DLNAME && status != DLEND && status != DLEOF)
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "Error parsing displayList at \"%s\"", lp);
- XtAppWarning(XtDisplayToApplicationContext(DisplayOfScreen(screen)),
- msg);
- XawDestroyDisplayList(dlist);
- return (NULL);
- }
- fp = fname;
- /*CONSTCOND*/
- while (1)
- {
- fp = strchr(fp, ':');
- if (!fp || (fp == cp || fp[-1] != '\\'))
- break;
- ++fp;
- }
- if (fp)
- {
- XmuSnprintf(cname, fp - fname + 1, fname);
- memmove(fname, fp + 1, strlen(fp));
- lc = cname[0] ? XawGetDisplayListClass(cname) : xlibc;
- if (!lc)
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "Cannot find displayList class \"%s\"", cname);
- XtAppWarning(XtDisplayToApplicationContext
- (DisplayOfScreen(screen)), msg);
- XawDestroyDisplayList(dlist);
- return (NULL);
- }
- }
- else
- lc = xlibc;
-
- if (status == DLEOF && !fname[0])
- break;
-
- if ((info = _XawFindDLInfo(lc, fname)) == NULL)
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "Cannot find displayList procedure \"%s\"", fname);
- XtAppWarning(XtDisplayToApplicationContext(DisplayOfScreen(screen)),
- msg);
- XawDestroyDisplayList(dlist);
- return (NULL);
- }
-
- proc = (XawDLProc *)XtMalloc(sizeof(XawDLProc));
- proc->qname = info->qname;
- proc->params = NULL;
- proc->num_params = 0;
- proc->proc = info->proc;
- proc->args = NULL;
- proc->data = NULL;
-
- if (!dlist->procs)
- {
- dlist->num_procs = 1;
- dlist->procs = (XawDLProc**)XtMalloc(sizeof(XawDLProc*));
- }
- else
- {
- ++dlist->num_procs;
- dlist->procs = (XawDLProc**)
- XtRealloc((char *)dlist->procs, sizeof(XawDLProc*) *
- dlist->num_procs);
- }
- dlist->procs[dlist->num_procs - 1] = proc;
-
- while (status != DLEND && status != DLEOF)
- {
- lp = cp;
- cp = read_token(cp, aname, sizeof(aname), &status);
-
- if (status != DLARG && status != DLEND && status != DLEOF)
- {
- char msg[256];
-
- XmuSnprintf(msg, sizeof(msg),
- "Error parsing displayList at \"%s\"", lp);
- XtAppWarning(XtDisplayToApplicationContext
- (DisplayOfScreen(screen)), msg);
- XawDestroyDisplayList(dlist);
- return (NULL);
- }
-
- if (!proc->num_params)
- {
- proc->num_params = 1;
- proc->params = (String *)XtMalloc(sizeof(String));
- }
- else
- {
- ++proc->num_params;
- proc->params = (String *)XtRealloc((char *)proc->params,
- sizeof(String) *
- proc->num_params);
- }
- proc->params[proc->num_params - 1] = XtNewString(aname);
- }
-
- /* verify if data is already created for lc */
- data = NULL;
- for (i = 0; i < dlist->num_data; i++)
- if (dlist->data[i]->dlclass == lc)
- {
- data = dlist->data[i];
- break;
- }
-
- if (!data)
- {
- data = (XawDLData *)XtMalloc(sizeof(XawDLData));
- data->dlclass = lc;
- if (lc->data_init)
- data->data = lc->data_init(lc->name, screen, colormap, depth);
- else
- data->data = NULL;
-
- if (!dlist->data)
- {
- dlist->num_data = 1;
- dlist->data = (XawDLData **)XtMalloc(sizeof(XawDLData*));
- }
- else
- {
- ++dlist->num_data;
- dlist->data = (XawDLData **)
- XtRealloc((char *)dlist->data, sizeof(XawDLData*) *
- dlist->num_data);
- }
- dlist->data[dlist->num_data - 1] = data;
- }
-
- if (lc->args_init)
- {
- proc->args = lc->args_init(fname, proc->params, &proc->num_params,
- screen, colormap, depth);
- if (proc->args == XAWDL_CONVERT_ERROR)
- {
- char msg[256];
-
- proc->args = NULL;
- XmuSnprintf(msg, sizeof(msg),
- "Cannot convert arguments to displayList function \"%s\"", fname);
- XtAppWarning(XtDisplayToApplicationContext
- (DisplayOfScreen(screen)), msg);
- XawDestroyDisplayList(dlist);
- return (NULL);
- }
- }
- else
- proc->args = NULL;
-
- proc->data = data;
- }
-
- dlist->qrep = XrmStringToQuark(string);
- return (dlist);
-}
-
-String
-XawDisplayListString(_XawDisplayList *dlist)
-{
- if (!dlist || dlist->qrep == NULLQUARK)
- return ("");
- return (XrmQuarkToString(dlist->qrep));
-}
-
-void
-XawDestroyDisplayList(_XawDisplayList *dlist)
-{
- Cardinal i, j;
- XawDLProc *proc;
- XawDLData *data;
-
- if (!dlist)
- return;
-
- for (i = 0; i < dlist->num_procs; i++)
- {
- proc = dlist->procs[i];
- data = proc->data;
-
- if (data)
- {
- if (data->dlclass->args_destructor)
- data->dlclass->args_destructor(DisplayOfScreen(dlist->screen),
- XrmQuarkToString(proc->qname),
- proc->args,
- proc->params, &proc->num_params);
- if (data->data)
- {
- if (data->dlclass->data_destructor)
- {
- data->dlclass
- ->data_destructor(DisplayOfScreen(dlist->screen),
- data->dlclass->name, data->data);
- data->data = NULL;
- }
- }
- }
-
- for (j = 0; j < proc->num_params; j++)
- XtFree(proc->params[j]);
- if (proc->num_params)
- XtFree((char *)proc->params);
- XtFree((char *)proc);
- }
-
- if (dlist->num_procs)
- XtFree((char *)dlist->procs);
-
- XtFree((char *)dlist);
-}
-
-/**********************************************************************
- * If you want to implement your own class of procedures, look at
- * the code bellow.
- **********************************************************************/
-/* Start of Implementation of class "xlib" */
-typedef struct _XawXlibData {
- GC gc;
- unsigned long mask;
- XGCValues values;
- int shape;
- int mode;
- char *dashes;
- /* these fields can be used for optimization, to
- * avoid unnecessary coordinates recalculation.
- */
- Position x, y;
- Dimension width, height;
-} XawXlibData;
-
-typedef struct _XawDLPosition {
- Position pos;
- short denom;
- Boolean high;
-} XawDLPosition;
-
-typedef struct _XawDLPositionPtr {
- XawDLPosition *pos;
- Cardinal num_pos;
-} XawDLPositionPtr;
-
-typedef struct _XawDLArcArgs {
- XawDLPosition pos[4];
- int angle1;
- int angle2;
-} XawDLArcArgs;
-
-typedef struct _XawDLStringArgs {
- XawDLPosition pos[2];
- char *string;
- int length;
-} XawDLStringArgs;
-
-typedef struct _XawDLCopyArgs {
- XawPixmap *pixmap;
- XawDLPosition pos[6];
- int plane;
-} XawDLCopyArgs;
-
-typedef struct _XawDLImageArgs {
- XawPixmap *pixmap;
- XawDLPosition pos[4];
- int depth;
-} XawDLImageArgs;
-
-#define X_ARG(x) (Position)(((x).denom != 0) ? \
- ((float)XtWidth(w) * ((float)(x).pos / (float)(x).denom)) : \
- ((x).high ? XtWidth(w) - (x).pos : (x).pos))
-#define Y_ARG(x) (Position)(((x).denom != 0) ? \
- ((float)XtHeight(w) * ((float)(x).pos / (float)(x).denom)): \
- ((x).high ? XtHeight(w) - (x).pos : (x).pos))
-#define DRECT 0
-#define FRECT 1
-#define LINE 2
-#define GCFG 3
-#define GCBG 4
-#define FPOLY 5
-#define DARC 6
-#define FARC 7
-#define DLINES 8
-#define MASK 9
-#define UMASK 10
-#define LWIDTH 11
-#define POINT 12
-#define POINTS 13
-#define SEGMENTS 14
-#define ARCMODE 15
-#define COORDMODE 16
-#define SHAPEMODE 17
-#define LINESTYLE 18
-#define CAPSTYLE 19
-#define JOINSTYLE 20
-#define FILLSTYLE 21
-#define FILLRULE 22
-#define TILE 23
-#define STIPPLE 24
-#define TSORIGIN 25
-#define FUNCTION 26
-#define PLANEMASK 27
-#define DSTRING 28
-#define PSTRING 29
-#define FONT 30
-#define DASHES 31
-#define SUBWMODE 32
-#define EXPOSURES 33
-#define CLIPORIGIN 34
-#define CLIPMASK 35
-#define CLIPRECTS 36
-#define COPYAREA 37
-#define COPYPLANE 38
-#define IMAGE 39
-
-static void
-Dl1Point(Widget w, XtPointer args, XtPointer data, int id)
-{
- XawDLPosition *pos = (XawDLPosition *)args;
- XawXlibData *xdata = (XawXlibData *)data;
- Display *display;
- Window window;
- Position x, y;
-
- x = X_ARG(pos[0]);
- y = Y_ARG(pos[1]);
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- x += xpad;
- y += ypad;
- display = XtDisplayOfObject(w);
- window = XtWindowOfObject(w);
- }
- else
- {
- display = XtDisplay(w);
- window = XtWindow(w);
- }
-
- if (id == POINT)
- XDrawPoint(display, window, xdata->gc, x, y);
- else if (id == TSORIGIN)
- {
- xdata->values.ts_x_origin = x;
- xdata->values.ts_y_origin = y;
- xdata->mask |= GCTileStipXOrigin | GCTileStipYOrigin;
- XSetTSOrigin(display, xdata->gc, x, y);
- }
- else if (id == CLIPORIGIN)
- {
- xdata->values.clip_x_origin = x;
- xdata->values.clip_y_origin = y;
- xdata->mask |= GCClipXOrigin | GCClipYOrigin;
- XSetClipOrigin(display, xdata->gc, x, y);
- }
-}
-
-static void
-Dl2Points(Widget w, XtPointer args, XtPointer data, int id)
-{
- XawDLPosition *pos = (XawDLPosition *)args;
- XawXlibData *xdata = (XawXlibData *)data;
- Display *display;
- Window window;
- Position x1, y1, x2, y2;
-
- x1 = X_ARG(pos[0]);
- y1 = Y_ARG(pos[1]);
- x2 = X_ARG(pos[2]);
- y2 = Y_ARG(pos[3]);
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- x1 += xpad; y1 += ypad;
- x2 += xpad; y2 += ypad;
- display = XtDisplayOfObject(w);
- window = XtWindowOfObject(w);
- }
- else
- {
- display = XtDisplay(w);
- window = XtWindow(w);
- }
-
- if (id == DRECT)
- XDrawRectangle(display, window, xdata->gc, x1, y1, x2 - x1, y2 - y1);
- else if (id == FRECT)
- XFillRectangle(display, window, xdata->gc, x1, y1, x2 - x1, y2 - y1);
- else if (id == LINE)
- XDrawLine(display, window, xdata->gc, x1, y1, x2, y2);
-}
-
-/* ARGSUSED */
-static void
-DlLine(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
-{
- Dl2Points(w, args, data, LINE);
-}
-
-/* ARGSUSED */
-static void
-DlDrawRectangle(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- Dl2Points(w, args, data, DRECT);
-}
-
-/* ARGSUSED */
-static void
-DlFillRectangle(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- Dl2Points(w, args, data, FRECT);
-}
-
-static void
-DlXPoints(Widget w, XtPointer args, XtPointer data, int id)
-{
- XawDLPositionPtr *pos_ptr = (XawDLPositionPtr *)args;
- XawXlibData *xdata = (XawXlibData *)data;
- XawDLPosition *pos;
- XPoint points_buf[16];
- XPoint *points;
- Display *display;
- Window window;
- Cardinal num_points, i, j;
-
- num_points = pos_ptr->num_pos>>1;
- points = (XPoint *)XawStackAlloc(sizeof(XPoint) * num_points, points_buf);
-
- for (i = j = 0; i < num_points; i++, j = i << 1)
- {
- pos = &pos_ptr->pos[j];
- points[i].x = X_ARG(pos[0]);
- points[i].y = Y_ARG(pos[1]);
- }
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- if (xdata->mode != CoordModePrevious)
- {
- for (i = 0; i < num_points; i++)
- {
- points[i].x += xpad;
- points[i].y += ypad;
- }
- }
- else
- {
- points[0].x += xpad;
- points[0].y += ypad;
- }
- display = XtDisplayOfObject(w);
- window = XtWindowOfObject(w);
- }
- else
- {
- display = XtDisplay(w);
- window = XtWindow(w);
- }
-
- if (id == FPOLY)
- XFillPolygon(display, window, xdata->gc, points, num_points,
- xdata->shape, xdata->mode);
- else if (id == DLINES)
- XDrawLines(display, window, xdata->gc, points, num_points, xdata->mode);
- else if (id == POINTS)
- XDrawPoints(display, window, xdata->gc, points, num_points, xdata->mode);
-
- XawStackFree(points, points_buf);
-}
-
-/* ARGSUSED */
-static void
-DlFillPolygon(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlXPoints(w, args, data, FPOLY);
-}
-
-/* ARGSUSED */
-static void
-DlDrawLines(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlXPoints(w, args, data, DLINES);
-}
-
-/* ARGSUSED */
-static void
-DlDrawPoints(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlXPoints(w, args, data, POINTS);
-}
-
-/* ARGSUSED */
-static void
-DlForeground(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- Pixel foreground = (Pixel)args;
-
- if (xdata->values.foreground != foreground)
- {
- xdata->mask |= GCForeground;
- xdata->values.foreground = foreground;
- XSetForeground(XtDisplayOfObject(w), xdata->gc, foreground);
- }
-}
-
-/* ARGSUSED */
-static void
-DlBackground(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- Pixel background = (Pixel)args;
-
- if (xdata->values.background != background)
- {
- xdata->mask |= GCBackground;
- xdata->values.background = background;
- XSetBackground(XtDisplayOfObject(w), xdata->gc, background);
- }
-}
-
-static void
-DlArc(Widget w, XtPointer args, XtPointer data, Bool fill)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- XawDLArcArgs *arc = (XawDLArcArgs *)args;
- Position x1, y1, x2, y2;
- Display *display;
- Window window;
-
- x1 = X_ARG(arc->pos[0]);
- y1 = Y_ARG(arc->pos[1]);
- x2 = X_ARG(arc->pos[2]);
- y2 = Y_ARG(arc->pos[3]);
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- x1 += xpad;
- y1 += ypad;
- x2 += xpad;
- y2 += ypad;
- display = XtDisplayOfObject(w);
- window = XtWindowOfObject(w);
- }
- else
- {
- display = XtDisplay(w);
- window = XtWindow(w);
- }
-
- if (fill)
- XFillArc(display, window, xdata->gc, x1, y1, x2 - x1, y2 - y1,
- arc->angle1, arc->angle2);
- else
- XDrawArc(display, window, xdata->gc, x1, y1, x2 - x1, y2 - y1,
- arc->angle1, arc->angle2);
-}
-
-/* ARGSUSED */
-static void
-DlDrawArc(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlArc(w, args, data, False);
-}
-
-/* ARGSUSED */
-static void
-DlFillArc(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlArc(w, args, data, True);
-}
-
-/*ARGSUSED*/
-static void
-DlMask(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- Display *display = XtDisplayOfObject(w);
-
- if (region)
- XSetRegion(display, xdata->gc, region);
- else if (event)
- {
- XRectangle rect;
-
- rect.x = event->xexpose.x;
- rect.y = event->xexpose.y;
- rect.width = event->xexpose.width;
- rect.height = event->xexpose.height;
- XSetClipRectangles(display, xdata->gc, 0, 0, &rect, 1, Unsorted);
- }
-}
-
-/* ARGSUSED */
-static void
-DlUmask(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
-
- XSetClipMask(XtDisplayOfObject(w), xdata->gc, None);
-}
-
-/* ARGSUSED */
-static void
-DlLineWidth(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- unsigned line_width = (unsigned long)args;
-
- if (xdata->values.line_width != line_width)
- {
- xdata->mask |= GCLineWidth;
- xdata->values.line_width = line_width;
- XChangeGC(XtDisplayOfObject(w), xdata->gc, GCLineWidth, &xdata->values);
- }
-}
-
-/* ARGSUSED */
-static void
-DlDrawPoint(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
-{
- Dl1Point(w, args, data, POINT);
-}
-
-/* ARGSUSED */
-static void
-DlDrawSegments(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawDLPositionPtr *pos_ptr = (XawDLPositionPtr *)args;
- XawXlibData *xdata = (XawXlibData *)data;
- XawDLPosition *pos;
- XSegment *segments;
- XSegment segments_buf[8];
- Display *display;
- Window window;
- Cardinal num_segments, i, j;
-
- num_segments = pos_ptr->num_pos>>2;
- segments = (XSegment *)XawStackAlloc(sizeof(XSegment) * num_segments, segments_buf);
-
- for (i = j = 0; i < num_segments; i++, j = i << 2)
- {
- pos = &pos_ptr->pos[j];
- segments[i].x1 = X_ARG(pos[0]);
- segments[i].y1 = Y_ARG(pos[1]);
- segments[i].x2 = X_ARG(pos[2]);
- segments[i].y2 = Y_ARG(pos[3]);
- }
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- for (i = 0; i < num_segments; i++)
- {
- segments[i].x1 += xpad;
- segments[i].y1 += ypad;
- segments[i].x2 += xpad;
- segments[i].y2 += ypad;
- }
- display = XtDisplayOfObject(w);
- window = XtWindowOfObject(w);
- }
- else
- {
- display = XtDisplay(w);
- window = XtWindow(w);
- }
-
- XDrawSegments(display, window, xdata->gc, segments, num_segments);
-
- XawStackFree(segments, segments_buf);
-}
-
-/* ARGSUSED */
-static void
-DlArcMode(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int arc_mode = (long)args;
-
- if (xdata->values.arc_mode != arc_mode)
- {
- xdata->mask |= GCArcMode;
- xdata->values.arc_mode = arc_mode;
- XSetArcMode(XtDisplayOfObject(w), xdata->gc, arc_mode);
- }
-}
-
-/* ARGSUSED */
-static void
-DlCoordMode(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int mode = (long)args;
-
- xdata->mode = mode;
-}
-
-/* ARGSUSED */
-static void
-DlShapeMode(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int shape = (long)args;
-
- xdata->shape = shape;
-}
-
-/* ARGSUSED */
-static void
-DlLineStyle(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int line_style = (long)args;
-
- if (xdata->values.line_style != line_style)
- {
- xdata->mask |= GCLineStyle;
- xdata->values.line_style = line_style;
- XChangeGC(XtDisplayOfObject(w), xdata->gc, GCLineStyle, &xdata->values);
- }
-}
-
-/* ARGSUSED */
-static void
-DlCapStyle(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int cap_style = (long)args;
-
- if (xdata->values.cap_style != cap_style)
- {
- xdata->mask |= GCCapStyle;
- xdata->values.cap_style = cap_style;
- XChangeGC(XtDisplayOfObject(w), xdata->gc, GCCapStyle, &xdata->values);
- }
-}
-
-/* ARGSUSED */
-static void
-DlJoinStyle(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int join_style = (long)args;
-
- if (xdata->values.join_style != join_style)
- {
- xdata->mask |= GCJoinStyle;
- xdata->values.join_style = join_style;
- XChangeGC(XtDisplayOfObject(w), xdata->gc, GCJoinStyle, &xdata->values);
- }
-}
-
-/* ARGSUSED */
-static void
-DlFillStyle(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int fill_style = (long)args;
-
- if (xdata->values.fill_style != fill_style)
- {
- xdata->mask |= GCFillStyle;
- xdata->values.fill_style = fill_style;
- XSetFillStyle(XtDisplayOfObject(w), xdata->gc, fill_style);
- }
-}
-
-/* ARGSUSED */
-static void
-DlFillRule(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int fill_rule = (long)args;
-
- if (xdata->values.fill_rule != fill_rule)
- {
- xdata->mask |= GCFillRule;
- xdata->values.fill_rule = fill_rule;
- XSetFillRule(XtDisplayOfObject(w), xdata->gc, fill_rule);
- }
-}
-
-/* ARGSUSED */
-static void
-DlTile(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- XawPixmap *pixmap = (XawPixmap *)args;
-
- if (pixmap && xdata->values.tile != pixmap->pixmap)
- {
- xdata->mask |= GCTile;
- xdata->values.tile = pixmap->pixmap;
- XSetTile(XtDisplayOfObject(w), xdata->gc, xdata->values.tile);
- }
-}
-
-/* ARGSUSED */
-static void
-DlStipple(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- XawPixmap *pixmap = (XawPixmap *)args;
-
- if (pixmap && xdata->values.stipple != pixmap->pixmap)
- {
- xdata->mask |= GCStipple;
- xdata->values.stipple = pixmap->pixmap;
- XSetStipple(XtDisplayOfObject(w), xdata->gc, xdata->values.stipple);
- }
-}
-
-/* ARGSUSED */
-static void
-DlTSOrigin(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
-{
- Dl1Point(w, args, data, TSORIGIN);
-}
-
-/* ARGSUSED */
-static void
-DlFunction(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int function = (long)args;
-
- if (function != xdata->values.function)
- {
- xdata->mask |= GCFunction;
- xdata->values.function = function;
- XSetFunction(XtDisplayOfObject(w), xdata->gc, function);
- }
-}
-
-/* ARGSUSED */
-static void
-DlPlaneMask(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- unsigned long plane_mask = (unsigned long)args;
-
- if (xdata->values.plane_mask != plane_mask)
- {
- xdata->mask |= GCPlaneMask;
- xdata->values.plane_mask = plane_mask;
- XSetPlaneMask(XtDisplayOfObject(w), xdata->gc, plane_mask);
- }
-}
-
-static void
-DlString(Widget w, XtPointer args, XtPointer data, Bool image)
-{
- XawDLStringArgs *string = (XawDLStringArgs *)args;
- XawXlibData *xdata = (XawXlibData *)data;
- Display *display;
- Window window;
- Position x, y;
-
- x = X_ARG(string->pos[0]);
- y = Y_ARG(string->pos[1]);
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- x += xpad;
- y += ypad;
- display = XtDisplayOfObject(w);
- window = XtWindowOfObject(w);
- }
- else
- {
- display = XtDisplay(w);
- window = XtWindow(w);
- }
-
- if (image)
- XDrawImageString(display, window, xdata->gc, x, y, string->string, string->length);
- else
- XDrawString(display, window, xdata->gc, x, y, string->string, string->length);
-}
-
-/* ARGSUSED */
-static void
-DlDrawString(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlString(w, args, data, False);
-}
-
-/* ARGSUSED */
-static void
-DlPaintString(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlString(w, args, data, True);
-}
-
-/* ARGSUSED */
-static void
-DlFont(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- Font font = (Font)args;
-
- if (xdata->values.font != font)
- {
- xdata->mask |= GCFont;
- xdata->values.font = font;
- XSetFont(XtDisplayOfObject(w), xdata->gc, font);
- }
-}
-
-/* ARGSUSED */
-static void
-DlDashes(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- char *dashes = args;
-
- if (xdata->dashes != dashes)
- {
- xdata->mask |= GCDashOffset | GCDashList;
- xdata->dashes = dashes;
- XSetDashes(XtDisplayOfObject(w), xdata->gc, 0, dashes + 1, *dashes);
- }
-}
-
-/* ARGSUSED */
-static void
-DlSubwindowMode(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- int subwindow_mode = (long)args;
-
- if (xdata->values.subwindow_mode != subwindow_mode)
- {
- xdata->mask |= GCSubwindowMode;
- xdata->values.subwindow_mode = subwindow_mode;
- XSetSubwindowMode(XtDisplayOfObject(w), xdata->gc, subwindow_mode);
- }
-}
-
-/* ARGSUSED */
-static void
-DlExposures(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- Bool graphics_exposures = (Bool)(long)args;
-
- if (xdata->values.graphics_exposures != graphics_exposures)
- {
- xdata->mask |= GCGraphicsExposures;
- xdata->values.graphics_exposures = graphics_exposures;
- XSetGraphicsExposures(XtDisplayOfObject(w), xdata->gc, graphics_exposures);
- }
-}
-
-/* ARGSUSED */
-static void
-DlClipOrigin(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
-{
- Dl1Point(w, args, data, CLIPORIGIN);
-}
-
-/* ARGSUSED */
-static void
-DlClipMask(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawXlibData *xdata = (XawXlibData *)data;
- XawPixmap *pixmap = (XawPixmap *)args;
- Pixmap clip_mask;
-
- if (pixmap)
- clip_mask = pixmap->mask ? pixmap->mask : pixmap->pixmap;
- else
- clip_mask = None;
-
- if (xdata->values.clip_mask != clip_mask)
- {
- xdata->mask |= GCClipMask;
- XSetClipMask(XtDisplayOfObject(w), xdata->gc, clip_mask);
- }
-}
-
-/* ARGSUSED */
-static void
-DlClipRectangles(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- XawDLPositionPtr *pos_ptr = (XawDLPositionPtr *)args;
- XawXlibData *xdata = (XawXlibData *)data;
- XawDLPosition *pos;
- XRectangle *rects;
- XRectangle rects_buf[8];
- Position x1, y1, x2, y2;
- Cardinal num_rects, i, j;
-
- num_rects = pos_ptr->num_pos>>2;
- rects = (XRectangle *)XawStackAlloc(sizeof(XRectangle) * num_rects, rects_buf);
-
- for (i = j = 0; i < num_rects; i++, j = i << 2)
- {
- pos = &pos_ptr->pos[j];
- x1 = X_ARG(pos[0]);
- y1 = Y_ARG(pos[1]);
- x2 = X_ARG(pos[2]);
- y2 = Y_ARG(pos[3]);
- rects[i].x = XawMin(x1, x2);
- rects[i].y = XawMin(y1, y2);
- rects[i].width = XawMax(x1, x2) - rects[i].x;
- rects[i].height = XawMax(y1, y2) - rects[i].y;
- }
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- for (i = 0; i < num_rects; i++)
- {
- rects[i].x += xpad;
- rects[i].y += ypad;
- }
- }
-
- XSetClipRectangles(XtDisplayOfObject(w), xdata->gc, 0, 0, rects, num_rects, Unsorted);
-
- XawStackFree(rects, rects_buf);
-}
-
-static void
-DlCopy(Widget w, XtPointer args, XtPointer data, Bool plane)
-{
- XawDLCopyArgs *copy = (XawDLCopyArgs *)args;
- XawXlibData *xdata = (XawXlibData *)data;
- int src_x, src_y, dst_x, dst_y, width, height, tmp1, tmp2;
-
- tmp1 = X_ARG(copy->pos[0]);
- tmp2 = X_ARG(copy->pos[2]);
- dst_x = XawMin(tmp1, tmp2);
- width = XawMax(tmp1, tmp2) - dst_x;
-
- tmp1 = Y_ARG(copy->pos[1]);
- tmp2 = Y_ARG(copy->pos[3]);
- dst_y = XawMin(tmp1, tmp2);
- height = XawMax(tmp1, tmp2) - dst_y;
-
- src_x = X_ARG(copy->pos[4]);
- src_y = Y_ARG(copy->pos[5]);
-
- if (width <= 0)
- {
- if (copy->pixmap)
- width = copy->pixmap->width;
- else
- {
- if ((width = XtWidth(w) - src_x) < 0)
- width = 0;
- }
- }
- if (height <= 0)
- {
- if (copy->pixmap)
- height = copy->pixmap->height;
- else
- {
- if ((height = XtHeight(w) - src_y) < 0)
- height = 0;
- }
- }
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- src_x += xpad;
- src_y += ypad;
- dst_x += xpad;
- dst_y += ypad;
- }
-
- if (plane)
- XCopyPlane(XtDisplayOfObject(w), XtWindowOfObject(w),
- copy->pixmap ? copy->pixmap->pixmap : XtWindowOfObject(w),
- xdata->gc, src_x, src_y, width, height, dst_x, dst_y,
- copy->plane ? copy->plane : 1);
- else
- XCopyArea(XtDisplayOfObject(w),
- copy->pixmap ? copy->pixmap->pixmap : XtWindowOfObject(w),
- XtWindowOfObject(w), xdata->gc, src_x, src_y, width, height, dst_x, dst_y);
-}
-
-/* ARGSUSED */
-static void
-DlCopyArea(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlCopy(w, args, data, False);
-}
-
-/* ARGSUSED */
-static void
-DlCopyPlane(Widget w, XtPointer args, XtPointer data,
- XEvent *event, Region region)
-{
- DlCopy(w, args, data, True);
-}
-
-/*ARGSUSED*/
-/* Note:
- * This function is destructive if you set the ts_x_origin, ts_y_origin,
- * and/or clip-mask. It is meant to be the only function used in a display
- * list. If you need to use other functions (and those values), be sure to
- * set them after calling this function.
- */
-static void
-DlImage(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
-{
- XawDLImageArgs *image = (XawDLImageArgs *)args;
- XawXlibData *xdata = (XawXlibData *)data;
- int x, y, xs, ys, xe, ye, width, height;
- Display *display;
- Window window;
-
- width = image->pixmap->width;
- height = image->pixmap->height;
- xs = X_ARG(image->pos[0]);
- ys = Y_ARG(image->pos[1]);
- xe = X_ARG(image->pos[2]);
- ye = Y_ARG(image->pos[3]);
-
- if (xe <= 0)
- xe = xs + width;
- if (ye <= 0)
- ye = ys + height;
-
- if (!XtIsWidget(w))
- {
- Position xpad, ypad;
-
- xpad = XtX(w) + XtBorderWidth(w);
- ypad = XtY(w) + XtBorderWidth(w);
- xe += xpad;
- ye += ypad;
- xe += xpad;
- ye += ypad;
- display = XtDisplayOfObject(w);
- window = XtWindowOfObject(w);
- }
- else
- {
- display = XtDisplay(w);
- window = XtWindow(w);
- }
-
- for (y = ys; y < ye; y += height)
- for (x = xs; x < xe; x += width)
- {
- XSetClipOrigin(display, xdata->gc, x, y);
- if (image->pixmap->mask)
- XSetClipMask(display, xdata->gc, image->pixmap->mask);
- if (image->depth == 1)
- XCopyPlane(display, image->pixmap->pixmap, window, xdata->gc,
- 0, 0, XawMin(width, xe - x), XawMin(height, ye - y),
- x, y, 1L);
- else
- XCopyArea(display, image->pixmap->pixmap, window, xdata->gc, 0, 0,
- XawMin(width, xe - x), XawMin(height, ye - y), x, y);
- }
-
- XSetClipMask(display, xdata->gc, None);
-}
-
-typedef struct _Dl_init Dl_init;
-struct _Dl_init {
- String name;
- XawDisplayListProc proc;
- Cardinal id;
-};
-
-static Dl_init dl_init[] =
-{
- {"arc-mode", DlArcMode, ARCMODE},
- {"background", DlBackground, GCBG},
- {"bg", DlBackground, GCBG},
- {"cap-style", DlCapStyle, CAPSTYLE},
- {"clip-mask", DlClipMask, CLIPMASK},
- {"clip-origin", DlClipOrigin, CLIPORIGIN},
- {"clip-rectangles", DlClipRectangles, CLIPRECTS},
- {"clip-rects", DlClipRectangles, CLIPRECTS},
- {"coord-mode", DlCoordMode, COORDMODE},
- {"copy-area", DlCopyArea, COPYAREA},
- {"copy-plane", DlCopyPlane, COPYPLANE},
- {"dashes", DlDashes, DASHES},
- {"draw-arc", DlDrawArc, DARC},
- {"draw-line", DlLine, LINE},
- {"draw-lines", DlDrawLines, DLINES},
- {"draw-point", DlDrawPoint, POINT},
- {"draw-points", DlDrawPoints, POINTS},
- {"draw-rect", DlDrawRectangle, DRECT},
- {"draw-rectangle", DlDrawRectangle, DRECT},
- {"draw-segments", DlDrawSegments, SEGMENTS},
- {"draw-string", DlDrawString, DSTRING},
- {"exposures", DlExposures, EXPOSURES},
- {"fg", DlForeground, GCFG},
- {"fill-arc", DlFillArc, FARC},
- {"fill-poly", DlFillPolygon, FPOLY},
- {"fill-polygon", DlFillPolygon, FPOLY},
- {"fill-rect", DlFillRectangle, FRECT},
- {"fill-rectangle", DlFillRectangle, FRECT},
- {"fill-rule", DlFillRule, FILLRULE},
- {"fill-style", DlFillStyle, FILLSTYLE},
- {"font", DlFont, FONT},
- {"foreground", DlForeground, GCFG},
- {"function", DlFunction, FUNCTION},
- {"image", DlImage, IMAGE},
- {"join-style", DlJoinStyle, JOINSTYLE},
- {"line", DlLine, LINE},
- {"line-style", DlLineStyle, LINESTYLE},
- {"line-width", DlLineWidth, LWIDTH},
- {"lines", DlDrawLines, DLINES},
- {"mask", DlMask, MASK},
- {"paint-string", DlPaintString, PSTRING},
- {"plane-mask", DlPlaneMask, PLANEMASK},
- {"point", DlDrawPoint, POINT},
- {"points", DlDrawPoints, POINTS},
- {"segments", DlDrawSegments, SEGMENTS},
- {"shape-mode", DlShapeMode, SHAPEMODE},
- {"stipple", DlStipple, STIPPLE},
- {"subwindow-mode", DlSubwindowMode, SUBWMODE},
- {"tile", DlTile, TILE},
- {"ts-origin", DlTSOrigin, TSORIGIN},
- {"umask", DlUmask, UMASK},
-};
-
-void
-XawDisplayListInitialize(void)
-{
- static Bool first_time = True;
- XawDLClass *lc;
- Cardinal i;
-
- if (first_time == False)
- return;
-
- first_time = False;
-
- lc = XawCreateDisplayListClass(xlib,
- _Xaw_Xlib_ArgsInitProc,
- _Xaw_Xlib_ArgsDestructor,
- _Xaw_Xlib_DataInitProc,
- _Xaw_Xlib_DataDestructor);
- for (i = 0; i < sizeof(dl_init) / sizeof(dl_init[0]); i++)
- (void)XawDeclareDisplayListProc(lc, dl_init[i].name, dl_init[i].proc);
-}
-
-static int
-bcmp_cvt_proc(register _Xconst void *string,
- register _Xconst void *dlinfo)
-{
- return (strcmp((String)string, ((Dl_init*)dlinfo)->name));
-}
-
-static long
-read_int(char *cp, char **cpp)
-{
- long value = 0, sign = 1;
-
- if (*cp == '-')
- {
- sign = -1;
- ++cp;
- }
- else if (*cp == '+')
- ++cp;
- value = 0;
- while (*cp >= '0' && *cp <= '9')
- {
- value = value * 10 + *cp - '0';
- ++cp;
- }
- if (cpp)
- *cpp = cp;
- return (value * sign);
-}
-
-static void
-read_position(char *arg, XawDLPosition *pos)
-{
- int ch;
- char *str = arg;
-
- ch = *str;
- if (ch == '-' || ch == '+')
- {
- ++str;
- if (ch == '-')
- pos->high = True;
- pos->pos = read_int(str, NULL);
- }
- else if (isdigit(ch))
- {
- pos->pos = read_int(str, &str);
- ch = *str++;
- if (ch == '/')
- pos->denom = read_int(str, NULL);
- }
-}
-
-/* ARGSUSED */
-static void *
-_Xaw_Xlib_ArgsInitProc(String proc_name, String *params, Cardinal *num_params,
- Screen *screen, Colormap colormap, int depth)
-{
- Cardinal id, i;
- Dl_init *init;
- void *retval = XAWDL_CONVERT_ERROR;
-
- init = (Dl_init *)bsearch(proc_name, dl_init,
- sizeof(dl_init) / sizeof(dl_init[0]),
- sizeof(dl_init[0]),
- bcmp_cvt_proc);
-
- id = init->id;
-
- switch (id)
- {
- case LINE:
- case DRECT:
- case FRECT:
- if (*num_params == 4)
- {
- XawDLPosition *pos = (XawDLPosition *)XtCalloc(1, sizeof(XawDLPosition) * 4);
-
- for (i = 0; i < 4; i++)
- read_position(params[i], &pos[i]);
- retval = (void *)pos;
- }
- break;
- case POINT:
- case TSORIGIN:
- case CLIPORIGIN:
- if (*num_params == 2)
- {
- XawDLPosition *pos = (XawDLPosition *)XtCalloc(1, sizeof(XawDLPosition) * 2);
-
- read_position(params[0], &pos[0]);
- read_position(params[1], &pos[1]);
- retval = (void *)pos;
- }
- break;
- case DLINES:
- case FPOLY:
- case POINTS:
- if (*num_params >= 4 && !(*num_params & 1))
- {
- XawDLPositionPtr *pos = XtNew(XawDLPositionPtr);
-
- pos->pos = (XawDLPosition *)XtCalloc(1, sizeof(XawDLPosition) *
- *num_params);
- pos->num_pos = *num_params;
- for (i = 0; i < *num_params; i++)
- read_position(params[i], &pos->pos[i]);
- retval = (void *)pos;
- }
- break;
- case SEGMENTS:
- case CLIPRECTS:
- if (*num_params >= 4 && !(*num_params % 4))
- {
- XawDLPositionPtr *pos = XtNew(XawDLPositionPtr);
-
- pos->pos = (XawDLPosition *)XtCalloc(1, sizeof(XawDLPosition) *
- *num_params);
- pos->num_pos = *num_params;
- for (i = 0; i < *num_params; i++)
- read_position(params[i], &pos->pos[i]);
- retval = (void *)pos;
- }
- break;
- case DARC:
- case FARC:
- if (*num_params >= 4 && *num_params <= 6)
- {
- XawDLArcArgs *args = (XawDLArcArgs *)XtCalloc(1, sizeof(XawDLArcArgs));
-
- args->angle1 = 0;
- args->angle2 = 360;
- for (i = 0; i < 4; i++)
- read_position(params[i], &args->pos[i]);
- if (*num_params > 4)
- args->angle1 = read_int(params[4], NULL);
- if (*num_params > 5)
- args->angle2 = read_int(params[5], NULL);
- args->angle1 *= 64;
- args->angle2 *= 64;
- retval = (void *)args;
- }
- break;
- case GCFG:
- case GCBG:
- {
- XColor xcolor;
-
- if (*num_params == 1 &&
- XAllocNamedColor(DisplayOfScreen(screen), colormap,
- params[0], &xcolor, &xcolor))
- retval = (void *)xcolor.pixel;
- } break;
- case MASK:
- case UMASK:
- if (*num_params == 0)
- retval = NULL;
- break;
- case LWIDTH:
- if (*num_params == 1)
- retval = (void *)read_int(params[0], NULL);
- break;
- case ARCMODE:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "pieslice") == 0)
- retval = (void *)ArcPieSlice;
- else if (XmuCompareISOLatin1(params[0], "chord") == 0)
- retval = (void *)ArcChord;
- }
- break;
- case COORDMODE:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "origin") == 0)
- retval = (void *)CoordModeOrigin;
- else if (XmuCompareISOLatin1(params[0], "previous") == 0)
- retval = (void *)CoordModePrevious;
- }
- break;
- case SHAPEMODE:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "complex") == 0)
- retval = (void *)Complex;
- else if (XmuCompareISOLatin1(params[0], "convex") == 0)
- retval = (void *)Convex;
- else if (XmuCompareISOLatin1(params[0], "nonconvex") == 0)
- retval = (void *)Nonconvex;
- }
- break;
- case LINESTYLE:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "solid") == 0)
- retval = (void *)LineSolid;
- else if (XmuCompareISOLatin1(params[0], "onoffdash") == 0)
- retval = (void *)LineOnOffDash;
- else if (XmuCompareISOLatin1(params[0], "doubledash") == 0)
- retval = (void *)LineDoubleDash;
- }
- break;
- case CAPSTYLE:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "notlast") == 0)
- retval = (void *)CapNotLast;
- else if (XmuCompareISOLatin1(params[0], "butt") == 0)
- retval = (void *)CapButt;
- else if (XmuCompareISOLatin1(params[0], "round") == 0)
- retval = (void *)CapRound;
- else if (XmuCompareISOLatin1(params[0], "projecting") == 0)
- retval = (void *)CapProjecting;
- }
- break;
- case JOINSTYLE:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "miter") == 0)
- retval = (void *)JoinMiter;
- else if (XmuCompareISOLatin1(params[0], "round") == 0)
- retval = (void *)JoinRound;
- else if (XmuCompareISOLatin1(params[0], "bevel") == 0)
- retval = (void *)JoinBevel;
- }
- break;
- case FILLSTYLE:
- if (*num_params == 1)
- {
- if (*num_params && XmuCompareISOLatin1(params[0], "solid") == 0)
- retval = (void *)FillSolid;
- else if (*num_params && XmuCompareISOLatin1(params[0], "tiled") == 0)
- retval = (void *)FillTiled;
- else if (*num_params && XmuCompareISOLatin1(params[0], "stippled") == 0)
- retval = (void *)FillStippled;
- else if (*num_params && XmuCompareISOLatin1(params[0], "opaquestippled") == 0)
- retval = (void *)FillOpaqueStippled;
- }
- break;
- case FILLRULE:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "evenodd") == 0)
- retval = (void *)EvenOddRule;
- else if (XmuCompareISOLatin1(params[0], "winding") == 0)
- retval = (void *)WindingRule;
- }
- break;
- case TILE:
- if (*num_params == 1)
- retval = (void *)XawLoadPixmap(params[0], screen, colormap, depth);
- if (retval == NULL)
- {
- XtDisplayStringConversionWarning(DisplayOfScreen(screen), (String)params[0],
- XtRPixmap);
- retval = XAWDL_CONVERT_ERROR;
- }
- break;
- case STIPPLE:
- if (*num_params == 1)
- retval = (void *)XawLoadPixmap(params[0], screen, colormap, 1);
- if (retval == NULL)
- {
- XtDisplayStringConversionWarning(DisplayOfScreen(screen), (String)params[0],
- XtRBitmap);
- retval = XAWDL_CONVERT_ERROR;
- }
- break;
- case FUNCTION:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "set") == 0)
- retval = (void *)GXset;
- else if (XmuCompareISOLatin1(params[0], "clear") == 0)
- retval = (void *)GXclear;
- else if (XmuCompareISOLatin1(params[0], "and") == 0)
- retval = (void *)GXand;
- else if (XmuCompareISOLatin1(params[0], "andreverse") == 0)
- retval = (void *)GXandReverse;
- else if (XmuCompareISOLatin1(params[0], "copy") == 0)
- retval = (void *)GXcopy;
- else if (XmuCompareISOLatin1(params[0], "andinverted") == 0)
- retval = (void *)GXandInverted;
- else if (XmuCompareISOLatin1(params[0], "noop") == 0)
- retval = (void *)GXnoop;
- else if (XmuCompareISOLatin1(params[0], "xor") == 0)
- retval = (void *)GXxor;
- else if (XmuCompareISOLatin1(params[0], "or") == 0)
- retval = (void *)GXor;
- else if (XmuCompareISOLatin1(params[0], "nor") == 0)
- retval = (void *)GXnor;
- else if (XmuCompareISOLatin1(params[0], "equiv") == 0)
- retval = (void *)GXequiv;
- else if (XmuCompareISOLatin1(params[0], "invert") == 0)
- retval = (void *)GXinvert;
- else if (XmuCompareISOLatin1(params[0], "orreverse") == 0)
- retval = (void *)GXorReverse;
- else if (XmuCompareISOLatin1(params[0], "copyinverted") == 0)
- retval = (void *)GXcopyInverted;
- else if (XmuCompareISOLatin1(params[0], "nand") == 0)
- retval = (void *)GXnand;
- }
- break;
- case PLANEMASK:
- if (*num_params == 1)
- retval = (void *)read_int(params[0], NULL);
- break;
- case DSTRING:
- case PSTRING:
- if (*num_params == 3)
- {
- XawDLStringArgs *string = (XawDLStringArgs *)
- XtCalloc(1, sizeof(XawDLStringArgs));
-
- read_position(params[0], &string->pos[0]);
- read_position(params[1], &string->pos[1]);
- string->string = XtNewString(params[2]);
- string->length = strlen(string->string);
- retval = string;
- }
- break;
- case FONT:
- if (*num_params == 1)
- retval = (void *)XLoadFont(DisplayOfScreen(screen), params[0]);
- break;
- case DASHES:
- if (*num_params && *num_params < 127)
- {
- char *dashes;
-
- dashes = XtMalloc(*num_params + 1);
-
- for (i = 0; i < *num_params; i++)
- dashes[i + 1] = read_int(params[i], NULL);
- *dashes = *num_params;
- retval = dashes;
- }
- break;
- case SUBWMODE:
- if (*num_params == 1)
- {
- if (XmuCompareISOLatin1(params[0], "clipbychildren") == 0)
- retval = (void *)ClipByChildren;
- else if (XmuCompareISOLatin1(params[0], "includeinferiors") == 0)
- retval = (void *)IncludeInferiors;
- }
- break;
- case EXPOSURES:
- if (*num_params == 1)
- {
- if (isdigit(params[0][0]) || params[0][0] == '+' || params[0][0] == '-')
- retval = (void *)read_int(params[0], NULL);
- else if (XmuCompareISOLatin1(params[0], "true") == 0 ||
- XmuCompareISOLatin1(params[0], "on") == 0)
- retval = (void *)True;
- else if (XmuCompareISOLatin1(params[0], "false") == 0 ||
- XmuCompareISOLatin1(params[0], "off") == 0)
- retval = (void *)False;
- }
- break;
- case CLIPMASK:
- if (*num_params == 1)
- retval = (void *)XawLoadPixmap(params[0], screen, colormap, 1);
- if (retval == NULL)
- {
- retval = XAWDL_CONVERT_ERROR;
- XtDisplayStringConversionWarning(DisplayOfScreen(screen), (String)params[0],
- XtRPixmap);
- }
- break;
- case COPYAREA:
- case COPYPLANE:
- if (*num_params > 2 && *num_params <= 7 + (id == COPYPLANE))
- {
- XawDLCopyArgs *args = (XawDLCopyArgs *)
- XtCalloc(1, sizeof(XawDLCopyArgs));
-
- retval = args;
- if (params[0][0] == '\0' || strcmp(params[0], ".") == 0)
- args->pixmap = NULL;
- else
- {
- args->pixmap = XawLoadPixmap(params[0], screen, colormap, id == COPYPLANE ? 1 : depth);
- if (args->pixmap == NULL)
- {
- XtDisplayStringConversionWarning(DisplayOfScreen(screen), (String)params[0],
- XtRBitmap);
- retval = XAWDL_CONVERT_ERROR;
- XtFree((char *)args);
- }
- }
- if (retval != XAWDL_CONVERT_ERROR)
- {
- for (i = 1; i < *num_params && i < 7; i++)
- read_position(params[i], &args->pos[i - 1]);
- if (*num_params > 7)
- args->plane = read_int(params[7], NULL);
- }
- }
- break;
- case IMAGE:
- if (*num_params > 2 && *num_params <= 7)
- {
- XawDLImageArgs *args = (XawDLImageArgs *)
- XtCalloc(1, sizeof(XawDLImageArgs));
-
- retval = args;
- args->pixmap = XawLoadPixmap(params[0], screen, colormap, depth);
- if (args->pixmap == NULL)
- {
- XtDisplayStringConversionWarning(DisplayOfScreen(screen),
- (String)params[0], XtRPixmap);
- retval = XAWDL_CONVERT_ERROR;
- XtFree((char *)args);
- }
- else
- {
- args->depth = depth;
- for (i = 1; i < *num_params && i < 5; i++)
- read_position(params[i], &args->pos[i - 1]);
- }
- }
- break;
- }
-
- return (retval);
-}
-
-/* ARGSUSED */
-static void *
-_Xaw_Xlib_DataInitProc(String class_name,
- Screen *screen, Colormap colormap, int depth)
-{
- XawXlibData *data;
- Window tmp_win;
-
- data = (XawXlibData *)XtMalloc(sizeof(XawXlibData));
-
- tmp_win = XCreateWindow(DisplayOfScreen(screen),
- RootWindowOfScreen(screen),
- 0, 0, 1, 1, 1, depth,
- InputOutput, (Visual *)CopyFromParent, 0, NULL);
- data->mask = 0;
- data->gc = XCreateGC(DisplayOfScreen(screen), tmp_win, 0, &data->values);
- XDestroyWindow(DisplayOfScreen(screen), tmp_win);
- data->shape = Complex;
- data->mode = CoordModeOrigin;
- data->dashes = NULL;
-
- return ((void *)data);
-}
-
-/* ARGSUSED */
-static void
-_Xaw_Xlib_ArgsDestructor(Display *display, String proc_name, XtPointer args,
- String *params, Cardinal *num_params)
-{
- Cardinal id;
- Dl_init *init;
-
- init = (Dl_init *)bsearch(proc_name, dl_init,
- sizeof(dl_init) / sizeof(dl_init[0]),
- sizeof(dl_init[0]),
- bcmp_cvt_proc);
-
- id = init->id;
-
- switch (id)
- {
- case LINE:
- case DRECT:
- case FRECT:
- case DARC:
- case FARC:
- case POINT:
- case TSORIGIN:
- case DASHES:
- case CLIPORIGIN:
- case COPYAREA:
- case COPYPLANE:
- case IMAGE:
- XtFree(args);
- break;
- case DSTRING:
- case PSTRING:
- {
- XawDLStringArgs *string = (XawDLStringArgs *)args;
- XtFree(string->string);
- XtFree(args);
- } break;
- case DLINES:
- case FPOLY:
- case POINTS:
- case SEGMENTS:
- case CLIPRECTS:
- {
- XawDLPositionPtr *ptr = (XawDLPositionPtr *)args;
-
- XtFree((char *)ptr->pos);
- XtFree(args);
- } break;
- }
-}
-
-/* ARGSUSED */
-static void
-_Xaw_Xlib_DataDestructor(Display *display, String class_name, XtPointer data)
-{
- if (data)
- {
- XawXlibData *xdata = (XawXlibData *)data;
-
- XFreeGC(display, xdata->gc);
- if (xdata->dashes)
- XtFree(xdata->dashes);
- XtFree((char *)data);
- }
-}
-
-/* Start of DLInfo Management Functions */
-static int
-qcmp_dlist_info(register _Xconst void *left, register _Xconst void *right)
-{
- return (strcmp((*(XawDLInfo **)left)->name, (*(XawDLInfo **)right)->name));
-}
-
-Bool XawDeclareDisplayListProc(XawDLClass *lc, String name,
- XawDisplayListProc proc)
-{
- XawDLInfo *info;
-
- if (!lc || !proc || !name || name[0] == '\0')
- return (False);
-
- if ((info = _XawFindDLInfo(lc, name)) != NULL)
- /* Since the data structures to the displayList classes are(should be)
- * opaque, it is not a good idea to allow overriding a displayList
- * procedure; it's better to choose another name or class name!
- */
- return (False);
-
- info = (XawDLInfo *)XtMalloc(sizeof(XawDLInfo));
- info->name = XtNewString(name);
- info->qname = XrmStringToQuark(info->name);
- info->proc = proc;
-
- if (!lc->num_infos)
- {
- lc->num_infos = 1;
- lc->infos = (XawDLInfo **)XtMalloc(sizeof(XawDLInfo*));
- }
- else
- {
- ++lc->num_infos;
- lc->infos = (XawDLInfo **)
- XtRealloc((char *)lc->infos, sizeof(XawDLInfo*) * lc->num_infos);
- }
- lc->infos[lc->num_infos - 1] = info;
-
- if (lc->num_infos > 1)
- qsort(lc->infos, lc->num_infos, sizeof(XawDLInfo*), qcmp_dlist_info);
-
- return (True);
-}
-
-static int
-bcmp_dlist_info(register _Xconst void *string,
- register _Xconst void *dlinfo)
-{
- return (strcmp((String)string, (*(XawDLClass **)dlinfo)->name));
-}
-
-static XawDLInfo *
-_XawFindDLInfo(XawDLClass *lc, String name)
-{
- XawDLInfo **info;
-
- if (!lc->infos)
- return (NULL);
-
- info = (XawDLInfo **)bsearch(name, lc->infos, lc->num_infos,
- sizeof(XawDLInfo*), bcmp_dlist_info);
-
- return (info ? *info : NULL);
-}
-
-/* Start of DLClass Management Functions */
-XawDLClass *
-XawGetDisplayListClass(String name)
-{
- return (_XawFindDLClass(name));
-}
-
-static int
-qcmp_dlist_class(register _Xconst void *left, register _Xconst void *right)
-{
- return (strcmp((*(XawDLClass **)left)->name, (*(XawDLClass **)right)->name));
-}
-
-XawDLClass *
-XawCreateDisplayListClass(String name,
- XawDLArgsInitProc args_init,
- XawDLArgsDestructor args_destructor,
- XawDLDataInitProc data_init,
- XawDLDataDestructor data_destructor)
-{
- XawDLClass *lc;
-
- if (!name || name[0] == '\0')
- return (NULL);
-
- lc = (XawDLClass *)XtMalloc(sizeof(XawDLClass));
- lc->name = XtNewString(name);
- lc->infos = NULL;
- lc->num_infos = 0;
- lc->args_init = args_init;
- lc->args_destructor = args_destructor;
- lc->data_init = data_init;
- lc->data_destructor = data_destructor;
-
- if (!classes)
- {
- num_classes = 1;
- classes = (XawDLClass **)XtMalloc(sizeof(XawDLClass));
- }
- else
- {
- ++num_classes;
- classes = (XawDLClass **)XtRealloc((char *)classes,
- sizeof(XawDLClass) * num_classes);
- }
- classes[num_classes - 1] = lc;
-
- if (num_classes > 1)
- qsort(&classes[0], num_classes, sizeof(XawDLClass*), qcmp_dlist_class);
-
- return (lc);
-}
-
-static int
-bcmp_dlist_class(register _Xconst void *string,
- register _Xconst void *dlist)
-{
- return (strcmp((String)string, (*(XawDLClass **)dlist)->name));
-}
-
-static XawDLClass *
-_XawFindDLClass(String name)
-{
- XawDLClass **lc;
-
- if (!classes)
- return (NULL);
-
- lc = (XawDLClass **)bsearch(name, &classes[0], num_classes,
- sizeof(XawDLClass*), bcmp_dlist_class);
-
- return (lc ? *lc : NULL);
-}
-
-#endif /* OLDXAW */
+/*
+ * Copyright (c) 1998 by The XFree86 Project, 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 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.
+ *
+ * Author: Paulo César Pereira de Andrade
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <ctype.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/CoreP.h>
+#include <X11/Xfuncs.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/SysUtil.h>
+#include "Private.h"
+
+#ifdef __UNIXOS2__
+static char dummy;
+#endif
+
+#ifndef OLDXAW
+
+/*
+ * Types
+ */
+typedef struct _XawDLProc XawDLProc;
+typedef struct _XawDLData XawDLData;
+typedef struct _XawDLInfo XawDLInfo;
+
+struct _XawDLProc {
+ XrmQuark qname;
+ String *params;
+ Cardinal num_params;
+ XawDisplayListProc proc;
+ XtPointer args;
+ XawDLData *data;
+};
+
+struct _XawDLData {
+ XawDLClass *dlclass;
+ XtPointer data;
+};
+
+struct _XawDLInfo {
+ String name;
+ XrmQuark qname;
+ XawDisplayListProc proc;
+};
+
+struct _XawDL {
+ XawDLProc **procs;
+ Cardinal num_procs;
+ XawDLData **data;
+ Cardinal num_data;
+ Screen *screen;
+ Colormap colormap;
+ int depth;
+ XrmQuark qrep; /* for cache lookup */
+};
+
+struct _XawDLClass {
+ String name;
+ XawDLInfo **infos;
+ Cardinal num_infos;
+ XawDLArgsInitProc args_init;
+ XawDLArgsDestructor args_destructor;
+ XawDLDataInitProc data_init;
+ XawDLDataDestructor data_destructor;
+};
+
+/*
+ * Private Methods
+ */
+static XawDLClass *_XawFindDLClass(String);
+static int qcmp_dlist_class(_Xconst void*, _Xconst void*);
+static int bcmp_dlist_class(_Xconst void*, _Xconst void*);
+static XawDLInfo *_XawFindDLInfo(XawDLClass*, String);
+static int qcmp_dlist_info(_Xconst void*, _Xconst void*);
+static int bcmp_dlist_info(_Xconst void*, _Xconst void*);
+static void *_Xaw_Xlib_ArgsInitProc(String, String*, Cardinal*,
+ Screen*, Colormap, int);
+static void _Xaw_Xlib_ArgsDestructor(Display*, String, XtPointer,
+ String*, Cardinal*);
+static void *_Xaw_Xlib_DataInitProc(String, Screen*, Colormap, int);
+static void _Xaw_Xlib_DataDestructor(Display*, String, XtPointer);
+
+/*
+ * Initialization
+ */
+static XawDLClass **classes;
+static Cardinal num_classes;
+static String xlib = "xlib";
+
+/*
+ * Implementation
+ */
+void
+XawRunDisplayList(Widget w, _XawDisplayList *list,
+ XEvent *event, Region region)
+{
+ XawDLProc *proc;
+ Cardinal i;
+
+ if (!XtIsRealized(w))
+ return;
+
+ for (i = 0; i < list->num_procs; i++)
+ {
+ proc = list->procs[i];
+ proc->proc(w, proc->args, proc->data->data, event, region);
+ }
+}
+
+#define DLERR -2
+#define DLEOF -1
+#define DLEND 1
+#define DLNAME 2
+#define DLARG 3
+static char *
+read_token(char *src, char *dst, Cardinal size, int *status)
+{
+ int ch;
+ Bool esc, quote;
+ Cardinal i;
+
+ i = 0;
+ esc = quote = False;
+
+ /*CONSTCOND*/
+ while (1)
+ {
+ ch = *src;
+ if (ch != '\n' && isspace(ch))
+ ++src;
+ else
+ break;
+ }
+
+ for (; i < size - 1; src++)
+ {
+ ch = *src;
+ if (ch == '"')
+ {
+ if (quote)
+ {
+ quote = False;
+ continue;
+ }
+ quote = True;
+ continue;
+ }
+ if (ch == '\\')
+ {
+ if (esc)
+ {
+ dst[i++] = ch;
+ esc = False;
+ continue;
+ }
+ esc = True;
+ continue;
+ }
+ if (ch == '\0')
+ {
+ *status = DLEOF;
+ dst[i] = '\0';
+ return (src);
+ }
+ else if (!esc)
+ {
+ if (!quote)
+ {
+ if (ch == ',')
+ {
+ *status = DLARG;
+ dst[i] = '\0';
+ return (++src);
+ }
+ else if (ch == ' ' || ch == '\t')
+ {
+ *status = DLNAME;
+ dst[i] = '\0';
+ return (++src);
+ }
+ else if (ch == ';' || ch == '\n')
+ {
+ *status = DLEND;
+ dst[i] = '\0';
+ return (++src);
+ }
+ }
+ }
+ else
+ esc = False;
+ dst[i++] = ch;
+ }
+
+ *status = DLERR;
+ dst[i] = '\0';
+
+ return (src);
+}
+
+_XawDisplayList *XawCreateDisplayList(String string, Screen *screen,
+ Colormap colormap, int depth)
+{
+ _XawDisplayList *dlist;
+ XawDLClass *lc, *xlibc;
+ XawDLData *data;
+ XawDLInfo *info;
+ XawDLProc *proc;
+ char cname[64], fname[64], aname[1024];
+ Cardinal i;
+ char *cp, *fp, *lp;
+ int status;
+
+ xlibc = XawGetDisplayListClass(xlib);
+ if (!xlibc)
+ {
+ XawDisplayListInitialize();
+ xlibc = XawGetDisplayListClass(xlib);
+ }
+
+ dlist = (_XawDisplayList *)XtMalloc(sizeof(_XawDisplayList));
+ dlist->procs = NULL;
+ dlist->num_procs = 0;
+ dlist->data = NULL;
+ dlist->num_data = 0;
+ dlist->screen = screen;
+ dlist->colormap = colormap;
+ dlist->depth = depth;
+ dlist->qrep = NULLQUARK;
+ if (!string || !string[0])
+ return (dlist);
+
+ cp = string;
+
+ status = 0;
+ while (status != DLEOF)
+ {
+ lp = cp;
+ cp = read_token(cp, fname, sizeof(fname), &status);
+
+ if (status != DLNAME && status != DLEND && status != DLEOF)
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "Error parsing displayList at \"%s\"", lp);
+ XtAppWarning(XtDisplayToApplicationContext(DisplayOfScreen(screen)),
+ msg);
+ XawDestroyDisplayList(dlist);
+ return (NULL);
+ }
+ fp = fname;
+ /*CONSTCOND*/
+ while (1)
+ {
+ fp = strchr(fp, ':');
+ if (!fp || (fp == cp || fp[-1] != '\\'))
+ break;
+ ++fp;
+ }
+ if (fp)
+ {
+ XmuSnprintf(cname, fp - fname + 1, fname);
+ memmove(fname, fp + 1, strlen(fp));
+ lc = cname[0] ? XawGetDisplayListClass(cname) : xlibc;
+ if (!lc)
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "Cannot find displayList class \"%s\"", cname);
+ XtAppWarning(XtDisplayToApplicationContext
+ (DisplayOfScreen(screen)), msg);
+ XawDestroyDisplayList(dlist);
+ return (NULL);
+ }
+ }
+ else
+ lc = xlibc;
+
+ if (status == DLEOF && !fname[0])
+ break;
+
+ if ((info = _XawFindDLInfo(lc, fname)) == NULL)
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "Cannot find displayList procedure \"%s\"", fname);
+ XtAppWarning(XtDisplayToApplicationContext(DisplayOfScreen(screen)),
+ msg);
+ XawDestroyDisplayList(dlist);
+ return (NULL);
+ }
+
+ proc = (XawDLProc *)XtMalloc(sizeof(XawDLProc));
+ proc->qname = info->qname;
+ proc->params = NULL;
+ proc->num_params = 0;
+ proc->proc = info->proc;
+ proc->args = NULL;
+ proc->data = NULL;
+
+ if (!dlist->procs)
+ {
+ dlist->num_procs = 1;
+ dlist->procs = (XawDLProc**)XtMalloc(sizeof(XawDLProc*));
+ }
+ else
+ {
+ ++dlist->num_procs;
+ dlist->procs = (XawDLProc**)
+ XtRealloc((char *)dlist->procs, sizeof(XawDLProc*) *
+ dlist->num_procs);
+ }
+ dlist->procs[dlist->num_procs - 1] = proc;
+
+ while (status != DLEND && status != DLEOF)
+ {
+ lp = cp;
+ cp = read_token(cp, aname, sizeof(aname), &status);
+
+ if (status != DLARG && status != DLEND && status != DLEOF)
+ {
+ char msg[256];
+
+ XmuSnprintf(msg, sizeof(msg),
+ "Error parsing displayList at \"%s\"", lp);
+ XtAppWarning(XtDisplayToApplicationContext
+ (DisplayOfScreen(screen)), msg);
+ XawDestroyDisplayList(dlist);
+ return (NULL);
+ }
+
+ if (!proc->num_params)
+ {
+ proc->num_params = 1;
+ proc->params = (String *)XtMalloc(sizeof(String));
+ }
+ else
+ {
+ ++proc->num_params;
+ proc->params = (String *)XtRealloc((char *)proc->params,
+ sizeof(String) *
+ proc->num_params);
+ }
+ proc->params[proc->num_params - 1] = XtNewString(aname);
+ }
+
+ /* verify if data is already created for lc */
+ data = NULL;
+ for (i = 0; i < dlist->num_data; i++)
+ if (dlist->data[i]->dlclass == lc)
+ {
+ data = dlist->data[i];
+ break;
+ }
+
+ if (!data)
+ {
+ data = (XawDLData *)XtMalloc(sizeof(XawDLData));
+ data->dlclass = lc;
+ if (lc->data_init)
+ data->data = lc->data_init(lc->name, screen, colormap, depth);
+ else
+ data->data = NULL;
+
+ if (!dlist->data)
+ {
+ dlist->num_data = 1;
+ dlist->data = (XawDLData **)XtMalloc(sizeof(XawDLData*));
+ }
+ else
+ {
+ ++dlist->num_data;
+ dlist->data = (XawDLData **)
+ XtRealloc((char *)dlist->data, sizeof(XawDLData*) *
+ dlist->num_data);
+ }
+ dlist->data[dlist->num_data - 1] = data;
+ }
+
+ if (lc->args_init)
+ {
+ proc->args = lc->args_init(fname, proc->params, &proc->num_params,
+ screen, colormap, depth);
+ if (proc->args == XAWDL_CONVERT_ERROR)
+ {
+ char msg[256];
+
+ proc->args = NULL;
+ XmuSnprintf(msg, sizeof(msg),
+ "Cannot convert arguments to displayList function \"%s\"", fname);
+ XtAppWarning(XtDisplayToApplicationContext
+ (DisplayOfScreen(screen)), msg);
+ XawDestroyDisplayList(dlist);
+ return (NULL);
+ }
+ }
+ else
+ proc->args = NULL;
+
+ proc->data = data;
+ }
+
+ dlist->qrep = XrmStringToQuark(string);
+ return (dlist);
+}
+
+String
+XawDisplayListString(_XawDisplayList *dlist)
+{
+ if (!dlist || dlist->qrep == NULLQUARK)
+ return ("");
+ return (XrmQuarkToString(dlist->qrep));
+}
+
+void
+XawDestroyDisplayList(_XawDisplayList *dlist)
+{
+ Cardinal i, j;
+ XawDLProc *proc;
+ XawDLData *data;
+
+ if (!dlist)
+ return;
+
+ for (i = 0; i < dlist->num_procs; i++)
+ {
+ proc = dlist->procs[i];
+ data = proc->data;
+
+ if (data)
+ {
+ if (data->dlclass->args_destructor)
+ data->dlclass->args_destructor(DisplayOfScreen(dlist->screen),
+ XrmQuarkToString(proc->qname),
+ proc->args,
+ proc->params, &proc->num_params);
+ if (data->data)
+ {
+ if (data->dlclass->data_destructor)
+ {
+ data->dlclass
+ ->data_destructor(DisplayOfScreen(dlist->screen),
+ data->dlclass->name, data->data);
+ data->data = NULL;
+ }
+ }
+ }
+
+ for (j = 0; j < proc->num_params; j++)
+ XtFree(proc->params[j]);
+ if (proc->num_params)
+ XtFree((char *)proc->params);
+ XtFree((char *)proc);
+ }
+
+ if (dlist->num_procs)
+ XtFree((char *)dlist->procs);
+
+ XtFree((char *)dlist);
+}
+
+/**********************************************************************
+ * If you want to implement your own class of procedures, look at
+ * the code bellow.
+ **********************************************************************/
+/* Start of Implementation of class "xlib" */
+typedef struct _XawXlibData {
+ GC gc;
+ unsigned long mask;
+ XGCValues values;
+ int shape;
+ int mode;
+ char *dashes;
+ /* these fields can be used for optimization, to
+ * avoid unnecessary coordinates recalculation.
+ */
+ Position x, y;
+ Dimension width, height;
+} XawXlibData;
+
+typedef struct _XawDLPosition {
+ Position pos;
+ short denom;
+ Boolean high;
+} XawDLPosition;
+
+typedef struct _XawDLPositionPtr {
+ XawDLPosition *pos;
+ Cardinal num_pos;
+} XawDLPositionPtr;
+
+typedef struct _XawDLArcArgs {
+ XawDLPosition pos[4];
+ int angle1;
+ int angle2;
+} XawDLArcArgs;
+
+typedef struct _XawDLStringArgs {
+ XawDLPosition pos[2];
+ char *string;
+ int length;
+} XawDLStringArgs;
+
+typedef struct _XawDLCopyArgs {
+ XawPixmap *pixmap;
+ XawDLPosition pos[6];
+ int plane;
+} XawDLCopyArgs;
+
+typedef struct _XawDLImageArgs {
+ XawPixmap *pixmap;
+ XawDLPosition pos[4];
+ int depth;
+} XawDLImageArgs;
+
+#define X_ARG(x) (Position)(((x).denom != 0) ? \
+ ((float)XtWidth(w) * ((float)(x).pos / (float)(x).denom)) : \
+ ((x).high ? XtWidth(w) - (x).pos : (x).pos))
+#define Y_ARG(x) (Position)(((x).denom != 0) ? \
+ ((float)XtHeight(w) * ((float)(x).pos / (float)(x).denom)): \
+ ((x).high ? XtHeight(w) - (x).pos : (x).pos))
+#define DRECT 0
+#define FRECT 1
+#define LINE 2
+#define GCFG 3
+#define GCBG 4
+#define FPOLY 5
+#define DARC 6
+#define FARC 7
+#define DLINES 8
+#define MASK 9
+#define UMASK 10
+#define LWIDTH 11
+#define POINT 12
+#define POINTS 13
+#define SEGMENTS 14
+#define ARCMODE 15
+#define COORDMODE 16
+#define SHAPEMODE 17
+#define LINESTYLE 18
+#define CAPSTYLE 19
+#define JOINSTYLE 20
+#define FILLSTYLE 21
+#define FILLRULE 22
+#define TILE 23
+#define STIPPLE 24
+#define TSORIGIN 25
+#define FUNCTION 26
+#define PLANEMASK 27
+#define DSTRING 28
+#define PSTRING 29
+#define FONT 30
+#define DASHES 31
+#define SUBWMODE 32
+#define EXPOSURES 33
+#define CLIPORIGIN 34
+#define CLIPMASK 35
+#define CLIPRECTS 36
+#define COPYAREA 37
+#define COPYPLANE 38
+#define IMAGE 39
+
+static void
+Dl1Point(Widget w, XtPointer args, XtPointer data, int id)
+{
+ XawDLPosition *pos = (XawDLPosition *)args;
+ XawXlibData *xdata = (XawXlibData *)data;
+ Display *display;
+ Window window;
+ Position x, y;
+
+ x = X_ARG(pos[0]);
+ y = Y_ARG(pos[1]);
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ x += xpad;
+ y += ypad;
+ display = XtDisplayOfObject(w);
+ window = XtWindowOfObject(w);
+ }
+ else
+ {
+ display = XtDisplay(w);
+ window = XtWindow(w);
+ }
+
+ if (id == POINT)
+ XDrawPoint(display, window, xdata->gc, x, y);
+ else if (id == TSORIGIN)
+ {
+ xdata->values.ts_x_origin = x;
+ xdata->values.ts_y_origin = y;
+ xdata->mask |= GCTileStipXOrigin | GCTileStipYOrigin;
+ XSetTSOrigin(display, xdata->gc, x, y);
+ }
+ else if (id == CLIPORIGIN)
+ {
+ xdata->values.clip_x_origin = x;
+ xdata->values.clip_y_origin = y;
+ xdata->mask |= GCClipXOrigin | GCClipYOrigin;
+ XSetClipOrigin(display, xdata->gc, x, y);
+ }
+}
+
+static void
+Dl2Points(Widget w, XtPointer args, XtPointer data, int id)
+{
+ XawDLPosition *pos = (XawDLPosition *)args;
+ XawXlibData *xdata = (XawXlibData *)data;
+ Display *display;
+ Window window;
+ Position x1, y1, x2, y2;
+
+ x1 = X_ARG(pos[0]);
+ y1 = Y_ARG(pos[1]);
+ x2 = X_ARG(pos[2]);
+ y2 = Y_ARG(pos[3]);
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ x1 += xpad; y1 += ypad;
+ x2 += xpad; y2 += ypad;
+ display = XtDisplayOfObject(w);
+ window = XtWindowOfObject(w);
+ }
+ else
+ {
+ display = XtDisplay(w);
+ window = XtWindow(w);
+ }
+
+ if (id == DRECT)
+ XDrawRectangle(display, window, xdata->gc, x1, y1, x2 - x1, y2 - y1);
+ else if (id == FRECT)
+ XFillRectangle(display, window, xdata->gc, x1, y1, x2 - x1, y2 - y1);
+ else if (id == LINE)
+ XDrawLine(display, window, xdata->gc, x1, y1, x2, y2);
+}
+
+/* ARGSUSED */
+static void
+DlLine(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
+{
+ Dl2Points(w, args, data, LINE);
+}
+
+/* ARGSUSED */
+static void
+DlDrawRectangle(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ Dl2Points(w, args, data, DRECT);
+}
+
+/* ARGSUSED */
+static void
+DlFillRectangle(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ Dl2Points(w, args, data, FRECT);
+}
+
+static void
+DlXPoints(Widget w, XtPointer args, XtPointer data, int id)
+{
+ XawDLPositionPtr *pos_ptr = (XawDLPositionPtr *)args;
+ XawXlibData *xdata = (XawXlibData *)data;
+ XawDLPosition *pos;
+ XPoint points_buf[16];
+ XPoint *points;
+ Display *display;
+ Window window;
+ Cardinal num_points, i, j;
+
+ num_points = pos_ptr->num_pos>>1;
+ points = (XPoint *)XawStackAlloc(sizeof(XPoint) * num_points, points_buf);
+
+ for (i = j = 0; i < num_points; i++, j = i << 1)
+ {
+ pos = &pos_ptr->pos[j];
+ points[i].x = X_ARG(pos[0]);
+ points[i].y = Y_ARG(pos[1]);
+ }
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ if (xdata->mode != CoordModePrevious)
+ {
+ for (i = 0; i < num_points; i++)
+ {
+ points[i].x += xpad;
+ points[i].y += ypad;
+ }
+ }
+ else
+ {
+ points[0].x += xpad;
+ points[0].y += ypad;
+ }
+ display = XtDisplayOfObject(w);
+ window = XtWindowOfObject(w);
+ }
+ else
+ {
+ display = XtDisplay(w);
+ window = XtWindow(w);
+ }
+
+ if (id == FPOLY)
+ XFillPolygon(display, window, xdata->gc, points, num_points,
+ xdata->shape, xdata->mode);
+ else if (id == DLINES)
+ XDrawLines(display, window, xdata->gc, points, num_points, xdata->mode);
+ else if (id == POINTS)
+ XDrawPoints(display, window, xdata->gc, points, num_points, xdata->mode);
+
+ XawStackFree(points, points_buf);
+}
+
+/* ARGSUSED */
+static void
+DlFillPolygon(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlXPoints(w, args, data, FPOLY);
+}
+
+/* ARGSUSED */
+static void
+DlDrawLines(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlXPoints(w, args, data, DLINES);
+}
+
+/* ARGSUSED */
+static void
+DlDrawPoints(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlXPoints(w, args, data, POINTS);
+}
+
+/* ARGSUSED */
+static void
+DlForeground(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ Pixel foreground = (Pixel)args;
+
+ if (xdata->values.foreground != foreground)
+ {
+ xdata->mask |= GCForeground;
+ xdata->values.foreground = foreground;
+ XSetForeground(XtDisplayOfObject(w), xdata->gc, foreground);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlBackground(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ Pixel background = (Pixel)args;
+
+ if (xdata->values.background != background)
+ {
+ xdata->mask |= GCBackground;
+ xdata->values.background = background;
+ XSetBackground(XtDisplayOfObject(w), xdata->gc, background);
+ }
+}
+
+static void
+DlArc(Widget w, XtPointer args, XtPointer data, Bool fill)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ XawDLArcArgs *arc = (XawDLArcArgs *)args;
+ Position x1, y1, x2, y2;
+ Display *display;
+ Window window;
+
+ x1 = X_ARG(arc->pos[0]);
+ y1 = Y_ARG(arc->pos[1]);
+ x2 = X_ARG(arc->pos[2]);
+ y2 = Y_ARG(arc->pos[3]);
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ x1 += xpad;
+ y1 += ypad;
+ x2 += xpad;
+ y2 += ypad;
+ display = XtDisplayOfObject(w);
+ window = XtWindowOfObject(w);
+ }
+ else
+ {
+ display = XtDisplay(w);
+ window = XtWindow(w);
+ }
+
+ if (fill)
+ XFillArc(display, window, xdata->gc, x1, y1, x2 - x1, y2 - y1,
+ arc->angle1, arc->angle2);
+ else
+ XDrawArc(display, window, xdata->gc, x1, y1, x2 - x1, y2 - y1,
+ arc->angle1, arc->angle2);
+}
+
+/* ARGSUSED */
+static void
+DlDrawArc(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlArc(w, args, data, False);
+}
+
+/* ARGSUSED */
+static void
+DlFillArc(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlArc(w, args, data, True);
+}
+
+/*ARGSUSED*/
+static void
+DlMask(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ Display *display = XtDisplayOfObject(w);
+
+ if (region)
+ XSetRegion(display, xdata->gc, region);
+ else if (event)
+ {
+ XRectangle rect;
+
+ rect.x = event->xexpose.x;
+ rect.y = event->xexpose.y;
+ rect.width = event->xexpose.width;
+ rect.height = event->xexpose.height;
+ XSetClipRectangles(display, xdata->gc, 0, 0, &rect, 1, Unsorted);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlUmask(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+
+ XSetClipMask(XtDisplayOfObject(w), xdata->gc, None);
+}
+
+/* ARGSUSED */
+static void
+DlLineWidth(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ unsigned line_width = (unsigned long)args;
+
+ if (xdata->values.line_width != line_width)
+ {
+ xdata->mask |= GCLineWidth;
+ xdata->values.line_width = line_width;
+ XChangeGC(XtDisplayOfObject(w), xdata->gc, GCLineWidth, &xdata->values);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlDrawPoint(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
+{
+ Dl1Point(w, args, data, POINT);
+}
+
+/* ARGSUSED */
+static void
+DlDrawSegments(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawDLPositionPtr *pos_ptr = (XawDLPositionPtr *)args;
+ XawXlibData *xdata = (XawXlibData *)data;
+ XawDLPosition *pos;
+ XSegment *segments;
+ XSegment segments_buf[8];
+ Display *display;
+ Window window;
+ Cardinal num_segments, i, j;
+
+ num_segments = pos_ptr->num_pos>>2;
+ segments = (XSegment *)XawStackAlloc(sizeof(XSegment) * num_segments, segments_buf);
+
+ for (i = j = 0; i < num_segments; i++, j = i << 2)
+ {
+ pos = &pos_ptr->pos[j];
+ segments[i].x1 = X_ARG(pos[0]);
+ segments[i].y1 = Y_ARG(pos[1]);
+ segments[i].x2 = X_ARG(pos[2]);
+ segments[i].y2 = Y_ARG(pos[3]);
+ }
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ for (i = 0; i < num_segments; i++)
+ {
+ segments[i].x1 += xpad;
+ segments[i].y1 += ypad;
+ segments[i].x2 += xpad;
+ segments[i].y2 += ypad;
+ }
+ display = XtDisplayOfObject(w);
+ window = XtWindowOfObject(w);
+ }
+ else
+ {
+ display = XtDisplay(w);
+ window = XtWindow(w);
+ }
+
+ XDrawSegments(display, window, xdata->gc, segments, num_segments);
+
+ XawStackFree(segments, segments_buf);
+}
+
+/* ARGSUSED */
+static void
+DlArcMode(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int arc_mode = (long)args;
+
+ if (xdata->values.arc_mode != arc_mode)
+ {
+ xdata->mask |= GCArcMode;
+ xdata->values.arc_mode = arc_mode;
+ XSetArcMode(XtDisplayOfObject(w), xdata->gc, arc_mode);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlCoordMode(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int mode = (long)args;
+
+ xdata->mode = mode;
+}
+
+/* ARGSUSED */
+static void
+DlShapeMode(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int shape = (long)args;
+
+ xdata->shape = shape;
+}
+
+/* ARGSUSED */
+static void
+DlLineStyle(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int line_style = (long)args;
+
+ if (xdata->values.line_style != line_style)
+ {
+ xdata->mask |= GCLineStyle;
+ xdata->values.line_style = line_style;
+ XChangeGC(XtDisplayOfObject(w), xdata->gc, GCLineStyle, &xdata->values);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlCapStyle(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int cap_style = (long)args;
+
+ if (xdata->values.cap_style != cap_style)
+ {
+ xdata->mask |= GCCapStyle;
+ xdata->values.cap_style = cap_style;
+ XChangeGC(XtDisplayOfObject(w), xdata->gc, GCCapStyle, &xdata->values);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlJoinStyle(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int join_style = (long)args;
+
+ if (xdata->values.join_style != join_style)
+ {
+ xdata->mask |= GCJoinStyle;
+ xdata->values.join_style = join_style;
+ XChangeGC(XtDisplayOfObject(w), xdata->gc, GCJoinStyle, &xdata->values);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlFillStyle(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int fill_style = (long)args;
+
+ if (xdata->values.fill_style != fill_style)
+ {
+ xdata->mask |= GCFillStyle;
+ xdata->values.fill_style = fill_style;
+ XSetFillStyle(XtDisplayOfObject(w), xdata->gc, fill_style);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlFillRule(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int fill_rule = (long)args;
+
+ if (xdata->values.fill_rule != fill_rule)
+ {
+ xdata->mask |= GCFillRule;
+ xdata->values.fill_rule = fill_rule;
+ XSetFillRule(XtDisplayOfObject(w), xdata->gc, fill_rule);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlTile(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ XawPixmap *pixmap = (XawPixmap *)args;
+
+ if (pixmap && xdata->values.tile != pixmap->pixmap)
+ {
+ xdata->mask |= GCTile;
+ xdata->values.tile = pixmap->pixmap;
+ XSetTile(XtDisplayOfObject(w), xdata->gc, xdata->values.tile);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlStipple(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ XawPixmap *pixmap = (XawPixmap *)args;
+
+ if (pixmap && xdata->values.stipple != pixmap->pixmap)
+ {
+ xdata->mask |= GCStipple;
+ xdata->values.stipple = pixmap->pixmap;
+ XSetStipple(XtDisplayOfObject(w), xdata->gc, xdata->values.stipple);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlTSOrigin(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
+{
+ Dl1Point(w, args, data, TSORIGIN);
+}
+
+/* ARGSUSED */
+static void
+DlFunction(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int function = (long)args;
+
+ if (function != xdata->values.function)
+ {
+ xdata->mask |= GCFunction;
+ xdata->values.function = function;
+ XSetFunction(XtDisplayOfObject(w), xdata->gc, function);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlPlaneMask(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ unsigned long plane_mask = (unsigned long)args;
+
+ if (xdata->values.plane_mask != plane_mask)
+ {
+ xdata->mask |= GCPlaneMask;
+ xdata->values.plane_mask = plane_mask;
+ XSetPlaneMask(XtDisplayOfObject(w), xdata->gc, plane_mask);
+ }
+}
+
+static void
+DlString(Widget w, XtPointer args, XtPointer data, Bool image)
+{
+ XawDLStringArgs *string = (XawDLStringArgs *)args;
+ XawXlibData *xdata = (XawXlibData *)data;
+ Display *display;
+ Window window;
+ Position x, y;
+
+ x = X_ARG(string->pos[0]);
+ y = Y_ARG(string->pos[1]);
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ x += xpad;
+ y += ypad;
+ display = XtDisplayOfObject(w);
+ window = XtWindowOfObject(w);
+ }
+ else
+ {
+ display = XtDisplay(w);
+ window = XtWindow(w);
+ }
+
+ if (image)
+ XDrawImageString(display, window, xdata->gc, x, y, string->string, string->length);
+ else
+ XDrawString(display, window, xdata->gc, x, y, string->string, string->length);
+}
+
+/* ARGSUSED */
+static void
+DlDrawString(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlString(w, args, data, False);
+}
+
+/* ARGSUSED */
+static void
+DlPaintString(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlString(w, args, data, True);
+}
+
+/* ARGSUSED */
+static void
+DlFont(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ Font font = (Font)args;
+
+ if (xdata->values.font != font)
+ {
+ xdata->mask |= GCFont;
+ xdata->values.font = font;
+ XSetFont(XtDisplayOfObject(w), xdata->gc, font);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlDashes(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ char *dashes = args;
+
+ if (xdata->dashes != dashes)
+ {
+ xdata->mask |= GCDashOffset | GCDashList;
+ xdata->dashes = dashes;
+ XSetDashes(XtDisplayOfObject(w), xdata->gc, 0, dashes + 1, *dashes);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlSubwindowMode(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ int subwindow_mode = (long)args;
+
+ if (xdata->values.subwindow_mode != subwindow_mode)
+ {
+ xdata->mask |= GCSubwindowMode;
+ xdata->values.subwindow_mode = subwindow_mode;
+ XSetSubwindowMode(XtDisplayOfObject(w), xdata->gc, subwindow_mode);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlExposures(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ Bool graphics_exposures = (Bool)(long)args;
+
+ if (xdata->values.graphics_exposures != graphics_exposures)
+ {
+ xdata->mask |= GCGraphicsExposures;
+ xdata->values.graphics_exposures = graphics_exposures;
+ XSetGraphicsExposures(XtDisplayOfObject(w), xdata->gc, graphics_exposures);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlClipOrigin(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
+{
+ Dl1Point(w, args, data, CLIPORIGIN);
+}
+
+/* ARGSUSED */
+static void
+DlClipMask(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawXlibData *xdata = (XawXlibData *)data;
+ XawPixmap *pixmap = (XawPixmap *)args;
+ Pixmap clip_mask;
+
+ if (pixmap)
+ clip_mask = pixmap->mask ? pixmap->mask : pixmap->pixmap;
+ else
+ clip_mask = None;
+
+ if (xdata->values.clip_mask != clip_mask)
+ {
+ xdata->mask |= GCClipMask;
+ XSetClipMask(XtDisplayOfObject(w), xdata->gc, clip_mask);
+ }
+}
+
+/* ARGSUSED */
+static void
+DlClipRectangles(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ XawDLPositionPtr *pos_ptr = (XawDLPositionPtr *)args;
+ XawXlibData *xdata = (XawXlibData *)data;
+ XawDLPosition *pos;
+ XRectangle *rects;
+ XRectangle rects_buf[8];
+ Position x1, y1, x2, y2;
+ Cardinal num_rects, i, j;
+
+ num_rects = pos_ptr->num_pos>>2;
+ rects = (XRectangle *)XawStackAlloc(sizeof(XRectangle) * num_rects, rects_buf);
+
+ for (i = j = 0; i < num_rects; i++, j = i << 2)
+ {
+ pos = &pos_ptr->pos[j];
+ x1 = X_ARG(pos[0]);
+ y1 = Y_ARG(pos[1]);
+ x2 = X_ARG(pos[2]);
+ y2 = Y_ARG(pos[3]);
+ rects[i].x = XawMin(x1, x2);
+ rects[i].y = XawMin(y1, y2);
+ rects[i].width = XawMax(x1, x2) - rects[i].x;
+ rects[i].height = XawMax(y1, y2) - rects[i].y;
+ }
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ for (i = 0; i < num_rects; i++)
+ {
+ rects[i].x += xpad;
+ rects[i].y += ypad;
+ }
+ }
+
+ XSetClipRectangles(XtDisplayOfObject(w), xdata->gc, 0, 0, rects, num_rects, Unsorted);
+
+ XawStackFree(rects, rects_buf);
+}
+
+static void
+DlCopy(Widget w, XtPointer args, XtPointer data, Bool plane)
+{
+ XawDLCopyArgs *copy = (XawDLCopyArgs *)args;
+ XawXlibData *xdata = (XawXlibData *)data;
+ int src_x, src_y, dst_x, dst_y, width, height, tmp1, tmp2;
+
+ tmp1 = X_ARG(copy->pos[0]);
+ tmp2 = X_ARG(copy->pos[2]);
+ dst_x = XawMin(tmp1, tmp2);
+ width = XawMax(tmp1, tmp2) - dst_x;
+
+ tmp1 = Y_ARG(copy->pos[1]);
+ tmp2 = Y_ARG(copy->pos[3]);
+ dst_y = XawMin(tmp1, tmp2);
+ height = XawMax(tmp1, tmp2) - dst_y;
+
+ src_x = X_ARG(copy->pos[4]);
+ src_y = Y_ARG(copy->pos[5]);
+
+ if (width <= 0)
+ {
+ if (copy->pixmap)
+ width = copy->pixmap->width;
+ else
+ {
+ if ((width = XtWidth(w) - src_x) < 0)
+ width = 0;
+ }
+ }
+ if (height <= 0)
+ {
+ if (copy->pixmap)
+ height = copy->pixmap->height;
+ else
+ {
+ if ((height = XtHeight(w) - src_y) < 0)
+ height = 0;
+ }
+ }
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ src_x += xpad;
+ src_y += ypad;
+ dst_x += xpad;
+ dst_y += ypad;
+ }
+
+ if (plane)
+ XCopyPlane(XtDisplayOfObject(w), XtWindowOfObject(w),
+ copy->pixmap ? copy->pixmap->pixmap : XtWindowOfObject(w),
+ xdata->gc, src_x, src_y, width, height, dst_x, dst_y,
+ copy->plane ? copy->plane : 1);
+ else
+ XCopyArea(XtDisplayOfObject(w),
+ copy->pixmap ? copy->pixmap->pixmap : XtWindowOfObject(w),
+ XtWindowOfObject(w), xdata->gc, src_x, src_y, width, height, dst_x, dst_y);
+}
+
+/* ARGSUSED */
+static void
+DlCopyArea(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlCopy(w, args, data, False);
+}
+
+/* ARGSUSED */
+static void
+DlCopyPlane(Widget w, XtPointer args, XtPointer data,
+ XEvent *event, Region region)
+{
+ DlCopy(w, args, data, True);
+}
+
+/*ARGSUSED*/
+/* Note:
+ * This function is destructive if you set the ts_x_origin, ts_y_origin,
+ * and/or clip-mask. It is meant to be the only function used in a display
+ * list. If you need to use other functions (and those values), be sure to
+ * set them after calling this function.
+ */
+static void
+DlImage(Widget w, XtPointer args, XtPointer data, XEvent *event, Region region)
+{
+ XawDLImageArgs *image = (XawDLImageArgs *)args;
+ XawXlibData *xdata = (XawXlibData *)data;
+ int x, y, xs, ys, xe, ye, width, height;
+ Display *display;
+ Window window;
+
+ width = image->pixmap->width;
+ height = image->pixmap->height;
+ xs = X_ARG(image->pos[0]);
+ ys = Y_ARG(image->pos[1]);
+ xe = X_ARG(image->pos[2]);
+ ye = Y_ARG(image->pos[3]);
+
+ if (xe <= 0)
+ xe = xs + width;
+ if (ye <= 0)
+ ye = ys + height;
+
+ if (!XtIsWidget(w))
+ {
+ Position xpad, ypad;
+
+ xpad = XtX(w) + XtBorderWidth(w);
+ ypad = XtY(w) + XtBorderWidth(w);
+ xe += xpad;
+ ye += ypad;
+ xe += xpad;
+ ye += ypad;
+ display = XtDisplayOfObject(w);
+ window = XtWindowOfObject(w);
+ }
+ else
+ {
+ display = XtDisplay(w);
+ window = XtWindow(w);
+ }
+
+ for (y = ys; y < ye; y += height)
+ for (x = xs; x < xe; x += width)
+ {
+ XSetClipOrigin(display, xdata->gc, x, y);
+ if (image->pixmap->mask)
+ XSetClipMask(display, xdata->gc, image->pixmap->mask);
+ if (image->depth == 1)
+ XCopyPlane(display, image->pixmap->pixmap, window, xdata->gc,
+ 0, 0, XawMin(width, xe - x), XawMin(height, ye - y),
+ x, y, 1L);
+ else
+ XCopyArea(display, image->pixmap->pixmap, window, xdata->gc, 0, 0,
+ XawMin(width, xe - x), XawMin(height, ye - y), x, y);
+ }
+
+ XSetClipMask(display, xdata->gc, None);
+}
+
+typedef struct _Dl_init Dl_init;
+struct _Dl_init {
+ String name;
+ XawDisplayListProc proc;
+ Cardinal id;
+};
+
+static Dl_init dl_init[] =
+{
+ {"arc-mode", DlArcMode, ARCMODE},
+ {"background", DlBackground, GCBG},
+ {"bg", DlBackground, GCBG},
+ {"cap-style", DlCapStyle, CAPSTYLE},
+ {"clip-mask", DlClipMask, CLIPMASK},
+ {"clip-origin", DlClipOrigin, CLIPORIGIN},
+ {"clip-rectangles", DlClipRectangles, CLIPRECTS},
+ {"clip-rects", DlClipRectangles, CLIPRECTS},
+ {"coord-mode", DlCoordMode, COORDMODE},
+ {"copy-area", DlCopyArea, COPYAREA},
+ {"copy-plane", DlCopyPlane, COPYPLANE},
+ {"dashes", DlDashes, DASHES},
+ {"draw-arc", DlDrawArc, DARC},
+ {"draw-line", DlLine, LINE},
+ {"draw-lines", DlDrawLines, DLINES},
+ {"draw-point", DlDrawPoint, POINT},
+ {"draw-points", DlDrawPoints, POINTS},
+ {"draw-rect", DlDrawRectangle, DRECT},
+ {"draw-rectangle", DlDrawRectangle, DRECT},
+ {"draw-segments", DlDrawSegments, SEGMENTS},
+ {"draw-string", DlDrawString, DSTRING},
+ {"exposures", DlExposures, EXPOSURES},
+ {"fg", DlForeground, GCFG},
+ {"fill-arc", DlFillArc, FARC},
+ {"fill-poly", DlFillPolygon, FPOLY},
+ {"fill-polygon", DlFillPolygon, FPOLY},
+ {"fill-rect", DlFillRectangle, FRECT},
+ {"fill-rectangle", DlFillRectangle, FRECT},
+ {"fill-rule", DlFillRule, FILLRULE},
+ {"fill-style", DlFillStyle, FILLSTYLE},
+ {"font", DlFont, FONT},
+ {"foreground", DlForeground, GCFG},
+ {"function", DlFunction, FUNCTION},
+ {"image", DlImage, IMAGE},
+ {"join-style", DlJoinStyle, JOINSTYLE},
+ {"line", DlLine, LINE},
+ {"line-style", DlLineStyle, LINESTYLE},
+ {"line-width", DlLineWidth, LWIDTH},
+ {"lines", DlDrawLines, DLINES},
+ {"mask", DlMask, MASK},
+ {"paint-string", DlPaintString, PSTRING},
+ {"plane-mask", DlPlaneMask, PLANEMASK},
+ {"point", DlDrawPoint, POINT},
+ {"points", DlDrawPoints, POINTS},
+ {"segments", DlDrawSegments, SEGMENTS},
+ {"shape-mode", DlShapeMode, SHAPEMODE},
+ {"stipple", DlStipple, STIPPLE},
+ {"subwindow-mode", DlSubwindowMode, SUBWMODE},
+ {"tile", DlTile, TILE},
+ {"ts-origin", DlTSOrigin, TSORIGIN},
+ {"umask", DlUmask, UMASK},
+};
+
+void
+XawDisplayListInitialize(void)
+{
+ static Bool first_time = True;
+ XawDLClass *lc;
+ Cardinal i;
+
+ if (first_time == False)
+ return;
+
+ first_time = False;
+
+ lc = XawCreateDisplayListClass(xlib,
+ _Xaw_Xlib_ArgsInitProc,
+ _Xaw_Xlib_ArgsDestructor,
+ _Xaw_Xlib_DataInitProc,
+ _Xaw_Xlib_DataDestructor);
+ for (i = 0; i < sizeof(dl_init) / sizeof(dl_init[0]); i++)
+ (void)XawDeclareDisplayListProc(lc, dl_init[i].name, dl_init[i].proc);
+}
+
+static int
+bcmp_cvt_proc(register _Xconst void *string,
+ register _Xconst void *dlinfo)
+{
+ return (strcmp((String)string, ((Dl_init*)dlinfo)->name));
+}
+
+static long
+read_int(char *cp, char **cpp)
+{
+ long value = 0, sign = 1;
+
+ if (*cp == '-')
+ {
+ sign = -1;
+ ++cp;
+ }
+ else if (*cp == '+')
+ ++cp;
+ value = 0;
+ while (*cp >= '0' && *cp <= '9')
+ {
+ value = value * 10 + *cp - '0';
+ ++cp;
+ }
+ if (cpp)
+ *cpp = cp;
+ return (value * sign);
+}
+
+static void
+read_position(char *arg, XawDLPosition *pos)
+{
+ int ch;
+ char *str = arg;
+
+ ch = *str;
+ if (ch == '-' || ch == '+')
+ {
+ ++str;
+ if (ch == '-')
+ pos->high = True;
+ pos->pos = read_int(str, NULL);
+ }
+ else if (isdigit(ch))
+ {
+ pos->pos = read_int(str, &str);
+ ch = *str++;
+ if (ch == '/')
+ pos->denom = read_int(str, NULL);
+ }
+}
+
+/* ARGSUSED */
+static void *
+_Xaw_Xlib_ArgsInitProc(String proc_name, String *params, Cardinal *num_params,
+ Screen *screen, Colormap colormap, int depth)
+{
+ Cardinal id, i;
+ Dl_init *init;
+ void *retval = XAWDL_CONVERT_ERROR;
+
+ init = (Dl_init *)bsearch(proc_name, dl_init,
+ sizeof(dl_init) / sizeof(dl_init[0]),
+ sizeof(dl_init[0]),
+ bcmp_cvt_proc);
+
+ id = init->id;
+
+ switch (id)
+ {
+ case LINE:
+ case DRECT:
+ case FRECT:
+ if (*num_params == 4)
+ {
+ XawDLPosition *pos = (XawDLPosition *)XtCalloc(1, sizeof(XawDLPosition) * 4);
+
+ for (i = 0; i < 4; i++)
+ read_position(params[i], &pos[i]);
+ retval = (void *)pos;
+ }
+ break;
+ case POINT:
+ case TSORIGIN:
+ case CLIPORIGIN:
+ if (*num_params == 2)
+ {
+ XawDLPosition *pos = (XawDLPosition *)XtCalloc(1, sizeof(XawDLPosition) * 2);
+
+ read_position(params[0], &pos[0]);
+ read_position(params[1], &pos[1]);
+ retval = (void *)pos;
+ }
+ break;
+ case DLINES:
+ case FPOLY:
+ case POINTS:
+ if (*num_params >= 4 && !(*num_params & 1))
+ {
+ XawDLPositionPtr *pos = XtNew(XawDLPositionPtr);
+
+ pos->pos = (XawDLPosition *)XtCalloc(1, sizeof(XawDLPosition) *
+ *num_params);
+ pos->num_pos = *num_params;
+ for (i = 0; i < *num_params; i++)
+ read_position(params[i], &pos->pos[i]);
+ retval = (void *)pos;
+ }
+ break;
+ case SEGMENTS:
+ case CLIPRECTS:
+ if (*num_params >= 4 && !(*num_params % 4))
+ {
+ XawDLPositionPtr *pos = XtNew(XawDLPositionPtr);
+
+ pos->pos = (XawDLPosition *)XtCalloc(1, sizeof(XawDLPosition) *
+ *num_params);
+ pos->num_pos = *num_params;
+ for (i = 0; i < *num_params; i++)
+ read_position(params[i], &pos->pos[i]);
+ retval = (void *)pos;
+ }
+ break;
+ case DARC:
+ case FARC:
+ if (*num_params >= 4 && *num_params <= 6)
+ {
+ XawDLArcArgs *args = (XawDLArcArgs *)XtCalloc(1, sizeof(XawDLArcArgs));
+
+ args->angle1 = 0;
+ args->angle2 = 360;
+ for (i = 0; i < 4; i++)
+ read_position(params[i], &args->pos[i]);
+ if (*num_params > 4)
+ args->angle1 = read_int(params[4], NULL);
+ if (*num_params > 5)
+ args->angle2 = read_int(params[5], NULL);
+ args->angle1 *= 64;
+ args->angle2 *= 64;
+ retval = (void *)args;
+ }
+ break;
+ case GCFG:
+ case GCBG:
+ {
+ XColor xcolor;
+
+ if (*num_params == 1 &&
+ XAllocNamedColor(DisplayOfScreen(screen), colormap,
+ params[0], &xcolor, &xcolor))
+ retval = (void *)xcolor.pixel;
+ } break;
+ case MASK:
+ case UMASK:
+ if (*num_params == 0)
+ retval = NULL;
+ break;
+ case LWIDTH:
+ if (*num_params == 1)
+ retval = (void *)read_int(params[0], NULL);
+ break;
+ case ARCMODE:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "pieslice") == 0)
+ retval = (void *)ArcPieSlice;
+ else if (XmuCompareISOLatin1(params[0], "chord") == 0)
+ retval = (void *)ArcChord;
+ }
+ break;
+ case COORDMODE:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "origin") == 0)
+ retval = (void *)CoordModeOrigin;
+ else if (XmuCompareISOLatin1(params[0], "previous") == 0)
+ retval = (void *)CoordModePrevious;
+ }
+ break;
+ case SHAPEMODE:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "complex") == 0)
+ retval = (void *)Complex;
+ else if (XmuCompareISOLatin1(params[0], "convex") == 0)
+ retval = (void *)Convex;
+ else if (XmuCompareISOLatin1(params[0], "nonconvex") == 0)
+ retval = (void *)Nonconvex;
+ }
+ break;
+ case LINESTYLE:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "solid") == 0)
+ retval = (void *)LineSolid;
+ else if (XmuCompareISOLatin1(params[0], "onoffdash") == 0)
+ retval = (void *)LineOnOffDash;
+ else if (XmuCompareISOLatin1(params[0], "doubledash") == 0)
+ retval = (void *)LineDoubleDash;
+ }
+ break;
+ case CAPSTYLE:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "notlast") == 0)
+ retval = (void *)CapNotLast;
+ else if (XmuCompareISOLatin1(params[0], "butt") == 0)
+ retval = (void *)CapButt;
+ else if (XmuCompareISOLatin1(params[0], "round") == 0)
+ retval = (void *)CapRound;
+ else if (XmuCompareISOLatin1(params[0], "projecting") == 0)
+ retval = (void *)CapProjecting;
+ }
+ break;
+ case JOINSTYLE:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "miter") == 0)
+ retval = (void *)JoinMiter;
+ else if (XmuCompareISOLatin1(params[0], "round") == 0)
+ retval = (void *)JoinRound;
+ else if (XmuCompareISOLatin1(params[0], "bevel") == 0)
+ retval = (void *)JoinBevel;
+ }
+ break;
+ case FILLSTYLE:
+ if (*num_params == 1)
+ {
+ if (*num_params && XmuCompareISOLatin1(params[0], "solid") == 0)
+ retval = (void *)FillSolid;
+ else if (*num_params && XmuCompareISOLatin1(params[0], "tiled") == 0)
+ retval = (void *)FillTiled;
+ else if (*num_params && XmuCompareISOLatin1(params[0], "stippled") == 0)
+ retval = (void *)FillStippled;
+ else if (*num_params && XmuCompareISOLatin1(params[0], "opaquestippled") == 0)
+ retval = (void *)FillOpaqueStippled;
+ }
+ break;
+ case FILLRULE:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "evenodd") == 0)
+ retval = (void *)EvenOddRule;
+ else if (XmuCompareISOLatin1(params[0], "winding") == 0)
+ retval = (void *)WindingRule;
+ }
+ break;
+ case TILE:
+ if (*num_params == 1)
+ retval = (void *)XawLoadPixmap(params[0], screen, colormap, depth);
+ if (retval == NULL)
+ {
+ XtDisplayStringConversionWarning(DisplayOfScreen(screen), (String)params[0],
+ XtRPixmap);
+ retval = XAWDL_CONVERT_ERROR;
+ }
+ break;
+ case STIPPLE:
+ if (*num_params == 1)
+ retval = (void *)XawLoadPixmap(params[0], screen, colormap, 1);
+ if (retval == NULL)
+ {
+ XtDisplayStringConversionWarning(DisplayOfScreen(screen), (String)params[0],
+ XtRBitmap);
+ retval = XAWDL_CONVERT_ERROR;
+ }
+ break;
+ case FUNCTION:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "set") == 0)
+ retval = (void *)GXset;
+ else if (XmuCompareISOLatin1(params[0], "clear") == 0)
+ retval = (void *)GXclear;
+ else if (XmuCompareISOLatin1(params[0], "and") == 0)
+ retval = (void *)GXand;
+ else if (XmuCompareISOLatin1(params[0], "andreverse") == 0)
+ retval = (void *)GXandReverse;
+ else if (XmuCompareISOLatin1(params[0], "copy") == 0)
+ retval = (void *)GXcopy;
+ else if (XmuCompareISOLatin1(params[0], "andinverted") == 0)
+ retval = (void *)GXandInverted;
+ else if (XmuCompareISOLatin1(params[0], "noop") == 0)
+ retval = (void *)GXnoop;
+ else if (XmuCompareISOLatin1(params[0], "xor") == 0)
+ retval = (void *)GXxor;
+ else if (XmuCompareISOLatin1(params[0], "or") == 0)
+ retval = (void *)GXor;
+ else if (XmuCompareISOLatin1(params[0], "nor") == 0)
+ retval = (void *)GXnor;
+ else if (XmuCompareISOLatin1(params[0], "equiv") == 0)
+ retval = (void *)GXequiv;
+ else if (XmuCompareISOLatin1(params[0], "invert") == 0)
+ retval = (void *)GXinvert;
+ else if (XmuCompareISOLatin1(params[0], "orreverse") == 0)
+ retval = (void *)GXorReverse;
+ else if (XmuCompareISOLatin1(params[0], "copyinverted") == 0)
+ retval = (void *)GXcopyInverted;
+ else if (XmuCompareISOLatin1(params[0], "nand") == 0)
+ retval = (void *)GXnand;
+ }
+ break;
+ case PLANEMASK:
+ if (*num_params == 1)
+ retval = (void *)read_int(params[0], NULL);
+ break;
+ case DSTRING:
+ case PSTRING:
+ if (*num_params == 3)
+ {
+ XawDLStringArgs *string = (XawDLStringArgs *)
+ XtCalloc(1, sizeof(XawDLStringArgs));
+
+ read_position(params[0], &string->pos[0]);
+ read_position(params[1], &string->pos[1]);
+ string->string = XtNewString(params[2]);
+ string->length = strlen(string->string);
+ retval = string;
+ }
+ break;
+ case FONT:
+ if (*num_params == 1)
+ retval = (void *)XLoadFont(DisplayOfScreen(screen), params[0]);
+ break;
+ case DASHES:
+ if (*num_params && *num_params < 127)
+ {
+ char *dashes;
+
+ dashes = XtMalloc(*num_params + 1);
+
+ for (i = 0; i < *num_params; i++)
+ dashes[i + 1] = read_int(params[i], NULL);
+ *dashes = *num_params;
+ retval = dashes;
+ }
+ break;
+ case SUBWMODE:
+ if (*num_params == 1)
+ {
+ if (XmuCompareISOLatin1(params[0], "clipbychildren") == 0)
+ retval = (void *)ClipByChildren;
+ else if (XmuCompareISOLatin1(params[0], "includeinferiors") == 0)
+ retval = (void *)IncludeInferiors;
+ }
+ break;
+ case EXPOSURES:
+ if (*num_params == 1)
+ {
+ if (isdigit(params[0][0]) || params[0][0] == '+' || params[0][0] == '-')
+ retval = (void *)read_int(params[0], NULL);
+ else if (XmuCompareISOLatin1(params[0], "true") == 0 ||
+ XmuCompareISOLatin1(params[0], "on") == 0)
+ retval = (void *)True;
+ else if (XmuCompareISOLatin1(params[0], "false") == 0 ||
+ XmuCompareISOLatin1(params[0], "off") == 0)
+ retval = (void *)False;
+ }
+ break;
+ case CLIPMASK:
+ if (*num_params == 1)
+ retval = (void *)XawLoadPixmap(params[0], screen, colormap, 1);
+ if (retval == NULL)
+ {
+ retval = XAWDL_CONVERT_ERROR;
+ XtDisplayStringConversionWarning(DisplayOfScreen(screen), (String)params[0],
+ XtRPixmap);
+ }
+ break;
+ case COPYAREA:
+ case COPYPLANE:
+ if (*num_params > 2 && *num_params <= 7 + (id == COPYPLANE))
+ {
+ XawDLCopyArgs *args = (XawDLCopyArgs *)
+ XtCalloc(1, sizeof(XawDLCopyArgs));
+
+ retval = args;
+ if (params[0][0] == '\0' || strcmp(params[0], ".") == 0)
+ args->pixmap = NULL;
+ else
+ {
+ args->pixmap = XawLoadPixmap(params[0], screen, colormap, id == COPYPLANE ? 1 : depth);
+ if (args->pixmap == NULL)
+ {
+ XtDisplayStringConversionWarning(DisplayOfScreen(screen), (String)params[0],
+ XtRBitmap);
+ retval = XAWDL_CONVERT_ERROR;
+ XtFree((char *)args);
+ }
+ }
+ if (retval != XAWDL_CONVERT_ERROR)
+ {
+ for (i = 1; i < *num_params && i < 7; i++)
+ read_position(params[i], &args->pos[i - 1]);
+ if (*num_params > 7)
+ args->plane = read_int(params[7], NULL);
+ }
+ }
+ break;
+ case IMAGE:
+ if (*num_params > 2 && *num_params <= 7)
+ {
+ XawDLImageArgs *args = (XawDLImageArgs *)
+ XtCalloc(1, sizeof(XawDLImageArgs));
+
+ retval = args;
+ args->pixmap = XawLoadPixmap(params[0], screen, colormap, depth);
+ if (args->pixmap == NULL)
+ {
+ XtDisplayStringConversionWarning(DisplayOfScreen(screen),
+ (String)params[0], XtRPixmap);
+ retval = XAWDL_CONVERT_ERROR;
+ XtFree((char *)args);
+ }
+ else
+ {
+ args->depth = depth;
+ for (i = 1; i < *num_params && i < 5; i++)
+ read_position(params[i], &args->pos[i - 1]);
+ }
+ }
+ break;
+ }
+
+ return (retval);
+}
+
+/* ARGSUSED */
+static void *
+_Xaw_Xlib_DataInitProc(String class_name,
+ Screen *screen, Colormap colormap, int depth)
+{
+ XawXlibData *data;
+ Window tmp_win;
+
+ data = (XawXlibData *)XtMalloc(sizeof(XawXlibData));
+
+ tmp_win = XCreateWindow(DisplayOfScreen(screen),
+ RootWindowOfScreen(screen),
+ 0, 0, 1, 1, 1, depth,
+ InputOutput, (Visual *)CopyFromParent, 0, NULL);
+ data->mask = 0;
+ data->gc = XCreateGC(DisplayOfScreen(screen), tmp_win, 0, &data->values);
+ XDestroyWindow(DisplayOfScreen(screen), tmp_win);
+ data->shape = Complex;
+ data->mode = CoordModeOrigin;
+ data->dashes = NULL;
+
+ return ((void *)data);
+}
+
+/* ARGSUSED */
+static void
+_Xaw_Xlib_ArgsDestructor(Display *display, String proc_name, XtPointer args,
+ String *params, Cardinal *num_params)
+{
+ Cardinal id;
+ Dl_init *init;
+
+ init = (Dl_init *)bsearch(proc_name, dl_init,
+ sizeof(dl_init) / sizeof(dl_init[0]),
+ sizeof(dl_init[0]),
+ bcmp_cvt_proc);
+
+ id = init->id;
+
+ switch (id)
+ {
+ case LINE:
+ case DRECT:
+ case FRECT:
+ case DARC:
+ case FARC:
+ case POINT:
+ case TSORIGIN:
+ case DASHES:
+ case CLIPORIGIN:
+ case COPYAREA:
+ case COPYPLANE:
+ case IMAGE:
+ XtFree(args);
+ break;
+ case DSTRING:
+ case PSTRING:
+ {
+ XawDLStringArgs *string = (XawDLStringArgs *)args;
+ XtFree(string->string);
+ XtFree(args);
+ } break;
+ case DLINES:
+ case FPOLY:
+ case POINTS:
+ case SEGMENTS:
+ case CLIPRECTS:
+ {
+ XawDLPositionPtr *ptr = (XawDLPositionPtr *)args;
+
+ XtFree((char *)ptr->pos);
+ XtFree(args);
+ } break;
+ }
+}
+
+/* ARGSUSED */
+static void
+_Xaw_Xlib_DataDestructor(Display *display, String class_name, XtPointer data)
+{
+ if (data)
+ {
+ XawXlibData *xdata = (XawXlibData *)data;
+
+ XFreeGC(display, xdata->gc);
+ if (xdata->dashes)
+ XtFree(xdata->dashes);
+ XtFree((char *)data);
+ }
+}
+
+/* Start of DLInfo Management Functions */
+static int
+qcmp_dlist_info(register _Xconst void *left, register _Xconst void *right)
+{
+ return (strcmp((*(XawDLInfo **)left)->name, (*(XawDLInfo **)right)->name));
+}
+
+Bool XawDeclareDisplayListProc(XawDLClass *lc, String name,
+ XawDisplayListProc proc)
+{
+ XawDLInfo *info;
+
+ if (!lc || !proc || !name || name[0] == '\0')
+ return (False);
+
+ if ((info = _XawFindDLInfo(lc, name)) != NULL)
+ /* Since the data structures to the displayList classes are(should be)
+ * opaque, it is not a good idea to allow overriding a displayList
+ * procedure; it's better to choose another name or class name!
+ */
+ return (False);
+
+ info = (XawDLInfo *)XtMalloc(sizeof(XawDLInfo));
+ info->name = XtNewString(name);
+ info->qname = XrmStringToQuark(info->name);
+ info->proc = proc;
+
+ if (!lc->num_infos)
+ {
+ lc->num_infos = 1;
+ lc->infos = (XawDLInfo **)XtMalloc(sizeof(XawDLInfo*));
+ }
+ else
+ {
+ ++lc->num_infos;
+ lc->infos = (XawDLInfo **)
+ XtRealloc((char *)lc->infos, sizeof(XawDLInfo*) * lc->num_infos);
+ }
+ lc->infos[lc->num_infos - 1] = info;
+
+ if (lc->num_infos > 1)
+ qsort(lc->infos, lc->num_infos, sizeof(XawDLInfo*), qcmp_dlist_info);
+
+ return (True);
+}
+
+static int
+bcmp_dlist_info(register _Xconst void *string,
+ register _Xconst void *dlinfo)
+{
+ return (strcmp((String)string, (*(XawDLClass **)dlinfo)->name));
+}
+
+static XawDLInfo *
+_XawFindDLInfo(XawDLClass *lc, String name)
+{
+ XawDLInfo **info;
+
+ if (!lc->infos)
+ return (NULL);
+
+ info = (XawDLInfo **)bsearch(name, lc->infos, lc->num_infos,
+ sizeof(XawDLInfo*), bcmp_dlist_info);
+
+ return (info ? *info : NULL);
+}
+
+/* Start of DLClass Management Functions */
+XawDLClass *
+XawGetDisplayListClass(String name)
+{
+ return (_XawFindDLClass(name));
+}
+
+static int
+qcmp_dlist_class(register _Xconst void *left, register _Xconst void *right)
+{
+ return (strcmp((*(XawDLClass **)left)->name, (*(XawDLClass **)right)->name));
+}
+
+XawDLClass *
+XawCreateDisplayListClass(String name,
+ XawDLArgsInitProc args_init,
+ XawDLArgsDestructor args_destructor,
+ XawDLDataInitProc data_init,
+ XawDLDataDestructor data_destructor)
+{
+ XawDLClass *lc;
+
+ if (!name || name[0] == '\0')
+ return (NULL);
+
+ lc = (XawDLClass *)XtMalloc(sizeof(XawDLClass));
+ lc->name = XtNewString(name);
+ lc->infos = NULL;
+ lc->num_infos = 0;
+ lc->args_init = args_init;
+ lc->args_destructor = args_destructor;
+ lc->data_init = data_init;
+ lc->data_destructor = data_destructor;
+
+ if (!classes)
+ {
+ num_classes = 1;
+ classes = (XawDLClass **)XtMalloc(sizeof(XawDLClass));
+ }
+ else
+ {
+ ++num_classes;
+ classes = (XawDLClass **)XtRealloc((char *)classes,
+ sizeof(XawDLClass) * num_classes);
+ }
+ classes[num_classes - 1] = lc;
+
+ if (num_classes > 1)
+ qsort(&classes[0], num_classes, sizeof(XawDLClass*), qcmp_dlist_class);
+
+ return (lc);
+}
+
+static int
+bcmp_dlist_class(register _Xconst void *string,
+ register _Xconst void *dlist)
+{
+ return (strcmp((String)string, (*(XawDLClass **)dlist)->name));
+}
+
+static XawDLClass *
+_XawFindDLClass(String name)
+{
+ XawDLClass **lc;
+
+ if (!classes)
+ return (NULL);
+
+ lc = (XawDLClass **)bsearch(name, &classes[0], num_classes,
+ sizeof(XawDLClass*), bcmp_dlist_class);
+
+ return (lc ? *lc : NULL);
+}
+
+#endif /* OLDXAW */
diff --git a/libXaw/src/Form.c b/libXaw/src/Form.c
index 1d162407b..9f5ac8271 100644
--- a/libXaw/src/Form.c
+++ b/libXaw/src/Form.c
@@ -1,1110 +1,1106 @@
-/* $Xorg: Form.c,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-
-/* $XFree86: xc/lib/Xaw/Form.c,v 1.20 2001/02/05 22:38:04 paulo Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xaw/FormP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Class Methods
- */
-static void XawFormChangeManaged(Widget);
-static void XawFormClassInitialize(void);
-static void XawFormClassPartInitialize(WidgetClass);
-static void XawFormConstraintInitialize(Widget, Widget, ArgList, Cardinal*);
-static Boolean XawFormConstraintSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static XtGeometryResult XawFormGeometryManager(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawFormInitialize(Widget, Widget, ArgList, Cardinal*);
-#ifndef OLDXAW
-static void XawFormRealize(Widget, Mask*, XSetWindowAttributes*);
-static void XawFormRedisplay(Widget, XEvent*, Region);
-#endif
-static XtGeometryResult XawFormQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawFormResize(Widget);
-static Boolean XawFormSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-static Boolean Layout(FormWidget, unsigned int, unsigned int, Bool);
-
-/*
- * Prototypes
- */
-static void _CvtStringToEdgeType(XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr);
-static Bool ChangeFormGeometry(Widget, Bool, unsigned int, unsigned int,
- Dimension*, Dimension*);
-Boolean CvtEdgeTypeToString(Display*, XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr, XtPointer*);
-static void LayoutChild(Widget);
-static int TransformCoord(int, unsigned int, unsigned int, XtEdgeType);
-static void ResizeChildren(Widget);
-
-/*
- * Initialization
- */
-#ifndef OLDXAW
-static XtActionsRec actions[] = {
- {"set-values", XawSetValuesAction},
- {"get-values", XawGetValuesAction},
- {"declare", XawDeclareAction},
- {"call-proc", XawCallProcAction},
-};
-#endif
-
-static XrmQuark QchainLeft, QchainRight, QchainTop, QchainBottom, Qrubber;
-
-#define default_value -99999
-#define Offset(field) XtOffsetOf(FormRec, form.field)
-static XtResource resources[] = {
- {
- XtNdefaultDistance,
- XtCThickness,
- XtRInt,
- sizeof(int),
- Offset(default_spacing),
- XtRImmediate,
- (XtPointer)4
- },
-#ifndef OLDXAW
- {
- XawNdisplayList,
- XawCDisplayList,
- XawRDisplayList,
- sizeof(XawDisplayList*),
- Offset(display_list),
- XtRImmediate,
- NULL
- },
-#endif
-};
-#undef Offset
-
-#define defEdge XtRubber
-
-#define Offset(field) XtOffsetOf(FormConstraintsRec, form.field)
-static XtResource formConstraintResources[] = {
- {
- XtNtop,
- XtCEdge,
- XtREdgeType,
- sizeof(XtEdgeType),
- Offset(top),
- XtRImmediate,
- (XtPointer)defEdge
- },
- {
- XtNbottom,
- XtCEdge,
- XtREdgeType,
- sizeof(XtEdgeType),
- Offset(bottom),
- XtRImmediate,
- (XtPointer)defEdge
- },
- {
- XtNleft,
- XtCEdge,
- XtREdgeType,
- sizeof(XtEdgeType),
- Offset(left),
- XtRImmediate,
- (XtPointer)defEdge
- },
- {
- XtNright,
- XtCEdge,
- XtREdgeType,
- sizeof(XtEdgeType),
- Offset(right),
- XtRImmediate,
- (XtPointer)defEdge
- },
- {
- XtNhorizDistance,
- XtCThickness,
- XtRInt,
- sizeof(int),
- Offset(dx),
- XtRImmediate,
- (XtPointer)default_value
- },
- {
- XtNfromHoriz,
- XtCWidget,
- XtRWidget,
- sizeof(Widget),
- Offset(horiz_base),
- XtRWidget,
- NULL
- },
- {
- XtNvertDistance,
- XtCThickness,
- XtRInt,
- sizeof(int),
- Offset(dy),
- XtRImmediate,
- (XtPointer)default_value
- },
- {
- XtNfromVert,
- XtCWidget,
- XtRWidget,
- sizeof(Widget),
- Offset(vert_base),
- XtRWidget,
- NULL
- },
- {
- XtNresizable,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- Offset(allow_resize),
- XtRImmediate,
- (XtPointer)False
- },
-};
-#undef Offset
-
-FormClassRec formClassRec = {
- /* core */
- {
- (WidgetClass)&constraintClassRec, /* superclass */
- "Form", /* class_name */
- sizeof(FormRec), /* widget_size */
- XawFormClassInitialize, /* class_initialize */
- XawFormClassPartInitialize, /* class_part_init */
- False, /* class_inited */
- XawFormInitialize, /* initialize */
- NULL, /* initialize_hook */
-#ifndef OLDXAW
- XawFormRealize, /* realize */
- actions, /* actions */
- XtNumber(actions), /* num_actions */
-#else
- XtInheritRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
-#endif
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XawFormResize, /* resize */
-#ifndef OLDXAW
- XawFormRedisplay, /* expose */
-#else
- XtInheritExpose, /* expose */
-#endif
- XawFormSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XawFormQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* composite */
- {
- XawFormGeometryManager, /* geometry_manager */
- XawFormChangeManaged, /* change_managed */
- XtInheritInsertChild, /* insert_child */
- XtInheritDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- /* constraint */
- {
- formConstraintResources, /* subresourses */
- XtNumber(formConstraintResources), /* subresource_count */
- sizeof(FormConstraintsRec), /* constraint_size */
- XawFormConstraintInitialize, /* initialize */
- NULL, /* destroy */
- XawFormConstraintSetValues, /* set_values */
- NULL, /* extension */
- },
- /* form */
- {
- Layout, /* layout */
- },
-};
-
-WidgetClass formWidgetClass = (WidgetClass)&formClassRec;
-
-/*
- * Implementation
- */
-#ifndef OLDXAW
-static void
-XawFormRealize(Widget w, Mask *mask, XSetWindowAttributes *attr)
-{
- XawPixmap *pixmap;
-
- (*formWidgetClass->core_class.superclass->core_class.realize)(w, mask, attr);
-
- if (w->core.background_pixmap > XtUnspecifiedPixmap) {
- pixmap = XawPixmapFromXPixmap(w->core.background_pixmap, XtScreen(w),
- w->core.colormap, w->core.depth);
- if (pixmap && pixmap->mask)
- XawReshapeWidget(w, pixmap);
- }
-}
-
-static void
-XawFormRedisplay(Widget w, XEvent *event, Region region)
-{
- FormWidget xaw = (FormWidget)w;
-
- if (xaw->form.display_list)
- XawRunDisplayList(w, xaw->form.display_list, event, region);
-}
-#endif
-
-/*ARGSUSED*/
-static void
-_CvtStringToEdgeType(XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal)
-{
- static XtEdgeType edgeType;
- XrmQuark q;
- char name[12];
-
- XmuNCopyISOLatin1Lowered(name, (char*)fromVal->addr, sizeof(name));
- q = XrmStringToQuark(name);
-
- if (q == QchainLeft)
- edgeType = XtChainLeft;
- else if (q == QchainRight)
- edgeType = XtChainRight;
- else if (q == QchainTop)
- edgeType = XtChainTop;
- else if (q == QchainBottom)
- edgeType = XtChainBottom;
- else if (q == Qrubber)
- edgeType = XtRubber;
- else {
- XtStringConversionWarning(fromVal->addr, XtREdgeType);
- toVal->size = 0;
- toVal->addr = NULL;
- return;
- }
-
- toVal->size = sizeof(XtEdgeType);
- toVal->addr = (XPointer)&edgeType;
-}
-
-/*ARGSUSED*/
-Boolean
-CvtEdgeTypeToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *data)
-{
- static String buffer;
- Cardinal size;
-
- switch (*(XtEdgeType *)fromVal->addr) {
- case XtChainLeft:
- buffer = XtEchainLeft;
- break;
- case XtChainRight:
- buffer = XtEchainRight;
- break;
- case XtChainTop:
- buffer = XtEchainTop;
- break;
- case XtChainBottom:
- buffer = XtEchainBottom;
- break;
- case XtRubber:
- buffer = XtErubber;
- break;
- default:
- XawTypeToStringWarning(dpy, XtREdgeType);
- toVal->addr = NULL;
- toVal->size = 0;
- return (False);
- }
-
- size = strlen(buffer) + 1;
- if (toVal->addr != NULL) {
- if (toVal->size < size) {
- toVal->size = size;
- return (False);
- }
- strcpy((char *)toVal->addr, buffer);
- }
- else
- toVal->addr = (XPointer)buffer;
- toVal->size = sizeof(String);
-
- return (True);
-}
-
-static void
-XawFormClassInitialize(void)
-{
- static XtConvertArgRec parentCvtArgs[] = {
- {XtBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.parent),
- sizeof(Widget)}
- };
-
- char name[12];
-
- XawInitializeWidgetSet();
- XmuNCopyISOLatin1Lowered(name, XtEchainLeft, sizeof(name));
- QchainLeft = XrmStringToQuark(name);
- XmuNCopyISOLatin1Lowered(name, XtEchainRight, sizeof(name));
- QchainRight = XrmStringToQuark(name);
- XmuNCopyISOLatin1Lowered(name, XtEchainTop, sizeof(name));
- QchainTop = XrmStringToQuark(name);
- XmuNCopyISOLatin1Lowered(name, XtEchainBottom, sizeof(name));
- QchainBottom = XrmStringToQuark(name);
- XmuNCopyISOLatin1Lowered(name, XtErubber, sizeof(name));
- Qrubber = XrmStringToQuark(name);
-
- XtAddConverter(XtRString, XtREdgeType, _CvtStringToEdgeType, NULL, 0);
- XtSetTypeConverter(XtREdgeType, XtRString, CvtEdgeTypeToString,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRString, XtRWidget, XmuNewCvtStringToWidget,
- parentCvtArgs, XtNumber(parentCvtArgs), XtCacheNone,
- NULL);
- XtSetTypeConverter(XtRWidget, XtRString, XmuCvtWidgetToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-static void
-XawFormClassPartInitialize(WidgetClass cclass)
-{
- FormWidgetClass c = (FormWidgetClass)cclass;
- FormWidgetClass super = (FormWidgetClass)c->core_class.superclass;
-
- if (c->form_class.layout == XtInheritLayout)
- c->form_class.layout = super->form_class.layout;
-}
-
-/*ARGSUSED*/
-static void
-XawFormInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- FormWidget fw = (FormWidget)cnew;
-
- fw->form.old_width = fw->form.old_height = 0;
- fw->form.no_refigure = False;
- fw->form.needs_relayout = False;
- fw->form.resize_in_layout = True;
- fw->form.resize_is_no_op = False;
-}
-
-/*
- * Function:
- * ChangeFormGeometry
- *
- * Parameters:
- * w - Form widget
- * query_only - is only a query?
- * width - new width and height
- * height - ""
- * ret_width - actual size the form is allowed to resize to (return)
- * ret_height - ""
- *
- * Description:
- * Ask the parent to change the form widget's geometry.
- *
- * Returns:
- * True of children may always be resized
- */
-static Bool
-ChangeFormGeometry(Widget w, Bool query_only,
- unsigned int width, unsigned int height,
- Dimension *ret_width, Dimension *ret_height)
-{
- FormWidget fw = (FormWidget)w;
- Boolean always_resize_children;
- XtGeometryResult result;
- XtWidgetGeometry request, return_request;
-
- /*
- * If we are already at the desired size then there is no need
- * to ask our parent of we can change size
- */
- if (width == XtWidth(fw) && height == XtHeight(fw))
- return (True);
-
- request.width = width;
- request.height = height;
- request.request_mode = CWWidth | CWHeight;
- if (query_only)
- request.request_mode |= XtCWQueryOnly;
-
- /*
- * Do no invoke the resize rules if our size changes here
- */
- fw->form.resize_is_no_op = True;
-
- result = XtMakeGeometryRequest(w, &request, &return_request);
- if (result == XtGeometryAlmost) {
- request = return_request;
- (void)XtMakeGeometryRequest(w, &request, &return_request);
- always_resize_children = False;
- }
- else
- always_resize_children = result == XtGeometryYes;
-
- fw->form.resize_is_no_op = False;
-
- if (ret_width != NULL)
- *ret_width = request.width;
- if (ret_height != NULL)
- *ret_height = request.height;
-
- return (always_resize_children);
-}
-
-/*
- * Function:
- * Layout
- *
- * Parameters:
- * fw - Form widget
- * width - unused
- * height - ""
- * force_relayout - will force the children to be moved, even if some
- * go past the edge of the form
- *
- * Description:
- * Moves all the children around.
- *
- * Returns:
- * True if the children are allowed to move from their
- * current locations to the new ones.
- */
-/*ARGSUSED*/
-static Boolean
-Layout(FormWidget fw, unsigned int width, unsigned int height,
- Bool force_relayout)
-{
- int num_children = fw->composite.num_children;
- WidgetList children = fw->composite.children;
- Widget *childP;
- Dimension maxx, maxy;
- Boolean ret_val;
-
- for (childP = children; childP - children < num_children; childP++) {
- FormConstraints form = (FormConstraints)(*childP)->core.constraints;
- form->form.layout_state = LayoutPending;
- }
-
- maxx = maxy = 1;
- for (childP = children; childP - children < num_children; childP++) {
- if (XtIsManaged(*childP)) {
- FormConstraints form;
- Position x, y;
-
- form = (FormConstraints)(*childP)->core.constraints;
-
- LayoutChild(*childP);
-
- x = form->form.new_x + XtWidth(*childP)
- + (XtBorderWidth(*childP) << 1);
- if (x > (int)maxx)
- maxx = x;
-
- y = form->form.new_y + XtHeight(*childP)
- + (XtBorderWidth(*childP) << 1);
- if (y > (int)maxy)
- maxy = y;
- }
- }
-
- fw->form.preferred_width = (maxx += fw->form.default_spacing);
- fw->form.preferred_height = (maxy += fw->form.default_spacing);
-
- if (fw->form.resize_in_layout) {
- Boolean always_resize_children;
-
- always_resize_children =
- ChangeFormGeometry((Widget)fw, False, maxx, maxy, NULL, NULL);
-
-#ifdef OLDXAW
- fw->form.old_width = fw->core.width;
- fw->form.old_height = fw->core.height;
-#endif
-
- if (force_relayout)
- ret_val = True;
- else
- ret_val = always_resize_children ||
- (XtWidth(fw) >= maxx && XtHeight(fw) >= maxy);
-
- if (ret_val)
- ResizeChildren((Widget)fw);
- }
- else
- ret_val = False;
-
- fw->form.needs_relayout = False;
-
- return (ret_val);
-}
-
-/*
- * Function:
- * ResizeChildren
- *
- * Parameters:
- * w - form widget
- *
- * Description:
- * Resizes all children to new_x and new_y.
- */
-static void
-ResizeChildren(Widget w)
-{
- FormWidget fw = (FormWidget)w;
- int num_children = fw->composite.num_children;
- WidgetList children = fw->composite.children;
- Widget *childP;
-
- for (childP = children; childP - children < num_children; childP++) {
- FormConstraints form;
- Position x, y;
-
- if (!XtIsManaged(*childP))
- continue;
-
- form = (FormConstraints)(*childP)->core.constraints;
-
- if (fw->form.old_width && fw->form.old_height) {
- x = TransformCoord(form->form.new_x, fw->form.old_width,
- XtWidth(fw), form->form.left);
- y = TransformCoord(form->form.new_y, fw->form.old_height,
- XtHeight(fw), form->form.top);
- }
- else {
- x = form->form.new_x;
- y = form->form.new_y;
- }
-
- if (fw->form.no_refigure) {
- /*
- * I am changing the widget wrapper w/o modifing the window. This is
- * risky, but I can get away with it since I am the parent of this
- * widget, and he must ask me for any geometry changes
- *
- * The window will be updated when no_refigure is set back to False
- */
- XtX(*childP) = x;
- XtY(*childP) = y;
- }
- else
- XtMoveWidget(*childP, x, y);
- }
-}
-
-static void
-LayoutChild(Widget w)
-{
- FormConstraints form = (FormConstraints)w->core.constraints;
- Widget ref;
-
- switch (form->form.layout_state) {
- case LayoutPending:
- form->form.layout_state = LayoutInProgress;
- break;
- case LayoutDone:
- return;
- case LayoutInProgress: {
- String subs[2];
- Cardinal num_subs = 2;
- subs[0] = w->core.name;
- subs[1] = w->core.parent->core.name;
-
- XtAppWarningMsg(XtWidgetToApplicationContext(w),
- "constraintLoop", "xawFormLayout", "XawToolkitError",
- "constraint loop detected while laying out "
- "child '%s' in FormWidget '%s'",
- subs, &num_subs);
- } return;
- }
-
- form->form.new_x = form->form.dx;
- form->form.new_y = form->form.dy;
- if ((ref = form->form.horiz_base) != NULL) {
- FormConstraints ref_form = (FormConstraints)ref->core.constraints;
-
- LayoutChild(ref);
- form->form.new_x += ref_form->form.new_x + XtWidth(ref) +
- (XtBorderWidth(ref) << 1);
- }
- if ((ref = form->form.vert_base) != NULL) {
- FormConstraints ref_form = (FormConstraints)ref->core.constraints;
-
- LayoutChild(ref);
- form->form.new_y += ref_form->form.new_y + XtHeight(ref) +
- (XtBorderWidth(ref) << 1);
- }
-
- form->form.layout_state = LayoutDone;
-}
-
-static int
-TransformCoord(int loc, unsigned int old, unsigned int cnew, XtEdgeType type)
-{
- if (type == XtRubber) {
- if ((int)old > 0)
- loc = (int)(loc * ((double)cnew / (double)old));
- }
- else if (type == XtChainBottom || type == XtChainRight)
- loc += (int)cnew - (int)old;
-
- return (loc);
-}
-
-static void
-XawFormResize(Widget w)
-{
- FormWidget fw = (FormWidget)w;
- WidgetList children = fw->composite.children;
- int num_children = fw->composite.num_children;
- Widget *childP;
- int x, y;
- int width, height;
- Boolean unmap = XtIsRealized(w) && w->core.mapped_when_managed &&
- XtIsManaged(w);
-
- if (unmap)
- XtUnmapWidget(w);
-
- if (!fw->form.resize_is_no_op)
- for (childP = children; childP - children < num_children; childP++) {
- FormConstraints form = (FormConstraints)(*childP)->core.constraints;
-
- if (!XtIsManaged(*childP))
- continue;
-
-#ifndef OLDXAW
- x = TransformCoord(form->form.virtual_x, fw->form.old_width,
- XtWidth(fw), form->form.left);
- y = TransformCoord(form->form.virtual_y, fw->form.old_height,
- XtHeight(fw), form->form.top);
- width = TransformCoord(form->form.virtual_x +
- form->form.virtual_width +
- (XtBorderWidth(*childP) << 1),
- fw->form.old_width, XtWidth(fw),
- form->form.right) -
- (x + (XtBorderWidth(*childP) << 1));
- height = TransformCoord(form->form.virtual_y +
- form->form.virtual_height +
- (XtBorderWidth(*childP) << 1),
- fw->form.old_height, XtHeight(fw),
- form->form.bottom) -
- (y + (XtBorderWidth(*childP) << 1));
-#else
- x = TransformCoord(XtX(*childP), fw->form.old_width,
- XtWidth(fw), form->form.left);
- y = TransformCoord(XtY(*childP), fw->form.old_height,
- XtHeight(fw), form->form.top);
- width = TransformCoord(XtX(*childP) + form->form.virtual_width +
- (XtBorderWidth(*childP) << 1),
- fw->form.old_width, XtWidth(fw),
- form->form.right) -
- (x + (XtBorderWidth(*childP) << 1));
- height = TransformCoord(XtY(*childP) + form->form.virtual_height +
- (XtBorderWidth(*childP) << 1),
- fw->form.old_height, XtHeight(fw),
- form->form.bottom) -
- (y + (XtBorderWidth(*childP) << 1));
- form->form.virtual_width = width;
- form->form.virtual_height = height;
-#endif
-
- width = width < 1 ? 1 : width;
- height = height < 1 ? 1 : height;
-
- XtConfigureWidget(*childP, x, y, width, height,
- XtBorderWidth(*childP));
- }
-
- if (unmap)
- XtMapWidget(w);
-
-#ifdef OLDXAW
- fw->form.old_width = XtWidth(fw);
- fw->form.old_height = XtHeight(fw);
-#endif
-}
-
-/*ARGSUSED*/
-static XtGeometryResult
-XawFormGeometryManager(Widget w, XtWidgetGeometry *request,
- XtWidgetGeometry *reply)
-{
- Dimension old_width, old_height;
- FormWidget fw = (FormWidget)XtParent(w);
- FormConstraints form = (FormConstraints)w->core.constraints;
- XtWidgetGeometry allowed;
- XtGeometryResult ret_val;
-
- if ((request->request_mode & (unsigned)~(XtCWQueryOnly | CWWidth | CWHeight))
- || !form->form.allow_resize) {
- /* If GeometryManager is invoked during a SetValues call on a child
- * then it is necessary to compute a new layout if ConstraintSetValues
- * allowed any constraint changes
- */
- if (fw->form.needs_relayout)
- (*((FormWidgetClass)fw->core.widget_class)->form_class.layout)
- (fw, 0, 0, True);
- return (XtGeometryNo);
- }
-
- if (request->request_mode & CWWidth)
- allowed.width = request->width;
- else
- allowed.width = XtWidth(w);
-
- if (request->request_mode & CWHeight)
- allowed.height = request->height;
- else
- allowed.height = XtHeight(w);
-
- if (allowed.width == XtWidth(w) && allowed.height == XtHeight(w)) {
- /* If GeometryManager is invoked during a SetValues call on a child
- * then it is necessary to compute a new layout if ConstraintSetValues
- * allowed any constraint changes
- */
- if (fw->form.needs_relayout)
- (*((FormWidgetClass)fw->core.widget_class)->form_class.layout)
- (fw, 0, 0, True);
- return (XtGeometryNo);
- }
-
- /*
- * Remember the old size, and then set the size to the requested size
- */
- old_width = XtWidth(w);
- old_height = XtHeight(w);
- XtWidth(w) = allowed.width;
- XtHeight(w) = allowed.height;
-
- if (request->request_mode & XtCWQueryOnly) {
- Boolean always_resize_children;
- Dimension ret_width, ret_height;
-
- fw->form.resize_in_layout = False;
-
- (*((FormWidgetClass)fw->core.widget_class)->form_class.layout)
- (fw, XtWidth(w), XtHeight(w), False);
-
- /*
- * Reset the size of this child back to what it used to be
- */
- XtWidth(w) = old_width;
- XtHeight(w) = old_height;
-
- fw->form.resize_in_layout = True;
-
- always_resize_children = ChangeFormGeometry(w, True,
- fw->form.preferred_width,
- fw->form.preferred_height,
- &ret_width, &ret_height);
-
- if (always_resize_children
- || (ret_width >= fw->form.preferred_width
- && ret_height >= fw->form.preferred_height))
- ret_val = XtGeometryYes;
- else
- ret_val = XtGeometryNo;
- }
- else {
- if ((*((FormWidgetClass)fw->core.widget_class)->form_class.layout)
- (fw, XtWidth(w), XtHeight(w), False)) {
- Widget *childP;
- int num_children = fw->composite.num_children;
- WidgetList children = fw->composite.children;
-
- if (fw->form.no_refigure) {
- /*
- * I am changing the widget wrapper w/o modifing the window.
- * This is risky, but I can get away with it since I am the
- * parent of this widget, and he must ask me for any geometry
- * changes
- *
- * The window will be updated when no_refigure is set back
- * to False
- */
- form->form.deferred_resize = True;
- ret_val = XtGeometryDone;
- }
- else
- ret_val = XtGeometryYes;
-
- /*
- * Resets everything.
- */
- fw->form.old_width = XtWidth(fw);
- fw->form.old_height = XtHeight(fw);
- for (childP = children; childP - children < num_children; childP++) {
- Widget nw = *childP;
-
- if (XtIsManaged(nw)) {
- FormConstraints nform = (FormConstraints)nw->core.constraints;
-
-#ifndef OLDXAW
- nform->form.virtual_x = XtX(nw);
- nform->form.virtual_y = XtY(nw);
-#endif
- nform->form.virtual_width = XtWidth(nw);
- nform->form.virtual_height = XtHeight(nw);
- }
- }
- }
- else {
- XtWidth(w) = old_width;
- XtHeight(w) = old_height;
- ret_val = XtGeometryNo;
- }
- }
-
- return (ret_val);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawFormSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
-#ifndef OLDXAW
- FormWidget f_old = (FormWidget)current;
- FormWidget f_new = (FormWidget)cnew;
-
- if (f_old->core.background_pixmap != f_new->core.background_pixmap) {
- XawPixmap *opix, *npix;
-
- opix = XawPixmapFromXPixmap(f_old->core.background_pixmap, XtScreen(f_old),
- f_old->core.colormap, f_old->core.depth);
- npix = XawPixmapFromXPixmap(f_new->core.background_pixmap, XtScreen(f_new),
- f_new->core.colormap, f_new->core.depth);
- if ((npix && npix->mask) || (opix && opix->mask))
- XawReshapeWidget(cnew, npix);
- }
-#endif /* OLDXAW */
-
- return (False);
-}
-
-/* ARGSUSED */
-static void
-XawFormConstraintInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- FormConstraints form = (FormConstraints)cnew->core.constraints;
- FormWidget fw = (FormWidget)cnew->core.parent;
-
-#ifndef OLDXAW
- form->form.virtual_x = XtX(cnew);
- form->form.virtual_y = XtY(cnew);
-#endif
- form->form.virtual_width = XtWidth(cnew);
- form->form.virtual_height = XtHeight(cnew);
-
- if (form->form.dx == default_value)
- form->form.dx = fw->form.default_spacing;
-
- if (form->form.dy == default_value)
- form->form.dy = fw->form.default_spacing;
-
- form->form.deferred_resize = False;
-}
-
-/*ARGSUSED*/
-static Boolean
-XawFormConstraintSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- FormConstraints cfc = (FormConstraints)current->core.constraints;
- FormConstraints nfc = (FormConstraints)cnew->core.constraints;
-
- if (cfc->form.top != nfc->form.top || cfc->form.bottom != nfc->form.bottom
- || cfc->form.left != nfc->form.left || cfc->form.right != nfc->form.right
- || cfc->form.dx != nfc->form.dx || cfc->form.dy != nfc->form.dy
- || cfc->form.horiz_base != nfc->form.horiz_base
- || cfc->form.vert_base != nfc->form.vert_base) {
- FormWidget fp = (FormWidget)XtParent(cnew);
-
- /* If there are no subclass ConstraintSetValues procedures remaining
- * to be invoked, and if there is no geometry request about to be
- * made, then invoke the new layout now; else defer it
- */
- if (XtClass(XtParent(cnew)) == formWidgetClass
- && XtX(current) == XtX(cnew)
- && XtY(current) == XtY(cnew)
- && XtWidth(current) == XtWidth(cnew)
- && XtHeight(current) == XtHeight(cnew)
- && XtBorderWidth(current) == XtBorderWidth(cnew))
- Layout(fp, 0, 0, True);
- else
- fp->form.needs_relayout = True;
- }
-
- return (False);
-}
-
-static void
-XawFormChangeManaged(Widget w)
-{
- FormWidget fw = (FormWidget)w;
- FormConstraints form;
- WidgetList children, childP;
- int num_children = fw->composite.num_children;
- Widget child;
-
- (*((FormWidgetClass)w->core.widget_class)->form_class.layout)
- (fw, XtWidth(w), XtHeight(w), True);
-
- fw->form.old_width = XtWidth(w);
- fw->form.old_height = XtHeight(w);
- for (children = childP = fw->composite.children;
- childP - children < num_children;
- childP++) {
- child = *childP;
- if (!XtIsManaged(child))
- continue;
- form = (FormConstraints)child->core.constraints;
-#ifndef OLDXAW
- form->form.virtual_x = XtX(child);
- form->form.virtual_y = XtY(child);
-#endif
- form->form.virtual_width = XtWidth(child);
- form->form.virtual_height = XtHeight(child);
- }
-}
-
-static XtGeometryResult
-XawFormQueryGeometry(Widget widget, XtWidgetGeometry *request,
- XtWidgetGeometry *reply)
-{
- FormWidget w = (FormWidget)widget;
-
- reply->width = w->form.preferred_width;
- reply->height = w->form.preferred_height;
- reply->request_mode = CWWidth | CWHeight;
-
- if ((request->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight)
- && request->width == reply->width
- && request->height == reply->height)
- return (XtGeometryYes);
- else if (reply->width == XtWidth(w) && reply->height == XtHeight(w))
- return (XtGeometryNo);
-
- return (XtGeometryAlmost);
-}
-
-/*
- * Public routines
- */
-/*
- * Set or reset figuring (ignored if not realized)
- */
-void
-XawFormDoLayout(Widget w,
-#if NeedWidePrototypes
- Bool force
-#else
- Boolean force
-#endif
-)
-{
- Widget *childP;
- FormWidget fw = (FormWidget)w;
- int num_children = fw->composite.num_children;
- WidgetList children = fw->composite.children;
-
- if ((fw->form.no_refigure = !force) == True || !XtIsRealized(w))
- return;
-
- for (childP = children; childP - children < num_children; childP++) {
- Widget nw = *childP;
-
- if (XtIsManaged(nw)) {
- FormConstraints form = (FormConstraints)nw->core.constraints;
-
- /*
- * Xt Configure widget is too smart, and optimizes out
- * my changes
- */
- XMoveResizeWindow(XtDisplay(nw), XtWindow(nw),
- XtX(nw), XtY(nw), XtWidth(nw), XtHeight(nw));
-
- if (form)
- if (form->form.deferred_resize &&
- XtClass(nw)->core_class.resize != NULL) {
- (*(XtClass(nw)->core_class.resize))(nw);
- form->form.deferred_resize = False;
- }
- }
- }
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/Converters.h>
+#include <X11/Xaw/FormP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Class Methods
+ */
+static void XawFormChangeManaged(Widget);
+static void XawFormClassInitialize(void);
+static void XawFormClassPartInitialize(WidgetClass);
+static void XawFormConstraintInitialize(Widget, Widget, ArgList, Cardinal*);
+static Boolean XawFormConstraintSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static XtGeometryResult XawFormGeometryManager(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawFormInitialize(Widget, Widget, ArgList, Cardinal*);
+#ifndef OLDXAW
+static void XawFormRealize(Widget, Mask*, XSetWindowAttributes*);
+static void XawFormRedisplay(Widget, XEvent*, Region);
+#endif
+static XtGeometryResult XawFormQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawFormResize(Widget);
+static Boolean XawFormSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+static Boolean Layout(FormWidget, unsigned int, unsigned int, Bool);
+
+/*
+ * Prototypes
+ */
+static void _CvtStringToEdgeType(XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr);
+static Bool ChangeFormGeometry(Widget, Bool, unsigned int, unsigned int,
+ Dimension*, Dimension*);
+Boolean CvtEdgeTypeToString(Display*, XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr, XtPointer*);
+static void LayoutChild(Widget);
+static int TransformCoord(int, unsigned int, unsigned int, XtEdgeType);
+static void ResizeChildren(Widget);
+
+/*
+ * Initialization
+ */
+#ifndef OLDXAW
+static XtActionsRec actions[] = {
+ {"set-values", XawSetValuesAction},
+ {"get-values", XawGetValuesAction},
+ {"declare", XawDeclareAction},
+ {"call-proc", XawCallProcAction},
+};
+#endif
+
+static XrmQuark QchainLeft, QchainRight, QchainTop, QchainBottom, Qrubber;
+
+#define default_value -99999
+#define Offset(field) XtOffsetOf(FormRec, form.field)
+static XtResource resources[] = {
+ {
+ XtNdefaultDistance,
+ XtCThickness,
+ XtRInt,
+ sizeof(int),
+ Offset(default_spacing),
+ XtRImmediate,
+ (XtPointer)4
+ },
+#ifndef OLDXAW
+ {
+ XawNdisplayList,
+ XawCDisplayList,
+ XawRDisplayList,
+ sizeof(XawDisplayList*),
+ Offset(display_list),
+ XtRImmediate,
+ NULL
+ },
+#endif
+};
+#undef Offset
+
+#define defEdge XtRubber
+
+#define Offset(field) XtOffsetOf(FormConstraintsRec, form.field)
+static XtResource formConstraintResources[] = {
+ {
+ XtNtop,
+ XtCEdge,
+ XtREdgeType,
+ sizeof(XtEdgeType),
+ Offset(top),
+ XtRImmediate,
+ (XtPointer)defEdge
+ },
+ {
+ XtNbottom,
+ XtCEdge,
+ XtREdgeType,
+ sizeof(XtEdgeType),
+ Offset(bottom),
+ XtRImmediate,
+ (XtPointer)defEdge
+ },
+ {
+ XtNleft,
+ XtCEdge,
+ XtREdgeType,
+ sizeof(XtEdgeType),
+ Offset(left),
+ XtRImmediate,
+ (XtPointer)defEdge
+ },
+ {
+ XtNright,
+ XtCEdge,
+ XtREdgeType,
+ sizeof(XtEdgeType),
+ Offset(right),
+ XtRImmediate,
+ (XtPointer)defEdge
+ },
+ {
+ XtNhorizDistance,
+ XtCThickness,
+ XtRInt,
+ sizeof(int),
+ Offset(dx),
+ XtRImmediate,
+ (XtPointer)default_value
+ },
+ {
+ XtNfromHoriz,
+ XtCWidget,
+ XtRWidget,
+ sizeof(Widget),
+ Offset(horiz_base),
+ XtRWidget,
+ NULL
+ },
+ {
+ XtNvertDistance,
+ XtCThickness,
+ XtRInt,
+ sizeof(int),
+ Offset(dy),
+ XtRImmediate,
+ (XtPointer)default_value
+ },
+ {
+ XtNfromVert,
+ XtCWidget,
+ XtRWidget,
+ sizeof(Widget),
+ Offset(vert_base),
+ XtRWidget,
+ NULL
+ },
+ {
+ XtNresizable,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ Offset(allow_resize),
+ XtRImmediate,
+ (XtPointer)False
+ },
+};
+#undef Offset
+
+FormClassRec formClassRec = {
+ /* core */
+ {
+ (WidgetClass)&constraintClassRec, /* superclass */
+ "Form", /* class_name */
+ sizeof(FormRec), /* widget_size */
+ XawFormClassInitialize, /* class_initialize */
+ XawFormClassPartInitialize, /* class_part_init */
+ False, /* class_inited */
+ XawFormInitialize, /* initialize */
+ NULL, /* initialize_hook */
+#ifndef OLDXAW
+ XawFormRealize, /* realize */
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+#else
+ XtInheritRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+#endif
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XawFormResize, /* resize */
+#ifndef OLDXAW
+ XawFormRedisplay, /* expose */
+#else
+ XtInheritExpose, /* expose */
+#endif
+ XawFormSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XawFormQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* composite */
+ {
+ XawFormGeometryManager, /* geometry_manager */
+ XawFormChangeManaged, /* change_managed */
+ XtInheritInsertChild, /* insert_child */
+ XtInheritDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ /* constraint */
+ {
+ formConstraintResources, /* subresourses */
+ XtNumber(formConstraintResources), /* subresource_count */
+ sizeof(FormConstraintsRec), /* constraint_size */
+ XawFormConstraintInitialize, /* initialize */
+ NULL, /* destroy */
+ XawFormConstraintSetValues, /* set_values */
+ NULL, /* extension */
+ },
+ /* form */
+ {
+ Layout, /* layout */
+ },
+};
+
+WidgetClass formWidgetClass = (WidgetClass)&formClassRec;
+
+/*
+ * Implementation
+ */
+#ifndef OLDXAW
+static void
+XawFormRealize(Widget w, Mask *mask, XSetWindowAttributes *attr)
+{
+ XawPixmap *pixmap;
+
+ (*formWidgetClass->core_class.superclass->core_class.realize)(w, mask, attr);
+
+ if (w->core.background_pixmap > XtUnspecifiedPixmap) {
+ pixmap = XawPixmapFromXPixmap(w->core.background_pixmap, XtScreen(w),
+ w->core.colormap, w->core.depth);
+ if (pixmap && pixmap->mask)
+ XawReshapeWidget(w, pixmap);
+ }
+}
+
+static void
+XawFormRedisplay(Widget w, XEvent *event, Region region)
+{
+ FormWidget xaw = (FormWidget)w;
+
+ if (xaw->form.display_list)
+ XawRunDisplayList(w, xaw->form.display_list, event, region);
+}
+#endif
+
+/*ARGSUSED*/
+static void
+_CvtStringToEdgeType(XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal)
+{
+ static XtEdgeType edgeType;
+ XrmQuark q;
+ char name[12];
+
+ XmuNCopyISOLatin1Lowered(name, (char*)fromVal->addr, sizeof(name));
+ q = XrmStringToQuark(name);
+
+ if (q == QchainLeft)
+ edgeType = XtChainLeft;
+ else if (q == QchainRight)
+ edgeType = XtChainRight;
+ else if (q == QchainTop)
+ edgeType = XtChainTop;
+ else if (q == QchainBottom)
+ edgeType = XtChainBottom;
+ else if (q == Qrubber)
+ edgeType = XtRubber;
+ else {
+ XtStringConversionWarning(fromVal->addr, XtREdgeType);
+ toVal->size = 0;
+ toVal->addr = NULL;
+ return;
+ }
+
+ toVal->size = sizeof(XtEdgeType);
+ toVal->addr = (XPointer)&edgeType;
+}
+
+/*ARGSUSED*/
+Boolean
+CvtEdgeTypeToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *data)
+{
+ static String buffer;
+ Cardinal size;
+
+ switch (*(XtEdgeType *)fromVal->addr) {
+ case XtChainLeft:
+ buffer = XtEchainLeft;
+ break;
+ case XtChainRight:
+ buffer = XtEchainRight;
+ break;
+ case XtChainTop:
+ buffer = XtEchainTop;
+ break;
+ case XtChainBottom:
+ buffer = XtEchainBottom;
+ break;
+ case XtRubber:
+ buffer = XtErubber;
+ break;
+ default:
+ XawTypeToStringWarning(dpy, XtREdgeType);
+ toVal->addr = NULL;
+ toVal->size = 0;
+ return (False);
+ }
+
+ size = strlen(buffer) + 1;
+ if (toVal->addr != NULL) {
+ if (toVal->size < size) {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = (XPointer)buffer;
+ toVal->size = sizeof(String);
+
+ return (True);
+}
+
+static void
+XawFormClassInitialize(void)
+{
+ static XtConvertArgRec parentCvtArgs[] = {
+ {XtBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.parent),
+ sizeof(Widget)}
+ };
+
+ char name[12];
+
+ XawInitializeWidgetSet();
+ XmuNCopyISOLatin1Lowered(name, XtEchainLeft, sizeof(name));
+ QchainLeft = XrmStringToQuark(name);
+ XmuNCopyISOLatin1Lowered(name, XtEchainRight, sizeof(name));
+ QchainRight = XrmStringToQuark(name);
+ XmuNCopyISOLatin1Lowered(name, XtEchainTop, sizeof(name));
+ QchainTop = XrmStringToQuark(name);
+ XmuNCopyISOLatin1Lowered(name, XtEchainBottom, sizeof(name));
+ QchainBottom = XrmStringToQuark(name);
+ XmuNCopyISOLatin1Lowered(name, XtErubber, sizeof(name));
+ Qrubber = XrmStringToQuark(name);
+
+ XtAddConverter(XtRString, XtREdgeType, _CvtStringToEdgeType, NULL, 0);
+ XtSetTypeConverter(XtREdgeType, XtRString, CvtEdgeTypeToString,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRString, XtRWidget, XmuNewCvtStringToWidget,
+ parentCvtArgs, XtNumber(parentCvtArgs), XtCacheNone,
+ NULL);
+ XtSetTypeConverter(XtRWidget, XtRString, XmuCvtWidgetToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+static void
+XawFormClassPartInitialize(WidgetClass cclass)
+{
+ FormWidgetClass c = (FormWidgetClass)cclass;
+ FormWidgetClass super = (FormWidgetClass)c->core_class.superclass;
+
+ if (c->form_class.layout == XtInheritLayout)
+ c->form_class.layout = super->form_class.layout;
+}
+
+/*ARGSUSED*/
+static void
+XawFormInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ FormWidget fw = (FormWidget)cnew;
+
+ fw->form.old_width = fw->form.old_height = 0;
+ fw->form.no_refigure = False;
+ fw->form.needs_relayout = False;
+ fw->form.resize_in_layout = True;
+ fw->form.resize_is_no_op = False;
+}
+
+/*
+ * Function:
+ * ChangeFormGeometry
+ *
+ * Parameters:
+ * w - Form widget
+ * query_only - is only a query?
+ * width - new width and height
+ * height - ""
+ * ret_width - actual size the form is allowed to resize to (return)
+ * ret_height - ""
+ *
+ * Description:
+ * Ask the parent to change the form widget's geometry.
+ *
+ * Returns:
+ * True of children may always be resized
+ */
+static Bool
+ChangeFormGeometry(Widget w, Bool query_only,
+ unsigned int width, unsigned int height,
+ Dimension *ret_width, Dimension *ret_height)
+{
+ FormWidget fw = (FormWidget)w;
+ Boolean always_resize_children;
+ XtGeometryResult result;
+ XtWidgetGeometry request, return_request;
+
+ /*
+ * If we are already at the desired size then there is no need
+ * to ask our parent of we can change size
+ */
+ if (width == XtWidth(fw) && height == XtHeight(fw))
+ return (True);
+
+ request.width = width;
+ request.height = height;
+ request.request_mode = CWWidth | CWHeight;
+ if (query_only)
+ request.request_mode |= XtCWQueryOnly;
+
+ /*
+ * Do no invoke the resize rules if our size changes here
+ */
+ fw->form.resize_is_no_op = True;
+
+ result = XtMakeGeometryRequest(w, &request, &return_request);
+ if (result == XtGeometryAlmost) {
+ request = return_request;
+ (void)XtMakeGeometryRequest(w, &request, &return_request);
+ always_resize_children = False;
+ }
+ else
+ always_resize_children = result == XtGeometryYes;
+
+ fw->form.resize_is_no_op = False;
+
+ if (ret_width != NULL)
+ *ret_width = request.width;
+ if (ret_height != NULL)
+ *ret_height = request.height;
+
+ return (always_resize_children);
+}
+
+/*
+ * Function:
+ * Layout
+ *
+ * Parameters:
+ * fw - Form widget
+ * width - unused
+ * height - ""
+ * force_relayout - will force the children to be moved, even if some
+ * go past the edge of the form
+ *
+ * Description:
+ * Moves all the children around.
+ *
+ * Returns:
+ * True if the children are allowed to move from their
+ * current locations to the new ones.
+ */
+/*ARGSUSED*/
+static Boolean
+Layout(FormWidget fw, unsigned int width, unsigned int height,
+ Bool force_relayout)
+{
+ int num_children = fw->composite.num_children;
+ WidgetList children = fw->composite.children;
+ Widget *childP;
+ Dimension maxx, maxy;
+ Boolean ret_val;
+
+ for (childP = children; childP - children < num_children; childP++) {
+ FormConstraints form = (FormConstraints)(*childP)->core.constraints;
+ form->form.layout_state = LayoutPending;
+ }
+
+ maxx = maxy = 1;
+ for (childP = children; childP - children < num_children; childP++) {
+ if (XtIsManaged(*childP)) {
+ FormConstraints form;
+ Position x, y;
+
+ form = (FormConstraints)(*childP)->core.constraints;
+
+ LayoutChild(*childP);
+
+ x = form->form.new_x + XtWidth(*childP)
+ + (XtBorderWidth(*childP) << 1);
+ if (x > (int)maxx)
+ maxx = x;
+
+ y = form->form.new_y + XtHeight(*childP)
+ + (XtBorderWidth(*childP) << 1);
+ if (y > (int)maxy)
+ maxy = y;
+ }
+ }
+
+ fw->form.preferred_width = (maxx += fw->form.default_spacing);
+ fw->form.preferred_height = (maxy += fw->form.default_spacing);
+
+ if (fw->form.resize_in_layout) {
+ Boolean always_resize_children;
+
+ always_resize_children =
+ ChangeFormGeometry((Widget)fw, False, maxx, maxy, NULL, NULL);
+
+#ifdef OLDXAW
+ fw->form.old_width = fw->core.width;
+ fw->form.old_height = fw->core.height;
+#endif
+
+ if (force_relayout)
+ ret_val = True;
+ else
+ ret_val = always_resize_children ||
+ (XtWidth(fw) >= maxx && XtHeight(fw) >= maxy);
+
+ if (ret_val)
+ ResizeChildren((Widget)fw);
+ }
+ else
+ ret_val = False;
+
+ fw->form.needs_relayout = False;
+
+ return (ret_val);
+}
+
+/*
+ * Function:
+ * ResizeChildren
+ *
+ * Parameters:
+ * w - form widget
+ *
+ * Description:
+ * Resizes all children to new_x and new_y.
+ */
+static void
+ResizeChildren(Widget w)
+{
+ FormWidget fw = (FormWidget)w;
+ int num_children = fw->composite.num_children;
+ WidgetList children = fw->composite.children;
+ Widget *childP;
+
+ for (childP = children; childP - children < num_children; childP++) {
+ FormConstraints form;
+ Position x, y;
+
+ if (!XtIsManaged(*childP))
+ continue;
+
+ form = (FormConstraints)(*childP)->core.constraints;
+
+ if (fw->form.old_width && fw->form.old_height) {
+ x = TransformCoord(form->form.new_x, fw->form.old_width,
+ XtWidth(fw), form->form.left);
+ y = TransformCoord(form->form.new_y, fw->form.old_height,
+ XtHeight(fw), form->form.top);
+ }
+ else {
+ x = form->form.new_x;
+ y = form->form.new_y;
+ }
+
+ if (fw->form.no_refigure) {
+ /*
+ * I am changing the widget wrapper w/o modifing the window. This is
+ * risky, but I can get away with it since I am the parent of this
+ * widget, and he must ask me for any geometry changes
+ *
+ * The window will be updated when no_refigure is set back to False
+ */
+ XtX(*childP) = x;
+ XtY(*childP) = y;
+ }
+ else
+ XtMoveWidget(*childP, x, y);
+ }
+}
+
+static void
+LayoutChild(Widget w)
+{
+ FormConstraints form = (FormConstraints)w->core.constraints;
+ Widget ref;
+
+ switch (form->form.layout_state) {
+ case LayoutPending:
+ form->form.layout_state = LayoutInProgress;
+ break;
+ case LayoutDone:
+ return;
+ case LayoutInProgress: {
+ String subs[2];
+ Cardinal num_subs = 2;
+ subs[0] = w->core.name;
+ subs[1] = w->core.parent->core.name;
+
+ XtAppWarningMsg(XtWidgetToApplicationContext(w),
+ "constraintLoop", "xawFormLayout", "XawToolkitError",
+ "constraint loop detected while laying out "
+ "child '%s' in FormWidget '%s'",
+ subs, &num_subs);
+ } return;
+ }
+
+ form->form.new_x = form->form.dx;
+ form->form.new_y = form->form.dy;
+ if ((ref = form->form.horiz_base) != NULL) {
+ FormConstraints ref_form = (FormConstraints)ref->core.constraints;
+
+ LayoutChild(ref);
+ form->form.new_x += ref_form->form.new_x + XtWidth(ref) +
+ (XtBorderWidth(ref) << 1);
+ }
+ if ((ref = form->form.vert_base) != NULL) {
+ FormConstraints ref_form = (FormConstraints)ref->core.constraints;
+
+ LayoutChild(ref);
+ form->form.new_y += ref_form->form.new_y + XtHeight(ref) +
+ (XtBorderWidth(ref) << 1);
+ }
+
+ form->form.layout_state = LayoutDone;
+}
+
+static int
+TransformCoord(int loc, unsigned int old, unsigned int cnew, XtEdgeType type)
+{
+ if (type == XtRubber) {
+ if ((int)old > 0)
+ loc = (int)(loc * ((double)cnew / (double)old));
+ }
+ else if (type == XtChainBottom || type == XtChainRight)
+ loc += (int)cnew - (int)old;
+
+ return (loc);
+}
+
+static void
+XawFormResize(Widget w)
+{
+ FormWidget fw = (FormWidget)w;
+ WidgetList children = fw->composite.children;
+ int num_children = fw->composite.num_children;
+ Widget *childP;
+ int x, y;
+ int width, height;
+ Boolean unmap = XtIsRealized(w) && w->core.mapped_when_managed &&
+ XtIsManaged(w);
+
+ if (unmap)
+ XtUnmapWidget(w);
+
+ if (!fw->form.resize_is_no_op)
+ for (childP = children; childP - children < num_children; childP++) {
+ FormConstraints form = (FormConstraints)(*childP)->core.constraints;
+
+ if (!XtIsManaged(*childP))
+ continue;
+
+#ifndef OLDXAW
+ x = TransformCoord(form->form.virtual_x, fw->form.old_width,
+ XtWidth(fw), form->form.left);
+ y = TransformCoord(form->form.virtual_y, fw->form.old_height,
+ XtHeight(fw), form->form.top);
+ width = TransformCoord(form->form.virtual_x +
+ form->form.virtual_width +
+ (XtBorderWidth(*childP) << 1),
+ fw->form.old_width, XtWidth(fw),
+ form->form.right) -
+ (x + (XtBorderWidth(*childP) << 1));
+ height = TransformCoord(form->form.virtual_y +
+ form->form.virtual_height +
+ (XtBorderWidth(*childP) << 1),
+ fw->form.old_height, XtHeight(fw),
+ form->form.bottom) -
+ (y + (XtBorderWidth(*childP) << 1));
+#else
+ x = TransformCoord(XtX(*childP), fw->form.old_width,
+ XtWidth(fw), form->form.left);
+ y = TransformCoord(XtY(*childP), fw->form.old_height,
+ XtHeight(fw), form->form.top);
+ width = TransformCoord(XtX(*childP) + form->form.virtual_width +
+ (XtBorderWidth(*childP) << 1),
+ fw->form.old_width, XtWidth(fw),
+ form->form.right) -
+ (x + (XtBorderWidth(*childP) << 1));
+ height = TransformCoord(XtY(*childP) + form->form.virtual_height +
+ (XtBorderWidth(*childP) << 1),
+ fw->form.old_height, XtHeight(fw),
+ form->form.bottom) -
+ (y + (XtBorderWidth(*childP) << 1));
+ form->form.virtual_width = width;
+ form->form.virtual_height = height;
+#endif
+
+ width = width < 1 ? 1 : width;
+ height = height < 1 ? 1 : height;
+
+ XtConfigureWidget(*childP, x, y, width, height,
+ XtBorderWidth(*childP));
+ }
+
+ if (unmap)
+ XtMapWidget(w);
+
+#ifdef OLDXAW
+ fw->form.old_width = XtWidth(fw);
+ fw->form.old_height = XtHeight(fw);
+#endif
+}
+
+/*ARGSUSED*/
+static XtGeometryResult
+XawFormGeometryManager(Widget w, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply)
+{
+ Dimension old_width, old_height;
+ FormWidget fw = (FormWidget)XtParent(w);
+ FormConstraints form = (FormConstraints)w->core.constraints;
+ XtWidgetGeometry allowed;
+ XtGeometryResult ret_val;
+
+ if ((request->request_mode & (unsigned)~(XtCWQueryOnly | CWWidth | CWHeight))
+ || !form->form.allow_resize) {
+ /* If GeometryManager is invoked during a SetValues call on a child
+ * then it is necessary to compute a new layout if ConstraintSetValues
+ * allowed any constraint changes
+ */
+ if (fw->form.needs_relayout)
+ (*((FormWidgetClass)fw->core.widget_class)->form_class.layout)
+ (fw, 0, 0, True);
+ return (XtGeometryNo);
+ }
+
+ if (request->request_mode & CWWidth)
+ allowed.width = request->width;
+ else
+ allowed.width = XtWidth(w);
+
+ if (request->request_mode & CWHeight)
+ allowed.height = request->height;
+ else
+ allowed.height = XtHeight(w);
+
+ if (allowed.width == XtWidth(w) && allowed.height == XtHeight(w)) {
+ /* If GeometryManager is invoked during a SetValues call on a child
+ * then it is necessary to compute a new layout if ConstraintSetValues
+ * allowed any constraint changes
+ */
+ if (fw->form.needs_relayout)
+ (*((FormWidgetClass)fw->core.widget_class)->form_class.layout)
+ (fw, 0, 0, True);
+ return (XtGeometryNo);
+ }
+
+ /*
+ * Remember the old size, and then set the size to the requested size
+ */
+ old_width = XtWidth(w);
+ old_height = XtHeight(w);
+ XtWidth(w) = allowed.width;
+ XtHeight(w) = allowed.height;
+
+ if (request->request_mode & XtCWQueryOnly) {
+ Boolean always_resize_children;
+ Dimension ret_width, ret_height;
+
+ fw->form.resize_in_layout = False;
+
+ (*((FormWidgetClass)fw->core.widget_class)->form_class.layout)
+ (fw, XtWidth(w), XtHeight(w), False);
+
+ /*
+ * Reset the size of this child back to what it used to be
+ */
+ XtWidth(w) = old_width;
+ XtHeight(w) = old_height;
+
+ fw->form.resize_in_layout = True;
+
+ always_resize_children = ChangeFormGeometry(w, True,
+ fw->form.preferred_width,
+ fw->form.preferred_height,
+ &ret_width, &ret_height);
+
+ if (always_resize_children
+ || (ret_width >= fw->form.preferred_width
+ && ret_height >= fw->form.preferred_height))
+ ret_val = XtGeometryYes;
+ else
+ ret_val = XtGeometryNo;
+ }
+ else {
+ if ((*((FormWidgetClass)fw->core.widget_class)->form_class.layout)
+ (fw, XtWidth(w), XtHeight(w), False)) {
+ Widget *childP;
+ int num_children = fw->composite.num_children;
+ WidgetList children = fw->composite.children;
+
+ if (fw->form.no_refigure) {
+ /*
+ * I am changing the widget wrapper w/o modifing the window.
+ * This is risky, but I can get away with it since I am the
+ * parent of this widget, and he must ask me for any geometry
+ * changes
+ *
+ * The window will be updated when no_refigure is set back
+ * to False
+ */
+ form->form.deferred_resize = True;
+ ret_val = XtGeometryDone;
+ }
+ else
+ ret_val = XtGeometryYes;
+
+ /*
+ * Resets everything.
+ */
+ fw->form.old_width = XtWidth(fw);
+ fw->form.old_height = XtHeight(fw);
+ for (childP = children; childP - children < num_children; childP++) {
+ Widget nw = *childP;
+
+ if (XtIsManaged(nw)) {
+ FormConstraints nform = (FormConstraints)nw->core.constraints;
+
+#ifndef OLDXAW
+ nform->form.virtual_x = XtX(nw);
+ nform->form.virtual_y = XtY(nw);
+#endif
+ nform->form.virtual_width = XtWidth(nw);
+ nform->form.virtual_height = XtHeight(nw);
+ }
+ }
+ }
+ else {
+ XtWidth(w) = old_width;
+ XtHeight(w) = old_height;
+ ret_val = XtGeometryNo;
+ }
+ }
+
+ return (ret_val);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawFormSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+#ifndef OLDXAW
+ FormWidget f_old = (FormWidget)current;
+ FormWidget f_new = (FormWidget)cnew;
+
+ if (f_old->core.background_pixmap != f_new->core.background_pixmap) {
+ XawPixmap *opix, *npix;
+
+ opix = XawPixmapFromXPixmap(f_old->core.background_pixmap, XtScreen(f_old),
+ f_old->core.colormap, f_old->core.depth);
+ npix = XawPixmapFromXPixmap(f_new->core.background_pixmap, XtScreen(f_new),
+ f_new->core.colormap, f_new->core.depth);
+ if ((npix && npix->mask) || (opix && opix->mask))
+ XawReshapeWidget(cnew, npix);
+ }
+#endif /* OLDXAW */
+
+ return (False);
+}
+
+/* ARGSUSED */
+static void
+XawFormConstraintInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ FormConstraints form = (FormConstraints)cnew->core.constraints;
+ FormWidget fw = (FormWidget)cnew->core.parent;
+
+#ifndef OLDXAW
+ form->form.virtual_x = XtX(cnew);
+ form->form.virtual_y = XtY(cnew);
+#endif
+ form->form.virtual_width = XtWidth(cnew);
+ form->form.virtual_height = XtHeight(cnew);
+
+ if (form->form.dx == default_value)
+ form->form.dx = fw->form.default_spacing;
+
+ if (form->form.dy == default_value)
+ form->form.dy = fw->form.default_spacing;
+
+ form->form.deferred_resize = False;
+}
+
+/*ARGSUSED*/
+static Boolean
+XawFormConstraintSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ FormConstraints cfc = (FormConstraints)current->core.constraints;
+ FormConstraints nfc = (FormConstraints)cnew->core.constraints;
+
+ if (cfc->form.top != nfc->form.top || cfc->form.bottom != nfc->form.bottom
+ || cfc->form.left != nfc->form.left || cfc->form.right != nfc->form.right
+ || cfc->form.dx != nfc->form.dx || cfc->form.dy != nfc->form.dy
+ || cfc->form.horiz_base != nfc->form.horiz_base
+ || cfc->form.vert_base != nfc->form.vert_base) {
+ FormWidget fp = (FormWidget)XtParent(cnew);
+
+ /* If there are no subclass ConstraintSetValues procedures remaining
+ * to be invoked, and if there is no geometry request about to be
+ * made, then invoke the new layout now; else defer it
+ */
+ if (XtClass(XtParent(cnew)) == formWidgetClass
+ && XtX(current) == XtX(cnew)
+ && XtY(current) == XtY(cnew)
+ && XtWidth(current) == XtWidth(cnew)
+ && XtHeight(current) == XtHeight(cnew)
+ && XtBorderWidth(current) == XtBorderWidth(cnew))
+ Layout(fp, 0, 0, True);
+ else
+ fp->form.needs_relayout = True;
+ }
+
+ return (False);
+}
+
+static void
+XawFormChangeManaged(Widget w)
+{
+ FormWidget fw = (FormWidget)w;
+ FormConstraints form;
+ WidgetList children, childP;
+ int num_children = fw->composite.num_children;
+ Widget child;
+
+ (*((FormWidgetClass)w->core.widget_class)->form_class.layout)
+ (fw, XtWidth(w), XtHeight(w), True);
+
+ fw->form.old_width = XtWidth(w);
+ fw->form.old_height = XtHeight(w);
+ for (children = childP = fw->composite.children;
+ childP - children < num_children;
+ childP++) {
+ child = *childP;
+ if (!XtIsManaged(child))
+ continue;
+ form = (FormConstraints)child->core.constraints;
+#ifndef OLDXAW
+ form->form.virtual_x = XtX(child);
+ form->form.virtual_y = XtY(child);
+#endif
+ form->form.virtual_width = XtWidth(child);
+ form->form.virtual_height = XtHeight(child);
+ }
+}
+
+static XtGeometryResult
+XawFormQueryGeometry(Widget widget, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply)
+{
+ FormWidget w = (FormWidget)widget;
+
+ reply->width = w->form.preferred_width;
+ reply->height = w->form.preferred_height;
+ reply->request_mode = CWWidth | CWHeight;
+
+ if ((request->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight)
+ && request->width == reply->width
+ && request->height == reply->height)
+ return (XtGeometryYes);
+ else if (reply->width == XtWidth(w) && reply->height == XtHeight(w))
+ return (XtGeometryNo);
+
+ return (XtGeometryAlmost);
+}
+
+/*
+ * Public routines
+ */
+/*
+ * Set or reset figuring (ignored if not realized)
+ */
+void
+XawFormDoLayout(Widget w,
+#if NeedWidePrototypes
+ Bool force
+#else
+ Boolean force
+#endif
+)
+{
+ Widget *childP;
+ FormWidget fw = (FormWidget)w;
+ int num_children = fw->composite.num_children;
+ WidgetList children = fw->composite.children;
+
+ if ((fw->form.no_refigure = !force) == True || !XtIsRealized(w))
+ return;
+
+ for (childP = children; childP - children < num_children; childP++) {
+ Widget nw = *childP;
+
+ if (XtIsManaged(nw)) {
+ FormConstraints form = (FormConstraints)nw->core.constraints;
+
+ /*
+ * Xt Configure widget is too smart, and optimizes out
+ * my changes
+ */
+ XMoveResizeWindow(XtDisplay(nw), XtWindow(nw),
+ XtX(nw), XtY(nw), XtWidth(nw), XtHeight(nw));
+
+ if (form)
+ if (form->form.deferred_resize &&
+ XtClass(nw)->core_class.resize != NULL) {
+ (*(XtClass(nw)->core_class.resize))(nw);
+ form->form.deferred_resize = False;
+ }
+ }
+ }
+}
diff --git a/libXaw/src/Grip.c b/libXaw/src/Grip.c
index c9d418368..19b4eb487 100644
--- a/libXaw/src/Grip.c
+++ b/libXaw/src/Grip.c
@@ -1,188 +1,185 @@
-/* $Xorg: Grip.c,v 1.4 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Grip.c,v 1.7 2001/01/17 19:42:26 dawes Exp $ */
-
-/*
- * Grip.c - Grip Widget (Used by Paned Widget)
- *
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xaw/GripP.h>
-#include <X11/Xaw/XawInit.h>
-
-/*
- * Prototypes
- */
-static void
-GripAction(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-static XtResource resources[] = {
- {
- XtNwidth,
- XtCWidth,
- XtRDimension,
- sizeof(Dimension),
- XtOffsetOf(GripRec, core.width),
- XtRImmediate,
- (XtPointer)DEFAULT_GRIP_SIZE
- },
- {
- XtNheight,
- XtCHeight,
- XtRDimension,
- sizeof(Dimension),
- XtOffsetOf(GripRec, core.height),
- XtRImmediate,
- (XtPointer)DEFAULT_GRIP_SIZE
- },
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- XtOffsetOf(GripRec, core.background_pixel),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNborderWidth,
- XtCBorderWidth,
- XtRDimension,
- sizeof(Dimension),
- XtOffsetOf(GripRec, core.border_width),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNcallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- XtOffsetOf(GripRec, grip.grip_action),
- XtRCallback,
- NULL
- },
-};
-
-static XtActionsRec actionsList[] =
-{
- {"GripAction", GripAction},
-};
-
-#define Superclass (&simpleClassRec)
-
-GripClassRec gripClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Grip", /* class name */
- sizeof(GripRec), /* size */
- XawInitializeWidgetSet, /* class initialize */
- NULL, /* class_part_init */
- False, /* class_inited */
- NULL, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- NULL, /* resize */
- XtInheritExpose, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* grip */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass gripWidgetClass = (WidgetClass)&gripClassRec;
-
-/*
- * Implementation
- */
-static void
-GripAction(Widget widget, XEvent *event, String *params, Cardinal *num_params)
-{
- XawGripCallDataRec call_data;
-
- call_data.event = event;
- call_data.params = params;
- call_data.num_params = *num_params;
-
- XtCallCallbacks(widget, XtNcallback, (XtPointer)&call_data);
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * Grip.c - Grip Widget (Used by Paned Widget)
+ *
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/GripP.h>
+#include <X11/Xaw/XawInit.h>
+
+/*
+ * Prototypes
+ */
+static void
+GripAction(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+static XtResource resources[] = {
+ {
+ XtNwidth,
+ XtCWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ XtOffsetOf(GripRec, core.width),
+ XtRImmediate,
+ (XtPointer)DEFAULT_GRIP_SIZE
+ },
+ {
+ XtNheight,
+ XtCHeight,
+ XtRDimension,
+ sizeof(Dimension),
+ XtOffsetOf(GripRec, core.height),
+ XtRImmediate,
+ (XtPointer)DEFAULT_GRIP_SIZE
+ },
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ XtOffsetOf(GripRec, core.background_pixel),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNborderWidth,
+ XtCBorderWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ XtOffsetOf(GripRec, core.border_width),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNcallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ XtOffsetOf(GripRec, grip.grip_action),
+ XtRCallback,
+ NULL
+ },
+};
+
+static XtActionsRec actionsList[] =
+{
+ {"GripAction", GripAction},
+};
+
+#define Superclass (&simpleClassRec)
+
+GripClassRec gripClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Grip", /* class name */
+ sizeof(GripRec), /* size */
+ XawInitializeWidgetSet, /* class initialize */
+ NULL, /* class_part_init */
+ False, /* class_inited */
+ NULL, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ actionsList, /* actions */
+ XtNumber(actionsList), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ NULL, /* resize */
+ XtInheritExpose, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* grip */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass gripWidgetClass = (WidgetClass)&gripClassRec;
+
+/*
+ * Implementation
+ */
+static void
+GripAction(Widget widget, XEvent *event, String *params, Cardinal *num_params)
+{
+ XawGripCallDataRec call_data;
+
+ call_data.event = event;
+ call_data.params = params;
+ call_data.num_params = *num_params;
+
+ XtCallCallbacks(widget, XtNcallback, (XtPointer)&call_data);
+}
diff --git a/libXaw/src/Label.c b/libXaw/src/Label.c
index a2af5bd07..2eea91ff9 100644
--- a/libXaw/src/Label.c
+++ b/libXaw/src/Label.c
@@ -1,824 +1,821 @@
-/* $Xorg: Label.c,v 1.5 2001/02/09 02:03:43 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Label.c,v 1.12 2001/01/17 19:42:27 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <ctype.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xos.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xmu/Drawing.h>
-#include <X11/Xaw/LabelP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#define streq(a, b) (strcmp((a), (b)) == 0)
-
-#define MULTI_LINE_LABEL 32767
-
-#ifdef CRAY
-#define WORD64
-#endif
-
-/*
- * Class Methods
- */
-static void XawLabelClassInitialize(void);
-static void XawLabelDestroy(Widget);
-static void XawLabelInitialize(Widget, Widget, ArgList, Cardinal*);
-static XtGeometryResult XawLabelQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawLabelRedisplay(Widget, XEvent*, Region);
-static void XawLabelResize(Widget);
-static Boolean XawLabelSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-#ifdef WORD64
-static int _XawLabelWidth16(XFontStruct*, char*, int);
-static void _XawLabelDraw16(Display*, Drawable, GC, int, int, char*, int);
-#endif
-static void compute_bitmap_offsets(LabelWidget);
-static void GetGrayGC(LabelWidget);
-static void GetNormalGC(LabelWidget);
-static void _Reposition(LabelWidget, unsigned int, unsigned int,
- Position*, Position*);
-static void set_bitmap_info(LabelWidget);
-static void SetTextWidthAndHeight(LabelWidget);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(LabelRec, field)
-static XtResource resources[] = {
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(label.foreground),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNfont,
- XtCFont,
- XtRFontStruct,
- sizeof(XFontStruct*),
- offset(label.font),
- XtRString,
- XtDefaultFont
- },
- {
- XtNfontSet,
- XtCFontSet,
- XtRFontSet,
- sizeof(XFontSet),
- offset(label.fontset),
- XtRString,
- XtDefaultFontSet
- },
- {
- XtNlabel,
- XtCLabel,
- XtRString,
- sizeof(String),
- offset(label.label),
- XtRString,
- NULL
- },
- {
- XtNencoding,
- XtCEncoding,
- XtRUnsignedChar,
- sizeof(unsigned char),
- offset(label.encoding),
- XtRImmediate,
- (XtPointer)XawTextEncoding8bit
- },
- {
- XtNjustify,
- XtCJustify,
- XtRJustify,
- sizeof(XtJustify),
- offset(label.justify),
- XtRImmediate,
- (XtPointer)XtJustifyCenter
- },
- {
- XtNinternalWidth,
- XtCWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(label.internal_width),
- XtRImmediate,
- (XtPointer)4
- },
- {
- XtNinternalHeight,
- XtCHeight,
- XtRDimension,
- sizeof(Dimension),
- offset(label.internal_height),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNleftBitmap,
- XtCLeftBitmap,
- XtRBitmap,
- sizeof(Pixmap),
- offset(label.left_bitmap),
- XtRImmediate,
- (XtPointer)None
- },
- {
- XtNbitmap,
- XtCPixmap,
- XtRBitmap,
- sizeof(Pixmap),
- offset(label.pixmap),
- XtRImmediate,
- (XtPointer)None
- },
- {
- XtNresize,
- XtCResize,
- XtRBoolean,
- sizeof(Boolean),
- offset(label.resize),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNlabelX,
- XtCPosition,
- XtRPosition,
- sizeof(Position),
- offset(label.label_x),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNlabelY,
- XtCPosition,
- XtRPosition,
- sizeof(Position),
- offset(label.label_y),
- XtRImmediate,
- (XtPointer)0
- },
-};
-#undef offset
-
-#define Superclass (&simpleClassRec)
-LabelClassRec labelClassRec = {
- /* core */
- {
- (WidgetClass)&simpleClassRec, /* superclass */
- "Label", /* class_name */
- sizeof(LabelRec), /* widget_size */
- XawLabelClassInitialize, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawLabelInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawLabelDestroy, /* destroy */
- XawLabelResize, /* resize */
- XawLabelRedisplay, /* expose */
- XawLabelSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XawLabelQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* label */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass labelWidgetClass = (WidgetClass)&labelClassRec;
-
-/*
- * Implementation
- */
-static void
-XawLabelClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtAddConverter(XtRString, XtRJustify, XmuCvtStringToJustify, NULL, 0);
- XtSetTypeConverter(XtRJustify, XtRString, XmuCvtJustifyToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-#ifndef WORD64
-#define TXT16 XChar2b
-#else
-#define TXT16 char
-
-static XChar2b *buf2b;
-static int buf2blen = 0;
-
-static int
-_XawLabelWidth16(XFontStruct *fs, char *str, int n)
-{
- int i;
- XChar2b *ptr;
-
- if (n > buf2blen) {
- buf2b = (XChar2b *)XtRealloc((char *)buf2b, n * sizeof(XChar2b));
- buf2blen = n;
- }
- for (ptr = buf2b, i = n; --i >= 0; ptr++) {
- ptr->byte1 = *str++;
- ptr->byte2 = *str++;
- }
-
- return (XTextWidth16(fs, buf2b, n));
-}
-
-static void
-_XawLabelDraw16(Display *dpy, Drawable d, GC gc, int x, int y,
- char *str, int n)
-{
- int i;
- XChar2b *ptr;
-
- if (n > buf2blen) {
- buf2b = (XChar2b *)XtRealloc((char *)buf2b, n * sizeof(XChar2b));
- buf2blen = n;
- }
- for (ptr = buf2b, i = n; --i >= 0; ptr++) {
- ptr->byte1 = *str++;
- ptr->byte2 = *str++;
- }
- XDrawString16(dpy, d, gc, x, y, buf2b, n);
-}
-
-#define XTextWidth16 _XawLabelWidth16
-#define XDrawString16 _XawLabelDraw16
-#endif /* WORD64 */
-
-/*
- * Calculate width and height of displayed text in pixels
- */
-static void
-SetTextWidthAndHeight(LabelWidget lw)
-{
- XFontStruct *fs = lw->label.font;
- char *nl;
-
- if (lw->label.pixmap != None) {
- Window root;
- int x, y;
- unsigned int width, height, bw, depth;
-
- if (XGetGeometry(XtDisplay(lw), lw->label.pixmap, &root, &x, &y,
- &width, &height, &bw, &depth)) {
- lw->label.label_height = height;
- lw->label.label_width = width;
- lw->label.label_len = depth;
- return;
- }
- }
- if (lw->simple.international == True) {
- XFontSet fset = lw->label.fontset;
- XFontSetExtents *ext = XExtentsOfFontSet(fset);
-
- lw->label.label_height = ext->max_ink_extent.height;
- if (lw->label.label == NULL) {
- lw->label.label_len = 0;
- lw->label.label_width = 0;
- }
- else if ((nl = index(lw->label.label, '\n')) != NULL) {
- char *label;
-
- lw->label.label_len = MULTI_LINE_LABEL;
- lw->label.label_width = 0;
- for (label = lw->label.label; nl != NULL; nl = index(label, '\n')) {
- int width = XmbTextEscapement(fset, label, (int)(nl - label));
-
- if (width > (int)lw->label.label_width)
- lw->label.label_width = width;
- label = nl + 1;
- if (*label)
- lw->label.label_height += ext->max_ink_extent.height;
- }
- if (*label) {
- int width = XmbTextEscapement(fset, label, strlen(label));
-
- if (width > (int)lw->label.label_width)
- lw->label.label_width = width;
- }
- }
- else {
- lw->label.label_len = strlen(lw->label.label);
- lw->label.label_width =
- XmbTextEscapement(fset, lw->label.label, lw->label.label_len);
- }
- }
- else {
- lw->label.label_height = fs->max_bounds.ascent + fs->max_bounds.descent;
- if (lw->label.label == NULL) {
- lw->label.label_len = 0;
- lw->label.label_width = 0;
- }
- else if ((nl = index(lw->label.label, '\n')) != NULL) {
- char *label;
-
- lw->label.label_len = MULTI_LINE_LABEL;
- lw->label.label_width = 0;
- for (label = lw->label.label; nl != NULL; nl = index(label, '\n')) {
- int width;
-
- if (lw->label.encoding)
- width = XTextWidth16(fs, (TXT16*)label, (int)(nl - label) / 2);
- else
- width = XTextWidth(fs, label, (int)(nl - label));
- if (width > (int)lw->label.label_width)
- lw->label.label_width = width;
- label = nl + 1;
- if (*label)
- lw->label.label_height +=
- fs->max_bounds.ascent + fs->max_bounds.descent;
- }
- if (*label) {
- int width = XTextWidth(fs, label, strlen(label));
-
- if (lw->label.encoding)
- width = XTextWidth16(fs, (TXT16*)label, strlen(label) / 2);
- else
- width = XTextWidth(fs, label, strlen(label));
- if (width > (int) lw->label.label_width)
- lw->label.label_width = width;
- }
- }
- else {
- lw->label.label_len = strlen(lw->label.label);
- if (lw->label.encoding)
- lw->label.label_width =
- XTextWidth16(fs, (TXT16*)lw->label.label,
- (int)lw->label.label_len / 2);
- else
- lw->label.label_width =
- XTextWidth(fs, lw->label.label, (int)lw->label.label_len);
- }
- }
-}
-
-static void
-GetNormalGC(LabelWidget lw)
-{
- XGCValues values;
-
- values.foreground = lw->label.foreground;
- values.background = lw->core.background_pixel;
- values.font = lw->label.font->fid;
- values.graphics_exposures = False;
-
- if (lw->simple.international == True)
- /* Since Xmb/wcDrawString eats the font, I must use XtAllocateGC */
- lw->label.normal_GC = XtAllocateGC((Widget)lw, 0,
- GCForeground | GCBackground |
- GCGraphicsExposures,
- &values, GCFont, 0);
- else
- lw->label.normal_GC = XtGetGC((Widget)lw,
- GCForeground | GCBackground | GCFont |
- GCGraphicsExposures, &values);
-}
-
-static void
-GetGrayGC(LabelWidget lw)
-{
- XGCValues values;
-
- values.foreground = lw->label.foreground;
- values.background = lw->core.background_pixel;
- values.font = lw->label.font->fid;
- values.fill_style = FillTiled;
- values.tile = XmuCreateStippledPixmap(XtScreen((Widget)lw),
- lw->label.foreground,
- lw->core.background_pixel,
- lw->core.depth);
- values.graphics_exposures = False;
-
- lw->label.stipple = values.tile;
- if (lw->simple.international == True)
- /* Since Xmb/wcDrawString eats the font, I must use XtAllocateGC */
- lw->label.gray_GC = XtAllocateGC((Widget)lw, 0,
- GCForeground | GCBackground |
- GCTile | GCFillStyle |
- GCGraphicsExposures,
- &values, GCFont, 0);
- else
- lw->label.gray_GC = XtGetGC((Widget)lw,
- GCForeground | GCBackground |
- GCFont | GCTile | GCFillStyle |
- GCGraphicsExposures,
- &values);
-}
-
-static void
-compute_bitmap_offsets(LabelWidget lw)
-{
- /*
- * bitmap will be eventually be displayed at
- * (internal_width, internal_height + lbm_y)
- */
- if (lw->label.lbm_height != 0)
- lw->label.lbm_y = (XtHeight(lw) - (lw->label.internal_height * 2 +
- lw->label.lbm_height)) / 2;
- else
- lw->label.lbm_y = 0;
-}
-
-static void
-set_bitmap_info(LabelWidget lw)
-{
- Window root;
- int x, y;
- unsigned int bw, depth;
-
- if (!(lw->label.left_bitmap
- && XGetGeometry(XtDisplay(lw), lw->label.left_bitmap, &root, &x, &y,
- &lw->label.lbm_width, &lw->label.lbm_height,
- &bw, &depth)))
- lw->label.lbm_width = lw->label.lbm_height = 0;
-
- compute_bitmap_offsets(lw);
-}
-
-/*ARGSUSED*/
-static void
-XawLabelInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- LabelWidget lw = (LabelWidget)cnew;
-
- if (!lw->label.font) XtError("Aborting: no font found\n");
- if (lw->simple.international && !lw->label.fontset)
- XtError("Aborting: no fontset found\n");
-
- if (lw->label.label == NULL)
- lw->label.label = XtNewString(lw->core.name);
- else
- lw->label.label = XtNewString(lw->label.label);
-
- GetNormalGC(lw);
- GetGrayGC(lw);
-
- SetTextWidthAndHeight(lw);
-
- if (XtHeight(lw) == 0)
- XtHeight(lw) = lw->label.label_height + 2 * lw->label.internal_height;
-
- set_bitmap_info(lw); /* need core.height */
-
- if (XtWidth(lw) == 0) /* need label.lbm_width */
- XtWidth(lw) = lw->label.label_width + 2 * lw->label.internal_width +
- LEFT_OFFSET(lw);
-
- lw->label.label_x = lw->label.label_y = 0;
- (*XtClass(cnew)->core_class.resize)((Widget)lw);
-}
-
-/*ARGSUSED*/
-static void
-XawLabelRedisplay(Widget gw, XEvent *event, Region region)
-{
- LabelWidget w = (LabelWidget)gw;
- GC gc;
-
- if (*Superclass->core_class.expose != NULL)
- (*Superclass->core_class.expose)(gw, event, region);
-
- gc = XtIsSensitive(gw) ? w->label.normal_GC : w->label.gray_GC;
-#ifdef notdef
- if (region != NULL)
- XSetRegion(XtDisplay(gw), gc, region);
-#endif /*notdef*/
-
- if (w->label.pixmap == None) {
- int len = w->label.label_len;
- char *label = w->label.label;
- Position y = w->label.label_y + w->label.font->max_bounds.ascent;
- Position ksy = w->label.label_y;
-
- /* display left bitmap */
- if (w->label.left_bitmap && w->label.lbm_width != 0)
- XCopyPlane (XtDisplay(gw), w->label.left_bitmap, XtWindow(gw), gc,
- 0, 0, w->label.lbm_width, w->label.lbm_height,
- w->label.internal_width,
- w->label.internal_height + w->label.lbm_y, 1L);
-
- if (w->simple.international == True) {
- XFontSetExtents *ext = XExtentsOfFontSet(w->label.fontset);
-
- ksy += XawAbs(ext->max_ink_extent.y);
-
- if (len == MULTI_LINE_LABEL) {
- char *nl;
-
- while ((nl = index(label, '\n')) != NULL) {
- XmbDrawString(XtDisplay(w), XtWindow(w), w->label.fontset,
- gc, w->label.label_x, ksy, label,
- (int)(nl - label));
- ksy += ext->max_ink_extent.height;
- label = nl + 1;
- }
- len = strlen(label);
- }
- if (len)
- XmbDrawString(XtDisplay(w), XtWindow(w), w->label.fontset, gc,
- w->label.label_x, ksy, label, len);
- }
- else {
- if (len == MULTI_LINE_LABEL) {
- char *nl;
-
- while ((nl = index(label, '\n')) != NULL) {
- if (w->label.encoding)
- XDrawString16(XtDisplay(gw), XtWindow(gw), gc,
- w->label.label_x, y,
- (TXT16*)label, (int)(nl - label) / 2);
- else
- XDrawString(XtDisplay(gw), XtWindow(gw), gc,
- w->label.label_x, y, label, (int)(nl - label));
- y += w->label.font->max_bounds.ascent +
- w->label.font->max_bounds.descent;
- label = nl + 1;
- }
- len = strlen(label);
- }
- if (len) {
- if (w->label.encoding)
- XDrawString16(XtDisplay(gw), XtWindow(gw), gc,
- w->label.label_x, y, (TXT16*)label, len / 2);
- else
- XDrawString(XtDisplay(gw), XtWindow(gw), gc,
- w->label.label_x, y, label, len);
- }
- }
- }
- else if (w->label.label_len == 1)
- XCopyPlane(XtDisplay(gw), w->label.pixmap, XtWindow(gw), gc,
- 0, 0, w->label.label_width, w->label.label_height,
- w->label.label_x, w->label.label_y, 1L);
- else
- XCopyArea(XtDisplay(gw), w->label.pixmap, XtWindow(gw), gc,
- 0, 0, w->label.label_width, w->label.label_height,
- w->label.label_x, w->label.label_y);
-
-#ifdef notdef
- if (region != NULL)
- XSetClipMask(XtDisplay(gw), gc, (Pixmap)None);
-#endif /* notdef */
-}
-
-static void
-_Reposition(LabelWidget lw, unsigned int width, unsigned int height,
- Position *dx, Position *dy)
-{
- Position newPos;
- Position leftedge = lw->label.internal_width + LEFT_OFFSET(lw);
-
- switch (lw->label.justify) {
- case XtJustifyLeft:
- newPos = leftedge;
- break;
- case XtJustifyRight:
- newPos = width - (lw->label.label_width + lw->label.internal_width);
- break;
- case XtJustifyCenter:
- /*FALLTRHOUGH*/
- default:
- newPos = (int)(width - lw->label.label_width) >> 1;
- break;
- }
- if (newPos < (Position)leftedge)
- newPos = leftedge;
- *dx = newPos - lw->label.label_x;
- lw->label.label_x = newPos;
-
- newPos = ((int)(height - lw->label.label_height)) >> 1;
- *dy = newPos - lw->label.label_y;
- lw->label.label_y = newPos;
-}
-
-static void
-XawLabelResize(Widget w)
-{
- LabelWidget lw = (LabelWidget)w;
- Position dx, dy;
-
- _Reposition(lw, XtWidth(w), XtHeight(w), &dx, &dy);
- compute_bitmap_offsets(lw);
-}
-
-#define PIXMAP 0
-#define WIDTH 1
-#define HEIGHT 2
-#define NUM_CHECKS 3
-static Boolean
-XawLabelSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- LabelWidget curlw = (LabelWidget)current;
- LabelWidget reqlw = (LabelWidget)request;
- LabelWidget newlw = (LabelWidget)cnew;
- unsigned int i;
- Boolean was_resized = False, redisplay = False, checks[NUM_CHECKS];
-
- for (i = 0; i < NUM_CHECKS; i++)
- checks[i] = False;
-
- for (i = 0; i < *num_args; i++) {
- if (streq(XtNbitmap, args[i].name))
- checks[PIXMAP] = True;
- else if (streq(XtNwidth, args[i].name))
- checks[WIDTH] = True;
- else if (streq(XtNheight, args[i].name))
- checks[HEIGHT] = True;
- }
-
- if (newlw->label.label == NULL)
- newlw->label.label = newlw->core.name;
-
- /*
- * resize on bitmap change
- */
- if (curlw->label.left_bitmap != newlw->label.left_bitmap)
- was_resized = True;
-
- if (curlw->label.encoding != newlw->label.encoding)
- was_resized = True;
-
- if (curlw->simple.international
- && curlw->label.fontset != newlw->label.fontset)
- was_resized = True;
-
- if (curlw->label.label != newlw->label.label) {
- if (curlw->label.label != curlw->core.name)
- XtFree((char *)curlw->label.label);
-
- if (newlw->label.label != newlw->core.name)
- newlw->label.label = XtNewString(newlw->label.label);
-
- was_resized = True;
- }
-
- if (was_resized || (curlw->label.font != newlw->label.font) ||
- curlw->label.justify != newlw->label.justify || checks[PIXMAP]) {
- SetTextWidthAndHeight(newlw);
- was_resized = True;
- }
-
- /* recalculate the window size if something has changed */
- if (newlw->label.resize && was_resized) {
- if (XtHeight(curlw) == XtHeight(reqlw) && !checks[HEIGHT])
- XtHeight(newlw) = newlw->label.label_height +
- (newlw->label.internal_height << 1);
-
- set_bitmap_info(newlw);
-
- if (XtWidth(curlw) == XtWidth(reqlw) && !checks[WIDTH])
- XtWidth(newlw) = newlw->label.label_width + LEFT_OFFSET(newlw) +
- (newlw->label.internal_width << 1);
- }
-
- if (curlw->label.foreground != newlw->label.foreground
- || curlw->core.background_pixel != newlw->core.background_pixel
- || curlw->label.font->fid != newlw->label.font->fid) {
- /* The Fontset is not in the GC - don't make a new GC if FS changes! */
- XtReleaseGC(cnew, curlw->label.normal_GC);
- XtReleaseGC(cnew, curlw->label.gray_GC);
- XmuReleaseStippledPixmap(XtScreen(current), curlw->label.stipple);
- GetNormalGC(newlw);
- GetGrayGC(newlw);
- redisplay = True;
- }
-
- if (curlw->label.label_x != newlw->label.label_x ||
- curlw->label.label_y != newlw->label.label_y)
- redisplay = True;
-
- if (curlw->label.internal_width != newlw->label.internal_width
- || curlw->label.internal_height != newlw->label.internal_height
- || was_resized) {
- /* Resize() will be called if geometry changes succeed */
- Position dx, dy;
-
- _Reposition(newlw, XtWidth(curlw), XtHeight(curlw), &dx, &dy);
- }
-
- return (was_resized || redisplay ||
- XtIsSensitive(current) != XtIsSensitive(cnew));
-}
-
-static void
-XawLabelDestroy(Widget w)
-{
- LabelWidget lw = (LabelWidget)w;
-
- if (lw->label.label != lw->core.name)
- XtFree(lw->label.label);
- XtReleaseGC(w, lw->label.normal_GC);
- XtReleaseGC(w, lw->label.gray_GC);
- XmuReleaseStippledPixmap(XtScreen(w), lw->label.stipple);
-}
-
-static XtGeometryResult
-XawLabelQueryGeometry(Widget w, XtWidgetGeometry *intended,
- XtWidgetGeometry *preferred)
-{
- LabelWidget lw = (LabelWidget)w;
-
- preferred->request_mode = CWWidth | CWHeight;
- preferred->width = lw->label.label_width +
- (lw->label.internal_width << 1) + LEFT_OFFSET(lw);
- preferred->height = lw->label.label_height +
- (lw->label.internal_height << 1);
-
- if (((intended->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight))
- && intended->width == preferred->width
- && intended->height == preferred->height)
- return (XtGeometryYes);
- else if (preferred->width == XtWidth(w) && preferred->height == XtHeight(w))
- return (XtGeometryNo);
-
- return (XtGeometryAlmost);
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <ctype.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xmu/Converters.h>
+#include <X11/Xmu/Drawing.h>
+#include <X11/Xaw/LabelP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#define streq(a, b) (strcmp((a), (b)) == 0)
+
+#define MULTI_LINE_LABEL 32767
+
+#ifdef CRAY
+#define WORD64
+#endif
+
+/*
+ * Class Methods
+ */
+static void XawLabelClassInitialize(void);
+static void XawLabelDestroy(Widget);
+static void XawLabelInitialize(Widget, Widget, ArgList, Cardinal*);
+static XtGeometryResult XawLabelQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawLabelRedisplay(Widget, XEvent*, Region);
+static void XawLabelResize(Widget);
+static Boolean XawLabelSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+#ifdef WORD64
+static int _XawLabelWidth16(XFontStruct*, char*, int);
+static void _XawLabelDraw16(Display*, Drawable, GC, int, int, char*, int);
+#endif
+static void compute_bitmap_offsets(LabelWidget);
+static void GetGrayGC(LabelWidget);
+static void GetNormalGC(LabelWidget);
+static void _Reposition(LabelWidget, unsigned int, unsigned int,
+ Position*, Position*);
+static void set_bitmap_info(LabelWidget);
+static void SetTextWidthAndHeight(LabelWidget);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(LabelRec, field)
+static XtResource resources[] = {
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(label.foreground),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNfont,
+ XtCFont,
+ XtRFontStruct,
+ sizeof(XFontStruct*),
+ offset(label.font),
+ XtRString,
+ XtDefaultFont
+ },
+ {
+ XtNfontSet,
+ XtCFontSet,
+ XtRFontSet,
+ sizeof(XFontSet),
+ offset(label.fontset),
+ XtRString,
+ XtDefaultFontSet
+ },
+ {
+ XtNlabel,
+ XtCLabel,
+ XtRString,
+ sizeof(String),
+ offset(label.label),
+ XtRString,
+ NULL
+ },
+ {
+ XtNencoding,
+ XtCEncoding,
+ XtRUnsignedChar,
+ sizeof(unsigned char),
+ offset(label.encoding),
+ XtRImmediate,
+ (XtPointer)XawTextEncoding8bit
+ },
+ {
+ XtNjustify,
+ XtCJustify,
+ XtRJustify,
+ sizeof(XtJustify),
+ offset(label.justify),
+ XtRImmediate,
+ (XtPointer)XtJustifyCenter
+ },
+ {
+ XtNinternalWidth,
+ XtCWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(label.internal_width),
+ XtRImmediate,
+ (XtPointer)4
+ },
+ {
+ XtNinternalHeight,
+ XtCHeight,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(label.internal_height),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNleftBitmap,
+ XtCLeftBitmap,
+ XtRBitmap,
+ sizeof(Pixmap),
+ offset(label.left_bitmap),
+ XtRImmediate,
+ (XtPointer)None
+ },
+ {
+ XtNbitmap,
+ XtCPixmap,
+ XtRBitmap,
+ sizeof(Pixmap),
+ offset(label.pixmap),
+ XtRImmediate,
+ (XtPointer)None
+ },
+ {
+ XtNresize,
+ XtCResize,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(label.resize),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNlabelX,
+ XtCPosition,
+ XtRPosition,
+ sizeof(Position),
+ offset(label.label_x),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNlabelY,
+ XtCPosition,
+ XtRPosition,
+ sizeof(Position),
+ offset(label.label_y),
+ XtRImmediate,
+ (XtPointer)0
+ },
+};
+#undef offset
+
+#define Superclass (&simpleClassRec)
+LabelClassRec labelClassRec = {
+ /* core */
+ {
+ (WidgetClass)&simpleClassRec, /* superclass */
+ "Label", /* class_name */
+ sizeof(LabelRec), /* widget_size */
+ XawLabelClassInitialize, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawLabelInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawLabelDestroy, /* destroy */
+ XawLabelResize, /* resize */
+ XawLabelRedisplay, /* expose */
+ XawLabelSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XawLabelQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* label */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass labelWidgetClass = (WidgetClass)&labelClassRec;
+
+/*
+ * Implementation
+ */
+static void
+XawLabelClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtAddConverter(XtRString, XtRJustify, XmuCvtStringToJustify, NULL, 0);
+ XtSetTypeConverter(XtRJustify, XtRString, XmuCvtJustifyToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+#ifndef WORD64
+#define TXT16 XChar2b
+#else
+#define TXT16 char
+
+static XChar2b *buf2b;
+static int buf2blen = 0;
+
+static int
+_XawLabelWidth16(XFontStruct *fs, char *str, int n)
+{
+ int i;
+ XChar2b *ptr;
+
+ if (n > buf2blen) {
+ buf2b = (XChar2b *)XtRealloc((char *)buf2b, n * sizeof(XChar2b));
+ buf2blen = n;
+ }
+ for (ptr = buf2b, i = n; --i >= 0; ptr++) {
+ ptr->byte1 = *str++;
+ ptr->byte2 = *str++;
+ }
+
+ return (XTextWidth16(fs, buf2b, n));
+}
+
+static void
+_XawLabelDraw16(Display *dpy, Drawable d, GC gc, int x, int y,
+ char *str, int n)
+{
+ int i;
+ XChar2b *ptr;
+
+ if (n > buf2blen) {
+ buf2b = (XChar2b *)XtRealloc((char *)buf2b, n * sizeof(XChar2b));
+ buf2blen = n;
+ }
+ for (ptr = buf2b, i = n; --i >= 0; ptr++) {
+ ptr->byte1 = *str++;
+ ptr->byte2 = *str++;
+ }
+ XDrawString16(dpy, d, gc, x, y, buf2b, n);
+}
+
+#define XTextWidth16 _XawLabelWidth16
+#define XDrawString16 _XawLabelDraw16
+#endif /* WORD64 */
+
+/*
+ * Calculate width and height of displayed text in pixels
+ */
+static void
+SetTextWidthAndHeight(LabelWidget lw)
+{
+ XFontStruct *fs = lw->label.font;
+ char *nl;
+
+ if (lw->label.pixmap != None) {
+ Window root;
+ int x, y;
+ unsigned int width, height, bw, depth;
+
+ if (XGetGeometry(XtDisplay(lw), lw->label.pixmap, &root, &x, &y,
+ &width, &height, &bw, &depth)) {
+ lw->label.label_height = height;
+ lw->label.label_width = width;
+ lw->label.label_len = depth;
+ return;
+ }
+ }
+ if (lw->simple.international == True) {
+ XFontSet fset = lw->label.fontset;
+ XFontSetExtents *ext = XExtentsOfFontSet(fset);
+
+ lw->label.label_height = ext->max_ink_extent.height;
+ if (lw->label.label == NULL) {
+ lw->label.label_len = 0;
+ lw->label.label_width = 0;
+ }
+ else if ((nl = index(lw->label.label, '\n')) != NULL) {
+ char *label;
+
+ lw->label.label_len = MULTI_LINE_LABEL;
+ lw->label.label_width = 0;
+ for (label = lw->label.label; nl != NULL; nl = index(label, '\n')) {
+ int width = XmbTextEscapement(fset, label, (int)(nl - label));
+
+ if (width > (int)lw->label.label_width)
+ lw->label.label_width = width;
+ label = nl + 1;
+ if (*label)
+ lw->label.label_height += ext->max_ink_extent.height;
+ }
+ if (*label) {
+ int width = XmbTextEscapement(fset, label, strlen(label));
+
+ if (width > (int)lw->label.label_width)
+ lw->label.label_width = width;
+ }
+ }
+ else {
+ lw->label.label_len = strlen(lw->label.label);
+ lw->label.label_width =
+ XmbTextEscapement(fset, lw->label.label, lw->label.label_len);
+ }
+ }
+ else {
+ lw->label.label_height = fs->max_bounds.ascent + fs->max_bounds.descent;
+ if (lw->label.label == NULL) {
+ lw->label.label_len = 0;
+ lw->label.label_width = 0;
+ }
+ else if ((nl = index(lw->label.label, '\n')) != NULL) {
+ char *label;
+
+ lw->label.label_len = MULTI_LINE_LABEL;
+ lw->label.label_width = 0;
+ for (label = lw->label.label; nl != NULL; nl = index(label, '\n')) {
+ int width;
+
+ if (lw->label.encoding)
+ width = XTextWidth16(fs, (TXT16*)label, (int)(nl - label) / 2);
+ else
+ width = XTextWidth(fs, label, (int)(nl - label));
+ if (width > (int)lw->label.label_width)
+ lw->label.label_width = width;
+ label = nl + 1;
+ if (*label)
+ lw->label.label_height +=
+ fs->max_bounds.ascent + fs->max_bounds.descent;
+ }
+ if (*label) {
+ int width = XTextWidth(fs, label, strlen(label));
+
+ if (lw->label.encoding)
+ width = XTextWidth16(fs, (TXT16*)label, strlen(label) / 2);
+ else
+ width = XTextWidth(fs, label, strlen(label));
+ if (width > (int) lw->label.label_width)
+ lw->label.label_width = width;
+ }
+ }
+ else {
+ lw->label.label_len = strlen(lw->label.label);
+ if (lw->label.encoding)
+ lw->label.label_width =
+ XTextWidth16(fs, (TXT16*)lw->label.label,
+ (int)lw->label.label_len / 2);
+ else
+ lw->label.label_width =
+ XTextWidth(fs, lw->label.label, (int)lw->label.label_len);
+ }
+ }
+}
+
+static void
+GetNormalGC(LabelWidget lw)
+{
+ XGCValues values;
+
+ values.foreground = lw->label.foreground;
+ values.background = lw->core.background_pixel;
+ values.font = lw->label.font->fid;
+ values.graphics_exposures = False;
+
+ if (lw->simple.international == True)
+ /* Since Xmb/wcDrawString eats the font, I must use XtAllocateGC */
+ lw->label.normal_GC = XtAllocateGC((Widget)lw, 0,
+ GCForeground | GCBackground |
+ GCGraphicsExposures,
+ &values, GCFont, 0);
+ else
+ lw->label.normal_GC = XtGetGC((Widget)lw,
+ GCForeground | GCBackground | GCFont |
+ GCGraphicsExposures, &values);
+}
+
+static void
+GetGrayGC(LabelWidget lw)
+{
+ XGCValues values;
+
+ values.foreground = lw->label.foreground;
+ values.background = lw->core.background_pixel;
+ values.font = lw->label.font->fid;
+ values.fill_style = FillTiled;
+ values.tile = XmuCreateStippledPixmap(XtScreen((Widget)lw),
+ lw->label.foreground,
+ lw->core.background_pixel,
+ lw->core.depth);
+ values.graphics_exposures = False;
+
+ lw->label.stipple = values.tile;
+ if (lw->simple.international == True)
+ /* Since Xmb/wcDrawString eats the font, I must use XtAllocateGC */
+ lw->label.gray_GC = XtAllocateGC((Widget)lw, 0,
+ GCForeground | GCBackground |
+ GCTile | GCFillStyle |
+ GCGraphicsExposures,
+ &values, GCFont, 0);
+ else
+ lw->label.gray_GC = XtGetGC((Widget)lw,
+ GCForeground | GCBackground |
+ GCFont | GCTile | GCFillStyle |
+ GCGraphicsExposures,
+ &values);
+}
+
+static void
+compute_bitmap_offsets(LabelWidget lw)
+{
+ /*
+ * bitmap will be eventually be displayed at
+ * (internal_width, internal_height + lbm_y)
+ */
+ if (lw->label.lbm_height != 0)
+ lw->label.lbm_y = (XtHeight(lw) - (lw->label.internal_height * 2 +
+ lw->label.lbm_height)) / 2;
+ else
+ lw->label.lbm_y = 0;
+}
+
+static void
+set_bitmap_info(LabelWidget lw)
+{
+ Window root;
+ int x, y;
+ unsigned int bw, depth;
+
+ if (!(lw->label.left_bitmap
+ && XGetGeometry(XtDisplay(lw), lw->label.left_bitmap, &root, &x, &y,
+ &lw->label.lbm_width, &lw->label.lbm_height,
+ &bw, &depth)))
+ lw->label.lbm_width = lw->label.lbm_height = 0;
+
+ compute_bitmap_offsets(lw);
+}
+
+/*ARGSUSED*/
+static void
+XawLabelInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ LabelWidget lw = (LabelWidget)cnew;
+
+ if (!lw->label.font) XtError("Aborting: no font found\n");
+ if (lw->simple.international && !lw->label.fontset)
+ XtError("Aborting: no fontset found\n");
+
+ if (lw->label.label == NULL)
+ lw->label.label = XtNewString(lw->core.name);
+ else
+ lw->label.label = XtNewString(lw->label.label);
+
+ GetNormalGC(lw);
+ GetGrayGC(lw);
+
+ SetTextWidthAndHeight(lw);
+
+ if (XtHeight(lw) == 0)
+ XtHeight(lw) = lw->label.label_height + 2 * lw->label.internal_height;
+
+ set_bitmap_info(lw); /* need core.height */
+
+ if (XtWidth(lw) == 0) /* need label.lbm_width */
+ XtWidth(lw) = lw->label.label_width + 2 * lw->label.internal_width +
+ LEFT_OFFSET(lw);
+
+ lw->label.label_x = lw->label.label_y = 0;
+ (*XtClass(cnew)->core_class.resize)((Widget)lw);
+}
+
+/*ARGSUSED*/
+static void
+XawLabelRedisplay(Widget gw, XEvent *event, Region region)
+{
+ LabelWidget w = (LabelWidget)gw;
+ GC gc;
+
+ if (*Superclass->core_class.expose != NULL)
+ (*Superclass->core_class.expose)(gw, event, region);
+
+ gc = XtIsSensitive(gw) ? w->label.normal_GC : w->label.gray_GC;
+#ifdef notdef
+ if (region != NULL)
+ XSetRegion(XtDisplay(gw), gc, region);
+#endif /*notdef*/
+
+ if (w->label.pixmap == None) {
+ int len = w->label.label_len;
+ char *label = w->label.label;
+ Position y = w->label.label_y + w->label.font->max_bounds.ascent;
+ Position ksy = w->label.label_y;
+
+ /* display left bitmap */
+ if (w->label.left_bitmap && w->label.lbm_width != 0)
+ XCopyPlane (XtDisplay(gw), w->label.left_bitmap, XtWindow(gw), gc,
+ 0, 0, w->label.lbm_width, w->label.lbm_height,
+ w->label.internal_width,
+ w->label.internal_height + w->label.lbm_y, 1L);
+
+ if (w->simple.international == True) {
+ XFontSetExtents *ext = XExtentsOfFontSet(w->label.fontset);
+
+ ksy += XawAbs(ext->max_ink_extent.y);
+
+ if (len == MULTI_LINE_LABEL) {
+ char *nl;
+
+ while ((nl = index(label, '\n')) != NULL) {
+ XmbDrawString(XtDisplay(w), XtWindow(w), w->label.fontset,
+ gc, w->label.label_x, ksy, label,
+ (int)(nl - label));
+ ksy += ext->max_ink_extent.height;
+ label = nl + 1;
+ }
+ len = strlen(label);
+ }
+ if (len)
+ XmbDrawString(XtDisplay(w), XtWindow(w), w->label.fontset, gc,
+ w->label.label_x, ksy, label, len);
+ }
+ else {
+ if (len == MULTI_LINE_LABEL) {
+ char *nl;
+
+ while ((nl = index(label, '\n')) != NULL) {
+ if (w->label.encoding)
+ XDrawString16(XtDisplay(gw), XtWindow(gw), gc,
+ w->label.label_x, y,
+ (TXT16*)label, (int)(nl - label) / 2);
+ else
+ XDrawString(XtDisplay(gw), XtWindow(gw), gc,
+ w->label.label_x, y, label, (int)(nl - label));
+ y += w->label.font->max_bounds.ascent +
+ w->label.font->max_bounds.descent;
+ label = nl + 1;
+ }
+ len = strlen(label);
+ }
+ if (len) {
+ if (w->label.encoding)
+ XDrawString16(XtDisplay(gw), XtWindow(gw), gc,
+ w->label.label_x, y, (TXT16*)label, len / 2);
+ else
+ XDrawString(XtDisplay(gw), XtWindow(gw), gc,
+ w->label.label_x, y, label, len);
+ }
+ }
+ }
+ else if (w->label.label_len == 1)
+ XCopyPlane(XtDisplay(gw), w->label.pixmap, XtWindow(gw), gc,
+ 0, 0, w->label.label_width, w->label.label_height,
+ w->label.label_x, w->label.label_y, 1L);
+ else
+ XCopyArea(XtDisplay(gw), w->label.pixmap, XtWindow(gw), gc,
+ 0, 0, w->label.label_width, w->label.label_height,
+ w->label.label_x, w->label.label_y);
+
+#ifdef notdef
+ if (region != NULL)
+ XSetClipMask(XtDisplay(gw), gc, (Pixmap)None);
+#endif /* notdef */
+}
+
+static void
+_Reposition(LabelWidget lw, unsigned int width, unsigned int height,
+ Position *dx, Position *dy)
+{
+ Position newPos;
+ Position leftedge = lw->label.internal_width + LEFT_OFFSET(lw);
+
+ switch (lw->label.justify) {
+ case XtJustifyLeft:
+ newPos = leftedge;
+ break;
+ case XtJustifyRight:
+ newPos = width - (lw->label.label_width + lw->label.internal_width);
+ break;
+ case XtJustifyCenter:
+ /*FALLTRHOUGH*/
+ default:
+ newPos = (int)(width - lw->label.label_width) >> 1;
+ break;
+ }
+ if (newPos < (Position)leftedge)
+ newPos = leftedge;
+ *dx = newPos - lw->label.label_x;
+ lw->label.label_x = newPos;
+
+ newPos = ((int)(height - lw->label.label_height)) >> 1;
+ *dy = newPos - lw->label.label_y;
+ lw->label.label_y = newPos;
+}
+
+static void
+XawLabelResize(Widget w)
+{
+ LabelWidget lw = (LabelWidget)w;
+ Position dx, dy;
+
+ _Reposition(lw, XtWidth(w), XtHeight(w), &dx, &dy);
+ compute_bitmap_offsets(lw);
+}
+
+#define PIXMAP 0
+#define WIDTH 1
+#define HEIGHT 2
+#define NUM_CHECKS 3
+static Boolean
+XawLabelSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ LabelWidget curlw = (LabelWidget)current;
+ LabelWidget reqlw = (LabelWidget)request;
+ LabelWidget newlw = (LabelWidget)cnew;
+ unsigned int i;
+ Boolean was_resized = False, redisplay = False, checks[NUM_CHECKS];
+
+ for (i = 0; i < NUM_CHECKS; i++)
+ checks[i] = False;
+
+ for (i = 0; i < *num_args; i++) {
+ if (streq(XtNbitmap, args[i].name))
+ checks[PIXMAP] = True;
+ else if (streq(XtNwidth, args[i].name))
+ checks[WIDTH] = True;
+ else if (streq(XtNheight, args[i].name))
+ checks[HEIGHT] = True;
+ }
+
+ if (newlw->label.label == NULL)
+ newlw->label.label = newlw->core.name;
+
+ /*
+ * resize on bitmap change
+ */
+ if (curlw->label.left_bitmap != newlw->label.left_bitmap)
+ was_resized = True;
+
+ if (curlw->label.encoding != newlw->label.encoding)
+ was_resized = True;
+
+ if (curlw->simple.international
+ && curlw->label.fontset != newlw->label.fontset)
+ was_resized = True;
+
+ if (curlw->label.label != newlw->label.label) {
+ if (curlw->label.label != curlw->core.name)
+ XtFree((char *)curlw->label.label);
+
+ if (newlw->label.label != newlw->core.name)
+ newlw->label.label = XtNewString(newlw->label.label);
+
+ was_resized = True;
+ }
+
+ if (was_resized || (curlw->label.font != newlw->label.font) ||
+ curlw->label.justify != newlw->label.justify || checks[PIXMAP]) {
+ SetTextWidthAndHeight(newlw);
+ was_resized = True;
+ }
+
+ /* recalculate the window size if something has changed */
+ if (newlw->label.resize && was_resized) {
+ if (XtHeight(curlw) == XtHeight(reqlw) && !checks[HEIGHT])
+ XtHeight(newlw) = newlw->label.label_height +
+ (newlw->label.internal_height << 1);
+
+ set_bitmap_info(newlw);
+
+ if (XtWidth(curlw) == XtWidth(reqlw) && !checks[WIDTH])
+ XtWidth(newlw) = newlw->label.label_width + LEFT_OFFSET(newlw) +
+ (newlw->label.internal_width << 1);
+ }
+
+ if (curlw->label.foreground != newlw->label.foreground
+ || curlw->core.background_pixel != newlw->core.background_pixel
+ || curlw->label.font->fid != newlw->label.font->fid) {
+ /* The Fontset is not in the GC - don't make a new GC if FS changes! */
+ XtReleaseGC(cnew, curlw->label.normal_GC);
+ XtReleaseGC(cnew, curlw->label.gray_GC);
+ XmuReleaseStippledPixmap(XtScreen(current), curlw->label.stipple);
+ GetNormalGC(newlw);
+ GetGrayGC(newlw);
+ redisplay = True;
+ }
+
+ if (curlw->label.label_x != newlw->label.label_x ||
+ curlw->label.label_y != newlw->label.label_y)
+ redisplay = True;
+
+ if (curlw->label.internal_width != newlw->label.internal_width
+ || curlw->label.internal_height != newlw->label.internal_height
+ || was_resized) {
+ /* Resize() will be called if geometry changes succeed */
+ Position dx, dy;
+
+ _Reposition(newlw, XtWidth(curlw), XtHeight(curlw), &dx, &dy);
+ }
+
+ return (was_resized || redisplay ||
+ XtIsSensitive(current) != XtIsSensitive(cnew));
+}
+
+static void
+XawLabelDestroy(Widget w)
+{
+ LabelWidget lw = (LabelWidget)w;
+
+ if (lw->label.label != lw->core.name)
+ XtFree(lw->label.label);
+ XtReleaseGC(w, lw->label.normal_GC);
+ XtReleaseGC(w, lw->label.gray_GC);
+ XmuReleaseStippledPixmap(XtScreen(w), lw->label.stipple);
+}
+
+static XtGeometryResult
+XawLabelQueryGeometry(Widget w, XtWidgetGeometry *intended,
+ XtWidgetGeometry *preferred)
+{
+ LabelWidget lw = (LabelWidget)w;
+
+ preferred->request_mode = CWWidth | CWHeight;
+ preferred->width = lw->label.label_width +
+ (lw->label.internal_width << 1) + LEFT_OFFSET(lw);
+ preferred->height = lw->label.label_height +
+ (lw->label.internal_height << 1);
+
+ if (((intended->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight))
+ && intended->width == preferred->width
+ && intended->height == preferred->height)
+ return (XtGeometryYes);
+ else if (preferred->width == XtWidth(w) && preferred->height == XtHeight(w))
+ return (XtGeometryNo);
+
+ return (XtGeometryAlmost);
+}
diff --git a/libXaw/src/List.c b/libXaw/src/List.c
index 54ca5168f..14e351842 100644
--- a/libXaw/src/List.c
+++ b/libXaw/src/List.c
@@ -1,1273 +1,1270 @@
-/* $Xorg: List.c,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
-Copyright 1989, 1994, 1998 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.
-*/
-/* $XFree86: xc/lib/Xaw/List.c,v 1.16 2001/01/17 19:42:27 dawes Exp $ */
-
-/*
- * List.c - List widget
- *
- * This is a List widget. It allows the user to select an item in a list and
- * notifies the application through a callback function.
- *
- * Created: 8/13/88
- * By: Chris D. Peterson
- * MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <ctype.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Drawing.h>
-#include <X11/Xaw/ListP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#define HeightLock 1
-#define WidthLock 2
-#define LongestLock 4
-
-#define HeightFree(w) !(((ListWidget)(w))->list.freedoms & HeightLock)
-#define WidthFree(w) !(((ListWidget)(w))->list.freedoms & WidthLock)
-#define LongestFree(w) !(((ListWidget)(w))->list.freedoms & LongestLock)
-
-#define MaxSize 32767
-
-/*
- * Class Methods
- */
-static void XawListDestroy(Widget);
-static void XawListInitialize(Widget, Widget, ArgList, Cardinal*);
-static XtGeometryResult XawListQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawListRedisplay(Widget, XEvent*, Region);
-static void XawListResize(Widget);
-static Boolean XawListSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void CalculatedValues(Widget);
-static void ChangeSize(Widget, unsigned int, unsigned int);
-static void ClipToShadowInteriorAndLongest(ListWidget, GC*, unsigned int);
-static int CvtToItem(Widget, int, int, int*);
-static void FindCornerItems(Widget, XEvent*, int*, int*);
-static void GetGCs(Widget);
-static void HighlightBackground(Widget, int, int, GC);
-static Bool ItemInRectangle(Widget, int, int, int);
-static Bool Layout(Widget, Bool, Bool, Dimension*, Dimension*);
-static void PaintItemName(Widget, int);
-static void ResetList(Widget, Bool, Bool);
-
-/*
- * Actions
- */
-static void Notify(Widget, XEvent*, String*, Cardinal*);
-static void Set(Widget, XEvent*, String*, Cardinal*);
-static void Unset(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-static char defaultTranslations[] =
-"<Btn1Down>:" "Set()\n"
-"<Btn1Up>:" "Notify()\n"
-;
-
-#define offset(field) XtOffsetOf(ListRec, field)
-static XtResource resources[] = {
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(list.foreground),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNcursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(simple.cursor),
- XtRString,
- "left_ptr"
- },
- {
- XtNfont,
- XtCFont,
- XtRFontStruct,
- sizeof(XFontStruct*),
- offset(list.font),
- XtRString,
- XtDefaultFont
- },
- {
- XtNfontSet,
- XtCFontSet,
- XtRFontSet,
- sizeof(XFontSet),
- offset(list.fontset),
- XtRString,
- XtDefaultFontSet
- },
- {
- XtNlist,
- XtCList,
- XtRPointer,
- sizeof(char**),
- offset(list.list),
-#ifdef notyet
- XtRStringArray,
-#else
- XtRString,
-#endif
- NULL
- },
- {
- XtNdefaultColumns,
- XtCColumns,
- XtRInt,
- sizeof(int),
- offset(list.default_cols),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNlongest,
- XtCLongest,
- XtRInt,
- sizeof(int),
- offset(list.longest),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNnumberStrings,
- XtCNumberStrings,
- XtRInt,
- sizeof(int),
- offset(list.nitems),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNpasteBuffer,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(list.paste),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNforceColumns,
- XtCColumns,
- XtRBoolean,
- sizeof(Boolean),
- offset(list.force_cols),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNverticalList,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(list.vertical_cols),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNinternalWidth,
- XtCWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(list.internal_width),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNinternalHeight,
- XtCHeight,
- XtRDimension,
- sizeof(Dimension),
- offset(list.internal_height),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNcolumnSpacing,
- XtCSpacing,
- XtRDimension,
- sizeof(Dimension),
- offset(list.column_space),
- XtRImmediate,
- (XtPointer)6
- },
- {
- XtNrowSpacing,
- XtCSpacing,
- XtRDimension,
- sizeof(Dimension),
- offset(list.row_space),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNcallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(list.callback),
- XtRCallback,
- NULL
- },
-#ifndef OLDXAW
- {
- XtNshowCurrent,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(list.show_current),
- XtRImmediate,
- (XtPointer)False
- },
-#endif
-};
-#undef offset
-
-static XtActionsRec actions[] = {
- {"Notify", Notify},
- {"Set", Set},
- {"Unset", Unset},
-};
-
-#define Superclass (&simpleClassRec)
-ListClassRec listClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "List", /* class_name */
- sizeof(ListRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawListInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- actions, /* actions */
- XtNumber(actions), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- False, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawListDestroy, /* destroy */
- XawListResize, /* resize */
- XawListRedisplay, /* expose */
- XawListSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- defaultTranslations, /* tm_table */
- XawListQueryGeometry, /* query_geometry */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* list */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass listWidgetClass = (WidgetClass)&listClassRec;
-
-/*
- * Implementation
- */
-static void
-GetGCs(Widget w)
-{
- XGCValues values;
- ListWidget lw = (ListWidget)w;
-
- values.foreground = lw->list.foreground;
- values.font = lw->list.font->fid;
-
- if (lw->simple.international == True)
- lw->list.normgc = XtAllocateGC(w, 0, GCForeground, &values, GCFont, 0);
- else
- lw->list.normgc = XtGetGC(w, GCForeground | GCFont, &values);
-
- values.foreground = lw->core.background_pixel;
-
- if (lw->simple.international == True)
- lw->list.revgc = XtAllocateGC(w, 0, GCForeground, &values, GCFont, 0);
- else
- lw->list.revgc = XtGetGC(w, GCForeground | GCFont, &values);
-
- values.tile = XmuCreateStippledPixmap(XtScreen(w),
- lw->list.foreground,
- lw->core.background_pixel,
- lw->core.depth);
- values.fill_style = FillTiled;
-
- if (lw->simple.international == True)
- lw->list.graygc = XtAllocateGC(w, 0, GCTile | GCFillStyle,
- &values, GCFont, 0);
- else
- lw->list.graygc = XtGetGC(w, GCFont | GCTile | GCFillStyle, &values);
-}
-
-static void
-CalculatedValues(Widget w)
-{
- int i, len;
- ListWidget lw = (ListWidget)w;
-
- /* If list is NULL then the list will just be the name of the widget */
- if (lw->list.list == NULL) {
- lw->list.list = &lw->core.name;
- lw->list.nitems = 1;
- }
-
- /* Get number of items */
- if (lw->list.nitems == 0)
- for (; lw->list.list[lw->list.nitems] != NULL ; lw->list.nitems++)
- ;
-
- /* Get column width */
- if (LongestFree(lw)) {
- lw->list.longest = 0; /* so it will accumulate real longest below */
-
- for (i = 0 ; i < lw->list.nitems; i++) {
- if (lw->simple.international == True)
- len = XmbTextEscapement(lw->list.fontset, lw->list.list[i],
- strlen(lw->list.list[i]));
- else
- len = XTextWidth(lw->list.font, lw->list.list[i],
- strlen(lw->list.list[i]));
- if (len > lw->list.longest)
- lw->list.longest = len;
- }
- }
-
- lw->list.col_width = lw->list.longest + lw->list.column_space;
-}
-
-/*
- * Function:
- * ResetList
- *
- * Parameters:
- * w - list widget
- * changex - allow the height or width to change?
- * changey - ""
- *
- * Description:
- * Resets the new list when important things change.
- *
- * Returns:
- * True if width or height have been changed
- */
-static void
-ResetList(Widget w, Bool changex, Bool changey)
-{
- Dimension width = XtWidth(w);
- Dimension height = XtHeight(w);
-
- CalculatedValues(w);
-
- if (Layout(w, changex, changey, &width, &height)) {
- if (XtIsComposite(XtParent(w)))
- ChangeSize(w, width, height);
- else {
- XtWidth(w) = width;
- XtHeight(w) = height;
- }
- }
-}
-
-/*
- * Function:
- * ChangeSize
- *
- * Parameters:
- * w - widget to try change the size of
- *
- * Description:
- * Laysout the widget.
- */
-static void
-ChangeSize(Widget w, unsigned int width, unsigned int height)
-{
- XtWidgetGeometry request, reply;
-
- request.request_mode = CWWidth | CWHeight;
- request.width = width;
- request.height = height;
-
- switch (XtMakeGeometryRequest(w, &request, &reply)) {
- case XtGeometryYes:
- case XtGeometryNo:
- break;
- case XtGeometryAlmost:
- Layout(w, request.height != reply.height,
- request.width != reply.width, &reply.width, &reply.height);
- request = reply;
- switch (XtMakeGeometryRequest(w, &request, &reply)) {
- case XtGeometryYes:
- case XtGeometryNo:
- break;
- case XtGeometryAlmost:
- request = reply;
- Layout(w, False, False, &request.width, &request.height);
- request.request_mode = CWWidth | CWHeight;
- XtMakeGeometryRequest(w, &request, &reply);
- /*FALLTROUGH*/
- default:
- break;
- }
- /*FALLTROUGH*/
- default:
- break;
- }
-}
-
-/*ARGSUSED*/
-static void
-XawListInitialize(Widget temp1, Widget cnew, ArgList args, Cardinal *num_args)
-{
- ListWidget lw = (ListWidget)cnew;
-
- if (!lw->list.font) XtError("Aborting: no font found\n");
- if (lw->simple.international && !lw->list.fontset)
- XtError("Aborting: no fontset found\n");
-
- /*
- * Initialize all private resources
- */
- /* record for posterity if we are free */
- lw->list.freedoms = ((XtWidth(lw) != 0) * WidthLock +
- (XtHeight(lw) != 0) * HeightLock +
- (lw->list.longest != 0) * LongestLock);
-
- GetGCs(cnew);
-
- /* Set row height, based on font or fontset */
- if (lw->simple.international == True)
- lw->list.row_height =
- XExtentsOfFontSet(lw->list.fontset)->max_ink_extent.height +
- lw->list.row_space;
- else
- lw->list.row_height = lw->list.font->max_bounds.ascent +
- lw->list.font->max_bounds.descent +
- lw->list.row_space;
-
- ResetList(cnew, WidthFree(lw), HeightFree(lw));
-
- lw->list.highlight = lw->list.is_highlighted = NO_HIGHLIGHT;
-}
-
-/*
- * Function:
- * CvtToItem
- *
- * Parameters:
- * w - list widget
- * xloc - x location
- * yloc - y location
- *
- * Description:
- * Converts Xcoord to item number of item containing that point.
- *
- * Returns:
- * Item number
- */
-static int
-CvtToItem(Widget w, int xloc, int yloc, int *item)
-{
- int one, another;
- ListWidget lw = (ListWidget)w;
- int ret_val = OKAY;
-
- if (lw->list.vertical_cols) {
- one = lw->list.nrows * ((xloc - (int)lw->list.internal_width)
- / lw->list.col_width);
- another = (yloc - (int)lw->list.internal_height) / lw->list.row_height;
- /* If out of range, return minimum possible value */
- if (another >= lw->list.nrows) {
- another = lw->list.nrows - 1;
- ret_val = OUT_OF_RANGE;
- }
- }
- else {
- one = (lw->list.ncols * ((yloc - (int)lw->list.internal_height)
- / lw->list.row_height));
- /* If in right margin handle things right */
- another = (xloc - (int)lw->list.internal_width) / lw->list.col_width;
- if (another >= lw->list.ncols) {
- another = lw->list.ncols - 1;
- ret_val = OUT_OF_RANGE;
- }
- }
- if (xloc < 0 || yloc < 0)
- ret_val = OUT_OF_RANGE;
- if (one < 0)
- one = 0;
- if (another < 0)
- another = 0;
- *item = one + another;
- if (*item >= lw->list.nitems)
- return (OUT_OF_RANGE);
-
- return (ret_val);
-}
-
-/*
- * Function:
- * FindCornerItems
- *
- * Arguments:
- * w - list widget
- * event - event structure that has the rectangle it it
- * ul_ret - the corners (return)
- * lr_ret - ""
- *
- * Description:
- * Find the corners of the rectangle in item space.
- */
-static void
-FindCornerItems(Widget w, XEvent *event, int *ul_ret, int *lr_ret)
-{
- int xloc, yloc;
-
- xloc = event->xexpose.x;
- yloc = event->xexpose.y;
- CvtToItem(w, xloc, yloc, ul_ret);
- xloc += event->xexpose.width;
- yloc += event->xexpose.height;
- CvtToItem(w, xloc, yloc, lr_ret);
-}
-
-/*
- * Function:
- * ItemInRectangle
- *
- * Parameters:
- * w - list widget
- * ul - corners of the rectangle in item space
- * lr - ""
- * item - item to check
- *
- * Returns:
- * True if the item passed is in the given rectangle
- */
-static Bool
-ItemInRectangle(Widget w, int ul, int lr, int item)
-{
- ListWidget lw = (ListWidget)w;
- int mod_item;
- int things;
-
- if (item < ul || item > lr)
- return (False);
- if (lw->list.vertical_cols)
- things = lw->list.nrows;
- else
- things = lw->list.ncols;
-
- mod_item = item % things;
- if ((mod_item >= ul % things) && (mod_item <= lr % things))
- return (True);
-
- return (False);
-}
-
-/* HighlightBackground()
- *
- * Paints the color of the background for the given item. It performs
- * clipping to the interior of internal_width/height by hand, as its a
- * simple calculation and probably much faster than using Xlib and a clip mask.
- *
- * x, y - ul corner of the area item occupies.
- * gc - the gc to use to paint this rectangle
- */
-static void
-HighlightBackground(Widget w, int x, int y, GC gc)
-{
- ListWidget lw = (ListWidget)w;
- Dimension width = lw->list.col_width;
- Dimension height = lw->list.row_height;
- Dimension frame_limited_width = XtWidth(w) - lw->list.internal_width - x;
- Dimension frame_limited_height= XtHeight(w) - lw->list.internal_height - y;
-
- /* Clip the rectangle width and height to the edge of the drawable area */
- if (width > frame_limited_width)
- width = frame_limited_width;
- if (height > frame_limited_height)
- height = frame_limited_height;
-
- /* Clip the rectangle x and y to the edge of the drawable area */
- if (x < lw->list.internal_width) {
- width = width - (lw->list.internal_width - x);
- x = lw->list.internal_width;
- }
- if (y < lw->list.internal_height) {
- height = height - (lw->list.internal_height - y);
- y = lw->list.internal_height;
- }
-
- if (gc == lw->list.revgc && lw->core.background_pixmap != XtUnspecifiedPixmap)
- XClearArea(XtDisplay(w), XtWindow(w), x, y, width, height, False);
- else
- XFillRectangle(XtDisplay(w), XtWindow(w), gc, x, y, width, height);
-}
-
-
-/* ClipToShadowInteriorAndLongest()
- *
- * Converts the passed gc so that any drawing done with that GC will not
- * write in the empty margin (specified by internal_width/height) (which also
- * prevents erasing the shadow. It also clips against the value longest.
- * If the user doesn't set longest, this has no effect (as longest is the
- * maximum of all item lengths). If the user does specify, say, 80 pixel
- * columns, though, this prevents items from overwriting other items.
- */
-static void
-ClipToShadowInteriorAndLongest(ListWidget lw, GC *gc_p, unsigned int x)
-{
- XRectangle rect;
-
- rect.x = x;
- rect.y = lw->list.internal_height;
- rect.height = XtHeight(lw) - (lw->list.internal_height << 1);
- rect.width = XtWidth(lw) - lw->list.internal_width - x;
- if (rect.width > lw->list.longest)
- rect.width = lw->list.longest;
-
- XSetClipRectangles(XtDisplay((Widget)lw), *gc_p, 0, 0, &rect, 1, YXBanded);
-}
-
-static void
-PaintItemName(Widget w, int item)
-{
- char *str;
- GC gc;
- int x, y, str_y;
- ListWidget lw = (ListWidget)w;
- XFontSetExtents *ext = XExtentsOfFontSet(lw->list.fontset);
-
- if (!XtIsRealized(w) || item > lw->list.nitems)
- return;
-
- if (lw->list.vertical_cols) {
- x = lw->list.col_width * (item / lw->list.nrows)
- + lw->list.internal_width;
- y = lw->list.row_height * (item % lw->list.nrows)
- + lw->list.internal_height;
- }
- else {
- x = lw->list.col_width * (item % lw->list.ncols)
- + lw->list.internal_width;
- y = lw->list.row_height * (item / lw->list.ncols)
- + lw->list.internal_height;
- }
-
- if ( lw->simple.international == True )
- str_y = y + XawAbs(ext->max_ink_extent.y);
- else
- str_y = y + lw->list.font->max_bounds.ascent;
-
- if (item == lw->list.is_highlighted) {
- if (item == lw->list.highlight) {
- gc = lw->list.revgc;
- HighlightBackground(w, x, y, lw->list.normgc);
- }
- else {
- if (XtIsSensitive(w))
- gc = lw->list.normgc;
- else
- gc = lw->list.graygc;
- HighlightBackground(w, x, y, lw->list.revgc);
- lw->list.is_highlighted = NO_HIGHLIGHT;
- }
- }
- else {
- if (item == lw->list.highlight) {
- gc = lw->list.revgc;
- HighlightBackground(w, x, y, lw->list.normgc);
- lw->list.is_highlighted = item;
- }
- else {
- if (XtIsSensitive(w))
- gc = lw->list.normgc;
- else
- gc = lw->list.graygc;
- }
- }
-
- /* List's overall width contains the same number of inter-column
- column_space's as columns. There should thus be a half
- column_width margin on each side of each column.
- The row case is symmetric */
-
- x += lw->list.column_space >> 1;
- str_y += lw->list.row_space >> 1;
-
- str = lw->list.list[item]; /* draw it */
-
- ClipToShadowInteriorAndLongest(lw, &gc, x);
-
- if (lw->simple.international == True)
- XmbDrawString(XtDisplay(w), XtWindow(w), lw->list.fontset,
- gc, x, str_y, str, strlen(str));
- else
- XDrawString(XtDisplay(w), XtWindow(w), gc, x, str_y, str, strlen(str));
-
- XSetClipMask(XtDisplay(w), gc, None);
-}
-
-static void
-XawListRedisplay(Widget w, XEvent *event, Region region)
-{
- int item; /* an item to work with */
- int ul_item, lr_item; /* corners of items we need to paint */
- ListWidget lw = (ListWidget)w;
-
- if (event == NULL) {
- ul_item = 0;
- lr_item = lw->list.nrows * lw->list.ncols - 1;
- XClearWindow(XtDisplay(w), XtWindow(w));
- }
- else
- FindCornerItems(w, event, &ul_item, &lr_item);
-
- if (Superclass->core_class.expose)
- (Superclass->core_class.expose)(w, event, region);
-
- for (item = ul_item; item <= lr_item && item < lw->list.nitems; item++)
- if (ItemInRectangle(w, ul_item, lr_item, item))
- PaintItemName(w, item);
-}
-
-/* XawListQueryGeometry()
- *
- * This tells the parent what size we would like to be
- * given certain constraints.
- * w - the widget.
- * intended - what the parent intends to do with us.
- * requested - what we want to happen */
-static XtGeometryResult
-XawListQueryGeometry(Widget w, XtWidgetGeometry *intended,
- XtWidgetGeometry *requested)
-{
- Dimension new_width, new_height;
- Bool change, width_req, height_req;
-
- width_req = intended->request_mode & CWWidth;
- height_req = intended->request_mode & CWHeight;
-
- if (width_req)
- new_width = intended->width;
- else
- new_width = XtWidth(w);
-
- if (height_req)
- new_height = intended->height;
- else
- new_height = XtHeight(w);
-
- requested->request_mode = 0;
-
- /*
- * We only care about our height and width
- */
- if (!width_req && !height_req)
- return (XtGeometryYes);
-
- change = Layout(w, !width_req, !height_req, &new_width, &new_height);
-
- requested->request_mode |= CWWidth;
- requested->width = new_width;
- requested->request_mode |= CWHeight;
- requested->height = new_height;
-
- if (change)
- return (XtGeometryAlmost);
-
- return (XtGeometryYes);
-}
-
-static void
-XawListResize(Widget w)
-{
- Dimension width, height;
-
- width = XtWidth(w);
- height = XtHeight(w);
-
- if (Layout(w, False, False, &width, &height))
- XtAppWarning(XtWidgetToApplicationContext(w),
- "List Widget: Size changed when it shouldn't "
- "have when resising.");
-}
-
-/* Layout()
- *
- * lays out the item in the list.
- * w - the widget.
- * xfree, yfree - True if we are free to resize the widget in
- * this direction.
- * width, height- the is the current width and height that we are going
- * we are going to layout the list widget to,
- * depending on xfree and yfree of course.
- *
- * Return:
- * True if width or height have been changed */
-static Bool
-Layout(Widget w, Bool xfree, Bool yfree, Dimension *width, Dimension *height)
-{
- ListWidget lw = (ListWidget)w;
- Bool change = False;
- unsigned long width2 = 0, height2 = 0;
-
- /*
- * If force columns is set then always use number of columns specified
- * by default_cols
- */
- if (lw->list.force_cols) {
- lw->list.ncols = lw->list.default_cols;
- if (lw->list.ncols <= 0)
- lw->list.ncols = 1;
- lw->list.nrows = ((lw->list.nitems - 1) / lw->list.ncols) + 1;
- if (xfree) {
- /* this counts the same number
- of inter-column column_space 's as columns. There should thus
- be a half column_space margin on each side of each column...*/
- width2 = lw->list.ncols * lw->list.col_width +
- (lw->list.internal_width << 1);
- change = True;
- }
- if (yfree) {
- height2 = lw->list.nrows * lw->list.row_height +
- (lw->list.internal_height << 1);
- change = True;
- }
- }
-
- /*
- * If both width and height are free to change the use default_cols
- * to determine the number columns and set new width and height to
- * just fit the window
- */
- else if (xfree && yfree) {
- lw->list.ncols = lw->list.default_cols;
- if (lw->list.ncols <= 0) {
- int wid = (int)XtWidth(lw) - (int)(lw->list.internal_width << 1)
- + (int)lw->list.column_space;
-
- if (wid <= 0 || lw->list.col_width <= 0
- || (lw->list.ncols = wid / lw->list.col_width) <= 0)
- lw->list.ncols = 1;
- }
- width2 = lw->list.ncols * lw->list.col_width
- + (lw->list.internal_width << 1);
- height2 = (lw->list.nrows * lw->list.row_height)
- + (lw->list.internal_height << 1);
- change = True;
- }
-
- /*
- * If the width is fixed then use it to determine the number of columns.
- * If the height is free to move (width still fixed) then resize the height
- * of the widget to fit the current list exactly
- */
- else if (!xfree) {
- lw->list.ncols = ((int)(*width - (lw->list.internal_width << 1))
- / (int)lw->list.col_width);
- if (lw->list.ncols <= 0)
- lw->list.ncols = 1;
- lw->list.nrows = ((lw->list.nitems - 1) / lw->list.ncols) + 1;
- if (yfree) {
- height2 = lw->list.nrows * lw->list.row_height +
- (lw->list.internal_height << 1);
- change = True;
- }
- }
-
- /*
- * The last case is xfree and !yfree we use the height to determine
- * the number of rows and then set the width to just fit the resulting
- * number of columns
- */
- else if (!yfree) {
- lw->list.nrows = ((int)(*height - (lw->list.internal_height << 1))
- / (int)lw->list.row_height);
- if (lw->list.nrows <= 0)
- lw->list.nrows = 1;
- lw->list.ncols = ((lw->list.nitems - 1) / lw->list.nrows) + 1;
- width2 = lw->list.ncols * lw->list.col_width +
- (lw->list.internal_width << 1);
- change = True;
- }
-
- if (!lw->list.force_cols && lw->list.nrows) {
- /*CONSTCOND*/
- while (1) {
- lw->list.nrows = ((lw->list.nitems - 1) / lw->list.ncols) + 1;
- width2 = lw->list.ncols * lw->list.col_width +
- (lw->list.internal_width << 1);
- height2 = lw->list.nrows * lw->list.row_height +
- (lw->list.internal_height << 1);
- if (width2 >= MaxSize && height2 >= MaxSize)
- break;
- if (height2 > MaxSize)
- ++lw->list.ncols;
- else if (width2 > MaxSize && lw->list.ncols > 1)
- --lw->list.ncols;
- else
- break;
- }
- }
- if (width2)
- *width = width2;
- if (height2)
- *height = height2;
-
- return (change);
-}
-
-/* Notify() - Action
- *
- * Notifies the user that a button has been pressed, and
- * calls the callback; if the XtNpasteBuffer resource is true
- * then the name of the item is also put in CUT_BUFFER0 */
-/*ARGSUSED*/
-static void
-Notify(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- ListWidget lw = (ListWidget)w;
- int item, item_len;
- XawListReturnStruct ret_value;
-
- /*
- * Find item and if out of range then unhighlight and return
- *
- * If the current item is unhighlighted then the user has aborted the
- * notify, so unhighlight and return
- */
- if ((CvtToItem(w, event->xbutton.x, event->xbutton.y, &item) == OUT_OF_RANGE)
- || lw->list.highlight != item) {
-#ifndef OLDXAW
- if (!lw->list.show_current || lw->list.selected == NO_HIGHLIGHT)
- XawListUnhighlight(w);
- else
- XawListHighlight(w, lw->list.selected);
-#else
- XawListUnhighlight(w);
-#endif
- return;
- }
-
- item_len = strlen(lw->list.list[item]);
-
- if (lw->list.paste) /* if XtNpasteBuffer set then paste it */
- XStoreBytes(XtDisplay(w), lw->list.list[item], item_len);
-
-#ifndef OLDXAW
- lw->list.selected = item;
-#endif
- /*
- * Call Callback function
- */
- ret_value.string = lw->list.list[item];
- ret_value.list_index = item;
-
- XtCallCallbacks(w, XtNcallback, (XtPointer)&ret_value);
-}
-
-/* Unset() - Action
- *
- * unhighlights the current element */
-/*ARGSUSED*/
-static void
-Unset(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- XawListUnhighlight(w);
-}
-
-/* Set() - Action
- *
- * Highlights the current element */
-/*ARGSUSED*/
-static void
-Set(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- int item;
- ListWidget lw = (ListWidget)w;
-
-#ifndef OLDXAW
- lw->list.selected = lw->list.highlight;
-#endif
- if (CvtToItem(w, event->xbutton.x, event->xbutton.y, &item) == OUT_OF_RANGE)
- XawListUnhighlight(w); /* Unhighlight current item */
- else if (lw->list.is_highlighted != item) /* If this item is not */
- XawListHighlight(w, item); /* highlighted then do it */
-}
-
-/*
- * Set specified arguments into widget
- */
-/*ARGSUSED*/
-static Boolean
-XawListSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- ListWidget cl = (ListWidget)current;
- ListWidget rl = (ListWidget)request;
- ListWidget nl = (ListWidget)cnew;
- Bool redraw = False;
- XFontSetExtents *ext = XExtentsOfFontSet(nl->list.fontset);
-
- /* If the request height/width is different, lock it. Unless its 0. If
- neither new nor 0, leave it as it was. Not in R5 */
- if (XtWidth(nl) != XtWidth(cl))
- nl->list.freedoms |= WidthLock;
- if (XtWidth(nl) == 0)
- nl->list.freedoms &= ~WidthLock;
-
- if (XtHeight(nl) != XtHeight(cl))
- nl->list.freedoms |= HeightLock;
- if (XtHeight(nl) == 0)
- nl->list.freedoms &= ~HeightLock;
-
- if (nl->list.longest != cl->list.longest)
- nl->list.freedoms |= LongestLock;
- if (nl->list.longest == 0)
- nl->list.freedoms &= ~LongestLock;
-
- if (cl->list.foreground != nl->list.foreground ||
- cl->core.background_pixel != nl->core.background_pixel ||
- cl->list.font != nl->list.font) {
- XGCValues values;
-
- XGetGCValues(XtDisplay(current), cl->list.graygc, GCTile, &values);
- XmuReleaseStippledPixmap(XtScreen(current), values.tile);
- XtReleaseGC(current, cl->list.graygc);
- XtReleaseGC(current, cl->list.revgc);
- XtReleaseGC(current, cl->list.normgc);
- GetGCs(cnew);
- redraw = True;
- }
-
- if (cl->list.font != nl->list.font && cl->simple.international == False)
- nl->list.row_height = nl->list.font->max_bounds.ascent
- + nl->list.font->max_bounds.descent
- + nl->list.row_space;
- else if (cl->list.fontset != nl->list.fontset
- && cl->simple.international == True)
- nl->list.row_height = ext->max_ink_extent.height + nl->list.row_space;
-
- /* ...If the above two font(set) change checkers above both failed, check
- if row_space was altered. If one of the above passed, row_height will
- already have been re-calculated */
- else if (cl->list.row_space != nl->list.row_space) {
- if (cl->simple.international == True)
- nl->list.row_height = ext->max_ink_extent.height + nl->list.row_space;
- else
- nl->list.row_height = nl->list.font->max_bounds.ascent
- + nl->list.font->max_bounds.descent
- + nl->list.row_space;
- }
-
- if (XtWidth(cl) != XtWidth(nl) || XtHeight(cl) != XtHeight(nl)
- || cl->list.internal_width != nl->list.internal_width
- || cl->list.internal_height != nl->list.internal_height
- || cl->list.column_space != nl->list.column_space
- || cl->list.row_space != nl->list.row_space
- || cl->list.default_cols != nl->list.default_cols
- || (cl->list.force_cols != nl->list.force_cols
- && rl->list.force_cols != nl->list.ncols)
- || cl->list.vertical_cols != nl->list.vertical_cols
- || cl->list.longest != nl->list.longest
- || cl->list.nitems != nl->list.nitems
- || cl->list.font != nl->list.font
- /* Equiv. fontsets might have different values, but the same fonts,
- so the next comparison is sloppy but not dangerous */
- || cl->list.fontset != nl->list.fontset
- || cl->list.list != nl->list.list) {
- CalculatedValues(cnew);
- Layout(cnew, WidthFree(nl), HeightFree(nl),
- &nl->core.width, &nl->core.height);
- redraw = True;
- }
-
- if (cl->list.list != nl->list.list || cl->list.nitems != nl->list.nitems)
- nl->list.is_highlighted = nl->list.highlight = NO_HIGHLIGHT;
-
- if (cl->core.sensitive != nl->core.sensitive
- || cl->core.ancestor_sensitive != nl->core.ancestor_sensitive) {
- nl->list.highlight = NO_HIGHLIGHT;
- redraw = True;
- }
-
- return (redraw);
-}
-
-static void
-XawListDestroy(Widget w)
-{
- ListWidget lw = (ListWidget)w;
- XGCValues values;
-
- XGetGCValues(XtDisplay(w), lw->list.graygc, GCTile, &values);
- XmuReleaseStippledPixmap(XtScreen(w), values.tile);
- XtReleaseGC(w, lw->list.graygc);
- XtReleaseGC(w, lw->list.revgc);
- XtReleaseGC(w, lw->list.normgc);
-}
-
-/*
- * Function:
- * XawListChange
- *
- * Parameters:
- * w - list widget
- * list - new list
- * nitems - number of items in the list
- * longest - length (in Pixels) of the longest element in the list
- * resize - if True the the list widget will try to resize itself
- *
- * Description:
- * Changes the list being used and shown.
- *
- * Note:
- * If nitems of longest are <= 0 then they will be calculated
- * If nitems is <= 0 then the list needs to be NULL terminated
- */
-void
-XawListChange(Widget w, char **list, int nitems, int longest,
-#if NeedWidePrototypes
- int resize_it
-#else
- Boolean resize_it
-#endif
-)
-{
- ListWidget lw = (ListWidget)w;
- Dimension new_width = XtWidth(w);
- Dimension new_height = XtHeight(w);
-
- lw->list.list = list;
-
- if (nitems <= 0)
- nitems = 0;
- lw->list.nitems = nitems;
- if (longest <= 0)
- longest = 0;
-
- /* If the user passes 0 meaning "calculate it", it must be free */
- if (longest != 0)
- lw->list.freedoms |= LongestLock;
- else
- lw->list.freedoms &= ~LongestLock;
-
- if (resize_it)
- lw->list.freedoms &= ~WidthLock & ~HeightLock;
-
- lw->list.longest = longest;
-
- CalculatedValues(w);
-
- if (Layout(w, WidthFree(w), HeightFree(w), &new_width, &new_height))
- ChangeSize(w, new_width, new_height);
-
- lw->list.is_highlighted = lw->list.highlight = NO_HIGHLIGHT;
- if (XtIsRealized(w))
- XawListRedisplay(w, NULL, NULL);
-}
-
-void
-XawListUnhighlight(Widget w)
-{
- ListWidget lw = (ListWidget)w;
-
- lw->list.highlight = NO_HIGHLIGHT;
- if (lw->list.is_highlighted != NO_HIGHLIGHT)
- PaintItemName(w, lw->list.is_highlighted);
-}
-
-void
-XawListHighlight(Widget w, int item)
-{
- ListWidget lw = (ListWidget)w;
-
- if (XtIsSensitive(w)) {
- lw->list.highlight = item;
- if (lw->list.is_highlighted != NO_HIGHLIGHT)
- PaintItemName(w, lw->list.is_highlighted);
- PaintItemName(w, item);
- }
-}
-
-/*
- * Function:
- * XawListShowCurrent
- *
- * Parameters:
- * w - list widget
- *
- * Returns:
- * Info about the currently highlighted object
- */
-XawListReturnStruct *
-XawListShowCurrent(Widget w)
-{
- ListWidget lw = (ListWidget)w;
- XawListReturnStruct *ret_val;
-
- ret_val = (XawListReturnStruct *)XtMalloc(sizeof(XawListReturnStruct));
-
- ret_val->list_index = lw->list.highlight;
- if (ret_val->list_index == XAW_LIST_NONE)
- ret_val->string = "";
- else
- ret_val->string = lw->list.list[ret_val->list_index];
-
- return (ret_val);
-}
+/*
+Copyright 1989, 1994, 1998 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.
+*/
+
+/*
+ * List.c - List widget
+ *
+ * This is a List widget. It allows the user to select an item in a list and
+ * notifies the application through a callback function.
+ *
+ * Created: 8/13/88
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <ctype.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Drawing.h>
+#include <X11/Xaw/ListP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#define HeightLock 1
+#define WidthLock 2
+#define LongestLock 4
+
+#define HeightFree(w) !(((ListWidget)(w))->list.freedoms & HeightLock)
+#define WidthFree(w) !(((ListWidget)(w))->list.freedoms & WidthLock)
+#define LongestFree(w) !(((ListWidget)(w))->list.freedoms & LongestLock)
+
+#define MaxSize 32767
+
+/*
+ * Class Methods
+ */
+static void XawListDestroy(Widget);
+static void XawListInitialize(Widget, Widget, ArgList, Cardinal*);
+static XtGeometryResult XawListQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawListRedisplay(Widget, XEvent*, Region);
+static void XawListResize(Widget);
+static Boolean XawListSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void CalculatedValues(Widget);
+static void ChangeSize(Widget, unsigned int, unsigned int);
+static void ClipToShadowInteriorAndLongest(ListWidget, GC*, unsigned int);
+static int CvtToItem(Widget, int, int, int*);
+static void FindCornerItems(Widget, XEvent*, int*, int*);
+static void GetGCs(Widget);
+static void HighlightBackground(Widget, int, int, GC);
+static Bool ItemInRectangle(Widget, int, int, int);
+static Bool Layout(Widget, Bool, Bool, Dimension*, Dimension*);
+static void PaintItemName(Widget, int);
+static void ResetList(Widget, Bool, Bool);
+
+/*
+ * Actions
+ */
+static void Notify(Widget, XEvent*, String*, Cardinal*);
+static void Set(Widget, XEvent*, String*, Cardinal*);
+static void Unset(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+static char defaultTranslations[] =
+"<Btn1Down>:" "Set()\n"
+"<Btn1Up>:" "Notify()\n"
+;
+
+#define offset(field) XtOffsetOf(ListRec, field)
+static XtResource resources[] = {
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(list.foreground),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNcursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(simple.cursor),
+ XtRString,
+ "left_ptr"
+ },
+ {
+ XtNfont,
+ XtCFont,
+ XtRFontStruct,
+ sizeof(XFontStruct*),
+ offset(list.font),
+ XtRString,
+ XtDefaultFont
+ },
+ {
+ XtNfontSet,
+ XtCFontSet,
+ XtRFontSet,
+ sizeof(XFontSet),
+ offset(list.fontset),
+ XtRString,
+ XtDefaultFontSet
+ },
+ {
+ XtNlist,
+ XtCList,
+ XtRPointer,
+ sizeof(char**),
+ offset(list.list),
+#ifdef notyet
+ XtRStringArray,
+#else
+ XtRString,
+#endif
+ NULL
+ },
+ {
+ XtNdefaultColumns,
+ XtCColumns,
+ XtRInt,
+ sizeof(int),
+ offset(list.default_cols),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNlongest,
+ XtCLongest,
+ XtRInt,
+ sizeof(int),
+ offset(list.longest),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNnumberStrings,
+ XtCNumberStrings,
+ XtRInt,
+ sizeof(int),
+ offset(list.nitems),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNpasteBuffer,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(list.paste),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNforceColumns,
+ XtCColumns,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(list.force_cols),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNverticalList,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(list.vertical_cols),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNinternalWidth,
+ XtCWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(list.internal_width),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNinternalHeight,
+ XtCHeight,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(list.internal_height),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNcolumnSpacing,
+ XtCSpacing,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(list.column_space),
+ XtRImmediate,
+ (XtPointer)6
+ },
+ {
+ XtNrowSpacing,
+ XtCSpacing,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(list.row_space),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNcallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(list.callback),
+ XtRCallback,
+ NULL
+ },
+#ifndef OLDXAW
+ {
+ XtNshowCurrent,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(list.show_current),
+ XtRImmediate,
+ (XtPointer)False
+ },
+#endif
+};
+#undef offset
+
+static XtActionsRec actions[] = {
+ {"Notify", Notify},
+ {"Set", Set},
+ {"Unset", Unset},
+};
+
+#define Superclass (&simpleClassRec)
+ListClassRec listClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "List", /* class_name */
+ sizeof(ListRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawListInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ False, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawListDestroy, /* destroy */
+ XawListResize, /* resize */
+ XawListRedisplay, /* expose */
+ XawListSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ defaultTranslations, /* tm_table */
+ XawListQueryGeometry, /* query_geometry */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* list */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass listWidgetClass = (WidgetClass)&listClassRec;
+
+/*
+ * Implementation
+ */
+static void
+GetGCs(Widget w)
+{
+ XGCValues values;
+ ListWidget lw = (ListWidget)w;
+
+ values.foreground = lw->list.foreground;
+ values.font = lw->list.font->fid;
+
+ if (lw->simple.international == True)
+ lw->list.normgc = XtAllocateGC(w, 0, GCForeground, &values, GCFont, 0);
+ else
+ lw->list.normgc = XtGetGC(w, GCForeground | GCFont, &values);
+
+ values.foreground = lw->core.background_pixel;
+
+ if (lw->simple.international == True)
+ lw->list.revgc = XtAllocateGC(w, 0, GCForeground, &values, GCFont, 0);
+ else
+ lw->list.revgc = XtGetGC(w, GCForeground | GCFont, &values);
+
+ values.tile = XmuCreateStippledPixmap(XtScreen(w),
+ lw->list.foreground,
+ lw->core.background_pixel,
+ lw->core.depth);
+ values.fill_style = FillTiled;
+
+ if (lw->simple.international == True)
+ lw->list.graygc = XtAllocateGC(w, 0, GCTile | GCFillStyle,
+ &values, GCFont, 0);
+ else
+ lw->list.graygc = XtGetGC(w, GCFont | GCTile | GCFillStyle, &values);
+}
+
+static void
+CalculatedValues(Widget w)
+{
+ int i, len;
+ ListWidget lw = (ListWidget)w;
+
+ /* If list is NULL then the list will just be the name of the widget */
+ if (lw->list.list == NULL) {
+ lw->list.list = &lw->core.name;
+ lw->list.nitems = 1;
+ }
+
+ /* Get number of items */
+ if (lw->list.nitems == 0)
+ for (; lw->list.list[lw->list.nitems] != NULL ; lw->list.nitems++)
+ ;
+
+ /* Get column width */
+ if (LongestFree(lw)) {
+ lw->list.longest = 0; /* so it will accumulate real longest below */
+
+ for (i = 0 ; i < lw->list.nitems; i++) {
+ if (lw->simple.international == True)
+ len = XmbTextEscapement(lw->list.fontset, lw->list.list[i],
+ strlen(lw->list.list[i]));
+ else
+ len = XTextWidth(lw->list.font, lw->list.list[i],
+ strlen(lw->list.list[i]));
+ if (len > lw->list.longest)
+ lw->list.longest = len;
+ }
+ }
+
+ lw->list.col_width = lw->list.longest + lw->list.column_space;
+}
+
+/*
+ * Function:
+ * ResetList
+ *
+ * Parameters:
+ * w - list widget
+ * changex - allow the height or width to change?
+ * changey - ""
+ *
+ * Description:
+ * Resets the new list when important things change.
+ *
+ * Returns:
+ * True if width or height have been changed
+ */
+static void
+ResetList(Widget w, Bool changex, Bool changey)
+{
+ Dimension width = XtWidth(w);
+ Dimension height = XtHeight(w);
+
+ CalculatedValues(w);
+
+ if (Layout(w, changex, changey, &width, &height)) {
+ if (XtIsComposite(XtParent(w)))
+ ChangeSize(w, width, height);
+ else {
+ XtWidth(w) = width;
+ XtHeight(w) = height;
+ }
+ }
+}
+
+/*
+ * Function:
+ * ChangeSize
+ *
+ * Parameters:
+ * w - widget to try change the size of
+ *
+ * Description:
+ * Laysout the widget.
+ */
+static void
+ChangeSize(Widget w, unsigned int width, unsigned int height)
+{
+ XtWidgetGeometry request, reply;
+
+ request.request_mode = CWWidth | CWHeight;
+ request.width = width;
+ request.height = height;
+
+ switch (XtMakeGeometryRequest(w, &request, &reply)) {
+ case XtGeometryYes:
+ case XtGeometryNo:
+ break;
+ case XtGeometryAlmost:
+ Layout(w, request.height != reply.height,
+ request.width != reply.width, &reply.width, &reply.height);
+ request = reply;
+ switch (XtMakeGeometryRequest(w, &request, &reply)) {
+ case XtGeometryYes:
+ case XtGeometryNo:
+ break;
+ case XtGeometryAlmost:
+ request = reply;
+ Layout(w, False, False, &request.width, &request.height);
+ request.request_mode = CWWidth | CWHeight;
+ XtMakeGeometryRequest(w, &request, &reply);
+ /*FALLTROUGH*/
+ default:
+ break;
+ }
+ /*FALLTROUGH*/
+ default:
+ break;
+ }
+}
+
+/*ARGSUSED*/
+static void
+XawListInitialize(Widget temp1, Widget cnew, ArgList args, Cardinal *num_args)
+{
+ ListWidget lw = (ListWidget)cnew;
+
+ if (!lw->list.font) XtError("Aborting: no font found\n");
+ if (lw->simple.international && !lw->list.fontset)
+ XtError("Aborting: no fontset found\n");
+
+ /*
+ * Initialize all private resources
+ */
+ /* record for posterity if we are free */
+ lw->list.freedoms = ((XtWidth(lw) != 0) * WidthLock +
+ (XtHeight(lw) != 0) * HeightLock +
+ (lw->list.longest != 0) * LongestLock);
+
+ GetGCs(cnew);
+
+ /* Set row height, based on font or fontset */
+ if (lw->simple.international == True)
+ lw->list.row_height =
+ XExtentsOfFontSet(lw->list.fontset)->max_ink_extent.height +
+ lw->list.row_space;
+ else
+ lw->list.row_height = lw->list.font->max_bounds.ascent +
+ lw->list.font->max_bounds.descent +
+ lw->list.row_space;
+
+ ResetList(cnew, WidthFree(lw), HeightFree(lw));
+
+ lw->list.highlight = lw->list.is_highlighted = NO_HIGHLIGHT;
+}
+
+/*
+ * Function:
+ * CvtToItem
+ *
+ * Parameters:
+ * w - list widget
+ * xloc - x location
+ * yloc - y location
+ *
+ * Description:
+ * Converts Xcoord to item number of item containing that point.
+ *
+ * Returns:
+ * Item number
+ */
+static int
+CvtToItem(Widget w, int xloc, int yloc, int *item)
+{
+ int one, another;
+ ListWidget lw = (ListWidget)w;
+ int ret_val = OKAY;
+
+ if (lw->list.vertical_cols) {
+ one = lw->list.nrows * ((xloc - (int)lw->list.internal_width)
+ / lw->list.col_width);
+ another = (yloc - (int)lw->list.internal_height) / lw->list.row_height;
+ /* If out of range, return minimum possible value */
+ if (another >= lw->list.nrows) {
+ another = lw->list.nrows - 1;
+ ret_val = OUT_OF_RANGE;
+ }
+ }
+ else {
+ one = (lw->list.ncols * ((yloc - (int)lw->list.internal_height)
+ / lw->list.row_height));
+ /* If in right margin handle things right */
+ another = (xloc - (int)lw->list.internal_width) / lw->list.col_width;
+ if (another >= lw->list.ncols) {
+ another = lw->list.ncols - 1;
+ ret_val = OUT_OF_RANGE;
+ }
+ }
+ if (xloc < 0 || yloc < 0)
+ ret_val = OUT_OF_RANGE;
+ if (one < 0)
+ one = 0;
+ if (another < 0)
+ another = 0;
+ *item = one + another;
+ if (*item >= lw->list.nitems)
+ return (OUT_OF_RANGE);
+
+ return (ret_val);
+}
+
+/*
+ * Function:
+ * FindCornerItems
+ *
+ * Arguments:
+ * w - list widget
+ * event - event structure that has the rectangle it it
+ * ul_ret - the corners (return)
+ * lr_ret - ""
+ *
+ * Description:
+ * Find the corners of the rectangle in item space.
+ */
+static void
+FindCornerItems(Widget w, XEvent *event, int *ul_ret, int *lr_ret)
+{
+ int xloc, yloc;
+
+ xloc = event->xexpose.x;
+ yloc = event->xexpose.y;
+ CvtToItem(w, xloc, yloc, ul_ret);
+ xloc += event->xexpose.width;
+ yloc += event->xexpose.height;
+ CvtToItem(w, xloc, yloc, lr_ret);
+}
+
+/*
+ * Function:
+ * ItemInRectangle
+ *
+ * Parameters:
+ * w - list widget
+ * ul - corners of the rectangle in item space
+ * lr - ""
+ * item - item to check
+ *
+ * Returns:
+ * True if the item passed is in the given rectangle
+ */
+static Bool
+ItemInRectangle(Widget w, int ul, int lr, int item)
+{
+ ListWidget lw = (ListWidget)w;
+ int mod_item;
+ int things;
+
+ if (item < ul || item > lr)
+ return (False);
+ if (lw->list.vertical_cols)
+ things = lw->list.nrows;
+ else
+ things = lw->list.ncols;
+
+ mod_item = item % things;
+ if ((mod_item >= ul % things) && (mod_item <= lr % things))
+ return (True);
+
+ return (False);
+}
+
+/* HighlightBackground()
+ *
+ * Paints the color of the background for the given item. It performs
+ * clipping to the interior of internal_width/height by hand, as its a
+ * simple calculation and probably much faster than using Xlib and a clip mask.
+ *
+ * x, y - ul corner of the area item occupies.
+ * gc - the gc to use to paint this rectangle
+ */
+static void
+HighlightBackground(Widget w, int x, int y, GC gc)
+{
+ ListWidget lw = (ListWidget)w;
+ Dimension width = lw->list.col_width;
+ Dimension height = lw->list.row_height;
+ Dimension frame_limited_width = XtWidth(w) - lw->list.internal_width - x;
+ Dimension frame_limited_height= XtHeight(w) - lw->list.internal_height - y;
+
+ /* Clip the rectangle width and height to the edge of the drawable area */
+ if (width > frame_limited_width)
+ width = frame_limited_width;
+ if (height > frame_limited_height)
+ height = frame_limited_height;
+
+ /* Clip the rectangle x and y to the edge of the drawable area */
+ if (x < lw->list.internal_width) {
+ width = width - (lw->list.internal_width - x);
+ x = lw->list.internal_width;
+ }
+ if (y < lw->list.internal_height) {
+ height = height - (lw->list.internal_height - y);
+ y = lw->list.internal_height;
+ }
+
+ if (gc == lw->list.revgc && lw->core.background_pixmap != XtUnspecifiedPixmap)
+ XClearArea(XtDisplay(w), XtWindow(w), x, y, width, height, False);
+ else
+ XFillRectangle(XtDisplay(w), XtWindow(w), gc, x, y, width, height);
+}
+
+
+/* ClipToShadowInteriorAndLongest()
+ *
+ * Converts the passed gc so that any drawing done with that GC will not
+ * write in the empty margin (specified by internal_width/height) (which also
+ * prevents erasing the shadow. It also clips against the value longest.
+ * If the user doesn't set longest, this has no effect (as longest is the
+ * maximum of all item lengths). If the user does specify, say, 80 pixel
+ * columns, though, this prevents items from overwriting other items.
+ */
+static void
+ClipToShadowInteriorAndLongest(ListWidget lw, GC *gc_p, unsigned int x)
+{
+ XRectangle rect;
+
+ rect.x = x;
+ rect.y = lw->list.internal_height;
+ rect.height = XtHeight(lw) - (lw->list.internal_height << 1);
+ rect.width = XtWidth(lw) - lw->list.internal_width - x;
+ if (rect.width > lw->list.longest)
+ rect.width = lw->list.longest;
+
+ XSetClipRectangles(XtDisplay((Widget)lw), *gc_p, 0, 0, &rect, 1, YXBanded);
+}
+
+static void
+PaintItemName(Widget w, int item)
+{
+ char *str;
+ GC gc;
+ int x, y, str_y;
+ ListWidget lw = (ListWidget)w;
+ XFontSetExtents *ext = XExtentsOfFontSet(lw->list.fontset);
+
+ if (!XtIsRealized(w) || item > lw->list.nitems)
+ return;
+
+ if (lw->list.vertical_cols) {
+ x = lw->list.col_width * (item / lw->list.nrows)
+ + lw->list.internal_width;
+ y = lw->list.row_height * (item % lw->list.nrows)
+ + lw->list.internal_height;
+ }
+ else {
+ x = lw->list.col_width * (item % lw->list.ncols)
+ + lw->list.internal_width;
+ y = lw->list.row_height * (item / lw->list.ncols)
+ + lw->list.internal_height;
+ }
+
+ if ( lw->simple.international == True )
+ str_y = y + XawAbs(ext->max_ink_extent.y);
+ else
+ str_y = y + lw->list.font->max_bounds.ascent;
+
+ if (item == lw->list.is_highlighted) {
+ if (item == lw->list.highlight) {
+ gc = lw->list.revgc;
+ HighlightBackground(w, x, y, lw->list.normgc);
+ }
+ else {
+ if (XtIsSensitive(w))
+ gc = lw->list.normgc;
+ else
+ gc = lw->list.graygc;
+ HighlightBackground(w, x, y, lw->list.revgc);
+ lw->list.is_highlighted = NO_HIGHLIGHT;
+ }
+ }
+ else {
+ if (item == lw->list.highlight) {
+ gc = lw->list.revgc;
+ HighlightBackground(w, x, y, lw->list.normgc);
+ lw->list.is_highlighted = item;
+ }
+ else {
+ if (XtIsSensitive(w))
+ gc = lw->list.normgc;
+ else
+ gc = lw->list.graygc;
+ }
+ }
+
+ /* List's overall width contains the same number of inter-column
+ column_space's as columns. There should thus be a half
+ column_width margin on each side of each column.
+ The row case is symmetric */
+
+ x += lw->list.column_space >> 1;
+ str_y += lw->list.row_space >> 1;
+
+ str = lw->list.list[item]; /* draw it */
+
+ ClipToShadowInteriorAndLongest(lw, &gc, x);
+
+ if (lw->simple.international == True)
+ XmbDrawString(XtDisplay(w), XtWindow(w), lw->list.fontset,
+ gc, x, str_y, str, strlen(str));
+ else
+ XDrawString(XtDisplay(w), XtWindow(w), gc, x, str_y, str, strlen(str));
+
+ XSetClipMask(XtDisplay(w), gc, None);
+}
+
+static void
+XawListRedisplay(Widget w, XEvent *event, Region region)
+{
+ int item; /* an item to work with */
+ int ul_item, lr_item; /* corners of items we need to paint */
+ ListWidget lw = (ListWidget)w;
+
+ if (event == NULL) {
+ ul_item = 0;
+ lr_item = lw->list.nrows * lw->list.ncols - 1;
+ XClearWindow(XtDisplay(w), XtWindow(w));
+ }
+ else
+ FindCornerItems(w, event, &ul_item, &lr_item);
+
+ if (Superclass->core_class.expose)
+ (Superclass->core_class.expose)(w, event, region);
+
+ for (item = ul_item; item <= lr_item && item < lw->list.nitems; item++)
+ if (ItemInRectangle(w, ul_item, lr_item, item))
+ PaintItemName(w, item);
+}
+
+/* XawListQueryGeometry()
+ *
+ * This tells the parent what size we would like to be
+ * given certain constraints.
+ * w - the widget.
+ * intended - what the parent intends to do with us.
+ * requested - what we want to happen */
+static XtGeometryResult
+XawListQueryGeometry(Widget w, XtWidgetGeometry *intended,
+ XtWidgetGeometry *requested)
+{
+ Dimension new_width, new_height;
+ Bool change, width_req, height_req;
+
+ width_req = intended->request_mode & CWWidth;
+ height_req = intended->request_mode & CWHeight;
+
+ if (width_req)
+ new_width = intended->width;
+ else
+ new_width = XtWidth(w);
+
+ if (height_req)
+ new_height = intended->height;
+ else
+ new_height = XtHeight(w);
+
+ requested->request_mode = 0;
+
+ /*
+ * We only care about our height and width
+ */
+ if (!width_req && !height_req)
+ return (XtGeometryYes);
+
+ change = Layout(w, !width_req, !height_req, &new_width, &new_height);
+
+ requested->request_mode |= CWWidth;
+ requested->width = new_width;
+ requested->request_mode |= CWHeight;
+ requested->height = new_height;
+
+ if (change)
+ return (XtGeometryAlmost);
+
+ return (XtGeometryYes);
+}
+
+static void
+XawListResize(Widget w)
+{
+ Dimension width, height;
+
+ width = XtWidth(w);
+ height = XtHeight(w);
+
+ if (Layout(w, False, False, &width, &height))
+ XtAppWarning(XtWidgetToApplicationContext(w),
+ "List Widget: Size changed when it shouldn't "
+ "have when resising.");
+}
+
+/* Layout()
+ *
+ * lays out the item in the list.
+ * w - the widget.
+ * xfree, yfree - True if we are free to resize the widget in
+ * this direction.
+ * width, height- the is the current width and height that we are going
+ * we are going to layout the list widget to,
+ * depending on xfree and yfree of course.
+ *
+ * Return:
+ * True if width or height have been changed */
+static Bool
+Layout(Widget w, Bool xfree, Bool yfree, Dimension *width, Dimension *height)
+{
+ ListWidget lw = (ListWidget)w;
+ Bool change = False;
+ unsigned long width2 = 0, height2 = 0;
+
+ /*
+ * If force columns is set then always use number of columns specified
+ * by default_cols
+ */
+ if (lw->list.force_cols) {
+ lw->list.ncols = lw->list.default_cols;
+ if (lw->list.ncols <= 0)
+ lw->list.ncols = 1;
+ lw->list.nrows = ((lw->list.nitems - 1) / lw->list.ncols) + 1;
+ if (xfree) {
+ /* this counts the same number
+ of inter-column column_space 's as columns. There should thus
+ be a half column_space margin on each side of each column...*/
+ width2 = lw->list.ncols * lw->list.col_width +
+ (lw->list.internal_width << 1);
+ change = True;
+ }
+ if (yfree) {
+ height2 = lw->list.nrows * lw->list.row_height +
+ (lw->list.internal_height << 1);
+ change = True;
+ }
+ }
+
+ /*
+ * If both width and height are free to change the use default_cols
+ * to determine the number columns and set new width and height to
+ * just fit the window
+ */
+ else if (xfree && yfree) {
+ lw->list.ncols = lw->list.default_cols;
+ if (lw->list.ncols <= 0) {
+ int wid = (int)XtWidth(lw) - (int)(lw->list.internal_width << 1)
+ + (int)lw->list.column_space;
+
+ if (wid <= 0 || lw->list.col_width <= 0
+ || (lw->list.ncols = wid / lw->list.col_width) <= 0)
+ lw->list.ncols = 1;
+ }
+ width2 = lw->list.ncols * lw->list.col_width
+ + (lw->list.internal_width << 1);
+ height2 = (lw->list.nrows * lw->list.row_height)
+ + (lw->list.internal_height << 1);
+ change = True;
+ }
+
+ /*
+ * If the width is fixed then use it to determine the number of columns.
+ * If the height is free to move (width still fixed) then resize the height
+ * of the widget to fit the current list exactly
+ */
+ else if (!xfree) {
+ lw->list.ncols = ((int)(*width - (lw->list.internal_width << 1))
+ / (int)lw->list.col_width);
+ if (lw->list.ncols <= 0)
+ lw->list.ncols = 1;
+ lw->list.nrows = ((lw->list.nitems - 1) / lw->list.ncols) + 1;
+ if (yfree) {
+ height2 = lw->list.nrows * lw->list.row_height +
+ (lw->list.internal_height << 1);
+ change = True;
+ }
+ }
+
+ /*
+ * The last case is xfree and !yfree we use the height to determine
+ * the number of rows and then set the width to just fit the resulting
+ * number of columns
+ */
+ else if (!yfree) {
+ lw->list.nrows = ((int)(*height - (lw->list.internal_height << 1))
+ / (int)lw->list.row_height);
+ if (lw->list.nrows <= 0)
+ lw->list.nrows = 1;
+ lw->list.ncols = ((lw->list.nitems - 1) / lw->list.nrows) + 1;
+ width2 = lw->list.ncols * lw->list.col_width +
+ (lw->list.internal_width << 1);
+ change = True;
+ }
+
+ if (!lw->list.force_cols && lw->list.nrows) {
+ /*CONSTCOND*/
+ while (1) {
+ lw->list.nrows = ((lw->list.nitems - 1) / lw->list.ncols) + 1;
+ width2 = lw->list.ncols * lw->list.col_width +
+ (lw->list.internal_width << 1);
+ height2 = lw->list.nrows * lw->list.row_height +
+ (lw->list.internal_height << 1);
+ if (width2 >= MaxSize && height2 >= MaxSize)
+ break;
+ if (height2 > MaxSize)
+ ++lw->list.ncols;
+ else if (width2 > MaxSize && lw->list.ncols > 1)
+ --lw->list.ncols;
+ else
+ break;
+ }
+ }
+ if (width2)
+ *width = width2;
+ if (height2)
+ *height = height2;
+
+ return (change);
+}
+
+/* Notify() - Action
+ *
+ * Notifies the user that a button has been pressed, and
+ * calls the callback; if the XtNpasteBuffer resource is true
+ * then the name of the item is also put in CUT_BUFFER0 */
+/*ARGSUSED*/
+static void
+Notify(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ ListWidget lw = (ListWidget)w;
+ int item, item_len;
+ XawListReturnStruct ret_value;
+
+ /*
+ * Find item and if out of range then unhighlight and return
+ *
+ * If the current item is unhighlighted then the user has aborted the
+ * notify, so unhighlight and return
+ */
+ if ((CvtToItem(w, event->xbutton.x, event->xbutton.y, &item) == OUT_OF_RANGE)
+ || lw->list.highlight != item) {
+#ifndef OLDXAW
+ if (!lw->list.show_current || lw->list.selected == NO_HIGHLIGHT)
+ XawListUnhighlight(w);
+ else
+ XawListHighlight(w, lw->list.selected);
+#else
+ XawListUnhighlight(w);
+#endif
+ return;
+ }
+
+ item_len = strlen(lw->list.list[item]);
+
+ if (lw->list.paste) /* if XtNpasteBuffer set then paste it */
+ XStoreBytes(XtDisplay(w), lw->list.list[item], item_len);
+
+#ifndef OLDXAW
+ lw->list.selected = item;
+#endif
+ /*
+ * Call Callback function
+ */
+ ret_value.string = lw->list.list[item];
+ ret_value.list_index = item;
+
+ XtCallCallbacks(w, XtNcallback, (XtPointer)&ret_value);
+}
+
+/* Unset() - Action
+ *
+ * unhighlights the current element */
+/*ARGSUSED*/
+static void
+Unset(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ XawListUnhighlight(w);
+}
+
+/* Set() - Action
+ *
+ * Highlights the current element */
+/*ARGSUSED*/
+static void
+Set(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ int item;
+ ListWidget lw = (ListWidget)w;
+
+#ifndef OLDXAW
+ lw->list.selected = lw->list.highlight;
+#endif
+ if (CvtToItem(w, event->xbutton.x, event->xbutton.y, &item) == OUT_OF_RANGE)
+ XawListUnhighlight(w); /* Unhighlight current item */
+ else if (lw->list.is_highlighted != item) /* If this item is not */
+ XawListHighlight(w, item); /* highlighted then do it */
+}
+
+/*
+ * Set specified arguments into widget
+ */
+/*ARGSUSED*/
+static Boolean
+XawListSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ ListWidget cl = (ListWidget)current;
+ ListWidget rl = (ListWidget)request;
+ ListWidget nl = (ListWidget)cnew;
+ Bool redraw = False;
+ XFontSetExtents *ext = XExtentsOfFontSet(nl->list.fontset);
+
+ /* If the request height/width is different, lock it. Unless its 0. If
+ neither new nor 0, leave it as it was. Not in R5 */
+ if (XtWidth(nl) != XtWidth(cl))
+ nl->list.freedoms |= WidthLock;
+ if (XtWidth(nl) == 0)
+ nl->list.freedoms &= ~WidthLock;
+
+ if (XtHeight(nl) != XtHeight(cl))
+ nl->list.freedoms |= HeightLock;
+ if (XtHeight(nl) == 0)
+ nl->list.freedoms &= ~HeightLock;
+
+ if (nl->list.longest != cl->list.longest)
+ nl->list.freedoms |= LongestLock;
+ if (nl->list.longest == 0)
+ nl->list.freedoms &= ~LongestLock;
+
+ if (cl->list.foreground != nl->list.foreground ||
+ cl->core.background_pixel != nl->core.background_pixel ||
+ cl->list.font != nl->list.font) {
+ XGCValues values;
+
+ XGetGCValues(XtDisplay(current), cl->list.graygc, GCTile, &values);
+ XmuReleaseStippledPixmap(XtScreen(current), values.tile);
+ XtReleaseGC(current, cl->list.graygc);
+ XtReleaseGC(current, cl->list.revgc);
+ XtReleaseGC(current, cl->list.normgc);
+ GetGCs(cnew);
+ redraw = True;
+ }
+
+ if (cl->list.font != nl->list.font && cl->simple.international == False)
+ nl->list.row_height = nl->list.font->max_bounds.ascent
+ + nl->list.font->max_bounds.descent
+ + nl->list.row_space;
+ else if (cl->list.fontset != nl->list.fontset
+ && cl->simple.international == True)
+ nl->list.row_height = ext->max_ink_extent.height + nl->list.row_space;
+
+ /* ...If the above two font(set) change checkers above both failed, check
+ if row_space was altered. If one of the above passed, row_height will
+ already have been re-calculated */
+ else if (cl->list.row_space != nl->list.row_space) {
+ if (cl->simple.international == True)
+ nl->list.row_height = ext->max_ink_extent.height + nl->list.row_space;
+ else
+ nl->list.row_height = nl->list.font->max_bounds.ascent
+ + nl->list.font->max_bounds.descent
+ + nl->list.row_space;
+ }
+
+ if (XtWidth(cl) != XtWidth(nl) || XtHeight(cl) != XtHeight(nl)
+ || cl->list.internal_width != nl->list.internal_width
+ || cl->list.internal_height != nl->list.internal_height
+ || cl->list.column_space != nl->list.column_space
+ || cl->list.row_space != nl->list.row_space
+ || cl->list.default_cols != nl->list.default_cols
+ || (cl->list.force_cols != nl->list.force_cols
+ && rl->list.force_cols != nl->list.ncols)
+ || cl->list.vertical_cols != nl->list.vertical_cols
+ || cl->list.longest != nl->list.longest
+ || cl->list.nitems != nl->list.nitems
+ || cl->list.font != nl->list.font
+ /* Equiv. fontsets might have different values, but the same fonts,
+ so the next comparison is sloppy but not dangerous */
+ || cl->list.fontset != nl->list.fontset
+ || cl->list.list != nl->list.list) {
+ CalculatedValues(cnew);
+ Layout(cnew, WidthFree(nl), HeightFree(nl),
+ &nl->core.width, &nl->core.height);
+ redraw = True;
+ }
+
+ if (cl->list.list != nl->list.list || cl->list.nitems != nl->list.nitems)
+ nl->list.is_highlighted = nl->list.highlight = NO_HIGHLIGHT;
+
+ if (cl->core.sensitive != nl->core.sensitive
+ || cl->core.ancestor_sensitive != nl->core.ancestor_sensitive) {
+ nl->list.highlight = NO_HIGHLIGHT;
+ redraw = True;
+ }
+
+ return (redraw);
+}
+
+static void
+XawListDestroy(Widget w)
+{
+ ListWidget lw = (ListWidget)w;
+ XGCValues values;
+
+ XGetGCValues(XtDisplay(w), lw->list.graygc, GCTile, &values);
+ XmuReleaseStippledPixmap(XtScreen(w), values.tile);
+ XtReleaseGC(w, lw->list.graygc);
+ XtReleaseGC(w, lw->list.revgc);
+ XtReleaseGC(w, lw->list.normgc);
+}
+
+/*
+ * Function:
+ * XawListChange
+ *
+ * Parameters:
+ * w - list widget
+ * list - new list
+ * nitems - number of items in the list
+ * longest - length (in Pixels) of the longest element in the list
+ * resize - if True the the list widget will try to resize itself
+ *
+ * Description:
+ * Changes the list being used and shown.
+ *
+ * Note:
+ * If nitems of longest are <= 0 then they will be calculated
+ * If nitems is <= 0 then the list needs to be NULL terminated
+ */
+void
+XawListChange(Widget w, char **list, int nitems, int longest,
+#if NeedWidePrototypes
+ int resize_it
+#else
+ Boolean resize_it
+#endif
+)
+{
+ ListWidget lw = (ListWidget)w;
+ Dimension new_width = XtWidth(w);
+ Dimension new_height = XtHeight(w);
+
+ lw->list.list = list;
+
+ if (nitems <= 0)
+ nitems = 0;
+ lw->list.nitems = nitems;
+ if (longest <= 0)
+ longest = 0;
+
+ /* If the user passes 0 meaning "calculate it", it must be free */
+ if (longest != 0)
+ lw->list.freedoms |= LongestLock;
+ else
+ lw->list.freedoms &= ~LongestLock;
+
+ if (resize_it)
+ lw->list.freedoms &= ~WidthLock & ~HeightLock;
+
+ lw->list.longest = longest;
+
+ CalculatedValues(w);
+
+ if (Layout(w, WidthFree(w), HeightFree(w), &new_width, &new_height))
+ ChangeSize(w, new_width, new_height);
+
+ lw->list.is_highlighted = lw->list.highlight = NO_HIGHLIGHT;
+ if (XtIsRealized(w))
+ XawListRedisplay(w, NULL, NULL);
+}
+
+void
+XawListUnhighlight(Widget w)
+{
+ ListWidget lw = (ListWidget)w;
+
+ lw->list.highlight = NO_HIGHLIGHT;
+ if (lw->list.is_highlighted != NO_HIGHLIGHT)
+ PaintItemName(w, lw->list.is_highlighted);
+}
+
+void
+XawListHighlight(Widget w, int item)
+{
+ ListWidget lw = (ListWidget)w;
+
+ if (XtIsSensitive(w)) {
+ lw->list.highlight = item;
+ if (lw->list.is_highlighted != NO_HIGHLIGHT)
+ PaintItemName(w, lw->list.is_highlighted);
+ PaintItemName(w, item);
+ }
+}
+
+/*
+ * Function:
+ * XawListShowCurrent
+ *
+ * Parameters:
+ * w - list widget
+ *
+ * Returns:
+ * Info about the currently highlighted object
+ */
+XawListReturnStruct *
+XawListShowCurrent(Widget w)
+{
+ ListWidget lw = (ListWidget)w;
+ XawListReturnStruct *ret_val;
+
+ ret_val = (XawListReturnStruct *)XtMalloc(sizeof(XawListReturnStruct));
+
+ ret_val->list_index = lw->list.highlight;
+ if (ret_val->list_index == XAW_LIST_NONE)
+ ret_val->string = "";
+ else
+ ret_val->string = lw->list.list[ret_val->list_index];
+
+ return (ret_val);
+}
diff --git a/libXaw/src/Makefile.am b/libXaw/src/Makefile.am
index 2aa99800c..52c171857 100644
--- a/libXaw/src/Makefile.am
+++ b/libXaw/src/Makefile.am
@@ -1,121 +1,143 @@
-lib_LTLIBRARIES =
-
-#
-# This doesn't appear to be used on any
-# current systems -- it requires SUNSHLIB and !SHAREDCODE,
-# but only sunLib.rules defines SUNSHLIB and that file also
-# always defines SHAREDCODE. Go figure
-#
-# SHAREDLIB_SOURCES = sharedlib.c
-
-COMMON_SOURCES = \
- Actions.c \
- AllWidgets.c \
- AsciiSink.c \
- AsciiSrc.c \
- AsciiText.c \
- Box.c \
- Command.c \
- Converters.c \
- Dialog.c \
- DisplayList.c \
- Form.c \
- Grip.c \
- Label.c \
- List.c \
- MenuButton.c \
- MultiSrc.c \
- MultiSink.c \
- OS.c \
- Paned.c \
- Panner.c \
- Pixmap.c \
- Porthole.c \
- Private.h \
- Repeater.c \
- Scrollbar.c \
- Simple.c \
- SimpleMenu.c \
- Sme.c \
- SmeBSB.c \
- SmeLine.c \
- StripChart.c \
- Text.c \
- TextSink.c \
- TextSrc.c \
- TextAction.c \
- TextPop.c \
- TextTr.c \
- Toggle.c \
- Tree.c \
- Vendor.c \
- Viewport.c \
- XawIm.c \
- XawInit.c \
- XawI18n.c \
- XawI18n.h
-
-COMMON_CFLAGS = \
- $(CWARNFLAGS) \
- -I${top_srcdir}/include \
- -I${top_srcdir}/include/X11/Xaw \
- -DPROJECT_ROOT=\"$(prefix)\"
-
-if BUILD_XAW6
-
-lib_LTLIBRARIES += libXaw6.la
-
-libXaw6_la_CFLAGS = \
- $(COMMON_CFLAGS) \
- -DOLDXAW \
- $(XAW6_CFLAGS)
-
-libXaw6_la_SOURCES = \
- $(COMMON_SOURCES)
-
-libXaw6_la_LDFLAGS = -version-info 6:1:0 -no-undefined
-libXaw6_la_LIBADD = $(XAW6_LIBS)
-
-if !PLATFORM_WIN32
-install-exec-hook::
-if PLATFORM_DARWIN
- -rm -f $(DESTDIR)$(libdir)/libXaw.6.@LIBEXT@
- (cd $(DESTDIR)$(libdir) && ln -s libXaw6.6.@LIBEXT@ libXaw.6.@LIBEXT@)
-else
- -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@.6
- (cd $(DESTDIR)$(libdir) && ln -s libXaw6.@LIBEXT@.6 libXaw.@LIBEXT@.6)
-endif
-endif
-
-endif
-
-if BUILD_XAW7
-
-lib_LTLIBRARIES += libXaw7.la
-
-libXaw7_la_CFLAGS = \
- $(COMMON_CFLAGS) \
- -DXAW7 \
- $(XAW7_CFLAGS)
-
-libXaw7_la_SOURCES = \
- $(COMMON_SOURCES) \
- Tip.c
-
-libXaw7_la_LDFLAGS = -version-info 7:0:0 -no-undefined
-libXaw7_la_LIBADD = $(XAW7_LIBS)
-
-if !PLATFORM_WIN32
-install-exec-hook::
-if PLATFORM_DARWIN
- -rm -f $(DESTDIR)$(libdir)/libXaw.7.@LIBEXT@
- (cd $(DESTDIR)$(libdir) && ln -s libXaw7.7.@LIBEXT@ libXaw.7.@LIBEXT@)
-else
- -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@.7
- (cd $(DESTDIR)$(libdir) && ln -s libXaw7.@LIBEXT@.7 libXaw.@LIBEXT@.7)
-endif
-endif
-
-endif
-
-EXTRA_DIST = sharedlib.c
+lib_LTLIBRARIES =
+
+#
+# This doesn't appear to be used on any
+# current systems -- it requires SUNSHLIB and !SHAREDCODE,
+# but only sunLib.rules defines SUNSHLIB and that file also
+# always defines SHAREDCODE. Go figure
+#
+# SHAREDLIB_SOURCES = sharedlib.c
+
+COMMON_SOURCES = \
+ Actions.c \
+ AllWidgets.c \
+ AsciiSink.c \
+ AsciiSrc.c \
+ AsciiText.c \
+ Box.c \
+ Command.c \
+ Converters.c \
+ Dialog.c \
+ DisplayList.c \
+ Form.c \
+ Grip.c \
+ Label.c \
+ List.c \
+ MenuButton.c \
+ MultiSrc.c \
+ MultiSink.c \
+ OS.c \
+ Paned.c \
+ Panner.c \
+ Pixmap.c \
+ Porthole.c \
+ Private.h \
+ Repeater.c \
+ Scrollbar.c \
+ Simple.c \
+ SimpleMenu.c \
+ Sme.c \
+ SmeBSB.c \
+ SmeLine.c \
+ StripChart.c \
+ Text.c \
+ TextSink.c \
+ TextSrc.c \
+ TextAction.c \
+ TextPop.c \
+ TextTr.c \
+ Toggle.c \
+ Tree.c \
+ Vendor.c \
+ Viewport.c \
+ XawIm.c \
+ XawInit.c \
+ XawI18n.c \
+ XawI18n.h
+
+COMMON_CFLAGS = \
+ $(CWARNFLAGS)
+
+COMMON_CPPFLAGS = \
+ -I${top_srcdir}/include \
+ -I${top_srcdir}/include/X11/Xaw \
+ -DPROJECT_ROOT=\"$(prefix)\"
+
+if BUILD_XAW6
+
+lib_LTLIBRARIES += libXaw6.la
+
+libXaw6_la_CPPFLAGS = \
+ $(COMMON_CPPFLAGS)
+
+libXaw6_la_CFLAGS = \
+ $(COMMON_CFLAGS) \
+ -DOLDXAW \
+ $(XAW6_CFLAGS)
+
+libXaw6_la_SOURCES = \
+ $(COMMON_SOURCES)
+
+libXaw6_la_LDFLAGS = -version-info 6:1:0 -no-undefined
+libXaw6_la_LIBADD = $(XAW6_LIBS)
+
+if !PLATFORM_WIN32
+install-exec-hook::
+if PLATFORM_DARWIN
+ -rm -f $(DESTDIR)$(libdir)/libXaw.6.@LIBEXT@
+ (cd $(DESTDIR)$(libdir) && ln -s libXaw6.6.@LIBEXT@ libXaw.6.@LIBEXT@)
+else
+ -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@.6
+ (cd $(DESTDIR)$(libdir) && ln -s libXaw6.@LIBEXT@.6 libXaw.@LIBEXT@.6)
+endif
+
+uninstall-local::
+if PLATFORM_DARWIN
+ -rm -f $(DESTDIR)$(libdir)/libXaw.6.@LIBEXT@
+else
+ -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@.6
+endif
+endif
+
+endif
+
+if BUILD_XAW7
+
+lib_LTLIBRARIES += libXaw7.la
+
+libXaw7_la_CPPFLAGS = \
+ $(COMMON_CPPFLAGS)
+
+libXaw7_la_CFLAGS = \
+ $(COMMON_CFLAGS) \
+ -DXAW7 \
+ $(XAW7_CFLAGS)
+
+libXaw7_la_SOURCES = \
+ $(COMMON_SOURCES) \
+ Tip.c
+
+libXaw7_la_LDFLAGS = -version-info 7:0:0 -no-undefined
+libXaw7_la_LIBADD = $(XAW7_LIBS)
+
+if !PLATFORM_WIN32
+install-exec-hook::
+if PLATFORM_DARWIN
+ -rm -f $(DESTDIR)$(libdir)/libXaw.7.@LIBEXT@
+ (cd $(DESTDIR)$(libdir) && ln -s libXaw7.7.@LIBEXT@ libXaw.7.@LIBEXT@)
+else
+ -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@.7
+ (cd $(DESTDIR)$(libdir) && ln -s libXaw7.@LIBEXT@.7 libXaw.@LIBEXT@.7)
+endif
+
+uninstall-local::
+if PLATFORM_DARWIN
+ -rm -f $(DESTDIR)$(libdir)/libXaw.7.@LIBEXT@
+else
+ -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@.7
+endif
+endif
+
+endif
+
+EXTRA_DIST = sharedlib.c
diff --git a/libXaw/src/Makefile.in b/libXaw/src/Makefile.in
deleted file mode 100644
index 07d3ff348..000000000
--- a/libXaw/src/Makefile.in
+++ /dev/null
@@ -1,1506 +0,0 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-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@
-@BUILD_XAW6_TRUE@am__append_1 = libXaw6.la
-@BUILD_XAW7_TRUE@am__append_2 = libXaw7.la
-subdir = src
-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 = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-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 = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(libdir)"
-LTLIBRARIES = $(lib_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-@BUILD_XAW6_TRUE@libXaw6_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__libXaw6_la_SOURCES_DIST = Actions.c AllWidgets.c AsciiSink.c \
- AsciiSrc.c AsciiText.c Box.c Command.c Converters.c Dialog.c \
- DisplayList.c Form.c Grip.c Label.c List.c MenuButton.c \
- MultiSrc.c MultiSink.c OS.c Paned.c Panner.c Pixmap.c \
- Porthole.c Private.h Repeater.c Scrollbar.c Simple.c \
- SimpleMenu.c Sme.c SmeBSB.c SmeLine.c StripChart.c Text.c \
- TextSink.c TextSrc.c TextAction.c TextPop.c TextTr.c Toggle.c \
- Tree.c Vendor.c Viewport.c XawIm.c XawInit.c XawI18n.c \
- XawI18n.h
-am__objects_1 = libXaw6_la-Actions.lo libXaw6_la-AllWidgets.lo \
- libXaw6_la-AsciiSink.lo libXaw6_la-AsciiSrc.lo \
- libXaw6_la-AsciiText.lo libXaw6_la-Box.lo \
- libXaw6_la-Command.lo libXaw6_la-Converters.lo \
- libXaw6_la-Dialog.lo libXaw6_la-DisplayList.lo \
- libXaw6_la-Form.lo libXaw6_la-Grip.lo libXaw6_la-Label.lo \
- libXaw6_la-List.lo libXaw6_la-MenuButton.lo \
- libXaw6_la-MultiSrc.lo libXaw6_la-MultiSink.lo \
- libXaw6_la-OS.lo libXaw6_la-Paned.lo libXaw6_la-Panner.lo \
- libXaw6_la-Pixmap.lo libXaw6_la-Porthole.lo \
- libXaw6_la-Repeater.lo libXaw6_la-Scrollbar.lo \
- libXaw6_la-Simple.lo libXaw6_la-SimpleMenu.lo \
- libXaw6_la-Sme.lo libXaw6_la-SmeBSB.lo libXaw6_la-SmeLine.lo \
- libXaw6_la-StripChart.lo libXaw6_la-Text.lo \
- libXaw6_la-TextSink.lo libXaw6_la-TextSrc.lo \
- libXaw6_la-TextAction.lo libXaw6_la-TextPop.lo \
- libXaw6_la-TextTr.lo libXaw6_la-Toggle.lo libXaw6_la-Tree.lo \
- libXaw6_la-Vendor.lo libXaw6_la-Viewport.lo \
- libXaw6_la-XawIm.lo libXaw6_la-XawInit.lo \
- libXaw6_la-XawI18n.lo
-@BUILD_XAW6_TRUE@am_libXaw6_la_OBJECTS = $(am__objects_1)
-libXaw6_la_OBJECTS = $(am_libXaw6_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
-am__v_lt_0 = --silent
-libXaw6_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libXaw6_la_CFLAGS) \
- $(CFLAGS) $(libXaw6_la_LDFLAGS) $(LDFLAGS) -o $@
-@BUILD_XAW6_TRUE@am_libXaw6_la_rpath = -rpath $(libdir)
-@BUILD_XAW7_TRUE@libXaw7_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__libXaw7_la_SOURCES_DIST = Actions.c AllWidgets.c AsciiSink.c \
- AsciiSrc.c AsciiText.c Box.c Command.c Converters.c Dialog.c \
- DisplayList.c Form.c Grip.c Label.c List.c MenuButton.c \
- MultiSrc.c MultiSink.c OS.c Paned.c Panner.c Pixmap.c \
- Porthole.c Private.h Repeater.c Scrollbar.c Simple.c \
- SimpleMenu.c Sme.c SmeBSB.c SmeLine.c StripChart.c Text.c \
- TextSink.c TextSrc.c TextAction.c TextPop.c TextTr.c Toggle.c \
- Tree.c Vendor.c Viewport.c XawIm.c XawInit.c XawI18n.c \
- XawI18n.h Tip.c
-am__objects_2 = libXaw7_la-Actions.lo libXaw7_la-AllWidgets.lo \
- libXaw7_la-AsciiSink.lo libXaw7_la-AsciiSrc.lo \
- libXaw7_la-AsciiText.lo libXaw7_la-Box.lo \
- libXaw7_la-Command.lo libXaw7_la-Converters.lo \
- libXaw7_la-Dialog.lo libXaw7_la-DisplayList.lo \
- libXaw7_la-Form.lo libXaw7_la-Grip.lo libXaw7_la-Label.lo \
- libXaw7_la-List.lo libXaw7_la-MenuButton.lo \
- libXaw7_la-MultiSrc.lo libXaw7_la-MultiSink.lo \
- libXaw7_la-OS.lo libXaw7_la-Paned.lo libXaw7_la-Panner.lo \
- libXaw7_la-Pixmap.lo libXaw7_la-Porthole.lo \
- libXaw7_la-Repeater.lo libXaw7_la-Scrollbar.lo \
- libXaw7_la-Simple.lo libXaw7_la-SimpleMenu.lo \
- libXaw7_la-Sme.lo libXaw7_la-SmeBSB.lo libXaw7_la-SmeLine.lo \
- libXaw7_la-StripChart.lo libXaw7_la-Text.lo \
- libXaw7_la-TextSink.lo libXaw7_la-TextSrc.lo \
- libXaw7_la-TextAction.lo libXaw7_la-TextPop.lo \
- libXaw7_la-TextTr.lo libXaw7_la-Toggle.lo libXaw7_la-Tree.lo \
- libXaw7_la-Vendor.lo libXaw7_la-Viewport.lo \
- libXaw7_la-XawIm.lo libXaw7_la-XawInit.lo \
- libXaw7_la-XawI18n.lo
-@BUILD_XAW7_TRUE@am_libXaw7_la_OBJECTS = $(am__objects_2) \
-@BUILD_XAW7_TRUE@ libXaw7_la-Tip.lo
-libXaw7_la_OBJECTS = $(am_libXaw7_la_OBJECTS)
-libXaw7_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libXaw7_la_CFLAGS) \
- $(CFLAGS) $(libXaw7_la_LDFLAGS) $(LDFLAGS) -o $@
-@BUILD_XAW7_TRUE@am_libXaw7_la_rpath = -rpath $(libdir)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(libXaw6_la_SOURCES) $(libXaw7_la_SOURCES)
-DIST_SOURCES = $(am__libXaw6_la_SOURCES_DIST) \
- $(am__libXaw7_la_SOURCES_DIST)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
-ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APP_MAN_DIR = @APP_MAN_DIR@
-APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CHANGELOG_CMD = @CHANGELOG_CMD@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CWARNFLAGS = @CWARNFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
-DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
-DSYMUTIL = @DSYMUTIL@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-FILE_MAN_DIR = @FILE_MAN_DIR@
-FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
-GREP = @GREP@
-GROFF = @GROFF@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBEXT = @LIBEXT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_MAN_DIR = @LIB_MAN_DIR@
-LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MISC_MAN_DIR = @MISC_MAN_DIR@
-MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
-MKDIR_P = @MKDIR_P@
-NMEDIT = @NMEDIT@
-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@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XAW6_CFLAGS = @XAW6_CFLAGS@
-XAW6_LIBS = @XAW6_LIBS@
-XAW7_CFLAGS = @XAW7_CFLAGS@
-XAW7_LIBS = @XAW7_LIBS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-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@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-distcleancheck_listfiles = @distcleancheck_listfiles@
-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@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-lib_LTLIBRARIES = $(am__append_1) $(am__append_2)
-
-#
-# This doesn't appear to be used on any
-# current systems -- it requires SUNSHLIB and !SHAREDCODE,
-# but only sunLib.rules defines SUNSHLIB and that file also
-# always defines SHAREDCODE. Go figure
-#
-# SHAREDLIB_SOURCES = sharedlib.c
-COMMON_SOURCES = \
- Actions.c \
- AllWidgets.c \
- AsciiSink.c \
- AsciiSrc.c \
- AsciiText.c \
- Box.c \
- Command.c \
- Converters.c \
- Dialog.c \
- DisplayList.c \
- Form.c \
- Grip.c \
- Label.c \
- List.c \
- MenuButton.c \
- MultiSrc.c \
- MultiSink.c \
- OS.c \
- Paned.c \
- Panner.c \
- Pixmap.c \
- Porthole.c \
- Private.h \
- Repeater.c \
- Scrollbar.c \
- Simple.c \
- SimpleMenu.c \
- Sme.c \
- SmeBSB.c \
- SmeLine.c \
- StripChart.c \
- Text.c \
- TextSink.c \
- TextSrc.c \
- TextAction.c \
- TextPop.c \
- TextTr.c \
- Toggle.c \
- Tree.c \
- Vendor.c \
- Viewport.c \
- XawIm.c \
- XawInit.c \
- XawI18n.c \
- XawI18n.h
-
-COMMON_CFLAGS = \
- $(CWARNFLAGS) \
- -I${top_srcdir}/include \
- -I${top_srcdir}/include/X11/Xaw \
- -DPROJECT_ROOT=\"$(prefix)\"
-
-@BUILD_XAW6_TRUE@libXaw6_la_CFLAGS = \
-@BUILD_XAW6_TRUE@ $(COMMON_CFLAGS) \
-@BUILD_XAW6_TRUE@ -DOLDXAW \
-@BUILD_XAW6_TRUE@ $(XAW6_CFLAGS)
-
-@BUILD_XAW6_TRUE@libXaw6_la_SOURCES = \
-@BUILD_XAW6_TRUE@ $(COMMON_SOURCES)
-
-@BUILD_XAW6_TRUE@libXaw6_la_LDFLAGS = -version-info 6:1:0 -no-undefined
-@BUILD_XAW6_TRUE@libXaw6_la_LIBADD = $(XAW6_LIBS)
-@BUILD_XAW7_TRUE@libXaw7_la_CFLAGS = \
-@BUILD_XAW7_TRUE@ $(COMMON_CFLAGS) \
-@BUILD_XAW7_TRUE@ -DXAW7 \
-@BUILD_XAW7_TRUE@ $(XAW7_CFLAGS)
-
-@BUILD_XAW7_TRUE@libXaw7_la_SOURCES = \
-@BUILD_XAW7_TRUE@ $(COMMON_SOURCES) \
-@BUILD_XAW7_TRUE@ Tip.c
-
-@BUILD_XAW7_TRUE@libXaw7_la_LDFLAGS = -version-info 7:0:0 -no-undefined
-@BUILD_XAW7_TRUE@libXaw7_la_LIBADD = $(XAW7_LIBS)
-EXTRA_DIST = sharedlib.c
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/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: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
- @$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
- @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
- list2=; for p in $$list; do \
- if test -f $$p; then \
- list2="$$list2 $$p"; \
- else :; fi; \
- done; \
- test -z "$$list2" || { \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
- }
-
-uninstall-libLTLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
- for p in $$list; do \
- $(am__strip_dir) \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
- done
-
-clean-libLTLIBRARIES:
- -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
- test "$$dir" != "$$p" || dir=.; \
- echo "rm -f \"$${dir}/so_locations\""; \
- rm -f "$${dir}/so_locations"; \
- done
-libXaw6.la: $(libXaw6_la_OBJECTS) $(libXaw6_la_DEPENDENCIES)
- $(AM_V_CCLD)$(libXaw6_la_LINK) $(am_libXaw6_la_rpath) $(libXaw6_la_OBJECTS) $(libXaw6_la_LIBADD) $(LIBS)
-libXaw7.la: $(libXaw7_la_OBJECTS) $(libXaw7_la_DEPENDENCIES)
- $(AM_V_CCLD)$(libXaw7_la_LINK) $(am_libXaw7_la_rpath) $(libXaw7_la_OBJECTS) $(libXaw7_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Actions.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-AllWidgets.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-AsciiSink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-AsciiSrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-AsciiText.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Box.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Command.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Converters.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Dialog.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-DisplayList.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Form.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Grip.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Label.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-List.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-MenuButton.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-MultiSink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-MultiSrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-OS.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Paned.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Panner.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Pixmap.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Porthole.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Repeater.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Scrollbar.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Simple.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-SimpleMenu.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Sme.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-SmeBSB.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-SmeLine.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-StripChart.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Text.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-TextAction.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-TextPop.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-TextSink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-TextSrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-TextTr.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Toggle.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Tree.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Vendor.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-Viewport.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-XawI18n.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-XawIm.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw6_la-XawInit.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Actions.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-AllWidgets.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-AsciiSink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-AsciiSrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-AsciiText.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Box.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Command.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Converters.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Dialog.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-DisplayList.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Form.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Grip.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Label.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-List.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-MenuButton.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-MultiSink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-MultiSrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-OS.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Paned.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Panner.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Pixmap.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Porthole.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Repeater.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Scrollbar.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Simple.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-SimpleMenu.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Sme.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-SmeBSB.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-SmeLine.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-StripChart.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Text.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-TextAction.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-TextPop.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-TextSink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-TextSrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-TextTr.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Tip.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Toggle.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Tree.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Vendor.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-Viewport.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-XawI18n.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-XawIm.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libXaw7_la-XawInit.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-
-libXaw6_la-Actions.lo: Actions.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Actions.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Actions.Tpo -c -o libXaw6_la-Actions.lo `test -f 'Actions.c' || echo '$(srcdir)/'`Actions.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Actions.Tpo $(DEPDIR)/libXaw6_la-Actions.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Actions.c' object='libXaw6_la-Actions.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Actions.lo `test -f 'Actions.c' || echo '$(srcdir)/'`Actions.c
-
-libXaw6_la-AllWidgets.lo: AllWidgets.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-AllWidgets.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-AllWidgets.Tpo -c -o libXaw6_la-AllWidgets.lo `test -f 'AllWidgets.c' || echo '$(srcdir)/'`AllWidgets.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-AllWidgets.Tpo $(DEPDIR)/libXaw6_la-AllWidgets.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='AllWidgets.c' object='libXaw6_la-AllWidgets.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-AllWidgets.lo `test -f 'AllWidgets.c' || echo '$(srcdir)/'`AllWidgets.c
-
-libXaw6_la-AsciiSink.lo: AsciiSink.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-AsciiSink.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-AsciiSink.Tpo -c -o libXaw6_la-AsciiSink.lo `test -f 'AsciiSink.c' || echo '$(srcdir)/'`AsciiSink.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-AsciiSink.Tpo $(DEPDIR)/libXaw6_la-AsciiSink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='AsciiSink.c' object='libXaw6_la-AsciiSink.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-AsciiSink.lo `test -f 'AsciiSink.c' || echo '$(srcdir)/'`AsciiSink.c
-
-libXaw6_la-AsciiSrc.lo: AsciiSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-AsciiSrc.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-AsciiSrc.Tpo -c -o libXaw6_la-AsciiSrc.lo `test -f 'AsciiSrc.c' || echo '$(srcdir)/'`AsciiSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-AsciiSrc.Tpo $(DEPDIR)/libXaw6_la-AsciiSrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='AsciiSrc.c' object='libXaw6_la-AsciiSrc.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-AsciiSrc.lo `test -f 'AsciiSrc.c' || echo '$(srcdir)/'`AsciiSrc.c
-
-libXaw6_la-AsciiText.lo: AsciiText.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-AsciiText.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-AsciiText.Tpo -c -o libXaw6_la-AsciiText.lo `test -f 'AsciiText.c' || echo '$(srcdir)/'`AsciiText.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-AsciiText.Tpo $(DEPDIR)/libXaw6_la-AsciiText.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='AsciiText.c' object='libXaw6_la-AsciiText.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-AsciiText.lo `test -f 'AsciiText.c' || echo '$(srcdir)/'`AsciiText.c
-
-libXaw6_la-Box.lo: Box.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Box.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Box.Tpo -c -o libXaw6_la-Box.lo `test -f 'Box.c' || echo '$(srcdir)/'`Box.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Box.Tpo $(DEPDIR)/libXaw6_la-Box.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Box.c' object='libXaw6_la-Box.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Box.lo `test -f 'Box.c' || echo '$(srcdir)/'`Box.c
-
-libXaw6_la-Command.lo: Command.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Command.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Command.Tpo -c -o libXaw6_la-Command.lo `test -f 'Command.c' || echo '$(srcdir)/'`Command.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Command.Tpo $(DEPDIR)/libXaw6_la-Command.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Command.c' object='libXaw6_la-Command.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Command.lo `test -f 'Command.c' || echo '$(srcdir)/'`Command.c
-
-libXaw6_la-Converters.lo: Converters.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Converters.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Converters.Tpo -c -o libXaw6_la-Converters.lo `test -f 'Converters.c' || echo '$(srcdir)/'`Converters.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Converters.Tpo $(DEPDIR)/libXaw6_la-Converters.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Converters.c' object='libXaw6_la-Converters.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Converters.lo `test -f 'Converters.c' || echo '$(srcdir)/'`Converters.c
-
-libXaw6_la-Dialog.lo: Dialog.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Dialog.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Dialog.Tpo -c -o libXaw6_la-Dialog.lo `test -f 'Dialog.c' || echo '$(srcdir)/'`Dialog.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Dialog.Tpo $(DEPDIR)/libXaw6_la-Dialog.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Dialog.c' object='libXaw6_la-Dialog.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Dialog.lo `test -f 'Dialog.c' || echo '$(srcdir)/'`Dialog.c
-
-libXaw6_la-DisplayList.lo: DisplayList.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-DisplayList.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-DisplayList.Tpo -c -o libXaw6_la-DisplayList.lo `test -f 'DisplayList.c' || echo '$(srcdir)/'`DisplayList.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-DisplayList.Tpo $(DEPDIR)/libXaw6_la-DisplayList.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='DisplayList.c' object='libXaw6_la-DisplayList.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-DisplayList.lo `test -f 'DisplayList.c' || echo '$(srcdir)/'`DisplayList.c
-
-libXaw6_la-Form.lo: Form.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Form.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Form.Tpo -c -o libXaw6_la-Form.lo `test -f 'Form.c' || echo '$(srcdir)/'`Form.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Form.Tpo $(DEPDIR)/libXaw6_la-Form.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Form.c' object='libXaw6_la-Form.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Form.lo `test -f 'Form.c' || echo '$(srcdir)/'`Form.c
-
-libXaw6_la-Grip.lo: Grip.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Grip.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Grip.Tpo -c -o libXaw6_la-Grip.lo `test -f 'Grip.c' || echo '$(srcdir)/'`Grip.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Grip.Tpo $(DEPDIR)/libXaw6_la-Grip.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Grip.c' object='libXaw6_la-Grip.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Grip.lo `test -f 'Grip.c' || echo '$(srcdir)/'`Grip.c
-
-libXaw6_la-Label.lo: Label.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Label.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Label.Tpo -c -o libXaw6_la-Label.lo `test -f 'Label.c' || echo '$(srcdir)/'`Label.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Label.Tpo $(DEPDIR)/libXaw6_la-Label.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Label.c' object='libXaw6_la-Label.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Label.lo `test -f 'Label.c' || echo '$(srcdir)/'`Label.c
-
-libXaw6_la-List.lo: List.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-List.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-List.Tpo -c -o libXaw6_la-List.lo `test -f 'List.c' || echo '$(srcdir)/'`List.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-List.Tpo $(DEPDIR)/libXaw6_la-List.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='List.c' object='libXaw6_la-List.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-List.lo `test -f 'List.c' || echo '$(srcdir)/'`List.c
-
-libXaw6_la-MenuButton.lo: MenuButton.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-MenuButton.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-MenuButton.Tpo -c -o libXaw6_la-MenuButton.lo `test -f 'MenuButton.c' || echo '$(srcdir)/'`MenuButton.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-MenuButton.Tpo $(DEPDIR)/libXaw6_la-MenuButton.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='MenuButton.c' object='libXaw6_la-MenuButton.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-MenuButton.lo `test -f 'MenuButton.c' || echo '$(srcdir)/'`MenuButton.c
-
-libXaw6_la-MultiSrc.lo: MultiSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-MultiSrc.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-MultiSrc.Tpo -c -o libXaw6_la-MultiSrc.lo `test -f 'MultiSrc.c' || echo '$(srcdir)/'`MultiSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-MultiSrc.Tpo $(DEPDIR)/libXaw6_la-MultiSrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='MultiSrc.c' object='libXaw6_la-MultiSrc.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-MultiSrc.lo `test -f 'MultiSrc.c' || echo '$(srcdir)/'`MultiSrc.c
-
-libXaw6_la-MultiSink.lo: MultiSink.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-MultiSink.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-MultiSink.Tpo -c -o libXaw6_la-MultiSink.lo `test -f 'MultiSink.c' || echo '$(srcdir)/'`MultiSink.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-MultiSink.Tpo $(DEPDIR)/libXaw6_la-MultiSink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='MultiSink.c' object='libXaw6_la-MultiSink.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-MultiSink.lo `test -f 'MultiSink.c' || echo '$(srcdir)/'`MultiSink.c
-
-libXaw6_la-OS.lo: OS.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-OS.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-OS.Tpo -c -o libXaw6_la-OS.lo `test -f 'OS.c' || echo '$(srcdir)/'`OS.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-OS.Tpo $(DEPDIR)/libXaw6_la-OS.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OS.c' object='libXaw6_la-OS.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-OS.lo `test -f 'OS.c' || echo '$(srcdir)/'`OS.c
-
-libXaw6_la-Paned.lo: Paned.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Paned.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Paned.Tpo -c -o libXaw6_la-Paned.lo `test -f 'Paned.c' || echo '$(srcdir)/'`Paned.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Paned.Tpo $(DEPDIR)/libXaw6_la-Paned.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Paned.c' object='libXaw6_la-Paned.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Paned.lo `test -f 'Paned.c' || echo '$(srcdir)/'`Paned.c
-
-libXaw6_la-Panner.lo: Panner.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Panner.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Panner.Tpo -c -o libXaw6_la-Panner.lo `test -f 'Panner.c' || echo '$(srcdir)/'`Panner.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Panner.Tpo $(DEPDIR)/libXaw6_la-Panner.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Panner.c' object='libXaw6_la-Panner.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Panner.lo `test -f 'Panner.c' || echo '$(srcdir)/'`Panner.c
-
-libXaw6_la-Pixmap.lo: Pixmap.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Pixmap.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Pixmap.Tpo -c -o libXaw6_la-Pixmap.lo `test -f 'Pixmap.c' || echo '$(srcdir)/'`Pixmap.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Pixmap.Tpo $(DEPDIR)/libXaw6_la-Pixmap.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Pixmap.c' object='libXaw6_la-Pixmap.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Pixmap.lo `test -f 'Pixmap.c' || echo '$(srcdir)/'`Pixmap.c
-
-libXaw6_la-Porthole.lo: Porthole.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Porthole.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Porthole.Tpo -c -o libXaw6_la-Porthole.lo `test -f 'Porthole.c' || echo '$(srcdir)/'`Porthole.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Porthole.Tpo $(DEPDIR)/libXaw6_la-Porthole.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Porthole.c' object='libXaw6_la-Porthole.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Porthole.lo `test -f 'Porthole.c' || echo '$(srcdir)/'`Porthole.c
-
-libXaw6_la-Repeater.lo: Repeater.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Repeater.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Repeater.Tpo -c -o libXaw6_la-Repeater.lo `test -f 'Repeater.c' || echo '$(srcdir)/'`Repeater.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Repeater.Tpo $(DEPDIR)/libXaw6_la-Repeater.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Repeater.c' object='libXaw6_la-Repeater.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Repeater.lo `test -f 'Repeater.c' || echo '$(srcdir)/'`Repeater.c
-
-libXaw6_la-Scrollbar.lo: Scrollbar.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Scrollbar.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Scrollbar.Tpo -c -o libXaw6_la-Scrollbar.lo `test -f 'Scrollbar.c' || echo '$(srcdir)/'`Scrollbar.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Scrollbar.Tpo $(DEPDIR)/libXaw6_la-Scrollbar.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Scrollbar.c' object='libXaw6_la-Scrollbar.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Scrollbar.lo `test -f 'Scrollbar.c' || echo '$(srcdir)/'`Scrollbar.c
-
-libXaw6_la-Simple.lo: Simple.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Simple.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Simple.Tpo -c -o libXaw6_la-Simple.lo `test -f 'Simple.c' || echo '$(srcdir)/'`Simple.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Simple.Tpo $(DEPDIR)/libXaw6_la-Simple.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Simple.c' object='libXaw6_la-Simple.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Simple.lo `test -f 'Simple.c' || echo '$(srcdir)/'`Simple.c
-
-libXaw6_la-SimpleMenu.lo: SimpleMenu.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-SimpleMenu.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-SimpleMenu.Tpo -c -o libXaw6_la-SimpleMenu.lo `test -f 'SimpleMenu.c' || echo '$(srcdir)/'`SimpleMenu.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-SimpleMenu.Tpo $(DEPDIR)/libXaw6_la-SimpleMenu.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='SimpleMenu.c' object='libXaw6_la-SimpleMenu.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-SimpleMenu.lo `test -f 'SimpleMenu.c' || echo '$(srcdir)/'`SimpleMenu.c
-
-libXaw6_la-Sme.lo: Sme.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Sme.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Sme.Tpo -c -o libXaw6_la-Sme.lo `test -f 'Sme.c' || echo '$(srcdir)/'`Sme.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Sme.Tpo $(DEPDIR)/libXaw6_la-Sme.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Sme.c' object='libXaw6_la-Sme.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Sme.lo `test -f 'Sme.c' || echo '$(srcdir)/'`Sme.c
-
-libXaw6_la-SmeBSB.lo: SmeBSB.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-SmeBSB.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-SmeBSB.Tpo -c -o libXaw6_la-SmeBSB.lo `test -f 'SmeBSB.c' || echo '$(srcdir)/'`SmeBSB.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-SmeBSB.Tpo $(DEPDIR)/libXaw6_la-SmeBSB.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='SmeBSB.c' object='libXaw6_la-SmeBSB.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-SmeBSB.lo `test -f 'SmeBSB.c' || echo '$(srcdir)/'`SmeBSB.c
-
-libXaw6_la-SmeLine.lo: SmeLine.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-SmeLine.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-SmeLine.Tpo -c -o libXaw6_la-SmeLine.lo `test -f 'SmeLine.c' || echo '$(srcdir)/'`SmeLine.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-SmeLine.Tpo $(DEPDIR)/libXaw6_la-SmeLine.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='SmeLine.c' object='libXaw6_la-SmeLine.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-SmeLine.lo `test -f 'SmeLine.c' || echo '$(srcdir)/'`SmeLine.c
-
-libXaw6_la-StripChart.lo: StripChart.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-StripChart.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-StripChart.Tpo -c -o libXaw6_la-StripChart.lo `test -f 'StripChart.c' || echo '$(srcdir)/'`StripChart.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-StripChart.Tpo $(DEPDIR)/libXaw6_la-StripChart.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='StripChart.c' object='libXaw6_la-StripChart.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-StripChart.lo `test -f 'StripChart.c' || echo '$(srcdir)/'`StripChart.c
-
-libXaw6_la-Text.lo: Text.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Text.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Text.Tpo -c -o libXaw6_la-Text.lo `test -f 'Text.c' || echo '$(srcdir)/'`Text.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Text.Tpo $(DEPDIR)/libXaw6_la-Text.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Text.c' object='libXaw6_la-Text.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Text.lo `test -f 'Text.c' || echo '$(srcdir)/'`Text.c
-
-libXaw6_la-TextSink.lo: TextSink.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-TextSink.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-TextSink.Tpo -c -o libXaw6_la-TextSink.lo `test -f 'TextSink.c' || echo '$(srcdir)/'`TextSink.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-TextSink.Tpo $(DEPDIR)/libXaw6_la-TextSink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextSink.c' object='libXaw6_la-TextSink.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-TextSink.lo `test -f 'TextSink.c' || echo '$(srcdir)/'`TextSink.c
-
-libXaw6_la-TextSrc.lo: TextSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-TextSrc.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-TextSrc.Tpo -c -o libXaw6_la-TextSrc.lo `test -f 'TextSrc.c' || echo '$(srcdir)/'`TextSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-TextSrc.Tpo $(DEPDIR)/libXaw6_la-TextSrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextSrc.c' object='libXaw6_la-TextSrc.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-TextSrc.lo `test -f 'TextSrc.c' || echo '$(srcdir)/'`TextSrc.c
-
-libXaw6_la-TextAction.lo: TextAction.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-TextAction.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-TextAction.Tpo -c -o libXaw6_la-TextAction.lo `test -f 'TextAction.c' || echo '$(srcdir)/'`TextAction.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-TextAction.Tpo $(DEPDIR)/libXaw6_la-TextAction.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextAction.c' object='libXaw6_la-TextAction.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-TextAction.lo `test -f 'TextAction.c' || echo '$(srcdir)/'`TextAction.c
-
-libXaw6_la-TextPop.lo: TextPop.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-TextPop.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-TextPop.Tpo -c -o libXaw6_la-TextPop.lo `test -f 'TextPop.c' || echo '$(srcdir)/'`TextPop.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-TextPop.Tpo $(DEPDIR)/libXaw6_la-TextPop.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextPop.c' object='libXaw6_la-TextPop.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-TextPop.lo `test -f 'TextPop.c' || echo '$(srcdir)/'`TextPop.c
-
-libXaw6_la-TextTr.lo: TextTr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-TextTr.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-TextTr.Tpo -c -o libXaw6_la-TextTr.lo `test -f 'TextTr.c' || echo '$(srcdir)/'`TextTr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-TextTr.Tpo $(DEPDIR)/libXaw6_la-TextTr.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextTr.c' object='libXaw6_la-TextTr.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-TextTr.lo `test -f 'TextTr.c' || echo '$(srcdir)/'`TextTr.c
-
-libXaw6_la-Toggle.lo: Toggle.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Toggle.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Toggle.Tpo -c -o libXaw6_la-Toggle.lo `test -f 'Toggle.c' || echo '$(srcdir)/'`Toggle.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Toggle.Tpo $(DEPDIR)/libXaw6_la-Toggle.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Toggle.c' object='libXaw6_la-Toggle.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Toggle.lo `test -f 'Toggle.c' || echo '$(srcdir)/'`Toggle.c
-
-libXaw6_la-Tree.lo: Tree.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Tree.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Tree.Tpo -c -o libXaw6_la-Tree.lo `test -f 'Tree.c' || echo '$(srcdir)/'`Tree.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Tree.Tpo $(DEPDIR)/libXaw6_la-Tree.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Tree.c' object='libXaw6_la-Tree.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Tree.lo `test -f 'Tree.c' || echo '$(srcdir)/'`Tree.c
-
-libXaw6_la-Vendor.lo: Vendor.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Vendor.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Vendor.Tpo -c -o libXaw6_la-Vendor.lo `test -f 'Vendor.c' || echo '$(srcdir)/'`Vendor.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Vendor.Tpo $(DEPDIR)/libXaw6_la-Vendor.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Vendor.c' object='libXaw6_la-Vendor.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Vendor.lo `test -f 'Vendor.c' || echo '$(srcdir)/'`Vendor.c
-
-libXaw6_la-Viewport.lo: Viewport.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-Viewport.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-Viewport.Tpo -c -o libXaw6_la-Viewport.lo `test -f 'Viewport.c' || echo '$(srcdir)/'`Viewport.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-Viewport.Tpo $(DEPDIR)/libXaw6_la-Viewport.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Viewport.c' object='libXaw6_la-Viewport.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-Viewport.lo `test -f 'Viewport.c' || echo '$(srcdir)/'`Viewport.c
-
-libXaw6_la-XawIm.lo: XawIm.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-XawIm.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-XawIm.Tpo -c -o libXaw6_la-XawIm.lo `test -f 'XawIm.c' || echo '$(srcdir)/'`XawIm.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-XawIm.Tpo $(DEPDIR)/libXaw6_la-XawIm.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='XawIm.c' object='libXaw6_la-XawIm.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-XawIm.lo `test -f 'XawIm.c' || echo '$(srcdir)/'`XawIm.c
-
-libXaw6_la-XawInit.lo: XawInit.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-XawInit.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-XawInit.Tpo -c -o libXaw6_la-XawInit.lo `test -f 'XawInit.c' || echo '$(srcdir)/'`XawInit.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-XawInit.Tpo $(DEPDIR)/libXaw6_la-XawInit.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='XawInit.c' object='libXaw6_la-XawInit.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-XawInit.lo `test -f 'XawInit.c' || echo '$(srcdir)/'`XawInit.c
-
-libXaw6_la-XawI18n.lo: XawI18n.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -MT libXaw6_la-XawI18n.lo -MD -MP -MF $(DEPDIR)/libXaw6_la-XawI18n.Tpo -c -o libXaw6_la-XawI18n.lo `test -f 'XawI18n.c' || echo '$(srcdir)/'`XawI18n.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw6_la-XawI18n.Tpo $(DEPDIR)/libXaw6_la-XawI18n.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='XawI18n.c' object='libXaw6_la-XawI18n.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw6_la_CFLAGS) $(CFLAGS) -c -o libXaw6_la-XawI18n.lo `test -f 'XawI18n.c' || echo '$(srcdir)/'`XawI18n.c
-
-libXaw7_la-Actions.lo: Actions.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Actions.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Actions.Tpo -c -o libXaw7_la-Actions.lo `test -f 'Actions.c' || echo '$(srcdir)/'`Actions.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Actions.Tpo $(DEPDIR)/libXaw7_la-Actions.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Actions.c' object='libXaw7_la-Actions.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Actions.lo `test -f 'Actions.c' || echo '$(srcdir)/'`Actions.c
-
-libXaw7_la-AllWidgets.lo: AllWidgets.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-AllWidgets.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-AllWidgets.Tpo -c -o libXaw7_la-AllWidgets.lo `test -f 'AllWidgets.c' || echo '$(srcdir)/'`AllWidgets.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-AllWidgets.Tpo $(DEPDIR)/libXaw7_la-AllWidgets.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='AllWidgets.c' object='libXaw7_la-AllWidgets.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-AllWidgets.lo `test -f 'AllWidgets.c' || echo '$(srcdir)/'`AllWidgets.c
-
-libXaw7_la-AsciiSink.lo: AsciiSink.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-AsciiSink.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-AsciiSink.Tpo -c -o libXaw7_la-AsciiSink.lo `test -f 'AsciiSink.c' || echo '$(srcdir)/'`AsciiSink.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-AsciiSink.Tpo $(DEPDIR)/libXaw7_la-AsciiSink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='AsciiSink.c' object='libXaw7_la-AsciiSink.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-AsciiSink.lo `test -f 'AsciiSink.c' || echo '$(srcdir)/'`AsciiSink.c
-
-libXaw7_la-AsciiSrc.lo: AsciiSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-AsciiSrc.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-AsciiSrc.Tpo -c -o libXaw7_la-AsciiSrc.lo `test -f 'AsciiSrc.c' || echo '$(srcdir)/'`AsciiSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-AsciiSrc.Tpo $(DEPDIR)/libXaw7_la-AsciiSrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='AsciiSrc.c' object='libXaw7_la-AsciiSrc.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-AsciiSrc.lo `test -f 'AsciiSrc.c' || echo '$(srcdir)/'`AsciiSrc.c
-
-libXaw7_la-AsciiText.lo: AsciiText.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-AsciiText.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-AsciiText.Tpo -c -o libXaw7_la-AsciiText.lo `test -f 'AsciiText.c' || echo '$(srcdir)/'`AsciiText.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-AsciiText.Tpo $(DEPDIR)/libXaw7_la-AsciiText.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='AsciiText.c' object='libXaw7_la-AsciiText.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-AsciiText.lo `test -f 'AsciiText.c' || echo '$(srcdir)/'`AsciiText.c
-
-libXaw7_la-Box.lo: Box.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Box.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Box.Tpo -c -o libXaw7_la-Box.lo `test -f 'Box.c' || echo '$(srcdir)/'`Box.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Box.Tpo $(DEPDIR)/libXaw7_la-Box.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Box.c' object='libXaw7_la-Box.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Box.lo `test -f 'Box.c' || echo '$(srcdir)/'`Box.c
-
-libXaw7_la-Command.lo: Command.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Command.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Command.Tpo -c -o libXaw7_la-Command.lo `test -f 'Command.c' || echo '$(srcdir)/'`Command.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Command.Tpo $(DEPDIR)/libXaw7_la-Command.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Command.c' object='libXaw7_la-Command.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Command.lo `test -f 'Command.c' || echo '$(srcdir)/'`Command.c
-
-libXaw7_la-Converters.lo: Converters.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Converters.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Converters.Tpo -c -o libXaw7_la-Converters.lo `test -f 'Converters.c' || echo '$(srcdir)/'`Converters.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Converters.Tpo $(DEPDIR)/libXaw7_la-Converters.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Converters.c' object='libXaw7_la-Converters.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Converters.lo `test -f 'Converters.c' || echo '$(srcdir)/'`Converters.c
-
-libXaw7_la-Dialog.lo: Dialog.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Dialog.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Dialog.Tpo -c -o libXaw7_la-Dialog.lo `test -f 'Dialog.c' || echo '$(srcdir)/'`Dialog.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Dialog.Tpo $(DEPDIR)/libXaw7_la-Dialog.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Dialog.c' object='libXaw7_la-Dialog.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Dialog.lo `test -f 'Dialog.c' || echo '$(srcdir)/'`Dialog.c
-
-libXaw7_la-DisplayList.lo: DisplayList.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-DisplayList.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-DisplayList.Tpo -c -o libXaw7_la-DisplayList.lo `test -f 'DisplayList.c' || echo '$(srcdir)/'`DisplayList.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-DisplayList.Tpo $(DEPDIR)/libXaw7_la-DisplayList.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='DisplayList.c' object='libXaw7_la-DisplayList.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-DisplayList.lo `test -f 'DisplayList.c' || echo '$(srcdir)/'`DisplayList.c
-
-libXaw7_la-Form.lo: Form.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Form.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Form.Tpo -c -o libXaw7_la-Form.lo `test -f 'Form.c' || echo '$(srcdir)/'`Form.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Form.Tpo $(DEPDIR)/libXaw7_la-Form.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Form.c' object='libXaw7_la-Form.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Form.lo `test -f 'Form.c' || echo '$(srcdir)/'`Form.c
-
-libXaw7_la-Grip.lo: Grip.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Grip.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Grip.Tpo -c -o libXaw7_la-Grip.lo `test -f 'Grip.c' || echo '$(srcdir)/'`Grip.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Grip.Tpo $(DEPDIR)/libXaw7_la-Grip.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Grip.c' object='libXaw7_la-Grip.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Grip.lo `test -f 'Grip.c' || echo '$(srcdir)/'`Grip.c
-
-libXaw7_la-Label.lo: Label.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Label.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Label.Tpo -c -o libXaw7_la-Label.lo `test -f 'Label.c' || echo '$(srcdir)/'`Label.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Label.Tpo $(DEPDIR)/libXaw7_la-Label.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Label.c' object='libXaw7_la-Label.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Label.lo `test -f 'Label.c' || echo '$(srcdir)/'`Label.c
-
-libXaw7_la-List.lo: List.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-List.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-List.Tpo -c -o libXaw7_la-List.lo `test -f 'List.c' || echo '$(srcdir)/'`List.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-List.Tpo $(DEPDIR)/libXaw7_la-List.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='List.c' object='libXaw7_la-List.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-List.lo `test -f 'List.c' || echo '$(srcdir)/'`List.c
-
-libXaw7_la-MenuButton.lo: MenuButton.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-MenuButton.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-MenuButton.Tpo -c -o libXaw7_la-MenuButton.lo `test -f 'MenuButton.c' || echo '$(srcdir)/'`MenuButton.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-MenuButton.Tpo $(DEPDIR)/libXaw7_la-MenuButton.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='MenuButton.c' object='libXaw7_la-MenuButton.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-MenuButton.lo `test -f 'MenuButton.c' || echo '$(srcdir)/'`MenuButton.c
-
-libXaw7_la-MultiSrc.lo: MultiSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-MultiSrc.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-MultiSrc.Tpo -c -o libXaw7_la-MultiSrc.lo `test -f 'MultiSrc.c' || echo '$(srcdir)/'`MultiSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-MultiSrc.Tpo $(DEPDIR)/libXaw7_la-MultiSrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='MultiSrc.c' object='libXaw7_la-MultiSrc.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-MultiSrc.lo `test -f 'MultiSrc.c' || echo '$(srcdir)/'`MultiSrc.c
-
-libXaw7_la-MultiSink.lo: MultiSink.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-MultiSink.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-MultiSink.Tpo -c -o libXaw7_la-MultiSink.lo `test -f 'MultiSink.c' || echo '$(srcdir)/'`MultiSink.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-MultiSink.Tpo $(DEPDIR)/libXaw7_la-MultiSink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='MultiSink.c' object='libXaw7_la-MultiSink.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-MultiSink.lo `test -f 'MultiSink.c' || echo '$(srcdir)/'`MultiSink.c
-
-libXaw7_la-OS.lo: OS.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-OS.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-OS.Tpo -c -o libXaw7_la-OS.lo `test -f 'OS.c' || echo '$(srcdir)/'`OS.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-OS.Tpo $(DEPDIR)/libXaw7_la-OS.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OS.c' object='libXaw7_la-OS.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-OS.lo `test -f 'OS.c' || echo '$(srcdir)/'`OS.c
-
-libXaw7_la-Paned.lo: Paned.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Paned.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Paned.Tpo -c -o libXaw7_la-Paned.lo `test -f 'Paned.c' || echo '$(srcdir)/'`Paned.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Paned.Tpo $(DEPDIR)/libXaw7_la-Paned.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Paned.c' object='libXaw7_la-Paned.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Paned.lo `test -f 'Paned.c' || echo '$(srcdir)/'`Paned.c
-
-libXaw7_la-Panner.lo: Panner.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Panner.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Panner.Tpo -c -o libXaw7_la-Panner.lo `test -f 'Panner.c' || echo '$(srcdir)/'`Panner.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Panner.Tpo $(DEPDIR)/libXaw7_la-Panner.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Panner.c' object='libXaw7_la-Panner.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Panner.lo `test -f 'Panner.c' || echo '$(srcdir)/'`Panner.c
-
-libXaw7_la-Pixmap.lo: Pixmap.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Pixmap.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Pixmap.Tpo -c -o libXaw7_la-Pixmap.lo `test -f 'Pixmap.c' || echo '$(srcdir)/'`Pixmap.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Pixmap.Tpo $(DEPDIR)/libXaw7_la-Pixmap.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Pixmap.c' object='libXaw7_la-Pixmap.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Pixmap.lo `test -f 'Pixmap.c' || echo '$(srcdir)/'`Pixmap.c
-
-libXaw7_la-Porthole.lo: Porthole.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Porthole.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Porthole.Tpo -c -o libXaw7_la-Porthole.lo `test -f 'Porthole.c' || echo '$(srcdir)/'`Porthole.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Porthole.Tpo $(DEPDIR)/libXaw7_la-Porthole.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Porthole.c' object='libXaw7_la-Porthole.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Porthole.lo `test -f 'Porthole.c' || echo '$(srcdir)/'`Porthole.c
-
-libXaw7_la-Repeater.lo: Repeater.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Repeater.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Repeater.Tpo -c -o libXaw7_la-Repeater.lo `test -f 'Repeater.c' || echo '$(srcdir)/'`Repeater.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Repeater.Tpo $(DEPDIR)/libXaw7_la-Repeater.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Repeater.c' object='libXaw7_la-Repeater.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Repeater.lo `test -f 'Repeater.c' || echo '$(srcdir)/'`Repeater.c
-
-libXaw7_la-Scrollbar.lo: Scrollbar.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Scrollbar.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Scrollbar.Tpo -c -o libXaw7_la-Scrollbar.lo `test -f 'Scrollbar.c' || echo '$(srcdir)/'`Scrollbar.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Scrollbar.Tpo $(DEPDIR)/libXaw7_la-Scrollbar.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Scrollbar.c' object='libXaw7_la-Scrollbar.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Scrollbar.lo `test -f 'Scrollbar.c' || echo '$(srcdir)/'`Scrollbar.c
-
-libXaw7_la-Simple.lo: Simple.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Simple.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Simple.Tpo -c -o libXaw7_la-Simple.lo `test -f 'Simple.c' || echo '$(srcdir)/'`Simple.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Simple.Tpo $(DEPDIR)/libXaw7_la-Simple.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Simple.c' object='libXaw7_la-Simple.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Simple.lo `test -f 'Simple.c' || echo '$(srcdir)/'`Simple.c
-
-libXaw7_la-SimpleMenu.lo: SimpleMenu.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-SimpleMenu.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-SimpleMenu.Tpo -c -o libXaw7_la-SimpleMenu.lo `test -f 'SimpleMenu.c' || echo '$(srcdir)/'`SimpleMenu.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-SimpleMenu.Tpo $(DEPDIR)/libXaw7_la-SimpleMenu.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='SimpleMenu.c' object='libXaw7_la-SimpleMenu.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-SimpleMenu.lo `test -f 'SimpleMenu.c' || echo '$(srcdir)/'`SimpleMenu.c
-
-libXaw7_la-Sme.lo: Sme.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Sme.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Sme.Tpo -c -o libXaw7_la-Sme.lo `test -f 'Sme.c' || echo '$(srcdir)/'`Sme.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Sme.Tpo $(DEPDIR)/libXaw7_la-Sme.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Sme.c' object='libXaw7_la-Sme.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Sme.lo `test -f 'Sme.c' || echo '$(srcdir)/'`Sme.c
-
-libXaw7_la-SmeBSB.lo: SmeBSB.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-SmeBSB.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-SmeBSB.Tpo -c -o libXaw7_la-SmeBSB.lo `test -f 'SmeBSB.c' || echo '$(srcdir)/'`SmeBSB.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-SmeBSB.Tpo $(DEPDIR)/libXaw7_la-SmeBSB.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='SmeBSB.c' object='libXaw7_la-SmeBSB.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-SmeBSB.lo `test -f 'SmeBSB.c' || echo '$(srcdir)/'`SmeBSB.c
-
-libXaw7_la-SmeLine.lo: SmeLine.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-SmeLine.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-SmeLine.Tpo -c -o libXaw7_la-SmeLine.lo `test -f 'SmeLine.c' || echo '$(srcdir)/'`SmeLine.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-SmeLine.Tpo $(DEPDIR)/libXaw7_la-SmeLine.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='SmeLine.c' object='libXaw7_la-SmeLine.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-SmeLine.lo `test -f 'SmeLine.c' || echo '$(srcdir)/'`SmeLine.c
-
-libXaw7_la-StripChart.lo: StripChart.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-StripChart.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-StripChart.Tpo -c -o libXaw7_la-StripChart.lo `test -f 'StripChart.c' || echo '$(srcdir)/'`StripChart.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-StripChart.Tpo $(DEPDIR)/libXaw7_la-StripChart.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='StripChart.c' object='libXaw7_la-StripChart.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-StripChart.lo `test -f 'StripChart.c' || echo '$(srcdir)/'`StripChart.c
-
-libXaw7_la-Text.lo: Text.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Text.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Text.Tpo -c -o libXaw7_la-Text.lo `test -f 'Text.c' || echo '$(srcdir)/'`Text.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Text.Tpo $(DEPDIR)/libXaw7_la-Text.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Text.c' object='libXaw7_la-Text.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Text.lo `test -f 'Text.c' || echo '$(srcdir)/'`Text.c
-
-libXaw7_la-TextSink.lo: TextSink.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-TextSink.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-TextSink.Tpo -c -o libXaw7_la-TextSink.lo `test -f 'TextSink.c' || echo '$(srcdir)/'`TextSink.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-TextSink.Tpo $(DEPDIR)/libXaw7_la-TextSink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextSink.c' object='libXaw7_la-TextSink.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-TextSink.lo `test -f 'TextSink.c' || echo '$(srcdir)/'`TextSink.c
-
-libXaw7_la-TextSrc.lo: TextSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-TextSrc.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-TextSrc.Tpo -c -o libXaw7_la-TextSrc.lo `test -f 'TextSrc.c' || echo '$(srcdir)/'`TextSrc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-TextSrc.Tpo $(DEPDIR)/libXaw7_la-TextSrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextSrc.c' object='libXaw7_la-TextSrc.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-TextSrc.lo `test -f 'TextSrc.c' || echo '$(srcdir)/'`TextSrc.c
-
-libXaw7_la-TextAction.lo: TextAction.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-TextAction.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-TextAction.Tpo -c -o libXaw7_la-TextAction.lo `test -f 'TextAction.c' || echo '$(srcdir)/'`TextAction.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-TextAction.Tpo $(DEPDIR)/libXaw7_la-TextAction.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextAction.c' object='libXaw7_la-TextAction.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-TextAction.lo `test -f 'TextAction.c' || echo '$(srcdir)/'`TextAction.c
-
-libXaw7_la-TextPop.lo: TextPop.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-TextPop.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-TextPop.Tpo -c -o libXaw7_la-TextPop.lo `test -f 'TextPop.c' || echo '$(srcdir)/'`TextPop.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-TextPop.Tpo $(DEPDIR)/libXaw7_la-TextPop.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextPop.c' object='libXaw7_la-TextPop.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-TextPop.lo `test -f 'TextPop.c' || echo '$(srcdir)/'`TextPop.c
-
-libXaw7_la-TextTr.lo: TextTr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-TextTr.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-TextTr.Tpo -c -o libXaw7_la-TextTr.lo `test -f 'TextTr.c' || echo '$(srcdir)/'`TextTr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-TextTr.Tpo $(DEPDIR)/libXaw7_la-TextTr.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='TextTr.c' object='libXaw7_la-TextTr.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-TextTr.lo `test -f 'TextTr.c' || echo '$(srcdir)/'`TextTr.c
-
-libXaw7_la-Toggle.lo: Toggle.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Toggle.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Toggle.Tpo -c -o libXaw7_la-Toggle.lo `test -f 'Toggle.c' || echo '$(srcdir)/'`Toggle.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Toggle.Tpo $(DEPDIR)/libXaw7_la-Toggle.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Toggle.c' object='libXaw7_la-Toggle.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Toggle.lo `test -f 'Toggle.c' || echo '$(srcdir)/'`Toggle.c
-
-libXaw7_la-Tree.lo: Tree.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Tree.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Tree.Tpo -c -o libXaw7_la-Tree.lo `test -f 'Tree.c' || echo '$(srcdir)/'`Tree.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Tree.Tpo $(DEPDIR)/libXaw7_la-Tree.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Tree.c' object='libXaw7_la-Tree.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Tree.lo `test -f 'Tree.c' || echo '$(srcdir)/'`Tree.c
-
-libXaw7_la-Vendor.lo: Vendor.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Vendor.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Vendor.Tpo -c -o libXaw7_la-Vendor.lo `test -f 'Vendor.c' || echo '$(srcdir)/'`Vendor.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Vendor.Tpo $(DEPDIR)/libXaw7_la-Vendor.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Vendor.c' object='libXaw7_la-Vendor.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Vendor.lo `test -f 'Vendor.c' || echo '$(srcdir)/'`Vendor.c
-
-libXaw7_la-Viewport.lo: Viewport.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Viewport.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Viewport.Tpo -c -o libXaw7_la-Viewport.lo `test -f 'Viewport.c' || echo '$(srcdir)/'`Viewport.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Viewport.Tpo $(DEPDIR)/libXaw7_la-Viewport.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Viewport.c' object='libXaw7_la-Viewport.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Viewport.lo `test -f 'Viewport.c' || echo '$(srcdir)/'`Viewport.c
-
-libXaw7_la-XawIm.lo: XawIm.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-XawIm.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-XawIm.Tpo -c -o libXaw7_la-XawIm.lo `test -f 'XawIm.c' || echo '$(srcdir)/'`XawIm.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-XawIm.Tpo $(DEPDIR)/libXaw7_la-XawIm.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='XawIm.c' object='libXaw7_la-XawIm.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-XawIm.lo `test -f 'XawIm.c' || echo '$(srcdir)/'`XawIm.c
-
-libXaw7_la-XawInit.lo: XawInit.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-XawInit.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-XawInit.Tpo -c -o libXaw7_la-XawInit.lo `test -f 'XawInit.c' || echo '$(srcdir)/'`XawInit.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-XawInit.Tpo $(DEPDIR)/libXaw7_la-XawInit.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='XawInit.c' object='libXaw7_la-XawInit.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-XawInit.lo `test -f 'XawInit.c' || echo '$(srcdir)/'`XawInit.c
-
-libXaw7_la-XawI18n.lo: XawI18n.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-XawI18n.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-XawI18n.Tpo -c -o libXaw7_la-XawI18n.lo `test -f 'XawI18n.c' || echo '$(srcdir)/'`XawI18n.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-XawI18n.Tpo $(DEPDIR)/libXaw7_la-XawI18n.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='XawI18n.c' object='libXaw7_la-XawI18n.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-XawI18n.lo `test -f 'XawI18n.c' || echo '$(srcdir)/'`XawI18n.c
-
-libXaw7_la-Tip.lo: Tip.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -MT libXaw7_la-Tip.lo -MD -MP -MF $(DEPDIR)/libXaw7_la-Tip.Tpo -c -o libXaw7_la-Tip.lo `test -f 'Tip.c' || echo '$(srcdir)/'`Tip.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libXaw7_la-Tip.Tpo $(DEPDIR)/libXaw7_la-Tip.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Tip.c' object='libXaw7_la-Tip.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libXaw7_la_CFLAGS) $(CFLAGS) -c -o libXaw7_la-Tip.lo `test -f 'Tip.c' || echo '$(srcdir)/'`Tip.c
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- 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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- 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; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__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)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$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 $(LTLIBRARIES)
-installdirs:
- for dir in "$(DESTDIR)$(libdir)"; 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:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-@BUILD_XAW6_FALSE@@BUILD_XAW7_FALSE@install-exec-hook:
-@PLATFORM_WIN32_TRUE@install-exec-hook:
-clean: clean-am
-
-clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-libLTLIBRARIES
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-libLTLIBRARIES
-
-.MAKE: install-am install-exec-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libLTLIBRARIES clean-libtool ctags distclean \
- distclean-compile distclean-generic distclean-libtool \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-exec-hook \
- install-html install-html-am install-info install-info-am \
- install-libLTLIBRARIES install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags uninstall uninstall-am uninstall-libLTLIBRARIES
-
-
-@BUILD_XAW6_TRUE@@PLATFORM_WIN32_FALSE@install-exec-hook::
-@BUILD_XAW6_TRUE@@PLATFORM_DARWIN_TRUE@@PLATFORM_WIN32_FALSE@ -rm -f $(DESTDIR)$(libdir)/libXaw.6.@LIBEXT@
-@BUILD_XAW6_TRUE@@PLATFORM_DARWIN_TRUE@@PLATFORM_WIN32_FALSE@ (cd $(DESTDIR)$(libdir) && ln -s libXaw6.6.@LIBEXT@ libXaw.6.@LIBEXT@)
-@BUILD_XAW6_TRUE@@PLATFORM_DARWIN_FALSE@@PLATFORM_WIN32_FALSE@ -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@.6
-@BUILD_XAW6_TRUE@@PLATFORM_DARWIN_FALSE@@PLATFORM_WIN32_FALSE@ (cd $(DESTDIR)$(libdir) && ln -s libXaw6.@LIBEXT@.6 libXaw.@LIBEXT@.6)
-
-@BUILD_XAW7_TRUE@@PLATFORM_WIN32_FALSE@install-exec-hook::
-@BUILD_XAW7_TRUE@@PLATFORM_DARWIN_TRUE@@PLATFORM_WIN32_FALSE@ -rm -f $(DESTDIR)$(libdir)/libXaw.7.@LIBEXT@
-@BUILD_XAW7_TRUE@@PLATFORM_DARWIN_TRUE@@PLATFORM_WIN32_FALSE@ (cd $(DESTDIR)$(libdir) && ln -s libXaw7.7.@LIBEXT@ libXaw.7.@LIBEXT@)
-@BUILD_XAW7_TRUE@@PLATFORM_DARWIN_FALSE@@PLATFORM_WIN32_FALSE@ -rm -f $(DESTDIR)$(libdir)/libXaw.@LIBEXT@.7
-@BUILD_XAW7_TRUE@@PLATFORM_DARWIN_FALSE@@PLATFORM_WIN32_FALSE@ (cd $(DESTDIR)$(libdir) && ln -s libXaw7.@LIBEXT@.7 libXaw.@LIBEXT@.7)
-
-# 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/libXaw/src/MenuButton.c b/libXaw/src/MenuButton.c
index 6c5da154a..e1e97ed32 100644
--- a/libXaw/src/MenuButton.c
+++ b/libXaw/src/MenuButton.c
@@ -1,276 +1,272 @@
-/* $Xorg: MenuButton.c,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
-Copyright 1989, 1994, 1998 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.
- *
- */
-
-/* $XFree86: xc/lib/Xaw/MenuButton.c,v 3.9 2001/10/11 21:17:00 paulo Exp $ */
-
-/*
- * MenuButton.c - Source code for MenuButton widget.
- *
- * This is the source code for the Athena MenuButton widget.
- * It is intended to provide an easy method of activating pulldown menus.
- *
- * Date: May 2, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/MenuButtoP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Class Methods
- */
-static void XawMenuButtonClassInitialize(void);
-static void XawMenuButtonInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawMenuButtonDestroy(Widget);
-static Boolean XawMenuButtonSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-
-/*
- * Actions
- */
-static void PopupMenu(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-#define superclass ((CommandWidgetClass)&commandClassRec)
-
-static char defaultTranslations[] =
-"<Enter>:" "highlight()\n"
-"<Leave>:" "reset()\n"
-"Any<BtnDown>:" "reset() PopupMenu()\n";
-
-static char default_menu_name[] = "menu";
-
-#define offset(field) XtOffsetOf(MenuButtonRec, field)
-static XtResource resources[] = {
- {
- XtNmenuName,
- XtCMenuName,
- XtRString,
- sizeof(String),
- offset(menu_button.menu_name),
- XtRString,
- (XtPointer)default_menu_name
- },
-};
-#undef offset
-
-static XtActionsRec actionsList[] =
-{
- {"PopupMenu", PopupMenu},
-};
-
-MenuButtonClassRec menuButtonClassRec = {
- /* core */
- {
- (WidgetClass)superclass, /* superclass */
- "MenuButton", /* class_name */
- sizeof(MenuButtonRec), /* size */
- XawMenuButtonClassInitialize, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawMenuButtonInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawMenuButtonDestroy, /* destroy */
- XtInheritResize, /* resize */
- XtInheritExpose, /* expose */
- XawMenuButtonSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XtInheritChangeSensitive /* change_sensitive */
- },
- /* label */
- {
- NULL, /* extension */
- },
- /* command */
- {
- NULL, /* extension */
- },
- /* menu_button */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass menuButtonWidgetClass = (WidgetClass)&menuButtonClassRec;
-
-/*
- * Implementation
- */
-static void
-XawMenuButtonClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtRegisterGrabAction(PopupMenu, True,
- ButtonPressMask | ButtonReleaseMask,
- GrabModeAsync, GrabModeAsync);
-}
-
-/*ARGSUSED*/
-static void
-XawMenuButtonInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- MenuButtonWidget mbw = (MenuButtonWidget)cnew;
-
- if (mbw->menu_button.menu_name != default_menu_name)
- mbw->menu_button.menu_name = XtNewString(mbw->menu_button.menu_name);
-}
-
-static void
-XawMenuButtonDestroy(Widget w)
-{
- MenuButtonWidget mbw = (MenuButtonWidget)w;
-
- if (mbw->menu_button.menu_name != default_menu_name)
- XtFree(mbw->menu_button.menu_name);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawMenuButtonSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- MenuButtonWidget mbw_old = (MenuButtonWidget)current;
- MenuButtonWidget mbw_new = (MenuButtonWidget)cnew;
-
- if (mbw_old->menu_button.menu_name != mbw_new->menu_button.menu_name) {
- if (mbw_old->menu_button.menu_name != default_menu_name)
- XtFree(mbw_old->menu_button.menu_name);
- if (mbw_new->menu_button.menu_name != default_menu_name)
- mbw_new->menu_button.menu_name =
- XtNewString(mbw_new->menu_button.menu_name);
- }
-
- return (False);
-}
-
-/*ARGSUSED*/
-static void
-PopupMenu(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- MenuButtonWidget mbw = (MenuButtonWidget)w;
- Widget menu = NULL, temp;
- Arg arglist[2];
- Cardinal num_args;
- int menu_x, menu_y, menu_width, menu_height, button_height;
- Position button_x, button_y;
-
- temp = w;
- while(temp != NULL) {
- menu = XtNameToWidget(temp, mbw->menu_button.menu_name);
- if (menu == NULL)
- temp = XtParent(temp);
- else
- break;
- }
-
- if (menu == NULL) {
- char error_buf[BUFSIZ];
-
- (void)XmuSnprintf(error_buf, sizeof(error_buf),
- "MenuButton: Could not find menu widget named %s.",
- mbw->menu_button.menu_name);
- XtAppWarning(XtWidgetToApplicationContext(w), error_buf);
- return;
- }
-
- if (!XtIsRealized(menu))
- XtRealizeWidget(menu);
-
- menu_width = XtWidth(menu) + (XtBorderWidth(menu) << 1);
- button_height = XtHeight(w) + (XtBorderWidth(w) << 1);
- menu_height = XtHeight(menu) + (XtBorderWidth(menu) << 1);
-
- XtTranslateCoords(w, 0, 0, &button_x, &button_y);
- menu_x = button_x;
- menu_y = button_y + button_height;
-
- if (menu_y >= 0) {
- int scr_height = HeightOfScreen(XtScreen(menu));
-
- if (menu_y + menu_height > scr_height)
- menu_y = button_y - menu_height;
- if (menu_y < 0) {
- menu_y = scr_height - menu_height;
- menu_x = button_x + XtWidth(w) + (XtBorderWidth(w) << 1);
- if (menu_x + menu_width > WidthOfScreen(XtScreen(menu)))
- menu_x = button_x - menu_width;
- }
- }
- if (menu_y < 0)
- menu_y = 0;
-
- if (menu_x >= 0) {
- int scr_width = WidthOfScreen(XtScreen(menu));
-
- if (menu_x + menu_width > scr_width)
- menu_x = scr_width - menu_width;
- }
- if (menu_x < 0)
- menu_x = 0;
-
- num_args = 0;
- XtSetArg(arglist[num_args], XtNx, menu_x); num_args++;
- XtSetArg(arglist[num_args], XtNy, menu_y); num_args++;
- XtSetValues(menu, arglist, num_args);
-
- XtPopupSpringLoaded(menu);
-}
+/*
+Copyright 1989, 1994, 1998 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.
+ *
+ */
+
+/*
+ * MenuButton.c - Source code for MenuButton widget.
+ *
+ * This is the source code for the Athena MenuButton widget.
+ * It is intended to provide an easy method of activating pulldown menus.
+ *
+ * Date: May 2, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/MenuButtoP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Class Methods
+ */
+static void XawMenuButtonClassInitialize(void);
+static void XawMenuButtonInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawMenuButtonDestroy(Widget);
+static Boolean XawMenuButtonSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+
+/*
+ * Actions
+ */
+static void PopupMenu(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+#define superclass ((CommandWidgetClass)&commandClassRec)
+
+static char defaultTranslations[] =
+"<Enter>:" "highlight()\n"
+"<Leave>:" "reset()\n"
+"Any<BtnDown>:" "reset() PopupMenu()\n";
+
+static char default_menu_name[] = "menu";
+
+#define offset(field) XtOffsetOf(MenuButtonRec, field)
+static XtResource resources[] = {
+ {
+ XtNmenuName,
+ XtCMenuName,
+ XtRString,
+ sizeof(String),
+ offset(menu_button.menu_name),
+ XtRString,
+ (XtPointer)default_menu_name
+ },
+};
+#undef offset
+
+static XtActionsRec actionsList[] =
+{
+ {"PopupMenu", PopupMenu},
+};
+
+MenuButtonClassRec menuButtonClassRec = {
+ /* core */
+ {
+ (WidgetClass)superclass, /* superclass */
+ "MenuButton", /* class_name */
+ sizeof(MenuButtonRec), /* size */
+ XawMenuButtonClassInitialize, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawMenuButtonInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ actionsList, /* actions */
+ XtNumber(actionsList), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawMenuButtonDestroy, /* destroy */
+ XtInheritResize, /* resize */
+ XtInheritExpose, /* expose */
+ XawMenuButtonSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ defaultTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive /* change_sensitive */
+ },
+ /* label */
+ {
+ NULL, /* extension */
+ },
+ /* command */
+ {
+ NULL, /* extension */
+ },
+ /* menu_button */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass menuButtonWidgetClass = (WidgetClass)&menuButtonClassRec;
+
+/*
+ * Implementation
+ */
+static void
+XawMenuButtonClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtRegisterGrabAction(PopupMenu, True,
+ ButtonPressMask | ButtonReleaseMask,
+ GrabModeAsync, GrabModeAsync);
+}
+
+/*ARGSUSED*/
+static void
+XawMenuButtonInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ MenuButtonWidget mbw = (MenuButtonWidget)cnew;
+
+ if (mbw->menu_button.menu_name != default_menu_name)
+ mbw->menu_button.menu_name = XtNewString(mbw->menu_button.menu_name);
+}
+
+static void
+XawMenuButtonDestroy(Widget w)
+{
+ MenuButtonWidget mbw = (MenuButtonWidget)w;
+
+ if (mbw->menu_button.menu_name != default_menu_name)
+ XtFree(mbw->menu_button.menu_name);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawMenuButtonSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ MenuButtonWidget mbw_old = (MenuButtonWidget)current;
+ MenuButtonWidget mbw_new = (MenuButtonWidget)cnew;
+
+ if (mbw_old->menu_button.menu_name != mbw_new->menu_button.menu_name) {
+ if (mbw_old->menu_button.menu_name != default_menu_name)
+ XtFree(mbw_old->menu_button.menu_name);
+ if (mbw_new->menu_button.menu_name != default_menu_name)
+ mbw_new->menu_button.menu_name =
+ XtNewString(mbw_new->menu_button.menu_name);
+ }
+
+ return (False);
+}
+
+/*ARGSUSED*/
+static void
+PopupMenu(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ MenuButtonWidget mbw = (MenuButtonWidget)w;
+ Widget menu = NULL, temp;
+ Arg arglist[2];
+ Cardinal num_args;
+ int menu_x, menu_y, menu_width, menu_height, button_height;
+ Position button_x, button_y;
+
+ temp = w;
+ while(temp != NULL) {
+ menu = XtNameToWidget(temp, mbw->menu_button.menu_name);
+ if (menu == NULL)
+ temp = XtParent(temp);
+ else
+ break;
+ }
+
+ if (menu == NULL) {
+ char error_buf[BUFSIZ];
+
+ (void)XmuSnprintf(error_buf, sizeof(error_buf),
+ "MenuButton: Could not find menu widget named %s.",
+ mbw->menu_button.menu_name);
+ XtAppWarning(XtWidgetToApplicationContext(w), error_buf);
+ return;
+ }
+
+ if (!XtIsRealized(menu))
+ XtRealizeWidget(menu);
+
+ menu_width = XtWidth(menu) + (XtBorderWidth(menu) << 1);
+ button_height = XtHeight(w) + (XtBorderWidth(w) << 1);
+ menu_height = XtHeight(menu) + (XtBorderWidth(menu) << 1);
+
+ XtTranslateCoords(w, 0, 0, &button_x, &button_y);
+ menu_x = button_x;
+ menu_y = button_y + button_height;
+
+ if (menu_y >= 0) {
+ int scr_height = HeightOfScreen(XtScreen(menu));
+
+ if (menu_y + menu_height > scr_height)
+ menu_y = button_y - menu_height;
+ if (menu_y < 0) {
+ menu_y = scr_height - menu_height;
+ menu_x = button_x + XtWidth(w) + (XtBorderWidth(w) << 1);
+ if (menu_x + menu_width > WidthOfScreen(XtScreen(menu)))
+ menu_x = button_x - menu_width;
+ }
+ }
+ if (menu_y < 0)
+ menu_y = 0;
+
+ if (menu_x >= 0) {
+ int scr_width = WidthOfScreen(XtScreen(menu));
+
+ if (menu_x + menu_width > scr_width)
+ menu_x = scr_width - menu_width;
+ }
+ if (menu_x < 0)
+ menu_x = 0;
+
+ num_args = 0;
+ XtSetArg(arglist[num_args], XtNx, menu_x); num_args++;
+ XtSetArg(arglist[num_args], XtNy, menu_y); num_args++;
+ XtSetValues(menu, arglist, num_args);
+
+ XtPopupSpringLoaded(menu);
+}
diff --git a/libXaw/src/MultiSink.c b/libXaw/src/MultiSink.c
index 8abe2dedd..39c7da212 100644
--- a/libXaw/src/MultiSink.c
+++ b/libXaw/src/MultiSink.c
@@ -1,978 +1,975 @@
-/* $Xorg: MultiSink.c,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON not be used in advertising
- * or publicity pertaining to distribution of the software without specific,
- * written prior permission. OMRON makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL OMRON 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
- * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Li Yuhong OMRON Corporation
- */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/MultiSink.c,v 1.19 2001/01/17 19:42:27 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xatom.h>
-#include <X11/Xaw/XawInit.h>
-#include <X11/Xaw/MultiSinkP.h>
-#include <X11/Xaw/MultiSrcP.h>
-#include <X11/Xaw/TextP.h>
-#include "XawI18n.h"
-#include <stdio.h>
-#include <ctype.h>
-#include "Private.h"
-
-#ifdef GETLASTPOS
-#undef GETLASTPOS /* We will use our own GETLASTPOS */
-#endif
-
-#define GETLASTPOS \
- XawTextSourceScan(source, 0, XawstAll, XawsdRight, 1, True)
-
-/*
- * Class Methods
- */
-static void XawMultiSinkClassInitialize(void);
-static void XawMultiSinkInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawMultiSinkDestroy(Widget);
-static void XawMultiSinkResize(Widget);
-static Boolean XawMultiSinkSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static int MaxLines(Widget, unsigned int);
-static int MaxHeight(Widget, int);
-static void SetTabs(Widget, int, short*);
-static void DisplayText(Widget, int, int,
- XawTextPosition, XawTextPosition, Bool);
-static void InsertCursor(Widget, int, int, XawTextInsertState);
-static void FindPosition(Widget, XawTextPosition, int, int, Bool,
- XawTextPosition*, int*, int*);
-static void FindDistance(Widget, XawTextPosition, int, XawTextPosition, int*,
- XawTextPosition*, int*);
-static void Resolve(Widget, XawTextPosition, int, int, XawTextPosition*);
-static void GetCursorBounds(Widget, XRectangle*);
-
-/*
- * Prototypes
- */
-static void GetGC(MultiSinkObject);
-static int CharWidth(MultiSinkObject, XFontSet, int, wchar_t);
-static unsigned int PaintText(Widget w, GC gc, int x, int y,
- wchar_t *buf, int len, Bool);
-
-/*
- * Defined in TextSink.c
- */
-void _XawTextSinkClearToBackground(Widget, int, int, unsigned, unsigned);
-
-/*
- * Initialization
- */
-static wchar_t wspace[2];
-
-#define offset(field) XtOffsetOf(MultiSinkRec, multi_sink.field)
-static XtResource resources[] = {
- {
- XtNfontSet,
- XtCFontSet,
- XtRFontSet,
- sizeof(XFontSet),
- offset(fontset),
- XtRString,
- XtDefaultFontSet
- },
- {
- XtNecho,
- XtCOutput,
- XtRBoolean,
- sizeof(Boolean),
- offset(echo),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNdisplayNonprinting,
- XtCOutput,
- XtRBoolean,
- sizeof(Boolean),
- offset(display_nonprinting),
- XtRImmediate,
- (XtPointer)True
- },
-};
-#undef offset
-
-#define SuperClass (&textSinkClassRec)
-MultiSinkClassRec multiSinkClassRec = {
- /* object */
- {
- (WidgetClass)SuperClass, /* superclass */
- "MultiSink", /* class_name */
- sizeof(MultiSinkRec), /* widget_size */
- XawMultiSinkClassInitialize, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawMultiSinkInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* obj1 */
- NULL, /* obj2 */
- 0, /* obj3 */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* obj4 */
- False, /* obj5 */
- False, /* obj6 */
- False, /* obj7 */
- XawMultiSinkDestroy, /* destroy */
- (XtProc)XawMultiSinkResize, /* obj8 */
- NULL, /* obj9 */
- XawMultiSinkSetValues, /* set_values */
- NULL, /* set_values_hook */
- NULL, /* obj10 */
- NULL, /* get_values_hook */
- NULL, /* obj11 */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* obj12 */
- NULL, /* obj13 */
- NULL, /* obj14 */
- NULL, /* extension */
- },
- /* text_sink */
- {
- DisplayText, /* DisplayText */
- InsertCursor, /* InsertCursor */
- XtInheritClearToBackground, /* ClearToBackground */
- FindPosition, /* FindPosition */
- FindDistance, /* FindDistance */
- Resolve, /* Resolve */
- MaxLines, /* MaxLines */
- MaxHeight, /* MaxHeight */
- SetTabs, /* SetTabs */
- GetCursorBounds, /* GetCursorBounds */
- },
- /* multi_sink */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass multiSinkObjectClass = (WidgetClass)&multiSinkClassRec;
-
-/*
- * Implementation
- */
-static int
-CharWidth(MultiSinkObject sink, XFontSet fontset, int x, wchar_t c)
-{
- int width = 0;
-
- if (c == _Xaw_atowc(XawLF))
- return (0);
-
- if (c == _Xaw_atowc(XawTAB)) {
- int i;
- Position *tab;
-
- width = x;
- /* Adjust for Left Margin. */
- x -= ((TextWidget)XtParent((Widget)sink))->text.left_margin;
-
- i = 0;
- tab = sink->text_sink.tabs;
- /*CONSTCOND*/
- while (1) {
- if (x < *tab)
- return (*tab - x);
- /* Start again */
- if (++i >= sink->text_sink.tab_count) {
- x -= *tab;
- i = 0;
- tab = sink->text_sink.tabs;
- if (width == x)
- return (0);
- }
- else
- ++tab;
- }
- /*NOTREACHED*/
- }
-
- if (XwcTextEscapement(fontset, &c, 1) == 0) {
- if (sink->multi_sink.display_nonprinting)
- c = _Xaw_atowc('@');
- else
- c = _Xaw_atowc(XawSP);
- }
-
- /*
- * if more efficiency(suppose one column is one ASCII char)
-
- width = XwcGetColumn(fontset->font_charset, fontset->num_of_fonts, c) *
- fontset->font_struct_list[0]->min_bounds.width;
- *
- * WARNING: Very Slower!!!
- *
- * Li Yuhong.
- */
-
- width = XwcTextEscapement(fontset, &c, 1);
-
- return (width);
-}
-
-/*
- * Function:
- * PaintText
- *
- * Parameters:
- * w - text sink object
- * gc - gc to paint text
- * x - location to paint the text
- * y - ""
- * buf - buffer and length of text to paint
- * len - ""
- * clear_bg - clear background before drawing ?
- *
- * Description:
- * Actually paints the text into the window.
- *
- * Returns:
- * The width of the text painted
- */
-static unsigned int
-PaintText(Widget w, GC gc, int x, int y, wchar_t *buf, int len, Bool clear_bg)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
- TextWidget ctx = (TextWidget)XtParent(w);
- XFontSet fontset = sink->multi_sink.fontset;
- unsigned int width = XwcTextEscapement(fontset, buf, len);
-
- if (((int)width) <= -x) /* Don't draw if we can't see it */
- return (width);
-
- if (clear_bg) {
- XFontSetExtents *ext = XExtentsOfFontSet(fontset);
-
- _XawTextSinkClearToBackground(w, x, y - abs(ext->max_logical_extent.y),
- width, ext->max_logical_extent.height);
- XwcDrawString(XtDisplay(ctx), XtWindow(ctx), fontset, gc, x, y, buf, len);
- }
- else
- XwcDrawImageString(XtDisplay(ctx), XtWindow(ctx), fontset, gc,
- x, y, buf, len);
-
- return (width);
-}
-
-/* Sink Object Functions */
-/*
- * This function does not know about drawing more than one line of text
- */
-static void
-DisplayText(Widget w, int x, int y,
- XawTextPosition pos1, XawTextPosition pos2, Bool highlight)
-{
- TextWidget ctx = (TextWidget)XtParent(w);
- MultiSinkObject sink = (MultiSinkObject)w;
- XFontSet fontset = sink->multi_sink.fontset;
- Widget source = XawTextGetSource(XtParent(w));
- wchar_t buf[256];
- XFontSetExtents *ext = XExtentsOfFontSet(fontset);
- int j, k;
- XawTextBlock blk;
- GC gc, invgc, tabgc;
- int max_x;
- Bool clear_bg;
-
- if (!sink->multi_sink.echo || !ctx->text.lt.lines)
- return;
-
- max_x = (int)XtWidth(ctx) - ctx->text.r_margin.right;
- clear_bg = !highlight && ctx->core.background_pixmap != XtUnspecifiedPixmap;
-
- gc = highlight ? sink->multi_sink.invgc : sink->multi_sink.normgc;
- invgc = highlight ? sink->multi_sink.normgc : sink->multi_sink.invgc;
-
- if (highlight && sink->multi_sink.xorgc)
- tabgc = sink->multi_sink.xorgc;
- else
- tabgc = invgc;
-
- y += abs(ext->max_logical_extent.y);
- for (j = 0; pos1 < pos2;) {
- pos1 = XawTextSourceRead(source, pos1, &blk, (int) pos2 - pos1);
- for (k = 0; k < blk.length; k++) {
- if ((unsigned) j >= (sizeof(buf) / sizeof(wchar_t)) - 1) {
- /* buffer full, dump the text */
- if ((x += PaintText(w, gc, x, y, buf, j, clear_bg)) >= max_x)
- return;
- j = 0;
- }
- buf[j] = ((wchar_t *)blk.ptr)[k];
- if (buf[j] == _Xaw_atowc(XawLF))
- continue;
-
- else if (buf[j] == _Xaw_atowc(XawTAB)) {
- unsigned int width;
-
- if (j != 0 &&
- (x += PaintText(w, gc, x, y, buf, j, clear_bg)) >= max_x)
- return;
-
- width = CharWidth(sink, fontset, x, _Xaw_atowc(XawTAB));
- if (clear_bg)
- _XawTextSinkClearToBackground(w,
- x, y - abs(ext->max_logical_extent.y),
- width, ext->max_logical_extent.height);
- else
- XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
- tabgc, x,
- y - abs(ext->max_logical_extent.y),
- width,
- ext->max_logical_extent.height);
- x += width;
- j = -1;
- }
- else if (XwcTextEscapement(sink->multi_sink.fontset, &buf[j], 1)
- == 0) {
- if (sink->multi_sink.display_nonprinting)
- buf[j] = _Xaw_atowc('@');
- else
- buf[j] = _Xaw_atowc(XawSP);
- }
- j++;
- }
- }
-
- if (j > 0)
- (void)PaintText(w, gc, x, y, buf, j, clear_bg);
-}
-
-/*
- * Function:
- * GetCursorBounds
- *
- * Parameters:
- * w - text sink object
- * rect - X rectangle to return the cursor bounds
- *
- * Description:
- * Returns the size and location of the cursor.
- */
-static void
-GetCursorBounds(Widget w, XRectangle *rect)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
-
- rect->width = CharWidth(sink, sink->multi_sink.fontset, 0, _Xaw_atowc(XawSP));
- rect->height = (XExtentsOfFontSet(sink->multi_sink.fontset)
- ->max_logical_extent.height);
- rect->x = sink->multi_sink.cursor_x;
- rect->y = sink->multi_sink.cursor_y - (short)rect->height;
-}
-
-/*
- * The following procedure manages the "insert" cursor
- */
-static void
-InsertCursor(Widget w, int x, int y, XawTextInsertState state)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
- XFontSet fontset = sink->multi_sink.fontset;
- Widget ctx = XtParent(w);
- XawTextPosition position = XawTextGetInsertionPoint(ctx);
-
- if (XtIsRealized(ctx)) {
- int fheight, fdiff;
- XawTextBlock block;
- wchar_t c;
- XawTextPosition selection_start, selection_end;
- Boolean has_selection;
- XFontSetExtents *ext = XExtentsOfFontSet(fontset);
-
- XawTextGetSelectionPos((Widget)ctx, &selection_start, &selection_end);
- has_selection = selection_start != selection_end;
-
- fheight = ext->max_logical_extent.height;
- fdiff = fheight - abs(ext->max_logical_extent.y);
-
- if ((sink->multi_sink.cursor_position != position || state == XawisOff)
- && !has_selection && sink->multi_sink.laststate != XawisOff) {
- wchar_t *ochar;
-
- (void)XawTextSourceRead(XawTextGetSource(ctx),
- sink->multi_sink.cursor_position,
- &block, 1);
- if (!block.length)
- ochar = NULL;
- else {
- c = ((wchar_t *)block.ptr)[0];
- if (c == _Xaw_atowc(XawLF))
- ochar = NULL;
- else if (c == _Xaw_atowc(XawTAB))
- ochar = wspace;
- else
- ochar = (wchar_t *)block.ptr;
- }
-
- if (!ochar)
- _XawTextSinkClearToBackground(w, sink->multi_sink.cursor_x,
- (sink->multi_sink.cursor_y - 1 -
- fheight), CharWidth(sink, fontset,
- 0, wspace[0]),
- fheight);
- else {
- if (XwcTextEscapement(sink->multi_sink.fontset, ochar, 1) != 0)
- DisplayText(w, sink->multi_sink.cursor_x,
- sink->multi_sink.cursor_y - 1 - fheight,
- sink->multi_sink.cursor_position,
- sink->multi_sink.cursor_position + 1,
- False);
- else
- PaintText(w, sink->multi_sink.normgc,
- sink->multi_sink.cursor_x,
- sink->multi_sink.cursor_y - 1 - fdiff,
- ochar, 1,
- ctx->core.background_pixmap != XtUnspecifiedPixmap);
- }
- }
-
- if (!has_selection && state != XawisOff) {
- wchar_t *nchar;
- Boolean focus = ((TextWidget)ctx)->text.hasfocus;
-
- (void)XawTextSourceRead(XawTextGetSource(ctx),
- position, &block, 1);
- c = ((wchar_t *)block.ptr)[0];
- if (!block.length || c == _Xaw_atowc(XawLF)
- || c == _Xaw_atowc(XawTAB))
- nchar = wspace;
- else
- nchar = (wchar_t *)block.ptr;
-
- if (focus) {
- if (XwcTextEscapement(sink->multi_sink.fontset, nchar, 1) != 0)
- XwcDrawImageString(XtDisplay(ctx), XtWindow(ctx),
- fontset, sink->multi_sink.invgc,
- x, (y - 1 - fdiff), nchar, 1);
- else
- DisplayText(w, x, y - 1 - fheight,
- position, position + 1, True);
- }
- else
- XDrawRectangle(XtDisplay(ctx), XtWindow(ctx),
- sink->multi_sink.xorgc ?
- sink->multi_sink.xorgc : sink->multi_sink.normgc,
- x, y - 1 - fheight,
- CharWidth(sink, fontset, 0, *nchar) - 1,
- fheight - 1);
- }
- }
-
- sink->multi_sink.cursor_x = x;
- sink->multi_sink.cursor_y = y;
- sink->multi_sink.laststate = state;
- sink->multi_sink.cursor_position = position;
-}
-
-/*
- * Given two positions, find the distance between them
- */
-static void
-FindDistance(Widget w, XawTextPosition fromPos, int fromx,
- XawTextPosition toPos, int *resWidth,
- XawTextPosition *resPos, int *resHeight)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
- XFontSet fontset = sink->multi_sink.fontset;
- TextWidget ctx = (TextWidget)XtParent(w);
- Widget source = ctx->text.source;
- XawTextPosition idx, pos;
- wchar_t c;
- XFontSetExtents *ext = XExtentsOfFontSet(fontset);
- XawTextBlock blk;
- int i, rWidth;
-
- pos = XawTextSourceRead(source, fromPos, &blk, toPos - fromPos);
- rWidth = 0;
- for (i = 0, idx = fromPos; idx < toPos; i++, idx++) {
- if (i >= blk.length) {
- i = 0;
- XawTextSourceRead(source, pos, &blk, toPos - pos);
- if (blk.length == 0)
- break;
- }
- c = ((wchar_t *)blk.ptr)[i];
- rWidth += CharWidth(sink, fontset, fromx + rWidth, c);
- if (c == _Xaw_atowc(XawLF)) {
- idx++;
- break;
- }
- }
-
- *resPos = idx;
- *resWidth = rWidth;
- *resHeight = ext->max_logical_extent.height;
-}
-
-static void
-FindPosition(Widget w, XawTextPosition fromPos, int fromx, int width,
- Bool stopAtWordBreak, XawTextPosition *resPos, int *resWidth,
- int *resHeight)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
- TextWidget ctx = (TextWidget)XtParent(w);
- Widget source = ctx->text.source;
- XFontSet fontset = sink->multi_sink.fontset;
- XawTextPosition idx, pos, whiteSpacePosition = 0;
- int i, lastWidth, whiteSpaceWidth, rWidth;
- Boolean whiteSpaceSeen;
- wchar_t c;
- XFontSetExtents *ext = XExtentsOfFontSet(fontset);
- XawTextBlock blk;
-
- pos = XawTextSourceRead(source, fromPos, &blk, BUFSIZ);
- rWidth = lastWidth = whiteSpaceWidth = 0;
- whiteSpaceSeen = False;
- c = 0;
-
- for (i = 0, idx = fromPos; rWidth <= width; i++, idx++) {
- if (i >= blk.length) {
- i = 0;
- pos = XawTextSourceRead(source, pos, &blk, BUFSIZ);
- if (blk.length == 0)
- break;
- }
- c = ((wchar_t *)blk.ptr)[i];
- lastWidth = rWidth;
- rWidth += CharWidth(sink, fontset, fromx + rWidth, c);
-
- if (c == _Xaw_atowc(XawLF)) {
- idx++;
- break;
- }
- else if ((c == _Xaw_atowc(XawSP) || c == _Xaw_atowc(XawTAB))
- && rWidth <= width) {
- whiteSpaceSeen = True;
- whiteSpacePosition = idx;
- whiteSpaceWidth = rWidth;
- }
- }
-
- if (rWidth > width && idx > fromPos) {
- idx--;
- rWidth = lastWidth;
- if (stopAtWordBreak && whiteSpaceSeen) {
- idx = whiteSpacePosition + 1;
- rWidth = whiteSpaceWidth;
- }
- }
-
- if (idx >= ctx->text.lastPos && c != _Xaw_atowc(XawLF))
- idx = ctx->text.lastPos + 1;
-
- *resPos = idx;
- *resWidth = rWidth;
- *resHeight = ext->max_logical_extent.height;
-}
-
-static void
-Resolve(Widget w, XawTextPosition pos, int fromx, int width,
- XawTextPosition *pos_return)
-{
- int resWidth, resHeight;
- Widget source = XawTextGetSource(XtParent(w));
-
- FindPosition(w, pos, fromx, width, False, pos_return, &resWidth, &resHeight);
- if (*pos_return > GETLASTPOS)
- *pos_return = GETLASTPOS;
-}
-
-static void
-GetGC(MultiSinkObject sink)
-{
- XtGCMask valuemask = (GCGraphicsExposures | GCClipXOrigin |
- GCForeground | GCBackground);
- XGCValues values;
-
- /* XXX We dont want do share a gc that will change the clip-mask */
- values.clip_x_origin = (long)sink;
- values.clip_mask = None;
- values.graphics_exposures = False;
-
- values.foreground = sink->text_sink.foreground;
- values.background = sink->text_sink.background;
-
- sink->multi_sink.normgc = XtAllocateGC((Widget)sink, 0, valuemask, &values,
- GCFont | GCClipMask, 0);
-
- values.foreground = sink->text_sink.background;
-#ifndef OLDXAW
- values.background = sink->text_sink.cursor_color;
-#else
- values.background = sink->text_sink.foreground;
-#endif
- sink->multi_sink.invgc = XtAllocateGC((Widget)sink, 0, valuemask, &values,
- GCFont | GCClipMask, 0);
-#ifndef OLDXAW
- if (sink->text_sink.cursor_color != sink->text_sink.foreground) {
- values.foreground = sink->text_sink.cursor_color;
- values.background = sink->text_sink.foreground;
- sink->multi_sink.xorgc = XtAllocateGC((Widget)sink, 0, valuemask,
- &values, GCFont | GCClipMask, 0);
- }
- else
-#endif /* OLDXAW */
- sink->multi_sink.xorgc = NULL;
-
- XawMultiSinkResize((Widget)sink);
-}
-
-static void
-XawMultiSinkClassInitialize(void)
-{
- wspace[0] = _Xaw_atowc(XawSP);
- XawInitializeWidgetSet();
-}
-
-/*
- * Function:
- * XawMultiSinkInitialize
- *
- * Parameters:
- * request - requested and new values for the object instance
- * cnew - ""
- *
- * Description:
- * Initializes the TextSink Object.
- */
-/* ARGSUSED */
-static void
-XawMultiSinkInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- MultiSinkObject sink = (MultiSinkObject)cnew;
-
- GetGC(sink);
-
- if (!sink->multi_sink.fontset) XtError("Aborting: no fontset found\n");
-
- sink->multi_sink.cursor_position = 0;
- sink->multi_sink.laststate = XawisOff;
- sink->multi_sink.cursor_x = sink->multi_sink.cursor_y = 0;
-}
-
-/*
- * Function:
- * XawMultiSinkDestroy
- *
- * Parameters:
- * w - MultiSink Object
- *
- * Description:
- * This function cleans up when the object is destroyed.
- */
-static void
-XawMultiSinkDestroy(Widget w)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
-
- XtReleaseGC(w, sink->multi_sink.normgc);
- XtReleaseGC(w, sink->multi_sink.invgc);
- if (sink->multi_sink.xorgc)
- XtReleaseGC(w, sink->multi_sink.xorgc);
- sink->multi_sink.normgc =
- sink->multi_sink.invgc =
- sink->multi_sink.xorgc = NULL;
-}
-
-static void
-XawMultiSinkResize(Widget w)
-{
- TextWidget ctx = (TextWidget)XtParent(w);
- MultiSinkObject sink = (MultiSinkObject)w;
- XRectangle rect;
- int width, height;
-
- if (w->core.widget_class != multiSinkObjectClass)
- return;
-
- rect.x = ctx->text.r_margin.left;
- rect.y = ctx->text.r_margin.top;
- width = (int)XtWidth(ctx) -
- (int)ctx->text.r_margin.right - (int)ctx->text.r_margin.left;
- height = (int)XtHeight(ctx) -
- (int)ctx->text.r_margin.top - (int)ctx->text.r_margin.bottom;
- rect.width = width;
- rect.height = height;
-
- if (sink->multi_sink.normgc) {
- if (width >= 0 && height >= 0)
- XSetClipRectangles(XtDisplay((Widget)ctx), sink->multi_sink.normgc,
- 0, 0, &rect, 1, Unsorted);
- else
- XSetClipMask(XtDisplay((Widget)ctx), sink->multi_sink.normgc, None);
- }
- if (sink->multi_sink.invgc) {
- if (width >= 0 && height >= 0)
- XSetClipRectangles(XtDisplay((Widget)ctx), sink->multi_sink.invgc,
- 0, 0, &rect, 1, Unsorted);
- else
- XSetClipMask(XtDisplay((Widget)ctx), sink->multi_sink.invgc, None);
- }
- if (sink->multi_sink.xorgc) {
- if (width >= 0 && height >= 0)
- XSetClipRectangles(XtDisplay((Widget)ctx), sink->multi_sink.xorgc,
- 0, 0, &rect, 1, Unsorted);
- else
- XSetClipMask(XtDisplay((Widget)ctx), sink->multi_sink.xorgc, None);
- }
-}
-
-/*
- * Function:
- * XawMultiSinkSetValues
- *
- * Parameters:
- * current - current state of the object
- * request - what was requested
- * cnew - what the object will become
- *
- * Description:
- * Sets the values for the MultiSink.
- *
- * Returns:
- * True if redisplay is needed
- */
-/*ARGSUSED*/
-static Boolean
-XawMultiSinkSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- MultiSinkObject w = (MultiSinkObject)cnew;
- MultiSinkObject old_w = (MultiSinkObject)current;
-
- /* Font set is not in the GC! Do not make a new GC when font set changes! */
-
- if (w->multi_sink.fontset != old_w->multi_sink.fontset) {
- ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
-#ifndef NO_TAB_FIX
- SetTabs((Widget)w, w->text_sink.tab_count, w->text_sink.char_tabs);
-#endif
- }
-
- if (w->text_sink.background != old_w->text_sink.background
- || w->text_sink.foreground != old_w->text_sink.foreground
-#ifndef OLDXAW
- || w->text_sink.cursor_color != old_w->text_sink.cursor_color
-#endif
- ) {
- XtReleaseGC(cnew, w->multi_sink.normgc);
- XtReleaseGC(cnew, w->multi_sink.invgc);
- if (w->multi_sink.xorgc)
- XtReleaseGC(cnew, w->multi_sink.xorgc);
- GetGC(w);
- ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
- }
- else if (w->multi_sink.echo != old_w->multi_sink.echo
- || w->multi_sink.display_nonprinting
- != old_w->multi_sink.display_nonprinting)
- ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
-
- return (False);
-}
-
-/*
- * Function:
- * MaxLines
- *
- * Parameters:
- * w - MultiSink Object
- * height - height to fit lines into
- *
- * Description:
- * Finds the Maximum number of lines that will fit in a given height.
- *
- * Returns:
- * The number of lines that will fit
- */
-/*ARGSUSED*/
-static int
-MaxLines(Widget w, unsigned int height)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
- int font_height;
- XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset);
-
- font_height = ext->max_logical_extent.height;
- return (height / font_height);
-}
-
-/*
- * Function:
- * MaxHeight
- *
- * Parameters:
- * w - MultiSink Object
- * lines - number of lines
- *
- * Description:
- * Finds the Minium height that will contain a given number lines.
- * Returns:
- * The height
- */
-/*ARGSUSED*/
-static int
-MaxHeight(Widget w, int lines)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
- XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset);
-
- return (lines * ext->max_logical_extent.height);
-}
-
-/*
- * Function:
- * SetTabs
- *
- * Arguments:
- * w - MultiSink Object
- * tab_count - number of tabs in the list
- * tabs - text positions of the tabs
- *
- * Description:
- * Sets the Tab stops.
- */
-static void
-SetTabs(Widget w, int tab_count, short* tabs)
-{
- MultiSinkObject sink = (MultiSinkObject)w;
- int i;
- Atom XA_FIGURE_WIDTH;
- unsigned long figure_width = 0;
- XFontStruct *font;
-
- /*
- * Bug:
- * Suppose the first font of fontset stores the unit of column.
- *
- * By Li Yuhong, Mar. 14, 1991
- */
- {
- XFontStruct **f_list;
- char **f_name;
-
- (void)XFontsOfFontSet(sink->multi_sink.fontset, &f_list, &f_name);
- font = f_list[0];
- }
-
- /*
- * Find the figure width of the current font
- */
- XA_FIGURE_WIDTH = XInternAtom(XtDisplayOfObject(w), "FIGURE_WIDTH", False);
- if (XA_FIGURE_WIDTH != None
- && (!XGetFontProperty(font, XA_FIGURE_WIDTH, &figure_width)
- || figure_width == 0)) {
- if (font->per_char && font->min_char_or_byte2 <= '$'
- && font->max_char_or_byte2 >= '$')
- figure_width = font->per_char['$' - font->min_char_or_byte2].width;
- else
- figure_width = font->max_bounds.width;
- }
-
- if (tab_count > sink->text_sink.tab_count) {
- sink->text_sink.tabs = (Position *)
- XtRealloc((char *)sink->text_sink.tabs,
- (Cardinal)(tab_count * sizeof(Position)));
- sink->text_sink.char_tabs = (short *)
- XtRealloc((char *)sink->text_sink.char_tabs,
- (Cardinal)(tab_count * sizeof(short)));
- }
-
- for (i = 0 ; i < tab_count ; i++) {
- sink->text_sink.tabs[i] = tabs[i] * figure_width;
- sink->text_sink.char_tabs[i] = tabs[i];
- }
-
- sink->text_sink.tab_count = tab_count;
-
-#ifndef NO_TAB_FIX
- ((TextWidget)XtParent(w))->text.redisplay_needed = True;
-#endif
-}
-
-void
-_XawMultiSinkPosToXY(Widget w, XawTextPosition pos, Position *x, Position *y)
-{
- MultiSinkObject sink = (MultiSinkObject)((TextWidget)w)->text.sink;
- XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset);
-
- _XawTextPosToXY(w, pos, x, y);
- *y += abs(ext->max_logical_extent.y);
-}
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission. OMRON makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OMRON 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
+ * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Li Yuhong OMRON Corporation
+ */
+
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xatom.h>
+#include <X11/Xaw/XawInit.h>
+#include <X11/Xaw/MultiSinkP.h>
+#include <X11/Xaw/MultiSrcP.h>
+#include <X11/Xaw/TextP.h>
+#include "XawI18n.h"
+#include <stdio.h>
+#include <ctype.h>
+#include "Private.h"
+
+#ifdef GETLASTPOS
+#undef GETLASTPOS /* We will use our own GETLASTPOS */
+#endif
+
+#define GETLASTPOS \
+ XawTextSourceScan(source, 0, XawstAll, XawsdRight, 1, True)
+
+/*
+ * Class Methods
+ */
+static void XawMultiSinkClassInitialize(void);
+static void XawMultiSinkInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawMultiSinkDestroy(Widget);
+static void XawMultiSinkResize(Widget);
+static Boolean XawMultiSinkSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static int MaxLines(Widget, unsigned int);
+static int MaxHeight(Widget, int);
+static void SetTabs(Widget, int, short*);
+static void DisplayText(Widget, int, int,
+ XawTextPosition, XawTextPosition, Bool);
+static void InsertCursor(Widget, int, int, XawTextInsertState);
+static void FindPosition(Widget, XawTextPosition, int, int, Bool,
+ XawTextPosition*, int*, int*);
+static void FindDistance(Widget, XawTextPosition, int, XawTextPosition, int*,
+ XawTextPosition*, int*);
+static void Resolve(Widget, XawTextPosition, int, int, XawTextPosition*);
+static void GetCursorBounds(Widget, XRectangle*);
+
+/*
+ * Prototypes
+ */
+static void GetGC(MultiSinkObject);
+static int CharWidth(MultiSinkObject, XFontSet, int, wchar_t);
+static unsigned int PaintText(Widget w, GC gc, int x, int y,
+ wchar_t *buf, int len, Bool);
+
+/*
+ * Defined in TextSink.c
+ */
+void _XawTextSinkClearToBackground(Widget, int, int, unsigned, unsigned);
+
+/*
+ * Initialization
+ */
+static wchar_t wspace[2];
+
+#define offset(field) XtOffsetOf(MultiSinkRec, multi_sink.field)
+static XtResource resources[] = {
+ {
+ XtNfontSet,
+ XtCFontSet,
+ XtRFontSet,
+ sizeof(XFontSet),
+ offset(fontset),
+ XtRString,
+ XtDefaultFontSet
+ },
+ {
+ XtNecho,
+ XtCOutput,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(echo),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNdisplayNonprinting,
+ XtCOutput,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(display_nonprinting),
+ XtRImmediate,
+ (XtPointer)True
+ },
+};
+#undef offset
+
+#define SuperClass (&textSinkClassRec)
+MultiSinkClassRec multiSinkClassRec = {
+ /* object */
+ {
+ (WidgetClass)SuperClass, /* superclass */
+ "MultiSink", /* class_name */
+ sizeof(MultiSinkRec), /* widget_size */
+ XawMultiSinkClassInitialize, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawMultiSinkInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* obj1 */
+ NULL, /* obj2 */
+ 0, /* obj3 */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* obj4 */
+ False, /* obj5 */
+ False, /* obj6 */
+ False, /* obj7 */
+ XawMultiSinkDestroy, /* destroy */
+ (XtProc)XawMultiSinkResize, /* obj8 */
+ NULL, /* obj9 */
+ XawMultiSinkSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ NULL, /* obj10 */
+ NULL, /* get_values_hook */
+ NULL, /* obj11 */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* obj12 */
+ NULL, /* obj13 */
+ NULL, /* obj14 */
+ NULL, /* extension */
+ },
+ /* text_sink */
+ {
+ DisplayText, /* DisplayText */
+ InsertCursor, /* InsertCursor */
+ XtInheritClearToBackground, /* ClearToBackground */
+ FindPosition, /* FindPosition */
+ FindDistance, /* FindDistance */
+ Resolve, /* Resolve */
+ MaxLines, /* MaxLines */
+ MaxHeight, /* MaxHeight */
+ SetTabs, /* SetTabs */
+ GetCursorBounds, /* GetCursorBounds */
+ },
+ /* multi_sink */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass multiSinkObjectClass = (WidgetClass)&multiSinkClassRec;
+
+/*
+ * Implementation
+ */
+static int
+CharWidth(MultiSinkObject sink, XFontSet fontset, int x, wchar_t c)
+{
+ int width = 0;
+
+ if (c == _Xaw_atowc(XawLF))
+ return (0);
+
+ if (c == _Xaw_atowc(XawTAB)) {
+ int i;
+ Position *tab;
+
+ width = x;
+ /* Adjust for Left Margin. */
+ x -= ((TextWidget)XtParent((Widget)sink))->text.left_margin;
+
+ i = 0;
+ tab = sink->text_sink.tabs;
+ /*CONSTCOND*/
+ while (1) {
+ if (x < *tab)
+ return (*tab - x);
+ /* Start again */
+ if (++i >= sink->text_sink.tab_count) {
+ x -= *tab;
+ i = 0;
+ tab = sink->text_sink.tabs;
+ if (width == x)
+ return (0);
+ }
+ else
+ ++tab;
+ }
+ /*NOTREACHED*/
+ }
+
+ if (XwcTextEscapement(fontset, &c, 1) == 0) {
+ if (sink->multi_sink.display_nonprinting)
+ c = _Xaw_atowc('@');
+ else
+ c = _Xaw_atowc(XawSP);
+ }
+
+ /*
+ * if more efficiency(suppose one column is one ASCII char)
+
+ width = XwcGetColumn(fontset->font_charset, fontset->num_of_fonts, c) *
+ fontset->font_struct_list[0]->min_bounds.width;
+ *
+ * WARNING: Very Slower!!!
+ *
+ * Li Yuhong.
+ */
+
+ width = XwcTextEscapement(fontset, &c, 1);
+
+ return (width);
+}
+
+/*
+ * Function:
+ * PaintText
+ *
+ * Parameters:
+ * w - text sink object
+ * gc - gc to paint text
+ * x - location to paint the text
+ * y - ""
+ * buf - buffer and length of text to paint
+ * len - ""
+ * clear_bg - clear background before drawing ?
+ *
+ * Description:
+ * Actually paints the text into the window.
+ *
+ * Returns:
+ * The width of the text painted
+ */
+static unsigned int
+PaintText(Widget w, GC gc, int x, int y, wchar_t *buf, int len, Bool clear_bg)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ XFontSet fontset = sink->multi_sink.fontset;
+ unsigned int width = XwcTextEscapement(fontset, buf, len);
+
+ if (((int)width) <= -x) /* Don't draw if we can't see it */
+ return (width);
+
+ if (clear_bg) {
+ XFontSetExtents *ext = XExtentsOfFontSet(fontset);
+
+ _XawTextSinkClearToBackground(w, x, y - abs(ext->max_logical_extent.y),
+ width, ext->max_logical_extent.height);
+ XwcDrawString(XtDisplay(ctx), XtWindow(ctx), fontset, gc, x, y, buf, len);
+ }
+ else
+ XwcDrawImageString(XtDisplay(ctx), XtWindow(ctx), fontset, gc,
+ x, y, buf, len);
+
+ return (width);
+}
+
+/* Sink Object Functions */
+/*
+ * This function does not know about drawing more than one line of text
+ */
+static void
+DisplayText(Widget w, int x, int y,
+ XawTextPosition pos1, XawTextPosition pos2, Bool highlight)
+{
+ TextWidget ctx = (TextWidget)XtParent(w);
+ MultiSinkObject sink = (MultiSinkObject)w;
+ XFontSet fontset = sink->multi_sink.fontset;
+ Widget source = XawTextGetSource(XtParent(w));
+ wchar_t buf[256];
+ XFontSetExtents *ext = XExtentsOfFontSet(fontset);
+ int j, k;
+ XawTextBlock blk;
+ GC gc, invgc, tabgc;
+ int max_x;
+ Bool clear_bg;
+
+ if (!sink->multi_sink.echo || !ctx->text.lt.lines)
+ return;
+
+ max_x = (int)XtWidth(ctx) - ctx->text.r_margin.right;
+ clear_bg = !highlight && ctx->core.background_pixmap != XtUnspecifiedPixmap;
+
+ gc = highlight ? sink->multi_sink.invgc : sink->multi_sink.normgc;
+ invgc = highlight ? sink->multi_sink.normgc : sink->multi_sink.invgc;
+
+ if (highlight && sink->multi_sink.xorgc)
+ tabgc = sink->multi_sink.xorgc;
+ else
+ tabgc = invgc;
+
+ y += abs(ext->max_logical_extent.y);
+ for (j = 0; pos1 < pos2;) {
+ pos1 = XawTextSourceRead(source, pos1, &blk, (int) pos2 - pos1);
+ for (k = 0; k < blk.length; k++) {
+ if ((unsigned) j >= (sizeof(buf) / sizeof(wchar_t)) - 1) {
+ /* buffer full, dump the text */
+ if ((x += PaintText(w, gc, x, y, buf, j, clear_bg)) >= max_x)
+ return;
+ j = 0;
+ }
+ buf[j] = ((wchar_t *)blk.ptr)[k];
+ if (buf[j] == _Xaw_atowc(XawLF))
+ continue;
+
+ else if (buf[j] == _Xaw_atowc(XawTAB)) {
+ unsigned int width;
+
+ if (j != 0 &&
+ (x += PaintText(w, gc, x, y, buf, j, clear_bg)) >= max_x)
+ return;
+
+ width = CharWidth(sink, fontset, x, _Xaw_atowc(XawTAB));
+ if (clear_bg)
+ _XawTextSinkClearToBackground(w,
+ x, y - abs(ext->max_logical_extent.y),
+ width, ext->max_logical_extent.height);
+ else
+ XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
+ tabgc, x,
+ y - abs(ext->max_logical_extent.y),
+ width,
+ ext->max_logical_extent.height);
+ x += width;
+ j = -1;
+ }
+ else if (XwcTextEscapement(sink->multi_sink.fontset, &buf[j], 1)
+ == 0) {
+ if (sink->multi_sink.display_nonprinting)
+ buf[j] = _Xaw_atowc('@');
+ else
+ buf[j] = _Xaw_atowc(XawSP);
+ }
+ j++;
+ }
+ }
+
+ if (j > 0)
+ (void)PaintText(w, gc, x, y, buf, j, clear_bg);
+}
+
+/*
+ * Function:
+ * GetCursorBounds
+ *
+ * Parameters:
+ * w - text sink object
+ * rect - X rectangle to return the cursor bounds
+ *
+ * Description:
+ * Returns the size and location of the cursor.
+ */
+static void
+GetCursorBounds(Widget w, XRectangle *rect)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+
+ rect->width = CharWidth(sink, sink->multi_sink.fontset, 0, _Xaw_atowc(XawSP));
+ rect->height = (XExtentsOfFontSet(sink->multi_sink.fontset)
+ ->max_logical_extent.height);
+ rect->x = sink->multi_sink.cursor_x;
+ rect->y = sink->multi_sink.cursor_y - (short)rect->height;
+}
+
+/*
+ * The following procedure manages the "insert" cursor
+ */
+static void
+InsertCursor(Widget w, int x, int y, XawTextInsertState state)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+ XFontSet fontset = sink->multi_sink.fontset;
+ Widget ctx = XtParent(w);
+ XawTextPosition position = XawTextGetInsertionPoint(ctx);
+
+ if (XtIsRealized(ctx)) {
+ int fheight, fdiff;
+ XawTextBlock block;
+ wchar_t c;
+ XawTextPosition selection_start, selection_end;
+ Boolean has_selection;
+ XFontSetExtents *ext = XExtentsOfFontSet(fontset);
+
+ XawTextGetSelectionPos((Widget)ctx, &selection_start, &selection_end);
+ has_selection = selection_start != selection_end;
+
+ fheight = ext->max_logical_extent.height;
+ fdiff = fheight - abs(ext->max_logical_extent.y);
+
+ if ((sink->multi_sink.cursor_position != position || state == XawisOff)
+ && !has_selection && sink->multi_sink.laststate != XawisOff) {
+ wchar_t *ochar;
+
+ (void)XawTextSourceRead(XawTextGetSource(ctx),
+ sink->multi_sink.cursor_position,
+ &block, 1);
+ if (!block.length)
+ ochar = NULL;
+ else {
+ c = ((wchar_t *)block.ptr)[0];
+ if (c == _Xaw_atowc(XawLF))
+ ochar = NULL;
+ else if (c == _Xaw_atowc(XawTAB))
+ ochar = wspace;
+ else
+ ochar = (wchar_t *)block.ptr;
+ }
+
+ if (!ochar)
+ _XawTextSinkClearToBackground(w, sink->multi_sink.cursor_x,
+ (sink->multi_sink.cursor_y - 1 -
+ fheight), CharWidth(sink, fontset,
+ 0, wspace[0]),
+ fheight);
+ else {
+ if (XwcTextEscapement(sink->multi_sink.fontset, ochar, 1) != 0)
+ DisplayText(w, sink->multi_sink.cursor_x,
+ sink->multi_sink.cursor_y - 1 - fheight,
+ sink->multi_sink.cursor_position,
+ sink->multi_sink.cursor_position + 1,
+ False);
+ else
+ PaintText(w, sink->multi_sink.normgc,
+ sink->multi_sink.cursor_x,
+ sink->multi_sink.cursor_y - 1 - fdiff,
+ ochar, 1,
+ ctx->core.background_pixmap != XtUnspecifiedPixmap);
+ }
+ }
+
+ if (!has_selection && state != XawisOff) {
+ wchar_t *nchar;
+ Boolean focus = ((TextWidget)ctx)->text.hasfocus;
+
+ (void)XawTextSourceRead(XawTextGetSource(ctx),
+ position, &block, 1);
+ c = ((wchar_t *)block.ptr)[0];
+ if (!block.length || c == _Xaw_atowc(XawLF)
+ || c == _Xaw_atowc(XawTAB))
+ nchar = wspace;
+ else
+ nchar = (wchar_t *)block.ptr;
+
+ if (focus) {
+ if (XwcTextEscapement(sink->multi_sink.fontset, nchar, 1) != 0)
+ XwcDrawImageString(XtDisplay(ctx), XtWindow(ctx),
+ fontset, sink->multi_sink.invgc,
+ x, (y - 1 - fdiff), nchar, 1);
+ else
+ DisplayText(w, x, y - 1 - fheight,
+ position, position + 1, True);
+ }
+ else
+ XDrawRectangle(XtDisplay(ctx), XtWindow(ctx),
+ sink->multi_sink.xorgc ?
+ sink->multi_sink.xorgc : sink->multi_sink.normgc,
+ x, y - 1 - fheight,
+ CharWidth(sink, fontset, 0, *nchar) - 1,
+ fheight - 1);
+ }
+ }
+
+ sink->multi_sink.cursor_x = x;
+ sink->multi_sink.cursor_y = y;
+ sink->multi_sink.laststate = state;
+ sink->multi_sink.cursor_position = position;
+}
+
+/*
+ * Given two positions, find the distance between them
+ */
+static void
+FindDistance(Widget w, XawTextPosition fromPos, int fromx,
+ XawTextPosition toPos, int *resWidth,
+ XawTextPosition *resPos, int *resHeight)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+ XFontSet fontset = sink->multi_sink.fontset;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ Widget source = ctx->text.source;
+ XawTextPosition idx, pos;
+ wchar_t c;
+ XFontSetExtents *ext = XExtentsOfFontSet(fontset);
+ XawTextBlock blk;
+ int i, rWidth;
+
+ pos = XawTextSourceRead(source, fromPos, &blk, toPos - fromPos);
+ rWidth = 0;
+ for (i = 0, idx = fromPos; idx < toPos; i++, idx++) {
+ if (i >= blk.length) {
+ i = 0;
+ XawTextSourceRead(source, pos, &blk, toPos - pos);
+ if (blk.length == 0)
+ break;
+ }
+ c = ((wchar_t *)blk.ptr)[i];
+ rWidth += CharWidth(sink, fontset, fromx + rWidth, c);
+ if (c == _Xaw_atowc(XawLF)) {
+ idx++;
+ break;
+ }
+ }
+
+ *resPos = idx;
+ *resWidth = rWidth;
+ *resHeight = ext->max_logical_extent.height;
+}
+
+static void
+FindPosition(Widget w, XawTextPosition fromPos, int fromx, int width,
+ Bool stopAtWordBreak, XawTextPosition *resPos, int *resWidth,
+ int *resHeight)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+ TextWidget ctx = (TextWidget)XtParent(w);
+ Widget source = ctx->text.source;
+ XFontSet fontset = sink->multi_sink.fontset;
+ XawTextPosition idx, pos, whiteSpacePosition = 0;
+ int i, lastWidth, whiteSpaceWidth, rWidth;
+ Boolean whiteSpaceSeen;
+ wchar_t c;
+ XFontSetExtents *ext = XExtentsOfFontSet(fontset);
+ XawTextBlock blk;
+
+ pos = XawTextSourceRead(source, fromPos, &blk, BUFSIZ);
+ rWidth = lastWidth = whiteSpaceWidth = 0;
+ whiteSpaceSeen = False;
+ c = 0;
+
+ for (i = 0, idx = fromPos; rWidth <= width; i++, idx++) {
+ if (i >= blk.length) {
+ i = 0;
+ pos = XawTextSourceRead(source, pos, &blk, BUFSIZ);
+ if (blk.length == 0)
+ break;
+ }
+ c = ((wchar_t *)blk.ptr)[i];
+ lastWidth = rWidth;
+ rWidth += CharWidth(sink, fontset, fromx + rWidth, c);
+
+ if (c == _Xaw_atowc(XawLF)) {
+ idx++;
+ break;
+ }
+ else if ((c == _Xaw_atowc(XawSP) || c == _Xaw_atowc(XawTAB))
+ && rWidth <= width) {
+ whiteSpaceSeen = True;
+ whiteSpacePosition = idx;
+ whiteSpaceWidth = rWidth;
+ }
+ }
+
+ if (rWidth > width && idx > fromPos) {
+ idx--;
+ rWidth = lastWidth;
+ if (stopAtWordBreak && whiteSpaceSeen) {
+ idx = whiteSpacePosition + 1;
+ rWidth = whiteSpaceWidth;
+ }
+ }
+
+ if (idx >= ctx->text.lastPos && c != _Xaw_atowc(XawLF))
+ idx = ctx->text.lastPos + 1;
+
+ *resPos = idx;
+ *resWidth = rWidth;
+ *resHeight = ext->max_logical_extent.height;
+}
+
+static void
+Resolve(Widget w, XawTextPosition pos, int fromx, int width,
+ XawTextPosition *pos_return)
+{
+ int resWidth, resHeight;
+ Widget source = XawTextGetSource(XtParent(w));
+
+ FindPosition(w, pos, fromx, width, False, pos_return, &resWidth, &resHeight);
+ if (*pos_return > GETLASTPOS)
+ *pos_return = GETLASTPOS;
+}
+
+static void
+GetGC(MultiSinkObject sink)
+{
+ XtGCMask valuemask = (GCGraphicsExposures | GCClipXOrigin |
+ GCForeground | GCBackground);
+ XGCValues values;
+
+ /* XXX We dont want do share a gc that will change the clip-mask */
+ values.clip_x_origin = (long)sink;
+ values.clip_mask = None;
+ values.graphics_exposures = False;
+
+ values.foreground = sink->text_sink.foreground;
+ values.background = sink->text_sink.background;
+
+ sink->multi_sink.normgc = XtAllocateGC((Widget)sink, 0, valuemask, &values,
+ GCFont | GCClipMask, 0);
+
+ values.foreground = sink->text_sink.background;
+#ifndef OLDXAW
+ values.background = sink->text_sink.cursor_color;
+#else
+ values.background = sink->text_sink.foreground;
+#endif
+ sink->multi_sink.invgc = XtAllocateGC((Widget)sink, 0, valuemask, &values,
+ GCFont | GCClipMask, 0);
+#ifndef OLDXAW
+ if (sink->text_sink.cursor_color != sink->text_sink.foreground) {
+ values.foreground = sink->text_sink.cursor_color;
+ values.background = sink->text_sink.foreground;
+ sink->multi_sink.xorgc = XtAllocateGC((Widget)sink, 0, valuemask,
+ &values, GCFont | GCClipMask, 0);
+ }
+ else
+#endif /* OLDXAW */
+ sink->multi_sink.xorgc = NULL;
+
+ XawMultiSinkResize((Widget)sink);
+}
+
+static void
+XawMultiSinkClassInitialize(void)
+{
+ wspace[0] = _Xaw_atowc(XawSP);
+ XawInitializeWidgetSet();
+}
+
+/*
+ * Function:
+ * XawMultiSinkInitialize
+ *
+ * Parameters:
+ * request - requested and new values for the object instance
+ * cnew - ""
+ *
+ * Description:
+ * Initializes the TextSink Object.
+ */
+/* ARGSUSED */
+static void
+XawMultiSinkInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ MultiSinkObject sink = (MultiSinkObject)cnew;
+
+ GetGC(sink);
+
+ if (!sink->multi_sink.fontset) XtError("Aborting: no fontset found\n");
+
+ sink->multi_sink.cursor_position = 0;
+ sink->multi_sink.laststate = XawisOff;
+ sink->multi_sink.cursor_x = sink->multi_sink.cursor_y = 0;
+}
+
+/*
+ * Function:
+ * XawMultiSinkDestroy
+ *
+ * Parameters:
+ * w - MultiSink Object
+ *
+ * Description:
+ * This function cleans up when the object is destroyed.
+ */
+static void
+XawMultiSinkDestroy(Widget w)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+
+ XtReleaseGC(w, sink->multi_sink.normgc);
+ XtReleaseGC(w, sink->multi_sink.invgc);
+ if (sink->multi_sink.xorgc)
+ XtReleaseGC(w, sink->multi_sink.xorgc);
+ sink->multi_sink.normgc =
+ sink->multi_sink.invgc =
+ sink->multi_sink.xorgc = NULL;
+}
+
+static void
+XawMultiSinkResize(Widget w)
+{
+ TextWidget ctx = (TextWidget)XtParent(w);
+ MultiSinkObject sink = (MultiSinkObject)w;
+ XRectangle rect;
+ int width, height;
+
+ if (w->core.widget_class != multiSinkObjectClass)
+ return;
+
+ rect.x = ctx->text.r_margin.left;
+ rect.y = ctx->text.r_margin.top;
+ width = (int)XtWidth(ctx) -
+ (int)ctx->text.r_margin.right - (int)ctx->text.r_margin.left;
+ height = (int)XtHeight(ctx) -
+ (int)ctx->text.r_margin.top - (int)ctx->text.r_margin.bottom;
+ rect.width = width;
+ rect.height = height;
+
+ if (sink->multi_sink.normgc) {
+ if (width >= 0 && height >= 0)
+ XSetClipRectangles(XtDisplay((Widget)ctx), sink->multi_sink.normgc,
+ 0, 0, &rect, 1, Unsorted);
+ else
+ XSetClipMask(XtDisplay((Widget)ctx), sink->multi_sink.normgc, None);
+ }
+ if (sink->multi_sink.invgc) {
+ if (width >= 0 && height >= 0)
+ XSetClipRectangles(XtDisplay((Widget)ctx), sink->multi_sink.invgc,
+ 0, 0, &rect, 1, Unsorted);
+ else
+ XSetClipMask(XtDisplay((Widget)ctx), sink->multi_sink.invgc, None);
+ }
+ if (sink->multi_sink.xorgc) {
+ if (width >= 0 && height >= 0)
+ XSetClipRectangles(XtDisplay((Widget)ctx), sink->multi_sink.xorgc,
+ 0, 0, &rect, 1, Unsorted);
+ else
+ XSetClipMask(XtDisplay((Widget)ctx), sink->multi_sink.xorgc, None);
+ }
+}
+
+/*
+ * Function:
+ * XawMultiSinkSetValues
+ *
+ * Parameters:
+ * current - current state of the object
+ * request - what was requested
+ * cnew - what the object will become
+ *
+ * Description:
+ * Sets the values for the MultiSink.
+ *
+ * Returns:
+ * True if redisplay is needed
+ */
+/*ARGSUSED*/
+static Boolean
+XawMultiSinkSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ MultiSinkObject w = (MultiSinkObject)cnew;
+ MultiSinkObject old_w = (MultiSinkObject)current;
+
+ /* Font set is not in the GC! Do not make a new GC when font set changes! */
+
+ if (w->multi_sink.fontset != old_w->multi_sink.fontset) {
+ ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
+#ifndef NO_TAB_FIX
+ SetTabs((Widget)w, w->text_sink.tab_count, w->text_sink.char_tabs);
+#endif
+ }
+
+ if (w->text_sink.background != old_w->text_sink.background
+ || w->text_sink.foreground != old_w->text_sink.foreground
+#ifndef OLDXAW
+ || w->text_sink.cursor_color != old_w->text_sink.cursor_color
+#endif
+ ) {
+ XtReleaseGC(cnew, w->multi_sink.normgc);
+ XtReleaseGC(cnew, w->multi_sink.invgc);
+ if (w->multi_sink.xorgc)
+ XtReleaseGC(cnew, w->multi_sink.xorgc);
+ GetGC(w);
+ ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
+ }
+ else if (w->multi_sink.echo != old_w->multi_sink.echo
+ || w->multi_sink.display_nonprinting
+ != old_w->multi_sink.display_nonprinting)
+ ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
+
+ return (False);
+}
+
+/*
+ * Function:
+ * MaxLines
+ *
+ * Parameters:
+ * w - MultiSink Object
+ * height - height to fit lines into
+ *
+ * Description:
+ * Finds the Maximum number of lines that will fit in a given height.
+ *
+ * Returns:
+ * The number of lines that will fit
+ */
+/*ARGSUSED*/
+static int
+MaxLines(Widget w, unsigned int height)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+ int font_height;
+ XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset);
+
+ font_height = ext->max_logical_extent.height;
+ return (height / font_height);
+}
+
+/*
+ * Function:
+ * MaxHeight
+ *
+ * Parameters:
+ * w - MultiSink Object
+ * lines - number of lines
+ *
+ * Description:
+ * Finds the Minium height that will contain a given number lines.
+ * Returns:
+ * The height
+ */
+/*ARGSUSED*/
+static int
+MaxHeight(Widget w, int lines)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+ XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset);
+
+ return (lines * ext->max_logical_extent.height);
+}
+
+/*
+ * Function:
+ * SetTabs
+ *
+ * Arguments:
+ * w - MultiSink Object
+ * tab_count - number of tabs in the list
+ * tabs - text positions of the tabs
+ *
+ * Description:
+ * Sets the Tab stops.
+ */
+static void
+SetTabs(Widget w, int tab_count, short* tabs)
+{
+ MultiSinkObject sink = (MultiSinkObject)w;
+ int i;
+ Atom XA_FIGURE_WIDTH;
+ unsigned long figure_width = 0;
+ XFontStruct *font;
+
+ /*
+ * Bug:
+ * Suppose the first font of fontset stores the unit of column.
+ *
+ * By Li Yuhong, Mar. 14, 1991
+ */
+ {
+ XFontStruct **f_list;
+ char **f_name;
+
+ (void)XFontsOfFontSet(sink->multi_sink.fontset, &f_list, &f_name);
+ font = f_list[0];
+ }
+
+ /*
+ * Find the figure width of the current font
+ */
+ XA_FIGURE_WIDTH = XInternAtom(XtDisplayOfObject(w), "FIGURE_WIDTH", False);
+ if (XA_FIGURE_WIDTH != None
+ && (!XGetFontProperty(font, XA_FIGURE_WIDTH, &figure_width)
+ || figure_width == 0)) {
+ if (font->per_char && font->min_char_or_byte2 <= '$'
+ && font->max_char_or_byte2 >= '$')
+ figure_width = font->per_char['$' - font->min_char_or_byte2].width;
+ else
+ figure_width = font->max_bounds.width;
+ }
+
+ if (tab_count > sink->text_sink.tab_count) {
+ sink->text_sink.tabs = (Position *)
+ XtRealloc((char *)sink->text_sink.tabs,
+ (Cardinal)(tab_count * sizeof(Position)));
+ sink->text_sink.char_tabs = (short *)
+ XtRealloc((char *)sink->text_sink.char_tabs,
+ (Cardinal)(tab_count * sizeof(short)));
+ }
+
+ for (i = 0 ; i < tab_count ; i++) {
+ sink->text_sink.tabs[i] = tabs[i] * figure_width;
+ sink->text_sink.char_tabs[i] = tabs[i];
+ }
+
+ sink->text_sink.tab_count = tab_count;
+
+#ifndef NO_TAB_FIX
+ ((TextWidget)XtParent(w))->text.redisplay_needed = True;
+#endif
+}
+
+void
+_XawMultiSinkPosToXY(Widget w, XawTextPosition pos, Position *x, Position *y)
+{
+ MultiSinkObject sink = (MultiSinkObject)((TextWidget)w)->text.sink;
+ XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset);
+
+ _XawTextPosToXY(w, pos, x, y);
+ *y += abs(ext->max_logical_extent.y);
+}
diff --git a/libXaw/src/MultiSrc.c b/libXaw/src/MultiSrc.c
index 2daf0f6e8..affdd6d89 100644
--- a/libXaw/src/MultiSrc.c
+++ b/libXaw/src/MultiSrc.c
@@ -1,1620 +1,1617 @@
-/* $Xorg: MultiSrc.c,v 1.4 2001/02/09 02:03:44 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. OMRON makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL OMRON 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
- * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Chris Peterson MIT X Consortium
- * Li Yuhong OMRON Corporation
- * Frank Sheeran OMRON Corporation
- *
- * Much code taken from X11R3 String and Disk Sources.
- */
-/* $XFree86: xc/lib/Xaw/MultiSrc.c,v 1.28 2002/11/21 16:22:52 paulo Exp $ */
-
-/*
-
-Copyright 1991, 1994, 1998 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.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xfuncs.h>
-#include <X11/Xos.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/XawInit.h>
-#include <X11/Xaw/MultiSrcP.h>
-#include <X11/Xaw/XawImP.h>
-#include "XawI18n.h"
-#include "Private.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define MAGIC_VALUE ((XawTextPosition)-1)
-#define streq(a, b) (strcmp((a), (b)) == 0)
-
-#ifdef X_NOT_POSIX
-#define Off_t long
-#define Size_t unsigned int
-#else
-#define Off_t off_t
-#define Size_t size_t
-#endif
-
-
-/*
- * Class Methods
- */
-static XawTextPosition ReadText(Widget, XawTextPosition, XawTextBlock*, int);
-static int ReplaceText(Widget, XawTextPosition, XawTextPosition,
- XawTextBlock*);
-static XawTextPosition Scan(Widget, XawTextPosition, XawTextScanType,
- XawTextScanDirection, int, Bool);
-static XawTextPosition Search(Widget, XawTextPosition, XawTextScanDirection,
- XawTextBlock*);
-static void XawMultiSrcClassInitialize(void);
-static void XawMultiSrcDestroy(Widget);
-static void XawMultiSrcInitialize(Widget, Widget, ArgList, Cardinal*);
-static Boolean XawMultiSrcSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static void XawMultiSrcGetValuesHook(Widget, ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static MultiPiece *AllocNewPiece(MultiSrcObject, MultiPiece*);
-static void BreakPiece(MultiSrcObject, MultiPiece*);
-static Boolean CvtMultiTypeToString(Display*, XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr, XtPointer*);
-static void CvtStringToMultiType(XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr);
-static MultiPiece *FindPiece(MultiSrcObject, XawTextPosition,
- XawTextPosition*);
-static void FreeAllPieces(MultiSrcObject);
-static FILE *InitStringOrFile(MultiSrcObject, Bool);
-static void LoadPieces(MultiSrcObject, FILE*, char*);
-static void RemovePiece(MultiSrcObject, MultiPiece*);
-static void RemoveOldStringOrFile(MultiSrcObject, Bool);
-static String StorePiecesInString(MultiSrcObject);
-static Bool WriteToFile(String, String);
-static void GetDefaultPieceSize(Widget, int, XrmValue*);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(MultiSrcRec, multi_src.field)
-static XtResource resources[] = {
- {
- XtNstring,
- XtCString,
- XtRString,
- sizeof(XtPointer),
- offset(string),
- XtRPointer,
- NULL
- },
- {
- XtNtype,
- XtCType,
- XtRMultiType,
- sizeof(XawAsciiType),
- offset(type),
- XtRImmediate,
- (XtPointer)XawAsciiString
- },
- {
- XtNdataCompression,
- XtCDataCompression,
- XtRBoolean,
- sizeof(Boolean),
- offset(data_compression),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNpieceSize,
- XtCPieceSize,
- XtRInt,
- sizeof(XawTextPosition),
- offset(piece_size),
- XtRCallProc,
- (XtPointer)GetDefaultPieceSize
- },
-#ifdef OLDXAW
- {
- XtNcallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(callback),
- XtRCallback,
- (XtPointer)NULL
- },
-#endif
- {
- XtNuseStringInPlace,
- XtCUseStringInPlace,
- XtRBoolean,
- sizeof(Boolean),
- offset(use_string_in_place),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNlength,
- XtCLength,
- XtRInt,
- sizeof(int),
- offset(multi_length),
- XtRImmediate,
- (XtPointer)MAGIC_VALUE
- },
-};
-#undef offset
-
-#define superclass (&textSrcClassRec)
-MultiSrcClassRec multiSrcClassRec = {
- /* object */
- {
- (WidgetClass)superclass, /* superclass */
- "MultiSrc", /* class_name */
- sizeof(MultiSrcRec), /* widget_size */
- XawMultiSrcClassInitialize, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawMultiSrcInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* obj1 */
- NULL, /* obj2 */
- 0, /* obj3 */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* obj4 */
- False, /* obj5 */
- False, /* obj6 */
- False, /* obj7 */
- XawMultiSrcDestroy, /* destroy */
- NULL, /* obj8 */
- NULL, /* obj9 */
- XawMultiSrcSetValues, /* set_values */
- NULL, /* set_values_hook */
- NULL, /* obj10 */
- XawMultiSrcGetValuesHook, /* get_values_hook */
- NULL, /* obj11 */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* obj12 */
- NULL, /* obj13 */
- NULL, /* obj14 */
- NULL, /* extension */
- },
- /* text_src */
- {
- ReadText, /* Read */
- ReplaceText, /* Replace */
- Scan, /* Scan */
- Search, /* Search */
- XtInheritSetSelection, /* SetSelection */
- XtInheritConvertSelection, /* ConvertSelection */
- },
- /* multi_src */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass multiSrcObjectClass = (WidgetClass)&multiSrcClassRec;
-
-static XrmQuark Qstring, Qfile;
-
-/*
- * Implementation
- */
-static void
-XawMultiSrcClassInitialize(void)
-{
- XawInitializeWidgetSet();
- Qstring = XrmPermStringToQuark(XtEstring);
- Qfile = XrmPermStringToQuark(XtEfile);
- XtAddConverter(XtRString, XtRMultiType, CvtStringToMultiType, NULL, 0);
- XtSetTypeConverter(XtRMultiType, XtRString, CvtMultiTypeToString, NULL, 0,
- XtCacheNone, NULL);
-}
-
-/*
- * Function:
- * XawMultiSrcInitialize
- *
- * Parameters:
- * request - widget requested by the argument list
- * cnew - the new widget with both resource and non resource values
- * args - (unused)
- * num_args - (unused)
- *
- * Description:
- * Initializes the multi src object
- */
-/*ARGSUSED*/
-static void
-XawMultiSrcInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- MultiSrcObject src = (MultiSrcObject)cnew;
- FILE *file;
-
- /*
- * Set correct flags (override resources) depending upon widget class
- */
-#ifdef OLDXAW
- src->multi_src.changes = False;
-#else
- src->text_src.changed = False;
-#endif
- src->multi_src.allocated_string = False;
-
- if (src->multi_src.use_string_in_place && src->multi_src.string == NULL)
- src->multi_src.use_string_in_place = False;
-
- file = InitStringOrFile(src, src->multi_src.type == XawAsciiFile);
- LoadPieces(src, file, NULL);
-
- if (file != NULL)
- fclose(file);
- src->text_src.text_format = XawFmtWide;
-}
-
-/*
- * Function:
- * ReadText
- *
- * Parameters:
- * w - MultiSource object
- * pos - position of the text to retrieve
- * text - text block that will contain returned text
- * length - maximum number of characters to read
- *
- * Description:
- * This function reads the source.
- *
- * Returns:
- * The character position following the retrieved text.
- */
-static XawTextPosition
-ReadText(Widget w, XawTextPosition pos, XawTextBlock *text, int length)
-{
- MultiSrcObject src = (MultiSrcObject)w;
- XawTextPosition count, start;
- MultiPiece *piece = FindPiece(src, pos, &start);
-
- text->format = XawFmtWide;
- text->firstPos = pos;
- text->ptr = (char *)(piece->text + (pos - start));
- count = piece->used - (pos - start);
- text->length = Max(0, (length > count) ? count : length);
-
- return (pos + text->length);
-}
-
-/*
- * Function:
- * ReplaceText
- *
- * Parameters:
- * w - MultiSource object
- * startPos - ends of text that will be removed
- * endPos - ""
- * text - new text to be inserted into buffer at startPos
- *
- * Description:
- * Replaces a block of text with new text.
- *
- * Returns:
- * XawEditDone on success, XawEditError otherwise
- */
-/*ARGSUSED*/
-static int
-ReplaceText(Widget w, XawTextPosition startPos, XawTextPosition endPos,
- XawTextBlock *u_text_p)
-{
- MultiSrcObject src = (MultiSrcObject)w;
- MultiPiece *start_piece, *end_piece, *temp_piece;
- XawTextPosition start_first, end_first;
- int length, firstPos;
- wchar_t *wptr;
- Bool local_artificial_block = False;
- XawTextBlock text;
-
- /* STEP 1: The user handed me a text block called `u_text' that may be
- * in either FMTWIDE or FMT8BIT (ie MB.) Later code needs the block
- * `text' to hold FMTWIDE. So, this copies `u_text' to `text', and if
- * `u_text' was MB, I knock it up to WIDE
- */
- if (u_text_p->length == 0) /* if so, the block contents never ref'd */
- text.length = 0;
-
- else if (u_text_p->format == XawFmtWide) {
- local_artificial_block = False; /* don't have to free it ourselves */
- text.firstPos = u_text_p->firstPos;
- text.length = u_text_p->length;
- text.ptr = u_text_p->ptr;
- }
- else {
- /*
- * WARNING! u_text->firstPos and length are in units of CHAR,
- * not CHARACTERS!
- */
- local_artificial_block = True; /* have to free it ourselves */
- text.firstPos = 0;
- text.length = u_text_p->length; /* _XawTextMBToWC converts this
- * to wchar len
- */
-
- text.ptr = (char*)_XawTextMBToWC(XtDisplay(XtParent(w)),
- &u_text_p->ptr[u_text_p->firstPos],
- &text.length);
-
- /* I assert the following assignment is not needed - since Step 4
- depends on length, it has no need of a terminating NULL. I think
- the ASCII-version has the same needless NULL. */
- /*((wchar_t*)text.ptr)[ text.length ] = NULL;*/
- }
-
- /* STEP 2: some initialization... */
- if (src->text_src.edit_mode == XawtextRead)
- return (XawEditError);
-
- start_piece = FindPiece(src, startPos, &start_first);
- end_piece = FindPiece(src, endPos, &end_first);
-
- /* STEP 3: remove the empty pieces... */
- if (start_piece != end_piece) {
- temp_piece = start_piece->next;
-
- /* If empty and not the only piece then remove it */
- if (((start_piece->used = startPos - start_first) == 0)
- && !(start_piece->next == NULL && start_piece->prev == NULL))
- RemovePiece(src, start_piece);
-
- while (temp_piece != end_piece) {
- temp_piece = temp_piece->next;
- RemovePiece(src, temp_piece->prev);
- }
- end_piece->used -= endPos - end_first;
- if (end_piece->used != 0)
- memmove(end_piece->text, end_piece->text + endPos - end_first,
- end_piece->used * sizeof(wchar_t));
- }
- else { /* We are fully in one piece */
- if ((start_piece->used -= endPos - startPos) == 0) {
- if (!(start_piece->next == NULL && start_piece->prev == NULL))
- RemovePiece(src, start_piece);
- }
- else {
- memmove(start_piece->text + (startPos - start_first),
- start_piece->text + (endPos - start_first),
- (start_piece->used - (startPos - start_first)) *
- sizeof(wchar_t));
- if (src->multi_src.use_string_in_place &&
- ((src->multi_src.length - (endPos - startPos))
- < src->multi_src.piece_size - 1))
- start_piece->text[src->multi_src.length - (endPos - startPos)] =
- (wchar_t)0;
- }
- }
-
- src->multi_src.length += text.length -(endPos - startPos);
-
- /* STEP 4: insert the new stuff */
- if ( text.length != 0) {
- start_piece = FindPiece(src, startPos, &start_first);
- length = text.length;
- firstPos = text.firstPos;
-
- while (length > 0) {
- wchar_t *ptr;
- int fill;
-
- if (src->multi_src.use_string_in_place) {
- if (start_piece->used == src->multi_src.piece_size - 1) {
-
- /*
- * The string is used in place, then the string
- * is not allowed to grow
- */
- start_piece->used = src->multi_src.length =
- src->multi_src.piece_size - 1;
-
- start_piece->text[src->multi_src.length] = (wchar_t)0;
- return (XawEditError);
- }
- }
-
- if (start_piece->used == src->multi_src.piece_size) {
- BreakPiece(src, start_piece);
- start_piece = FindPiece(src, startPos, &start_first);
- }
-
- fill = Min((int)(src->multi_src.piece_size - start_piece->used), length);
-
- ptr = start_piece->text + (startPos - start_first);
- memmove(ptr + fill, ptr, (start_piece->used -
- (startPos - start_first)) * sizeof(wchar_t));
- wptr =(wchar_t *)text.ptr;
- (void)wcsncpy(ptr, wptr + firstPos, fill);
-
- startPos += fill;
- firstPos += fill;
- start_piece->used += fill;
- length -= fill;
- }
- }
-
- if (local_artificial_block == True)
- /* In other words, text is not the u_text that the user handed me but
- one I made myself. I only care, because I need to free the string */
- XtFree(text.ptr);
-
- if (src->multi_src.use_string_in_place)
- start_piece->text[start_piece->used] = (wchar_t)0;
-
-#ifdef OLDXAW
- src->multi_src.changes = True;
- XtCallCallbacks(w, XtNcallback, NULL);
-#endif
-
- return (XawEditDone);
-}
-
-/*
- * Function:
- * Scan
- *
- * Parameters:
- * w - MultiSource widget
- * position - position to start scanning
- * type - type of thing to scan for
- * dir - direction to scan
- * count - which occurance if this thing to search for
- * include - whether or not to include the character found in
- * the position that is returned
- *
- * Description:
- * Scans the text source for the number and type of item specified.
- *
- * Returns:
- * The position of the item found
- *
- * Note:
- * While there are only 'n' characters in the file there are n+1
- * possible cursor positions (one before the first character and
- * one after the last character
- */
-static XawTextPosition
-Scan(Widget w, register XawTextPosition position, XawTextScanType type,
- XawTextScanDirection dir, int count, Bool include)
-{
- MultiSrcObject src = (MultiSrcObject)w;
- register char inc;
- MultiPiece *piece;
- XawTextPosition first, first_eol_position = position;
- register wchar_t *ptr;
- int cnt = count;
-
- if (type == XawstAll) {
- if (dir == XawsdRight)
- return (src->multi_src.length);
- return (0);
- }
-
- /* STEP 1: basic sanity checks */
- if (position > src->multi_src.length)
- position = src->multi_src.length;
-
- if (dir == XawsdRight) {
- if (position == src->multi_src.length)
- return (src->multi_src.length);
- inc = 1;
- }
- else {
- if (position == 0)
- return (0);
- inc = -1;
- position--;
- }
-
- piece = FindPiece(src, position, &first);
-
- if (piece->used == 0)
- return (0);
-
- ptr = (position - first) + piece->text;
-
- switch (type) {
- case XawstEOL:
- case XawstParagraph:
- case XawstWhiteSpace:
- case XawstAlphaNumeric:
- for (; cnt > 0 ; cnt--) {
- Bool non_space = False, first_eol = True;
-
- /*CONSTCOND*/
- while (True) {
- register wchar_t c;
-
- if (ptr < piece->text) {
- piece = piece->prev;
- if (piece == NULL) /* Begining of text */
- return (0);
- ptr = piece->text + piece->used - 1;
- c = *ptr;
- }
- else if (ptr >= piece->text + piece->used) {
- piece = piece->next;
- if (piece == NULL) /* End of text */
- return (src->multi_src.length);
- ptr = piece->text;
- }
-
- c = *ptr;
- ptr += inc;
- position += inc;
-
- if (type == XawstAlphaNumeric) {
- if (!iswalnum(c)) {
- if (non_space)
- break;
- }
- else
- non_space = True;
- }
- else if (type == XawstWhiteSpace) {
- if (iswspace(c)) {
- if (non_space)
- break;
- }
- else
- non_space = True;
- }
- else if (type == XawstEOL) {
- if (c == _Xaw_atowc(XawLF))
- break;
- }
- else { /* XawstParagraph */
- if (first_eol) {
- if (c == _Xaw_atowc(XawLF)) {
- first_eol_position = position;
- first_eol = False;
- }
- }
- else
- if (c == _Xaw_atowc(XawLF))
- break;
- else if (!iswspace(c))
- first_eol = True;
- }
- }
- }
- if (!include) {
- if (type == XawstParagraph)
- position = first_eol_position;
- if (count)
- position -= inc;
- }
- break;
- case XawstPositions:
- position += count * inc;
- break;
- default:
- break;
- }
-
- if (dir == XawsdLeft)
- position++;
-
- if (position >= src->multi_src.length)
- return (src->multi_src.length);
- if (position < 0)
- return (0);
-
- return (position);
-}
-
-/*
- * Function:
- * Search
- *
- * Parameters:
- * w - MultiSource objecy
- * position - position to start scanning
- * dir - direction to scan
- * text - text block to search for
- *
- * Description:
- * Searchs the text source for the text block passed.
- *
- * Returns:
- * The position of the item found
- */
-static XawTextPosition
-Search(Widget w, register XawTextPosition position, XawTextScanDirection dir,
- XawTextBlock *text)
-{
- MultiSrcObject src = (MultiSrcObject)w;
- register int count = 0;
- wchar_t *ptr;
- wchar_t *wtarget;
- int wtarget_len;
- Display *d = XtDisplay(XtParent(w));
- MultiPiece *piece;
- wchar_t *buf;
- XawTextPosition first;
- register char inc;
- int cnt;
-
- /* STEP 1: First, a brief sanity check */
- if (dir == XawsdRight)
- inc = 1;
- else {
- inc = -1;
- if (position == 0)
- return (XawTextSearchError);
- position--;
- }
-
- /* STEP 2: Ensure I have a local wide string.. */
-
- /* Since this widget stores 32bit chars, I check here to see if
- I'm being passed a string claiming to be 8bit chars (ie, MB text.)
- If that is the case, naturally I convert to 32bit format */
-
- /*if the block was FMT8BIT, length will convert to REAL wchar count bellow */
- wtarget_len = text->length;
-
- if (text->format == XawFmtWide)
- wtarget = &(((wchar_t*)text->ptr) [text->firstPos]);
- else {
- /* The following converts wtarget_len from byte len to wchar count */
- wtarget = _XawTextMBToWC(d, &text->ptr[text->firstPos], &wtarget_len);
- }
-
- /* OK, I can now assert that wtarget holds wide characters, wtarget_len
- holds an accurate count of those characters, and that firstPos has been
- effectively factored out of the following computations */
-
- /* STEP 3: SEARCH! */
- buf = (wchar_t *)XtMalloc(sizeof(wchar_t) * wtarget_len);
- (void)wcsncpy(buf, wtarget, wtarget_len);
- piece = FindPiece(src, position, &first);
- ptr = (position - first) + piece->text;
-
- /*CONSTCOND*/
- while (True) {
- if (*ptr == (dir == XawsdRight ? *(buf + count)
- : *(buf + wtarget_len - count - 1))) {
- if (count == text->length - 1)
- break;
- else
- count++;
- }
- else {
- if (count != 0) {
- position -=inc * count;
- ptr -= inc * count;
- }
- count = 0;
- }
-
- ptr += inc;
- position += inc;
-
- while (ptr < piece->text) {
- cnt = piece->text - ptr;
-
- piece = piece->prev;
- if (piece == NULL) { /* Begining of text */
- XtFree((char *)buf);
- return (XawTextSearchError);
- }
- ptr = piece->text + piece->used - cnt;
- }
-
- while (ptr >= piece->text + piece->used) {
- cnt = ptr - (piece->text + piece->used);
-
- piece = piece->next;
- if (piece == NULL) { /* End of text */
- XtFree((char *)buf);
- return (XawTextSearchError);
- }
- ptr = piece->text + cnt;
- }
- }
-
- XtFree((char *)buf);
- if (dir == XawsdLeft)
- return(position);
-
- return(position - (wtarget_len - 1));
-}
-
-/*
- * Function:
- * XawMultiSrcSetValues
- *
- * Parameters:
- * current - current state of the widget
- * request - what was requested
- * cnew - what the widget will become
- * args - representation of resources that have changed
- * num_args - number of changed resources
- *
- * Description:
- * Sets the values for the MultiSource.
- *
- * Returns:
- * True if redisplay is needed
- */
-static Boolean
-XawMultiSrcSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- MultiSrcObject src = (MultiSrcObject)cnew;
- MultiSrcObject old_src = (MultiSrcObject)current;
- XtAppContext app_con = XtWidgetToApplicationContext(cnew);
- Bool total_reset = False, string_set = False;
- FILE *file;
- unsigned int i;
-
- if (old_src->multi_src.use_string_in_place
- != src->multi_src.use_string_in_place) {
- XtAppWarning(app_con,
- "MultiSrc: The XtNuseStringInPlace resources "
- "may not be changed.");
- src->multi_src.use_string_in_place =
- old_src->multi_src.use_string_in_place;
- }
-
- for (i = 0; i < *num_args ; i++)
- if (streq(args[i].name, XtNstring)) {
- string_set = True;
- break;
- }
-
- if (string_set || old_src->multi_src.type != src->multi_src.type) {
- RemoveOldStringOrFile(old_src, string_set);
- src->multi_src.allocated_string = old_src->multi_src.allocated_string;
- file = InitStringOrFile(src, string_set);
-
- LoadPieces(src, file, NULL);
- if (file != NULL)
- fclose(file);
-#ifndef OLDXAW
- for (i = 0; i < src->text_src.num_text; i++)
- /* Tell text widget what happened */
- XawTextSetSource(src->text_src.text[i], cnew, 0);
-#else
- XawTextSetSource(XtParent(cnew), cnew, 0);
-#endif
- total_reset = True;
- }
-
- if (old_src->multi_src.multi_length != src->multi_src.multi_length)
- src->multi_src.piece_size = src->multi_src.multi_length + 1;
-
- if ( !total_reset && old_src->multi_src.piece_size
- != src->multi_src.piece_size) {
- String mb_string = StorePiecesInString(old_src);
-
- if (mb_string != 0) {
- FreeAllPieces(old_src);
- LoadPieces(src, NULL, mb_string);
- XtFree(mb_string);
- }
- else {
- /* If the buffer holds bad chars, don't touch it... */
- XtAppWarningMsg(app_con,
- "convertError", "multiSource", "XawError",
- XtName(XtParent((Widget)old_src)), NULL, NULL);
- XtAppWarningMsg(app_con,
- "convertError", "multiSource", "XawError",
- "Non-character code(s) in buffer.", NULL, NULL);
- }
- }
-
- return (False);
-}
-
-static void
-XawMultiSrcGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
-{
- MultiSrcObject src = (MultiSrcObject)w;
- unsigned int i;
-
- if (src->multi_src.type == XawAsciiString) {
- for (i = 0; i < *num_args ; i++) {
- if (streq(args[i].name, XtNstring)) {
- if (src->multi_src.use_string_in_place)
- *((char **)args[i].value) = (char *)
- src->multi_src.first_piece->text;
- else if (_XawMultiSave(w)) /* If save sucessful */
- *((char **)args[i].value) = (char *)src->multi_src.string;
- break;
- }
- }
- }
-}
-
-static void
-XawMultiSrcDestroy(Widget w)
-{
- RemoveOldStringOrFile((MultiSrcObject) w, True);
-}
-
-/*
- * Public routines
- */
-/*
- * Function:
- * XawMultiSourceFreeString
- *
- * Parameters:
- * w - MultiSrc widget
- *
- * Description:
- * Frees the string returned by a get values call
- * on the string when the source is of type string.
- *
- * Note:
- * The public interface is XawAsciiSourceFreeString!
- */
-void
-_XawMultiSourceFreeString(Widget w)
-{
- MultiSrcObject src = (MultiSrcObject)w;
-
- if (src->multi_src.allocated_string) {
- XtFree((char *)src->multi_src.string);
- src->multi_src.allocated_string = False;
- src->multi_src.string = NULL;
- }
-}
-
-/*
- * Function:
- * _XawMultiSave
- *
- * Parameters:
- * w - multiSrc Widget
- *
- * Description:
- * Saves all the pieces into a file or string as required.
- *
- * Returns:
- * True if the save was successful
- *
- * Note:
- * The public interface is XawAsciiSave(w)!
- */
-Bool
-_XawMultiSave(Widget w)
-{
- MultiSrcObject src = (MultiSrcObject)w;
- XtAppContext app_con = XtWidgetToApplicationContext(w);
- char *mb_string;
-
- /*
- * If using the string in place then there is no need to play games
- * to get the internal info into a readable string
- */
- if (src->multi_src.use_string_in_place)
- return (True);
-
- if (src->multi_src.type == XawAsciiFile) {
-#ifdef OLDXAW
- if (!src->multi_src.changes)
-#else
- if (!src->text_src.changed) /* No changes to save */
-#endif
- return (True);
-
- mb_string = StorePiecesInString(src);
-
- if (mb_string != 0) {
- if (WriteToFile(mb_string, (String)src->multi_src.string) == False) {
- XtFree(mb_string);
- return (False);
- }
- XtFree(mb_string);
-#ifndef OLDXAW
- src->text_src.changed = False;
-#else
- src->multi_src.changes = False;
-#endif
- return (True);
- }
- else {
- /* If the buffer holds bad chars, don't touch it... */
- XtAppWarningMsg(app_con,
- "convertError", "multiSource", "XawError",
- "Due to illegal characters, file not saved.",
- NULL, NULL);
- return (False);
- }
- }
- else {
- /* THIS FUNCTIONALITY IS UNDOCUMENTED, probably UNNEEDED? The manual
- says this routine's only function is to save files to
- disk. -Sheeran */
- mb_string = StorePiecesInString(src);
-
- if (mb_string == 0) {
- /* If the buffer holds bad chars, don't touch it... */
- XtAppWarningMsg(app_con,
- "convertError", "multiSource", "XawError",
- XtName(XtParent((Widget)src)), NULL, NULL);
- return (False);
- }
-
- /* assert: mb_string holds good characters so the buffer is fine */
- if (src->multi_src.allocated_string == True)
- XtFree((char *)src->multi_src.string);
- else
- src->multi_src.allocated_string = True;
-
- src->multi_src.string = mb_string;
- }
-#ifdef OLDXAW
- src->multi_src.changes = False;
-#else
- src->text_src.changed = False;
-#endif
-
- return (True);
-}
-
-/*
- * Function:
- * XawMultiSaveAsFile
- *
- * Parameters:
- * w - MultiSrc widget
- * name - name of the file to save this file into
- *
- * Description:
- * Save the current buffer as a file.
- *
- * Returns:
- * True if the save was sucessful
- *
- * Note:
- * The public interface is XawAsciiSaveAsFile!
- */
-Bool
-_XawMultiSaveAsFile(Widget w, _Xconst char* name)
-{
- MultiSrcObject src = (MultiSrcObject)w;
- String mb_string;
- Bool ret;
-
- mb_string = StorePiecesInString(src);
-
- if (mb_string != 0) {
- ret = WriteToFile(mb_string, (char *)name);
- XtFree(mb_string);
-
- return (ret);
- }
-
- /* otherwise there was a conversion error. So print widget name too */
- XtAppWarningMsg(XtWidgetToApplicationContext(w),
- "convertError", "multiSource", "XawError",
- XtName(XtParent(w)), NULL, NULL);
-
- return (False);
-}
-
-/*
- * Private Functions
- */
-static void
-RemoveOldStringOrFile(MultiSrcObject src, Bool checkString)
-{
- FreeAllPieces(src);
-
- if (checkString && src->multi_src.allocated_string) {
- XtFree((char *)src->multi_src.string);
- src->multi_src.allocated_string = False;
- src->multi_src.string = NULL;
- }
-}
-
-/*
- * Function:
- * WriteToFile
- *
- * Parameters:
- * string - string to write
- * name - name of the file
- *
- * Description:
- * Write the string specified to the begining of the file specified.
- *
- * Returns:
- * Returns True if sucessful, False otherwise
- */
-static Bool
-WriteToFile(String string, String name)
-{
- int fd;
-
- if (((fd = creat(name, 0666)) == -1)
- || (write(fd, string, strlen(string)) == -1))
- return (False);
-
- if (close(fd) == -1)
- return (False);
-
- return (True);
-}
-
-
-/*
- * Function:
- * StorePiecesInString
- *
- * Parameters:
- * src - the multiSrc object to gather data from
- *
- * Description:
- * Store the pieces in memory into a char string.
- *
- * Returns:
- * mb_string: Caller must free
- * (or)
- * NULL: conversion error
- */
-static String
-StorePiecesInString(MultiSrcObject src)
-{
- wchar_t *wc_string;
- char *mb_string;
- int char_count = src->multi_src.length;
- XawTextPosition first;
- MultiPiece *piece;
-
- /* I believe the char_count + 1 and the NULL termination are unneeded! FS */
- wc_string = (wchar_t*)XtMalloc((char_count + 1) * sizeof(wchar_t));
-
- for (first = 0, piece = src->multi_src.first_piece ; piece != NULL;
- first += piece->used, piece = piece->next)
- (void)wcsncpy(wc_string + first, piece->text, piece->used);
-
- wc_string[char_count] = 0;
-
- /* This will refill all pieces to capacity */
- if (src->multi_src.data_compression) {
- FreeAllPieces(src);
- LoadPieces(src, NULL, (char *)wc_string);
- }
-
- /* Lastly, convert it to a MB format and send it back */
- mb_string = _XawTextWCToMB(XtDisplayOfObject((Widget)src),
- wc_string, &char_count);
-
- /* NOTE THAT mb_string MAY BE ZERO IF THE CONVERSION FAILED */
- XtFree((char*)wc_string);
-
- return (mb_string);
-}
-
-/*
- * Function:
- * InitStringOrFile
- *
- * Parameters:
- * src - MultiSource
- *
- * Description:
- * Initializes the string or file.
- */
-static FILE *
-InitStringOrFile(MultiSrcObject src, Bool newString)
-{
- mode_t open_mode = 0;
- const char *fdopen_mode = NULL;
- int fd;
- FILE *file;
- Display *d = XtDisplayOfObject((Widget)src);
-
- if (src->multi_src.type == XawAsciiString) {
- if (src->multi_src.string == NULL)
- src->multi_src.length = 0;
-
- else if (!src->multi_src.use_string_in_place) {
- int length;
- String temp = XtNewString((char *)src->multi_src.string);
-
- if (src->multi_src.allocated_string)
- XtFree((char *)src->multi_src.string);
- src->multi_src.allocated_string = True;
- src->multi_src.string = temp;
-
- length = strlen((char *)src->multi_src.string);
-
- /* Wasteful, throwing away the WC string, but need side effect! */
- (void)_XawTextMBToWC(d, (char *)src->multi_src.string, &length);
- src->multi_src.length = (XawTextPosition)length;
- }
- else {
- src->multi_src.length = strlen((char *)src->multi_src.string);
- /* In case the length resource is incorrectly set */
- if (src->multi_src.length > src->multi_src.multi_length)
- src->multi_src.multi_length = src->multi_src.length;
-
- if (src->multi_src.multi_length == MAGIC_VALUE)
- src->multi_src.piece_size = src->multi_src.length;
- else
- src->multi_src.piece_size = src->multi_src.multi_length + 1;
- }
-
- return (NULL);
- }
-
- /*
- * type is XawAsciiFile
- */
- src->multi_src.is_tempfile = False;
-
- switch (src->text_src.edit_mode) {
- case XawtextRead:
- if (src->multi_src.string == NULL)
- XtErrorMsg("NoFile", "multiSourceCreate", "XawError",
- "Creating a read only disk widget and no file specified.",
- NULL, 0);
- open_mode = O_RDONLY;
- fdopen_mode = "r";
- break;
- case XawtextAppend:
- case XawtextEdit:
- if (src->multi_src.string == NULL) {
- src->multi_src.string = "*multi-src*";
- src->multi_src.is_tempfile = True;
- }
- else {
-/* O_NOFOLLOW is a BSD & Linux extension */
-#ifdef O_NOFOLLOW
- open_mode = O_RDWR | O_NOFOLLOW;
-#else
- open_mode = O_RDWR; /* unsafe; subject to race conditions */
-#endif
- fdopen_mode = "r+";
- }
- break;
- default:
- XtErrorMsg("badMode", "multiSourceCreate", "XawError",
- "Bad editMode for multi source; must be "
- "Read, Append or Edit.", NULL, NULL);
- }
-
- /* If is_tempfile, allocate a private copy of the text
- * Unlikely to be changed, just to set allocated_string */
- if (newString || src->multi_src.is_tempfile) {
- String temp = XtNewString((char *)src->multi_src.string);
-
- if (src->multi_src.allocated_string)
- XtFree((char *)src->multi_src.string);
- src->multi_src.string = temp;
- src->multi_src.allocated_string = True;
- }
-
- if (!src->multi_src.is_tempfile) {
- if ((fd = open((char *)src->multi_src.string, open_mode, 0666)) != -1) {
- if ((file = fdopen(fd, fdopen_mode)) != NULL) {
- (void)fseek(file, 0, SEEK_END);
- src->multi_src.length = (XawTextPosition)ftell(file);
- return(file);
- }
- }
- {
- String params[2];
- Cardinal num_params = 2;
-
- params[0] = (String)src->multi_src.string;
- params[1] = strerror(errno);
- XtAppWarningMsg(XtWidgetToApplicationContext((Widget)src),
- "openError", "multiSourceCreate", "XawWarning",
- "Cannot open file %s; %s", params, &num_params);
- }
- }
- src->multi_src.length = 0;
- return (NULL);
-}
-
-/* LoadPieces: This routine takes either the MB contents of open file
- `file' or the MB contents of string or the MB contents of
- src->multi_src.string and places them in Pieces in WC format.
-
- CAUTION: You must have src->multi_src.length set to file length bytes
- when src->multi_src.type == XawAsciiFile. src->multi_src.length must be
- the length of the parameter string if string is non-NULL
-*/
-static void
-LoadPieces(MultiSrcObject src, FILE *file, char *string)
-{
- Display *d = XtDisplayOfObject((Widget)src);
- wchar_t* local_str, *ptr;
- MultiPiece* piece = NULL;
- XawTextPosition left;
- int bytes = sizeof(wchar_t);
- char* temp_mb_holder = NULL;
-
- /*
- * This is tricky - the _XawTextMBtoWC converter uses its 3rd arg
- * in as MB length, out as WC length. We want local_length to be
- * WC count.
- */
- int local_length = src->multi_src.length;
-
- if (string != NULL) {
- /*
- * ASSERT: IF our caller passed a non-null string, THEN
- * src->multi_src.length is currently string's * byte count,
- * AND string is in a MB format
- */
- local_str = _XawTextMBToWC(d, (char *)string, &local_length);
- src->multi_src.length = (XawTextPosition) local_length;
- }
- else if (src->multi_src.type != XawAsciiFile) {
- /*
- * here, we are not changing the contents, just reloading,
- * so don't change len...
- */
- local_length = src->multi_src.string ?
- strlen((char *)src->multi_src.string) : 0;
- local_str = _XawTextMBToWC(d, (char *)src->multi_src.string,
- &local_length);
- }
- else {
- if (src->multi_src.length != 0) {
- temp_mb_holder =
- XtMalloc((src->multi_src.length + 1) * sizeof(unsigned char));
- fseek(file, 0, 0);
- src->multi_src.length = fread(temp_mb_holder,
- (Size_t)sizeof(unsigned char),
- (Size_t)src->multi_src.length, file);
- if (src->multi_src.length <= 0)
- XtAppErrorMsg(XtWidgetToApplicationContext ((Widget) src),
- "readError", "multiSource", "XawError",
- "fread returned error.", NULL, NULL);
- local_length = src->multi_src.length;
- local_str = _XawTextMBToWC(d, temp_mb_holder, &local_length);
- src->multi_src.length = local_length;
-
- if (local_str == 0) {
- String params[2];
- Cardinal num_params;
- static char err_text[] =
- "<<< FILE CONTENTS NOT REPRESENTABLE IN THIS LOCALE >>>";
-
- params[0] = XtName(XtParent((Widget)src));
- params[1] = src->multi_src.string;
- num_params = 2;
-
- XtAppWarningMsg(XtWidgetToApplicationContext((Widget)src),
- "readLocaleError", "multiSource", "XawError",
- "%s: The file `%s' contains characters "
- "not representable in this locale.",
- params, &num_params);
- src->multi_src.length = sizeof err_text;
- local_length = src->multi_src.length;
- local_str = _XawTextMBToWC(d, err_text, &local_length);
- src->multi_src.length = local_length;
- }
- }
- else
- /* ASSERT that since following while loop looks at local_length
- this isn't needed. Sheeran, Omron KK, 1993/07/15
- temp_mb_holder[src->multi_src.length] = '\0'; */
- local_str = (wchar_t*)temp_mb_holder;
- }
-
- if (src->multi_src.use_string_in_place) {
- piece = AllocNewPiece(src, piece);
- piece->used = Min(src->multi_src.length, src->multi_src.piece_size);
- piece->text = (wchar_t*)src->multi_src.string;
- return;
- }
-
- ptr = local_str;
- left = local_length;
-
- do {
- piece = AllocNewPiece(src, piece);
-
- piece->text = (wchar_t*)XtMalloc((unsigned)(src->multi_src.piece_size
- * bytes));
- piece->used = Min(left, src->multi_src.piece_size);
- if (piece->used != 0)
- (void)wcsncpy(piece->text, ptr, piece->used);
-
- left -= piece->used;
- ptr += piece->used;
- } while (left > 0);
-
- if (temp_mb_holder)
- XtFree((char*)temp_mb_holder);
-}
-
-/*
- * Function:
- * AllocNewPiece
- *
- * Parameters:
- * src - MultiSrc Widget
- * prev - the piece just before this one, or NULL
- *
- * Description:
- * Allocates a new piece of memory.
- *
- * Returns:
- * The allocated piece
- */
-static MultiPiece *
-AllocNewPiece(MultiSrcObject src, MultiPiece *prev)
-{
- MultiPiece *piece = XtNew(MultiPiece);
-
- if (prev == NULL) {
- src->multi_src.first_piece = piece;
- piece->next = NULL;
- }
- else {
- if (prev->next != NULL)
- (prev->next)->prev = piece;
- piece->next = prev->next;
- prev->next = piece;
- }
-
- piece->prev = prev;
-
- return (piece);
-}
-
-/*
- * Function:
- * FreeAllPieces
- *
- * Parameters:
- * src - MultiSrc Widget
- *
- * Description:
- * Frees all the pieces
- */
-static void
-FreeAllPieces(MultiSrcObject src)
-{
- MultiPiece *next, *first = src->multi_src.first_piece;
-
-#ifdef DEBUG
- if (first->prev != NULL)
- printf("Xaw MultiSrc Object: possible memory leak in FreeAllPieces().\n");
-#endif
-
- for (; first != NULL ; first = next) {
- next = first->next;
- RemovePiece(src, first);
- }
-}
-
-/*
- * Function:
- * RemovePiece
- *
- * Parameters:
- * piece - piece to remove
- *
- * Description:
- * Removes a piece from the list.
- */
-static void
-RemovePiece(MultiSrcObject src, MultiPiece *piece)
-{
- if (piece->prev == NULL)
- src->multi_src.first_piece = piece->next;
- else
- piece->prev->next = piece->next;
-
- if (piece->next != NULL)
- piece->next->prev = piece->prev;
-
- if (!src->multi_src.use_string_in_place)
- XtFree((char *)piece->text);
-
- XtFree((char *)piece);
-}
-
-/*
- * Function:
- * FindPiece
- *
- * Parameters:
- * src - MultiSrc Widget
- * position - position that we are searching for
- * first - position of the first character in this piece (return)
- *
- * Description:
- * Finds the piece containing the position indicated.
- *
- * Returns:
- * Piece that contains this position
- */
-static MultiPiece *
-FindPiece(MultiSrcObject src, XawTextPosition position, XawTextPosition *first)
-{
- MultiPiece *old_piece, *piece;
- XawTextPosition temp;
-
- for (old_piece = NULL, piece = src->multi_src.first_piece, temp = 0;
- piece; old_piece = piece, piece = piece->next)
- if ((temp += piece->used) > position) {
- *first = temp - piece->used;
- return (piece);
- }
-
- *first = temp - (old_piece ? old_piece->used : 0);
-
- return (old_piece); /* if we run off the end the return the last piece */
-}
-
-/*
- * Function:
- * BreakPiece
- *
- * Parameters:
- * src - MultiSrc Widget
- * piece - piece to break
- *
- * Description:
- * Breaks a full piece into two new pieces.
- */
-#define HALF_PIECE (src->multi_src.piece_size >> 1)
-static void
-BreakPiece(MultiSrcObject src, MultiPiece *piece)
-{
- MultiPiece *cnew = AllocNewPiece(src, piece);
-
- cnew->text = (wchar_t *)
- XtMalloc(src->multi_src.piece_size * sizeof(wchar_t));
- (void)wcsncpy(cnew->text, piece->text + HALF_PIECE,
- src->multi_src.piece_size - HALF_PIECE);
- piece->used = HALF_PIECE;
- cnew->used = src->multi_src.piece_size - HALF_PIECE;
-}
-
-/*ARGSUSED*/
-static void
-CvtStringToMultiType(XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal)
-{
- static XawAsciiType type = XawAsciiString;
- XrmQuark q;
- char name[7];
-
- XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
- q = XrmStringToQuark(name);
-
- if (q == Qstring)
- type = XawAsciiString;
- if (q == Qfile)
- type = XawAsciiFile;
- else {
- toVal->size = 0;
- toVal->addr = NULL;
- XtStringConversionWarning((char *)fromVal->addr, XtRAsciiType);
- }
-
- toVal->size = sizeof(XawAsciiType);
- toVal->addr = (XPointer)&type;
-}
-
-/*ARGSUSED*/
-static Boolean
-CvtMultiTypeToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal,
- XtPointer *data)
-{
- static String buffer;
- Cardinal size;
-
- switch (*(XawAsciiType *)fromVal->addr) {
- case XawAsciiFile:
- buffer = XtEfile;
- break;
- case XawAsciiString:
- buffer = XtEstring;
- break;
- default:
- XawTypeToStringWarning(dpy, XtRAsciiType);
- toVal->addr = NULL;
- toVal->size = 0;
- return (False);
- }
-
- size = strlen(buffer) + 1;
- if (toVal->addr != NULL) {
- if (toVal->size < size) {
- toVal->size = size;
- return (False);
- }
- strcpy((char *)toVal->addr, buffer);
- }
- else
- toVal->addr = (XPointer)buffer;
- toVal->size = sizeof(String);
-
- return (True);
-}
-
-/*ARGSUSED*/
-static void
-GetDefaultPieceSize(Widget w, int offset, XrmValue *value)
-{
- static XPointer pagesize;
-
- if (pagesize == 0) {
- pagesize = (XPointer)((long)_XawGetPageSize());
- if (pagesize < (XPointer)BUFSIZ)
- pagesize = (XPointer)BUFSIZ;
- }
-
- value->addr = (XPointer)&pagesize;
-}
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OMRON makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OMRON 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
+ * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors: Chris Peterson MIT X Consortium
+ * Li Yuhong OMRON Corporation
+ * Frank Sheeran OMRON Corporation
+ *
+ * Much code taken from X11R3 String and Disk Sources.
+ */
+
+/*
+
+Copyright 1991, 1994, 1998 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.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xfuncs.h>
+#include <X11/Xos.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/XawInit.h>
+#include <X11/Xaw/MultiSrcP.h>
+#include <X11/Xaw/XawImP.h>
+#include "XawI18n.h"
+#include "Private.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define MAGIC_VALUE ((XawTextPosition)-1)
+#define streq(a, b) (strcmp((a), (b)) == 0)
+
+#ifdef X_NOT_POSIX
+#define Off_t long
+#define Size_t unsigned int
+#else
+#define Off_t off_t
+#define Size_t size_t
+#endif
+
+
+/*
+ * Class Methods
+ */
+static XawTextPosition ReadText(Widget, XawTextPosition, XawTextBlock*, int);
+static int ReplaceText(Widget, XawTextPosition, XawTextPosition,
+ XawTextBlock*);
+static XawTextPosition Scan(Widget, XawTextPosition, XawTextScanType,
+ XawTextScanDirection, int, Bool);
+static XawTextPosition Search(Widget, XawTextPosition, XawTextScanDirection,
+ XawTextBlock*);
+static void XawMultiSrcClassInitialize(void);
+static void XawMultiSrcDestroy(Widget);
+static void XawMultiSrcInitialize(Widget, Widget, ArgList, Cardinal*);
+static Boolean XawMultiSrcSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static void XawMultiSrcGetValuesHook(Widget, ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static MultiPiece *AllocNewPiece(MultiSrcObject, MultiPiece*);
+static void BreakPiece(MultiSrcObject, MultiPiece*);
+static Boolean CvtMultiTypeToString(Display*, XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr, XtPointer*);
+static void CvtStringToMultiType(XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr);
+static MultiPiece *FindPiece(MultiSrcObject, XawTextPosition,
+ XawTextPosition*);
+static void FreeAllPieces(MultiSrcObject);
+static FILE *InitStringOrFile(MultiSrcObject, Bool);
+static void LoadPieces(MultiSrcObject, FILE*, char*);
+static void RemovePiece(MultiSrcObject, MultiPiece*);
+static void RemoveOldStringOrFile(MultiSrcObject, Bool);
+static String StorePiecesInString(MultiSrcObject);
+static Bool WriteToFile(String, String);
+static void GetDefaultPieceSize(Widget, int, XrmValue*);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(MultiSrcRec, multi_src.field)
+static XtResource resources[] = {
+ {
+ XtNstring,
+ XtCString,
+ XtRString,
+ sizeof(XtPointer),
+ offset(string),
+ XtRPointer,
+ NULL
+ },
+ {
+ XtNtype,
+ XtCType,
+ XtRMultiType,
+ sizeof(XawAsciiType),
+ offset(type),
+ XtRImmediate,
+ (XtPointer)XawAsciiString
+ },
+ {
+ XtNdataCompression,
+ XtCDataCompression,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(data_compression),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNpieceSize,
+ XtCPieceSize,
+ XtRInt,
+ sizeof(XawTextPosition),
+ offset(piece_size),
+ XtRCallProc,
+ (XtPointer)GetDefaultPieceSize
+ },
+#ifdef OLDXAW
+ {
+ XtNcallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(callback),
+ XtRCallback,
+ (XtPointer)NULL
+ },
+#endif
+ {
+ XtNuseStringInPlace,
+ XtCUseStringInPlace,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(use_string_in_place),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNlength,
+ XtCLength,
+ XtRInt,
+ sizeof(int),
+ offset(multi_length),
+ XtRImmediate,
+ (XtPointer)MAGIC_VALUE
+ },
+};
+#undef offset
+
+#define superclass (&textSrcClassRec)
+MultiSrcClassRec multiSrcClassRec = {
+ /* object */
+ {
+ (WidgetClass)superclass, /* superclass */
+ "MultiSrc", /* class_name */
+ sizeof(MultiSrcRec), /* widget_size */
+ XawMultiSrcClassInitialize, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawMultiSrcInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* obj1 */
+ NULL, /* obj2 */
+ 0, /* obj3 */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* obj4 */
+ False, /* obj5 */
+ False, /* obj6 */
+ False, /* obj7 */
+ XawMultiSrcDestroy, /* destroy */
+ NULL, /* obj8 */
+ NULL, /* obj9 */
+ XawMultiSrcSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ NULL, /* obj10 */
+ XawMultiSrcGetValuesHook, /* get_values_hook */
+ NULL, /* obj11 */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* obj12 */
+ NULL, /* obj13 */
+ NULL, /* obj14 */
+ NULL, /* extension */
+ },
+ /* text_src */
+ {
+ ReadText, /* Read */
+ ReplaceText, /* Replace */
+ Scan, /* Scan */
+ Search, /* Search */
+ XtInheritSetSelection, /* SetSelection */
+ XtInheritConvertSelection, /* ConvertSelection */
+ },
+ /* multi_src */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass multiSrcObjectClass = (WidgetClass)&multiSrcClassRec;
+
+static XrmQuark Qstring, Qfile;
+
+/*
+ * Implementation
+ */
+static void
+XawMultiSrcClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ Qstring = XrmPermStringToQuark(XtEstring);
+ Qfile = XrmPermStringToQuark(XtEfile);
+ XtAddConverter(XtRString, XtRMultiType, CvtStringToMultiType, NULL, 0);
+ XtSetTypeConverter(XtRMultiType, XtRString, CvtMultiTypeToString, NULL, 0,
+ XtCacheNone, NULL);
+}
+
+/*
+ * Function:
+ * XawMultiSrcInitialize
+ *
+ * Parameters:
+ * request - widget requested by the argument list
+ * cnew - the new widget with both resource and non resource values
+ * args - (unused)
+ * num_args - (unused)
+ *
+ * Description:
+ * Initializes the multi src object
+ */
+/*ARGSUSED*/
+static void
+XawMultiSrcInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ MultiSrcObject src = (MultiSrcObject)cnew;
+ FILE *file;
+
+ /*
+ * Set correct flags (override resources) depending upon widget class
+ */
+#ifdef OLDXAW
+ src->multi_src.changes = False;
+#else
+ src->text_src.changed = False;
+#endif
+ src->multi_src.allocated_string = False;
+
+ if (src->multi_src.use_string_in_place && src->multi_src.string == NULL)
+ src->multi_src.use_string_in_place = False;
+
+ file = InitStringOrFile(src, src->multi_src.type == XawAsciiFile);
+ LoadPieces(src, file, NULL);
+
+ if (file != NULL)
+ fclose(file);
+ src->text_src.text_format = XawFmtWide;
+}
+
+/*
+ * Function:
+ * ReadText
+ *
+ * Parameters:
+ * w - MultiSource object
+ * pos - position of the text to retrieve
+ * text - text block that will contain returned text
+ * length - maximum number of characters to read
+ *
+ * Description:
+ * This function reads the source.
+ *
+ * Returns:
+ * The character position following the retrieved text.
+ */
+static XawTextPosition
+ReadText(Widget w, XawTextPosition pos, XawTextBlock *text, int length)
+{
+ MultiSrcObject src = (MultiSrcObject)w;
+ XawTextPosition count, start;
+ MultiPiece *piece = FindPiece(src, pos, &start);
+
+ text->format = XawFmtWide;
+ text->firstPos = pos;
+ text->ptr = (char *)(piece->text + (pos - start));
+ count = piece->used - (pos - start);
+ text->length = Max(0, (length > count) ? count : length);
+
+ return (pos + text->length);
+}
+
+/*
+ * Function:
+ * ReplaceText
+ *
+ * Parameters:
+ * w - MultiSource object
+ * startPos - ends of text that will be removed
+ * endPos - ""
+ * text - new text to be inserted into buffer at startPos
+ *
+ * Description:
+ * Replaces a block of text with new text.
+ *
+ * Returns:
+ * XawEditDone on success, XawEditError otherwise
+ */
+/*ARGSUSED*/
+static int
+ReplaceText(Widget w, XawTextPosition startPos, XawTextPosition endPos,
+ XawTextBlock *u_text_p)
+{
+ MultiSrcObject src = (MultiSrcObject)w;
+ MultiPiece *start_piece, *end_piece, *temp_piece;
+ XawTextPosition start_first, end_first;
+ int length, firstPos;
+ wchar_t *wptr;
+ Bool local_artificial_block = False;
+ XawTextBlock text;
+
+ /* STEP 1: The user handed me a text block called `u_text' that may be
+ * in either FMTWIDE or FMT8BIT (ie MB.) Later code needs the block
+ * `text' to hold FMTWIDE. So, this copies `u_text' to `text', and if
+ * `u_text' was MB, I knock it up to WIDE
+ */
+ if (u_text_p->length == 0) /* if so, the block contents never ref'd */
+ text.length = 0;
+
+ else if (u_text_p->format == XawFmtWide) {
+ local_artificial_block = False; /* don't have to free it ourselves */
+ text.firstPos = u_text_p->firstPos;
+ text.length = u_text_p->length;
+ text.ptr = u_text_p->ptr;
+ }
+ else {
+ /*
+ * WARNING! u_text->firstPos and length are in units of CHAR,
+ * not CHARACTERS!
+ */
+ local_artificial_block = True; /* have to free it ourselves */
+ text.firstPos = 0;
+ text.length = u_text_p->length; /* _XawTextMBToWC converts this
+ * to wchar len
+ */
+
+ text.ptr = (char*)_XawTextMBToWC(XtDisplay(XtParent(w)),
+ &u_text_p->ptr[u_text_p->firstPos],
+ &text.length);
+
+ /* I assert the following assignment is not needed - since Step 4
+ depends on length, it has no need of a terminating NULL. I think
+ the ASCII-version has the same needless NULL. */
+ /*((wchar_t*)text.ptr)[ text.length ] = NULL;*/
+ }
+
+ /* STEP 2: some initialization... */
+ if (src->text_src.edit_mode == XawtextRead)
+ return (XawEditError);
+
+ start_piece = FindPiece(src, startPos, &start_first);
+ end_piece = FindPiece(src, endPos, &end_first);
+
+ /* STEP 3: remove the empty pieces... */
+ if (start_piece != end_piece) {
+ temp_piece = start_piece->next;
+
+ /* If empty and not the only piece then remove it */
+ if (((start_piece->used = startPos - start_first) == 0)
+ && !(start_piece->next == NULL && start_piece->prev == NULL))
+ RemovePiece(src, start_piece);
+
+ while (temp_piece != end_piece) {
+ temp_piece = temp_piece->next;
+ RemovePiece(src, temp_piece->prev);
+ }
+ end_piece->used -= endPos - end_first;
+ if (end_piece->used != 0)
+ memmove(end_piece->text, end_piece->text + endPos - end_first,
+ end_piece->used * sizeof(wchar_t));
+ }
+ else { /* We are fully in one piece */
+ if ((start_piece->used -= endPos - startPos) == 0) {
+ if (!(start_piece->next == NULL && start_piece->prev == NULL))
+ RemovePiece(src, start_piece);
+ }
+ else {
+ memmove(start_piece->text + (startPos - start_first),
+ start_piece->text + (endPos - start_first),
+ (start_piece->used - (startPos - start_first)) *
+ sizeof(wchar_t));
+ if (src->multi_src.use_string_in_place &&
+ ((src->multi_src.length - (endPos - startPos))
+ < src->multi_src.piece_size - 1))
+ start_piece->text[src->multi_src.length - (endPos - startPos)] =
+ (wchar_t)0;
+ }
+ }
+
+ src->multi_src.length += text.length -(endPos - startPos);
+
+ /* STEP 4: insert the new stuff */
+ if ( text.length != 0) {
+ start_piece = FindPiece(src, startPos, &start_first);
+ length = text.length;
+ firstPos = text.firstPos;
+
+ while (length > 0) {
+ wchar_t *ptr;
+ int fill;
+
+ if (src->multi_src.use_string_in_place) {
+ if (start_piece->used == src->multi_src.piece_size - 1) {
+
+ /*
+ * The string is used in place, then the string
+ * is not allowed to grow
+ */
+ start_piece->used = src->multi_src.length =
+ src->multi_src.piece_size - 1;
+
+ start_piece->text[src->multi_src.length] = (wchar_t)0;
+ return (XawEditError);
+ }
+ }
+
+ if (start_piece->used == src->multi_src.piece_size) {
+ BreakPiece(src, start_piece);
+ start_piece = FindPiece(src, startPos, &start_first);
+ }
+
+ fill = Min((int)(src->multi_src.piece_size - start_piece->used), length);
+
+ ptr = start_piece->text + (startPos - start_first);
+ memmove(ptr + fill, ptr, (start_piece->used -
+ (startPos - start_first)) * sizeof(wchar_t));
+ wptr =(wchar_t *)text.ptr;
+ (void)wcsncpy(ptr, wptr + firstPos, fill);
+
+ startPos += fill;
+ firstPos += fill;
+ start_piece->used += fill;
+ length -= fill;
+ }
+ }
+
+ if (local_artificial_block == True)
+ /* In other words, text is not the u_text that the user handed me but
+ one I made myself. I only care, because I need to free the string */
+ XtFree(text.ptr);
+
+ if (src->multi_src.use_string_in_place)
+ start_piece->text[start_piece->used] = (wchar_t)0;
+
+#ifdef OLDXAW
+ src->multi_src.changes = True;
+ XtCallCallbacks(w, XtNcallback, NULL);
+#endif
+
+ return (XawEditDone);
+}
+
+/*
+ * Function:
+ * Scan
+ *
+ * Parameters:
+ * w - MultiSource widget
+ * position - position to start scanning
+ * type - type of thing to scan for
+ * dir - direction to scan
+ * count - which occurance if this thing to search for
+ * include - whether or not to include the character found in
+ * the position that is returned
+ *
+ * Description:
+ * Scans the text source for the number and type of item specified.
+ *
+ * Returns:
+ * The position of the item found
+ *
+ * Note:
+ * While there are only 'n' characters in the file there are n+1
+ * possible cursor positions (one before the first character and
+ * one after the last character
+ */
+static XawTextPosition
+Scan(Widget w, register XawTextPosition position, XawTextScanType type,
+ XawTextScanDirection dir, int count, Bool include)
+{
+ MultiSrcObject src = (MultiSrcObject)w;
+ register char inc;
+ MultiPiece *piece;
+ XawTextPosition first, first_eol_position = position;
+ register wchar_t *ptr;
+ int cnt = count;
+
+ if (type == XawstAll) {
+ if (dir == XawsdRight)
+ return (src->multi_src.length);
+ return (0);
+ }
+
+ /* STEP 1: basic sanity checks */
+ if (position > src->multi_src.length)
+ position = src->multi_src.length;
+
+ if (dir == XawsdRight) {
+ if (position == src->multi_src.length)
+ return (src->multi_src.length);
+ inc = 1;
+ }
+ else {
+ if (position == 0)
+ return (0);
+ inc = -1;
+ position--;
+ }
+
+ piece = FindPiece(src, position, &first);
+
+ if (piece->used == 0)
+ return (0);
+
+ ptr = (position - first) + piece->text;
+
+ switch (type) {
+ case XawstEOL:
+ case XawstParagraph:
+ case XawstWhiteSpace:
+ case XawstAlphaNumeric:
+ for (; cnt > 0 ; cnt--) {
+ Bool non_space = False, first_eol = True;
+
+ /*CONSTCOND*/
+ while (True) {
+ register wchar_t c;
+
+ if (ptr < piece->text) {
+ piece = piece->prev;
+ if (piece == NULL) /* Begining of text */
+ return (0);
+ ptr = piece->text + piece->used - 1;
+ c = *ptr;
+ }
+ else if (ptr >= piece->text + piece->used) {
+ piece = piece->next;
+ if (piece == NULL) /* End of text */
+ return (src->multi_src.length);
+ ptr = piece->text;
+ }
+
+ c = *ptr;
+ ptr += inc;
+ position += inc;
+
+ if (type == XawstAlphaNumeric) {
+ if (!iswalnum(c)) {
+ if (non_space)
+ break;
+ }
+ else
+ non_space = True;
+ }
+ else if (type == XawstWhiteSpace) {
+ if (iswspace(c)) {
+ if (non_space)
+ break;
+ }
+ else
+ non_space = True;
+ }
+ else if (type == XawstEOL) {
+ if (c == _Xaw_atowc(XawLF))
+ break;
+ }
+ else { /* XawstParagraph */
+ if (first_eol) {
+ if (c == _Xaw_atowc(XawLF)) {
+ first_eol_position = position;
+ first_eol = False;
+ }
+ }
+ else
+ if (c == _Xaw_atowc(XawLF))
+ break;
+ else if (!iswspace(c))
+ first_eol = True;
+ }
+ }
+ }
+ if (!include) {
+ if (type == XawstParagraph)
+ position = first_eol_position;
+ if (count)
+ position -= inc;
+ }
+ break;
+ case XawstPositions:
+ position += count * inc;
+ break;
+ default:
+ break;
+ }
+
+ if (dir == XawsdLeft)
+ position++;
+
+ if (position >= src->multi_src.length)
+ return (src->multi_src.length);
+ if (position < 0)
+ return (0);
+
+ return (position);
+}
+
+/*
+ * Function:
+ * Search
+ *
+ * Parameters:
+ * w - MultiSource objecy
+ * position - position to start scanning
+ * dir - direction to scan
+ * text - text block to search for
+ *
+ * Description:
+ * Searchs the text source for the text block passed.
+ *
+ * Returns:
+ * The position of the item found
+ */
+static XawTextPosition
+Search(Widget w, register XawTextPosition position, XawTextScanDirection dir,
+ XawTextBlock *text)
+{
+ MultiSrcObject src = (MultiSrcObject)w;
+ register int count = 0;
+ wchar_t *ptr;
+ wchar_t *wtarget;
+ int wtarget_len;
+ Display *d = XtDisplay(XtParent(w));
+ MultiPiece *piece;
+ wchar_t *buf;
+ XawTextPosition first;
+ register char inc;
+ int cnt;
+
+ /* STEP 1: First, a brief sanity check */
+ if (dir == XawsdRight)
+ inc = 1;
+ else {
+ inc = -1;
+ if (position == 0)
+ return (XawTextSearchError);
+ position--;
+ }
+
+ /* STEP 2: Ensure I have a local wide string.. */
+
+ /* Since this widget stores 32bit chars, I check here to see if
+ I'm being passed a string claiming to be 8bit chars (ie, MB text.)
+ If that is the case, naturally I convert to 32bit format */
+
+ /*if the block was FMT8BIT, length will convert to REAL wchar count bellow */
+ wtarget_len = text->length;
+
+ if (text->format == XawFmtWide)
+ wtarget = &(((wchar_t*)text->ptr) [text->firstPos]);
+ else {
+ /* The following converts wtarget_len from byte len to wchar count */
+ wtarget = _XawTextMBToWC(d, &text->ptr[text->firstPos], &wtarget_len);
+ }
+
+ /* OK, I can now assert that wtarget holds wide characters, wtarget_len
+ holds an accurate count of those characters, and that firstPos has been
+ effectively factored out of the following computations */
+
+ /* STEP 3: SEARCH! */
+ buf = (wchar_t *)XtMalloc(sizeof(wchar_t) * wtarget_len);
+ (void)wcsncpy(buf, wtarget, wtarget_len);
+ piece = FindPiece(src, position, &first);
+ ptr = (position - first) + piece->text;
+
+ /*CONSTCOND*/
+ while (True) {
+ if (*ptr == (dir == XawsdRight ? *(buf + count)
+ : *(buf + wtarget_len - count - 1))) {
+ if (count == text->length - 1)
+ break;
+ else
+ count++;
+ }
+ else {
+ if (count != 0) {
+ position -=inc * count;
+ ptr -= inc * count;
+ }
+ count = 0;
+ }
+
+ ptr += inc;
+ position += inc;
+
+ while (ptr < piece->text) {
+ cnt = piece->text - ptr;
+
+ piece = piece->prev;
+ if (piece == NULL) { /* Begining of text */
+ XtFree((char *)buf);
+ return (XawTextSearchError);
+ }
+ ptr = piece->text + piece->used - cnt;
+ }
+
+ while (ptr >= piece->text + piece->used) {
+ cnt = ptr - (piece->text + piece->used);
+
+ piece = piece->next;
+ if (piece == NULL) { /* End of text */
+ XtFree((char *)buf);
+ return (XawTextSearchError);
+ }
+ ptr = piece->text + cnt;
+ }
+ }
+
+ XtFree((char *)buf);
+ if (dir == XawsdLeft)
+ return(position);
+
+ return(position - (wtarget_len - 1));
+}
+
+/*
+ * Function:
+ * XawMultiSrcSetValues
+ *
+ * Parameters:
+ * current - current state of the widget
+ * request - what was requested
+ * cnew - what the widget will become
+ * args - representation of resources that have changed
+ * num_args - number of changed resources
+ *
+ * Description:
+ * Sets the values for the MultiSource.
+ *
+ * Returns:
+ * True if redisplay is needed
+ */
+static Boolean
+XawMultiSrcSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ MultiSrcObject src = (MultiSrcObject)cnew;
+ MultiSrcObject old_src = (MultiSrcObject)current;
+ XtAppContext app_con = XtWidgetToApplicationContext(cnew);
+ Bool total_reset = False, string_set = False;
+ FILE *file;
+ unsigned int i;
+
+ if (old_src->multi_src.use_string_in_place
+ != src->multi_src.use_string_in_place) {
+ XtAppWarning(app_con,
+ "MultiSrc: The XtNuseStringInPlace resources "
+ "may not be changed.");
+ src->multi_src.use_string_in_place =
+ old_src->multi_src.use_string_in_place;
+ }
+
+ for (i = 0; i < *num_args ; i++)
+ if (streq(args[i].name, XtNstring)) {
+ string_set = True;
+ break;
+ }
+
+ if (string_set || old_src->multi_src.type != src->multi_src.type) {
+ RemoveOldStringOrFile(old_src, string_set);
+ src->multi_src.allocated_string = old_src->multi_src.allocated_string;
+ file = InitStringOrFile(src, string_set);
+
+ LoadPieces(src, file, NULL);
+ if (file != NULL)
+ fclose(file);
+#ifndef OLDXAW
+ for (i = 0; i < src->text_src.num_text; i++)
+ /* Tell text widget what happened */
+ XawTextSetSource(src->text_src.text[i], cnew, 0);
+#else
+ XawTextSetSource(XtParent(cnew), cnew, 0);
+#endif
+ total_reset = True;
+ }
+
+ if (old_src->multi_src.multi_length != src->multi_src.multi_length)
+ src->multi_src.piece_size = src->multi_src.multi_length + 1;
+
+ if ( !total_reset && old_src->multi_src.piece_size
+ != src->multi_src.piece_size) {
+ String mb_string = StorePiecesInString(old_src);
+
+ if (mb_string != 0) {
+ FreeAllPieces(old_src);
+ LoadPieces(src, NULL, mb_string);
+ XtFree(mb_string);
+ }
+ else {
+ /* If the buffer holds bad chars, don't touch it... */
+ XtAppWarningMsg(app_con,
+ "convertError", "multiSource", "XawError",
+ XtName(XtParent((Widget)old_src)), NULL, NULL);
+ XtAppWarningMsg(app_con,
+ "convertError", "multiSource", "XawError",
+ "Non-character code(s) in buffer.", NULL, NULL);
+ }
+ }
+
+ return (False);
+}
+
+static void
+XawMultiSrcGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
+{
+ MultiSrcObject src = (MultiSrcObject)w;
+ unsigned int i;
+
+ if (src->multi_src.type == XawAsciiString) {
+ for (i = 0; i < *num_args ; i++) {
+ if (streq(args[i].name, XtNstring)) {
+ if (src->multi_src.use_string_in_place)
+ *((char **)args[i].value) = (char *)
+ src->multi_src.first_piece->text;
+ else if (_XawMultiSave(w)) /* If save sucessful */
+ *((char **)args[i].value) = (char *)src->multi_src.string;
+ break;
+ }
+ }
+ }
+}
+
+static void
+XawMultiSrcDestroy(Widget w)
+{
+ RemoveOldStringOrFile((MultiSrcObject) w, True);
+}
+
+/*
+ * Public routines
+ */
+/*
+ * Function:
+ * XawMultiSourceFreeString
+ *
+ * Parameters:
+ * w - MultiSrc widget
+ *
+ * Description:
+ * Frees the string returned by a get values call
+ * on the string when the source is of type string.
+ *
+ * Note:
+ * The public interface is XawAsciiSourceFreeString!
+ */
+void
+_XawMultiSourceFreeString(Widget w)
+{
+ MultiSrcObject src = (MultiSrcObject)w;
+
+ if (src->multi_src.allocated_string) {
+ XtFree((char *)src->multi_src.string);
+ src->multi_src.allocated_string = False;
+ src->multi_src.string = NULL;
+ }
+}
+
+/*
+ * Function:
+ * _XawMultiSave
+ *
+ * Parameters:
+ * w - multiSrc Widget
+ *
+ * Description:
+ * Saves all the pieces into a file or string as required.
+ *
+ * Returns:
+ * True if the save was successful
+ *
+ * Note:
+ * The public interface is XawAsciiSave(w)!
+ */
+Bool
+_XawMultiSave(Widget w)
+{
+ MultiSrcObject src = (MultiSrcObject)w;
+ XtAppContext app_con = XtWidgetToApplicationContext(w);
+ char *mb_string;
+
+ /*
+ * If using the string in place then there is no need to play games
+ * to get the internal info into a readable string
+ */
+ if (src->multi_src.use_string_in_place)
+ return (True);
+
+ if (src->multi_src.type == XawAsciiFile) {
+#ifdef OLDXAW
+ if (!src->multi_src.changes)
+#else
+ if (!src->text_src.changed) /* No changes to save */
+#endif
+ return (True);
+
+ mb_string = StorePiecesInString(src);
+
+ if (mb_string != 0) {
+ if (WriteToFile(mb_string, (String)src->multi_src.string) == False) {
+ XtFree(mb_string);
+ return (False);
+ }
+ XtFree(mb_string);
+#ifndef OLDXAW
+ src->text_src.changed = False;
+#else
+ src->multi_src.changes = False;
+#endif
+ return (True);
+ }
+ else {
+ /* If the buffer holds bad chars, don't touch it... */
+ XtAppWarningMsg(app_con,
+ "convertError", "multiSource", "XawError",
+ "Due to illegal characters, file not saved.",
+ NULL, NULL);
+ return (False);
+ }
+ }
+ else {
+ /* THIS FUNCTIONALITY IS UNDOCUMENTED, probably UNNEEDED? The manual
+ says this routine's only function is to save files to
+ disk. -Sheeran */
+ mb_string = StorePiecesInString(src);
+
+ if (mb_string == 0) {
+ /* If the buffer holds bad chars, don't touch it... */
+ XtAppWarningMsg(app_con,
+ "convertError", "multiSource", "XawError",
+ XtName(XtParent((Widget)src)), NULL, NULL);
+ return (False);
+ }
+
+ /* assert: mb_string holds good characters so the buffer is fine */
+ if (src->multi_src.allocated_string == True)
+ XtFree((char *)src->multi_src.string);
+ else
+ src->multi_src.allocated_string = True;
+
+ src->multi_src.string = mb_string;
+ }
+#ifdef OLDXAW
+ src->multi_src.changes = False;
+#else
+ src->text_src.changed = False;
+#endif
+
+ return (True);
+}
+
+/*
+ * Function:
+ * XawMultiSaveAsFile
+ *
+ * Parameters:
+ * w - MultiSrc widget
+ * name - name of the file to save this file into
+ *
+ * Description:
+ * Save the current buffer as a file.
+ *
+ * Returns:
+ * True if the save was sucessful
+ *
+ * Note:
+ * The public interface is XawAsciiSaveAsFile!
+ */
+Bool
+_XawMultiSaveAsFile(Widget w, _Xconst char* name)
+{
+ MultiSrcObject src = (MultiSrcObject)w;
+ String mb_string;
+ Bool ret;
+
+ mb_string = StorePiecesInString(src);
+
+ if (mb_string != 0) {
+ ret = WriteToFile(mb_string, (char *)name);
+ XtFree(mb_string);
+
+ return (ret);
+ }
+
+ /* otherwise there was a conversion error. So print widget name too */
+ XtAppWarningMsg(XtWidgetToApplicationContext(w),
+ "convertError", "multiSource", "XawError",
+ XtName(XtParent(w)), NULL, NULL);
+
+ return (False);
+}
+
+/*
+ * Private Functions
+ */
+static void
+RemoveOldStringOrFile(MultiSrcObject src, Bool checkString)
+{
+ FreeAllPieces(src);
+
+ if (checkString && src->multi_src.allocated_string) {
+ XtFree((char *)src->multi_src.string);
+ src->multi_src.allocated_string = False;
+ src->multi_src.string = NULL;
+ }
+}
+
+/*
+ * Function:
+ * WriteToFile
+ *
+ * Parameters:
+ * string - string to write
+ * name - name of the file
+ *
+ * Description:
+ * Write the string specified to the begining of the file specified.
+ *
+ * Returns:
+ * Returns True if sucessful, False otherwise
+ */
+static Bool
+WriteToFile(String string, String name)
+{
+ int fd;
+
+ if (((fd = creat(name, 0666)) == -1)
+ || (write(fd, string, strlen(string)) == -1))
+ return (False);
+
+ if (close(fd) == -1)
+ return (False);
+
+ return (True);
+}
+
+
+/*
+ * Function:
+ * StorePiecesInString
+ *
+ * Parameters:
+ * src - the multiSrc object to gather data from
+ *
+ * Description:
+ * Store the pieces in memory into a char string.
+ *
+ * Returns:
+ * mb_string: Caller must free
+ * (or)
+ * NULL: conversion error
+ */
+static String
+StorePiecesInString(MultiSrcObject src)
+{
+ wchar_t *wc_string;
+ char *mb_string;
+ int char_count = src->multi_src.length;
+ XawTextPosition first;
+ MultiPiece *piece;
+
+ /* I believe the char_count + 1 and the NULL termination are unneeded! FS */
+ wc_string = (wchar_t*)XtMalloc((char_count + 1) * sizeof(wchar_t));
+
+ for (first = 0, piece = src->multi_src.first_piece ; piece != NULL;
+ first += piece->used, piece = piece->next)
+ (void)wcsncpy(wc_string + first, piece->text, piece->used);
+
+ wc_string[char_count] = 0;
+
+ /* This will refill all pieces to capacity */
+ if (src->multi_src.data_compression) {
+ FreeAllPieces(src);
+ LoadPieces(src, NULL, (char *)wc_string);
+ }
+
+ /* Lastly, convert it to a MB format and send it back */
+ mb_string = _XawTextWCToMB(XtDisplayOfObject((Widget)src),
+ wc_string, &char_count);
+
+ /* NOTE THAT mb_string MAY BE ZERO IF THE CONVERSION FAILED */
+ XtFree((char*)wc_string);
+
+ return (mb_string);
+}
+
+/*
+ * Function:
+ * InitStringOrFile
+ *
+ * Parameters:
+ * src - MultiSource
+ *
+ * Description:
+ * Initializes the string or file.
+ */
+static FILE *
+InitStringOrFile(MultiSrcObject src, Bool newString)
+{
+ mode_t open_mode = 0;
+ const char *fdopen_mode = NULL;
+ int fd;
+ FILE *file;
+ Display *d = XtDisplayOfObject((Widget)src);
+
+ if (src->multi_src.type == XawAsciiString) {
+ if (src->multi_src.string == NULL)
+ src->multi_src.length = 0;
+
+ else if (!src->multi_src.use_string_in_place) {
+ int length;
+ String temp = XtNewString((char *)src->multi_src.string);
+
+ if (src->multi_src.allocated_string)
+ XtFree((char *)src->multi_src.string);
+ src->multi_src.allocated_string = True;
+ src->multi_src.string = temp;
+
+ length = strlen((char *)src->multi_src.string);
+
+ /* Wasteful, throwing away the WC string, but need side effect! */
+ (void)_XawTextMBToWC(d, (char *)src->multi_src.string, &length);
+ src->multi_src.length = (XawTextPosition)length;
+ }
+ else {
+ src->multi_src.length = strlen((char *)src->multi_src.string);
+ /* In case the length resource is incorrectly set */
+ if (src->multi_src.length > src->multi_src.multi_length)
+ src->multi_src.multi_length = src->multi_src.length;
+
+ if (src->multi_src.multi_length == MAGIC_VALUE)
+ src->multi_src.piece_size = src->multi_src.length;
+ else
+ src->multi_src.piece_size = src->multi_src.multi_length + 1;
+ }
+
+ return (NULL);
+ }
+
+ /*
+ * type is XawAsciiFile
+ */
+ src->multi_src.is_tempfile = False;
+
+ switch (src->text_src.edit_mode) {
+ case XawtextRead:
+ if (src->multi_src.string == NULL)
+ XtErrorMsg("NoFile", "multiSourceCreate", "XawError",
+ "Creating a read only disk widget and no file specified.",
+ NULL, 0);
+ open_mode = O_RDONLY;
+ fdopen_mode = "r";
+ break;
+ case XawtextAppend:
+ case XawtextEdit:
+ if (src->multi_src.string == NULL) {
+ src->multi_src.string = "*multi-src*";
+ src->multi_src.is_tempfile = True;
+ }
+ else {
+/* O_NOFOLLOW is a BSD & Linux extension */
+#ifdef O_NOFOLLOW
+ open_mode = O_RDWR | O_NOFOLLOW;
+#else
+ open_mode = O_RDWR; /* unsafe; subject to race conditions */
+#endif
+ fdopen_mode = "r+";
+ }
+ break;
+ default:
+ XtErrorMsg("badMode", "multiSourceCreate", "XawError",
+ "Bad editMode for multi source; must be "
+ "Read, Append or Edit.", NULL, NULL);
+ }
+
+ /* If is_tempfile, allocate a private copy of the text
+ * Unlikely to be changed, just to set allocated_string */
+ if (newString || src->multi_src.is_tempfile) {
+ String temp = XtNewString((char *)src->multi_src.string);
+
+ if (src->multi_src.allocated_string)
+ XtFree((char *)src->multi_src.string);
+ src->multi_src.string = temp;
+ src->multi_src.allocated_string = True;
+ }
+
+ if (!src->multi_src.is_tempfile) {
+ if ((fd = open((char *)src->multi_src.string, open_mode, 0666)) != -1) {
+ if ((file = fdopen(fd, fdopen_mode)) != NULL) {
+ (void)fseek(file, 0, SEEK_END);
+ src->multi_src.length = (XawTextPosition)ftell(file);
+ return(file);
+ }
+ }
+ {
+ String params[2];
+ Cardinal num_params = 2;
+
+ params[0] = (String)src->multi_src.string;
+ params[1] = strerror(errno);
+ XtAppWarningMsg(XtWidgetToApplicationContext((Widget)src),
+ "openError", "multiSourceCreate", "XawWarning",
+ "Cannot open file %s; %s", params, &num_params);
+ }
+ }
+ src->multi_src.length = 0;
+ return (NULL);
+}
+
+/* LoadPieces: This routine takes either the MB contents of open file
+ `file' or the MB contents of string or the MB contents of
+ src->multi_src.string and places them in Pieces in WC format.
+
+ CAUTION: You must have src->multi_src.length set to file length bytes
+ when src->multi_src.type == XawAsciiFile. src->multi_src.length must be
+ the length of the parameter string if string is non-NULL
+*/
+static void
+LoadPieces(MultiSrcObject src, FILE *file, char *string)
+{
+ Display *d = XtDisplayOfObject((Widget)src);
+ wchar_t* local_str, *ptr;
+ MultiPiece* piece = NULL;
+ XawTextPosition left;
+ int bytes = sizeof(wchar_t);
+ char* temp_mb_holder = NULL;
+
+ /*
+ * This is tricky - the _XawTextMBtoWC converter uses its 3rd arg
+ * in as MB length, out as WC length. We want local_length to be
+ * WC count.
+ */
+ int local_length = src->multi_src.length;
+
+ if (string != NULL) {
+ /*
+ * ASSERT: IF our caller passed a non-null string, THEN
+ * src->multi_src.length is currently string's * byte count,
+ * AND string is in a MB format
+ */
+ local_str = _XawTextMBToWC(d, (char *)string, &local_length);
+ src->multi_src.length = (XawTextPosition) local_length;
+ }
+ else if (src->multi_src.type != XawAsciiFile) {
+ /*
+ * here, we are not changing the contents, just reloading,
+ * so don't change len...
+ */
+ local_length = src->multi_src.string ?
+ strlen((char *)src->multi_src.string) : 0;
+ local_str = _XawTextMBToWC(d, (char *)src->multi_src.string,
+ &local_length);
+ }
+ else {
+ if (src->multi_src.length != 0) {
+ temp_mb_holder =
+ XtMalloc((src->multi_src.length + 1) * sizeof(unsigned char));
+ fseek(file, 0, 0);
+ src->multi_src.length = fread(temp_mb_holder,
+ (Size_t)sizeof(unsigned char),
+ (Size_t)src->multi_src.length, file);
+ if (src->multi_src.length <= 0)
+ XtAppErrorMsg(XtWidgetToApplicationContext ((Widget) src),
+ "readError", "multiSource", "XawError",
+ "fread returned error.", NULL, NULL);
+ local_length = src->multi_src.length;
+ local_str = _XawTextMBToWC(d, temp_mb_holder, &local_length);
+ src->multi_src.length = local_length;
+
+ if (local_str == 0) {
+ String params[2];
+ Cardinal num_params;
+ static char err_text[] =
+ "<<< FILE CONTENTS NOT REPRESENTABLE IN THIS LOCALE >>>";
+
+ params[0] = XtName(XtParent((Widget)src));
+ params[1] = src->multi_src.string;
+ num_params = 2;
+
+ XtAppWarningMsg(XtWidgetToApplicationContext((Widget)src),
+ "readLocaleError", "multiSource", "XawError",
+ "%s: The file `%s' contains characters "
+ "not representable in this locale.",
+ params, &num_params);
+ src->multi_src.length = sizeof err_text;
+ local_length = src->multi_src.length;
+ local_str = _XawTextMBToWC(d, err_text, &local_length);
+ src->multi_src.length = local_length;
+ }
+ }
+ else
+ /* ASSERT that since following while loop looks at local_length
+ this isn't needed. Sheeran, Omron KK, 1993/07/15
+ temp_mb_holder[src->multi_src.length] = '\0'; */
+ local_str = (wchar_t*)temp_mb_holder;
+ }
+
+ if (src->multi_src.use_string_in_place) {
+ piece = AllocNewPiece(src, piece);
+ piece->used = Min(src->multi_src.length, src->multi_src.piece_size);
+ piece->text = (wchar_t*)src->multi_src.string;
+ return;
+ }
+
+ ptr = local_str;
+ left = local_length;
+
+ do {
+ piece = AllocNewPiece(src, piece);
+
+ piece->text = (wchar_t*)XtMalloc((unsigned)(src->multi_src.piece_size
+ * bytes));
+ piece->used = Min(left, src->multi_src.piece_size);
+ if (piece->used != 0)
+ (void)wcsncpy(piece->text, ptr, piece->used);
+
+ left -= piece->used;
+ ptr += piece->used;
+ } while (left > 0);
+
+ if (temp_mb_holder)
+ XtFree((char*)temp_mb_holder);
+}
+
+/*
+ * Function:
+ * AllocNewPiece
+ *
+ * Parameters:
+ * src - MultiSrc Widget
+ * prev - the piece just before this one, or NULL
+ *
+ * Description:
+ * Allocates a new piece of memory.
+ *
+ * Returns:
+ * The allocated piece
+ */
+static MultiPiece *
+AllocNewPiece(MultiSrcObject src, MultiPiece *prev)
+{
+ MultiPiece *piece = XtNew(MultiPiece);
+
+ if (prev == NULL) {
+ src->multi_src.first_piece = piece;
+ piece->next = NULL;
+ }
+ else {
+ if (prev->next != NULL)
+ (prev->next)->prev = piece;
+ piece->next = prev->next;
+ prev->next = piece;
+ }
+
+ piece->prev = prev;
+
+ return (piece);
+}
+
+/*
+ * Function:
+ * FreeAllPieces
+ *
+ * Parameters:
+ * src - MultiSrc Widget
+ *
+ * Description:
+ * Frees all the pieces
+ */
+static void
+FreeAllPieces(MultiSrcObject src)
+{
+ MultiPiece *next, *first = src->multi_src.first_piece;
+
+#ifdef DEBUG
+ if (first->prev != NULL)
+ printf("Xaw MultiSrc Object: possible memory leak in FreeAllPieces().\n");
+#endif
+
+ for (; first != NULL ; first = next) {
+ next = first->next;
+ RemovePiece(src, first);
+ }
+}
+
+/*
+ * Function:
+ * RemovePiece
+ *
+ * Parameters:
+ * piece - piece to remove
+ *
+ * Description:
+ * Removes a piece from the list.
+ */
+static void
+RemovePiece(MultiSrcObject src, MultiPiece *piece)
+{
+ if (piece->prev == NULL)
+ src->multi_src.first_piece = piece->next;
+ else
+ piece->prev->next = piece->next;
+
+ if (piece->next != NULL)
+ piece->next->prev = piece->prev;
+
+ if (!src->multi_src.use_string_in_place)
+ XtFree((char *)piece->text);
+
+ XtFree((char *)piece);
+}
+
+/*
+ * Function:
+ * FindPiece
+ *
+ * Parameters:
+ * src - MultiSrc Widget
+ * position - position that we are searching for
+ * first - position of the first character in this piece (return)
+ *
+ * Description:
+ * Finds the piece containing the position indicated.
+ *
+ * Returns:
+ * Piece that contains this position
+ */
+static MultiPiece *
+FindPiece(MultiSrcObject src, XawTextPosition position, XawTextPosition *first)
+{
+ MultiPiece *old_piece, *piece;
+ XawTextPosition temp;
+
+ for (old_piece = NULL, piece = src->multi_src.first_piece, temp = 0;
+ piece; old_piece = piece, piece = piece->next)
+ if ((temp += piece->used) > position) {
+ *first = temp - piece->used;
+ return (piece);
+ }
+
+ *first = temp - (old_piece ? old_piece->used : 0);
+
+ return (old_piece); /* if we run off the end the return the last piece */
+}
+
+/*
+ * Function:
+ * BreakPiece
+ *
+ * Parameters:
+ * src - MultiSrc Widget
+ * piece - piece to break
+ *
+ * Description:
+ * Breaks a full piece into two new pieces.
+ */
+#define HALF_PIECE (src->multi_src.piece_size >> 1)
+static void
+BreakPiece(MultiSrcObject src, MultiPiece *piece)
+{
+ MultiPiece *cnew = AllocNewPiece(src, piece);
+
+ cnew->text = (wchar_t *)
+ XtMalloc(src->multi_src.piece_size * sizeof(wchar_t));
+ (void)wcsncpy(cnew->text, piece->text + HALF_PIECE,
+ src->multi_src.piece_size - HALF_PIECE);
+ piece->used = HALF_PIECE;
+ cnew->used = src->multi_src.piece_size - HALF_PIECE;
+}
+
+/*ARGSUSED*/
+static void
+CvtStringToMultiType(XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal)
+{
+ static XawAsciiType type = XawAsciiString;
+ XrmQuark q;
+ char name[7];
+
+ XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
+ q = XrmStringToQuark(name);
+
+ if (q == Qstring)
+ type = XawAsciiString;
+ if (q == Qfile)
+ type = XawAsciiFile;
+ else {
+ toVal->size = 0;
+ toVal->addr = NULL;
+ XtStringConversionWarning((char *)fromVal->addr, XtRAsciiType);
+ }
+
+ toVal->size = sizeof(XawAsciiType);
+ toVal->addr = (XPointer)&type;
+}
+
+/*ARGSUSED*/
+static Boolean
+CvtMultiTypeToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal,
+ XtPointer *data)
+{
+ static String buffer;
+ Cardinal size;
+
+ switch (*(XawAsciiType *)fromVal->addr) {
+ case XawAsciiFile:
+ buffer = XtEfile;
+ break;
+ case XawAsciiString:
+ buffer = XtEstring;
+ break;
+ default:
+ XawTypeToStringWarning(dpy, XtRAsciiType);
+ toVal->addr = NULL;
+ toVal->size = 0;
+ return (False);
+ }
+
+ size = strlen(buffer) + 1;
+ if (toVal->addr != NULL) {
+ if (toVal->size < size) {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = (XPointer)buffer;
+ toVal->size = sizeof(String);
+
+ return (True);
+}
+
+/*ARGSUSED*/
+static void
+GetDefaultPieceSize(Widget w, int offset, XrmValue *value)
+{
+ static XPointer pagesize;
+
+ if (pagesize == 0) {
+ pagesize = (XPointer)((long)_XawGetPageSize());
+ if (pagesize < (XPointer)BUFSIZ)
+ pagesize = (XPointer)BUFSIZ;
+ }
+
+ value->addr = (XPointer)&pagesize;
+}
diff --git a/libXaw/src/OS.c b/libXaw/src/OS.c
index 5801aebb8..ce8f0e801 100644
--- a/libXaw/src/OS.c
+++ b/libXaw/src/OS.c
@@ -1,64 +1,53 @@
-/* $XFree86: xc/lib/Xaw/OS.c,v 1.1 1998/12/06 10:44:34 dawes Exp $ */
-
-/* Some OS-dependent utility code */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/Xosdefs.h>
-#include <X11/IntrinsicP.h>
-#include "Private.h"
-
-#ifndef X_NOT_POSIX
-#include <unistd.h> /* for sysconf(), and getpagesize() */
-#endif
-
-#if defined(linux)
-/* kernel header doesn't work with -ansi */
-/* #include <asm/page.h> *//* for PAGE_SIZE */
-#define HAS_GETPAGESIZE
-#define HAS_SC_PAGESIZE /* _SC_PAGESIZE may be an enum for Linux */
-#endif
-
-#if defined(CSRG_BASED)
-#define HAS_GETPAGESIZE
-#endif
-
-#if defined(sun)
-#define HAS_GETPAGESIZE
-#endif
-
-int
-_XawGetPageSize(void)
-{
- static int pagesize = -1;
-
- if (pagesize != -1)
- return pagesize;
-
- /* Try each supported method in the preferred order */
-
-#if defined(_SC_PAGESIZE) || defined(HAS_SC_PAGESIZE)
- pagesize = sysconf(_SC_PAGESIZE);
-#endif
-
-#ifdef _SC_PAGE_SIZE
- if (pagesize == -1)
- pagesize = sysconf(_SC_PAGE_SIZE);
-#endif
-
-#ifdef HAS_GETPAGESIZE
- if (pagesize == -1)
- pagesize = getpagesize();
-#endif
-
-#ifdef PAGE_SIZE
- if (pagesize == -1)
- pagesize = PAGE_SIZE;
-#endif
-
- if (pagesize == -1)
- pagesize = 0;
-
- return pagesize;
-}
+/* Some OS-dependent utility code */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/Xosdefs.h>
+#include <X11/IntrinsicP.h>
+#include "Private.h"
+
+#ifndef X_NOT_POSIX
+#include <unistd.h> /* for sysconf(), and getpagesize() */
+#endif
+
+#if defined(linux)
+/* kernel header doesn't work with -ansi */
+/* #include <asm/page.h> *//* for PAGE_SIZE */
+#define HAS_SC_PAGESIZE /* _SC_PAGESIZE may be an enum for Linux */
+#endif
+
+int
+_XawGetPageSize(void)
+{
+ static int pagesize = -1;
+
+ if (pagesize != -1)
+ return pagesize;
+
+ /* Try each supported method in the preferred order */
+
+#if defined(_SC_PAGESIZE) || defined(HAS_SC_PAGESIZE)
+ pagesize = sysconf(_SC_PAGESIZE);
+#endif
+
+#ifdef _SC_PAGE_SIZE
+ if (pagesize == -1)
+ pagesize = sysconf(_SC_PAGE_SIZE);
+#endif
+
+#ifdef HAVE_GETPAGESIZE
+ if (pagesize == -1)
+ pagesize = getpagesize();
+#endif
+
+#ifdef PAGE_SIZE
+ if (pagesize == -1)
+ pagesize = PAGE_SIZE;
+#endif
+
+ if (pagesize == -1)
+ pagesize = 0;
+
+ return pagesize;
+}
diff --git a/libXaw/src/Paned.c b/libXaw/src/Paned.c
index a2408ba70..842ea0e59 100644
--- a/libXaw/src/Paned.c
+++ b/libXaw/src/Paned.c
@@ -1,2067 +1,2064 @@
-/* $Xorg: Paned.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Paned.c,v 1.11 2001/08/23 00:03:19 dawes Exp $ */
-
-/*
- * Updated and significantly modified from the Athena VPaned Widget.
- *
- * Date: March 1, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/cursorfont.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/Grip.h>
-#include <X11/Xaw/PanedP.h>
-#include <X11/Xaw/XawImP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-typedef enum {
- UpLeftPane = 'U',
- LowRightPane = 'L',
- ThisBorderOnly = 'T',
- AnyPane = 'A'
-} Direction;
-
-#define NO_INDEX -100
-#define IS_GRIP NULL
-
-#define PaneInfo(w) ((Pane)(w)->core.constraints)
-#define HasGrip(w) (PaneInfo(w)->grip != NULL)
-#define IsPane(w) ((w)->core.widget_class != gripWidgetClass)
-#define PaneIndex(w) (PaneInfo(w)->position)
-#define IsVert(w) ((w)->paned.orientation == XtorientVertical)
-
-#define ForAllPanes(pw, childP) \
-for ((childP) = (pw)->composite.children; \
- (childP) < (pw)->composite.children + (pw)->paned.num_panes; \
- (childP)++)
-
-#define ForAllChildren(pw, childP) \
-for ((childP) = (pw)->composite.children; \
- (childP) < (pw)->composite.children + (pw)->composite.num_children; \
- (childP)++)
-
-#define PaneSize(paned, vertical) \
- ((vertical) ? XtHeight(paned) : XtWidth(paned))
-
-#define GetRequestInfo(geo, vertical) \
- ((vertical) ? (geo)->height : (geo)->width)
-
-#define SatisfiesRule1(pane, shrink) \
- (((shrink) && ((pane)->size != (pane)->min)) \
- || (!(shrink) && ((pane)->size != (pane)->max)))
-
-#define SatisfiesRule2(pane) \
- (!(pane)->skip_adjust || (pane)->paned_adjusted_me)
-
-#define SatisfiesRule3(pane, shrink) \
- ((pane)->paned_adjusted_me \
- && (((shrink) && ((int)(pane)->wp_size <= (pane)->size)) \
- || (!(shrink) && ((int)(pane)->wp_size >= (pane)->size))))
-
-
-/*
- * Class Methods
- */
-static void XawPanedClassInitialize(void);
-static void XawPanedChangeManaged(Widget);
-static void XawPanedDeleteChild(Widget);
-static void XawPanedDestroy(Widget);
-static XtGeometryResult XawPanedGeometryManager(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawPanedInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawPanedInsertChild(Widget);
-static Boolean XawPanedPaneSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static void XawPanedRealize(Widget, Mask*, XSetWindowAttributes*);
-static void XawPanedRedisplay(Widget, XEvent*, Region);
-static void XawPanedResize(Widget);
-static Boolean XawPanedSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void _DrawInternalBorders(PanedWidget, GC);
-static void _DrawRect(PanedWidget, GC, int, int, unsigned int, unsigned int);
-static void _DrawTrackLines(PanedWidget, Bool);
-static void AdjustPanedSize(PanedWidget, unsigned int, XtGeometryResult*,
- Dimension*, Dimension*);
-static void ChangeAllGripCursors(PanedWidget);
-static Pane ChoosePaneToResize(PanedWidget, int, Direction, Bool);
-static void ClearPaneStack(PanedWidget);
-static void CommitGripAdjustment(PanedWidget);
-static void CreateGrip(Widget);
-static int GetEventLocation(PanedWidget, XEvent*);
-static void GetGCs(Widget);
-static void GetPaneStack(PanedWidget, Bool, Pane*, int*);
-static void HandleGrip(Widget, XtPointer, XtPointer);
-static void LoopAndRefigureChildren(PanedWidget, int, Direction, int*);
-static void ManageAndUnmanageGrips(PanedWidget);
-static void MoveGripAdjustment(PanedWidget, Widget, Direction, int);
-static Bool PopPaneStack(PanedWidget);
-static void PushPaneStack(PanedWidget, Pane);
-static void RefigureLocations(PanedWidget, int, Direction);
-static void RefigureLocationsAndCommit(Widget);
-static void ReleaseGCs(Widget);
-static void ResortChildren(PanedWidget);
-static void SetChildrenPrefSizes(PanedWidget, unsigned int);
-static void StartGripAdjustment(PanedWidget, Widget, Direction);
-
-/*
- * Initialization
- */
-static char defGripTranslations[] =
-"<Btn1Down>:" "GripAction(Start,UpLeftPane)\n"
-"<Btn2Down>:" "GripAction(Start,ThisBorderOnly)\n"
-"<Btn3Down>:" "GripAction(Start,LowRightPane)\n"
-"<Btn1Motion>:" "GripAction(Move,UpLeft)\n"
-"<Btn2Motion>:" "GripAction(Move,ThisBorder)\n"
-"<Btn3Motion>:" "GripAction(Move,LowRight)\n"
-"Any<BtnUp>:" "GripAction(Commit)\n"
-;
-
-#define offset(field) XtOffsetOf(PanedRec, paned.field)
-static XtResource resources[] = {
- {
- XtNinternalBorderColor,
- XtCBorderColor,
- XtRPixel,
- sizeof(Pixel),
- offset(internal_bp),
- XtRString,
- (XtPointer)XtDefaultForeground
- },
- {
- XtNinternalBorderWidth,
- XtCBorderWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(internal_bw),
- XtRImmediate,
- (XtPointer)1
- },
- {
- XtNgripIndent,
- XtCGripIndent,
- XtRPosition,
- sizeof(Position),
- offset(grip_indent),
- XtRImmediate,
- (XtPointer)10
- },
- {
- XtNrefigureMode,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(refiguremode),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNgripTranslations,
- XtCTranslations,
- XtRTranslationTable,
- sizeof(XtTranslations),
- offset(grip_translations),
- XtRString,
- (XtPointer)defGripTranslations
- },
- {
- XtNorientation,
- XtCOrientation,
- XtROrientation,
- sizeof(XtOrientation),
- offset(orientation),
- XtRImmediate,
- (XtPointer)XtorientVertical
- },
- {
- XtNcursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(cursor),
- XtRImmediate,
- NULL
- },
- {
- XtNgripCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(grip_cursor),
- XtRImmediate,
- NULL
- },
- {
- XtNverticalGripCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(v_grip_cursor),
- XtRString,
- "sb_v_double_arrow"
- },
- {
- XtNhorizontalGripCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(h_grip_cursor),
- XtRString,
- "sb_h_double_arrow"
- },
- {
- XtNbetweenCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(adjust_this_cursor),
- XtRString,
- NULL
- },
- {
- XtNverticalBetweenCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(v_adjust_this_cursor),
- XtRString,
- "sb_left_arrow"
- },
- {
- XtNhorizontalBetweenCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(h_adjust_this_cursor),
- XtRString,
- "sb_up_arrow"
- },
- {
- XtNupperCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(adjust_upper_cursor),
- XtRString,
- "sb_up_arrow"
- },
- {
- XtNlowerCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(adjust_lower_cursor),
- XtRString,
- "sb_down_arrow"
- },
- {
- XtNleftCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(adjust_left_cursor),
- XtRString,
- "sb_left_arrow"
- },
- {
- XtNrightCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(adjust_right_cursor),
- XtRString,
- "sb_right_arrow"
- },
-};
-#undef offset
-
-#define offset(field) XtOffsetOf(PanedConstraintsRec, paned.field)
-static XtResource subresources[] = {
- {
- XtNallowResize,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(allow_resize),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNposition,
- XtCPosition,
- XtRInt,
- sizeof(int),
- offset(position),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNmin,
- XtCMin,
- XtRDimension,
- sizeof(Dimension),
- offset(min),
- XtRImmediate,
- (XtPointer)PANED_GRIP_SIZE
- },
- {
- XtNmax,
- XtCMax,
- XtRDimension,
- sizeof(Dimension),
- offset(max),
- XtRImmediate,
- (XtPointer)~0
- },
- {
- XtNpreferredPaneSize,
- XtCPreferredPaneSize,
- XtRDimension,
- sizeof(Dimension),
- offset(preferred_size),
- XtRImmediate,
- (XtPointer)PANED_ASK_CHILD
- },
- {
- XtNresizeToPreferred,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(resize_to_pref),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNskipAdjust,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(skip_adjust),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNshowGrip,
- XtCShowGrip,
- XtRBoolean,
- sizeof(Boolean),
- offset(show_grip),
- XtRImmediate,
- (XtPointer)True
- },
-};
-#undef offset
-
-#define SuperClass ((ConstraintWidgetClass)&constraintClassRec)
-
-PanedClassRec panedClassRec = {
- /* core */
- {
- (WidgetClass)SuperClass, /* superclass */
- "Paned", /* class name */
- sizeof(PanedRec), /* size */
- XawPanedClassInitialize, /* class_initialize */
- NULL, /* class_part init */
- False, /* class_inited */
- XawPanedInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawPanedRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawPanedDestroy, /* destroy */
- XawPanedResize, /* resize */
- XawPanedRedisplay, /* expose */
- XawPanedSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* composite */
- {
- XawPanedGeometryManager, /* geometry_manager */
- XawPanedChangeManaged, /* change_managed */
- XawPanedInsertChild, /* insert_child */
- XawPanedDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- /* constraint */
- {
- subresources, /* subresources */
- XtNumber(subresources), /* subresource_count */
- sizeof(PanedConstraintsRec), /* constraint_size */
- NULL, /* initialize */
- NULL, /* destroy */
- XawPanedPaneSetValues, /* set_values */
- NULL, /* extension */
- },
-};
-
-WidgetClass panedWidgetClass = (WidgetClass)&panedClassRec;
-WidgetClass vPanedWidgetClass = (WidgetClass)&panedClassRec;
-
-/*
- * Implementation
- */
-/* Function:
- * AdjustPanedSize
- *
- * Parameters:
- * pw - paned widget to adjust
- * off_size - new off_size to use
- * result_ret - result of query (return)
- * on_size_ret - new on_size (return)
- * off_size_ret - new off_size (return)
- *
- * Description:
- * Adjusts the size of the pane.
- *
- * Returns:
- * amount of change in size
- */
-static void
-AdjustPanedSize(PanedWidget pw, unsigned int off_size,
- XtGeometryResult *result_ret,
- Dimension *on_size_ret, Dimension *off_size_ret)
-{
- Dimension old_size = PaneSize((Widget)pw, IsVert(pw));
- Dimension newsize = 0;
- Widget *childP;
- XtWidgetGeometry request, reply;
-
- request.request_mode = CWWidth | CWHeight;
-
- ForAllPanes(pw, childP) {
- int size = Max(PaneInfo(*childP)->size, (int)PaneInfo(*childP)->min);
-
- AssignMin(size, (int)PaneInfo(*childP)->max);
- newsize += size + pw->paned.internal_bw;
- }
- newsize -= pw->paned.internal_bw;
-
- if (newsize < 1)
- newsize = 1;
-
- if (IsVert(pw)) {
- request.width = off_size;
- request.height = newsize;
- }
- else {
- request.width = newsize;
- request.height = off_size;
- }
-
- if (result_ret != NULL) {
- request.request_mode |= XtCWQueryOnly;
-
- *result_ret = XtMakeGeometryRequest((Widget)pw, &request, &reply);
- _XawImCallVendorShellExtResize((Widget)pw);
-
- if (newsize == old_size || *result_ret == XtGeometryNo) {
- *on_size_ret = old_size;
- *off_size_ret = off_size;
- return;
- }
- if (*result_ret != XtGeometryAlmost) {
- *on_size_ret = GetRequestInfo(&request, IsVert(pw));
- *off_size_ret = GetRequestInfo(&request, !IsVert(pw));
- return;
- }
- *on_size_ret = GetRequestInfo(&reply, IsVert(pw));
- *off_size_ret = GetRequestInfo(&reply, !IsVert(pw));
- return;
- }
-
- if (newsize == old_size)
- return;
-
- if (XtMakeGeometryRequest((Widget)pw, &request, &reply) == XtGeometryAlmost)
- XtMakeGeometryRequest((Widget)pw, &reply, &request);
-}
-
-/*
- * Function:
- * ChoosePaneToResize.
- *
- * Parameters:
- * pw - paned widget
- * paneindex - index of the current pane
- * dir - direction to search first
- * shrink - True if we need to shrink a pane, False otherwise
- *
- * Description:
- * This function chooses a pane to resize.
- They are chosen using the following rules:
- *
- * 1) size < max && size > min
- * 2) skip adjust == False
- * 3) widget not its prefered height
- * && this change will bring it closer
- * && The user has not resized this pane.
- *
- * If no widgets are found that fits all the rules then
- * rule #3 is broken.
- * If there are still no widgets found than
- * rule #2 is broken.
- * Rule #1 is never broken.
- * If no widgets are found then NULL is returned.
- *
- * Returns:
- * pane to resize or NULL
- */
-static Pane
-ChoosePaneToResize(PanedWidget pw, int paneindex, Direction dir, Bool shrink)
-{
- Widget *childP;
- int rules = 3;
- Direction _dir = dir;
- int _index = paneindex;
-
- if (paneindex == NO_INDEX || dir == AnyPane) { /* Use defaults */
- _dir = LowRightPane; /* Go up - really */
- _index = pw->paned.num_panes - 1; /* Start the last pane, and work
- backwards */
- }
- childP = pw->composite.children + _index;
-
- /*CONSTCOND*/
- while(True) {
- Pane pane = PaneInfo(*childP);
-
- if ((rules < 3 || SatisfiesRule3(pane, shrink))
- && (rules < 2 || SatisfiesRule2(pane))
- && SatisfiesRule1(pane, shrink)
- && (paneindex != PaneIndex(*childP) || dir == AnyPane))
- return (pane);
-
- /*
- * This is counter-intuitive, but if we are resizing the pane
- * above the grip we want to choose a pane below the grip to lose,
- * and visa-versa
- */
- if (_dir == LowRightPane)
- --childP;
- else
- ++childP;
-
- /*
- * If we have come to and edge then reduce the rule set, and try again
- * If we are reduced the rules to none, then return NULL
- */
- if ((childP - pw->composite.children) < 0 ||
- (childP - pw->composite.children) >= pw->paned.num_panes) {
- if (--rules < 1) /* less strict rules */
- return (NULL);
- childP = pw->composite.children + _index;
- }
- }
-}
-
-/*
- * Function:
- * LoopAndRefigureChildren
- *
- * Parameters:
- * pw - paned widget
- * paneindex - number of the pane border we are moving
- * dir - pane to move (either UpLeftPane or LowRightPane)
- * sizeused - current amount of space used (used and returned)
- *
- * Description:
- * If we are resizing either the UpleftPane or LowRight Pane loop
- * through all the children to see if any will allow us to resize them.
- */
-static void
-LoopAndRefigureChildren(PanedWidget pw, int paneindex, Direction dir,
- int *sizeused)
-{
- int pane_size = (int)PaneSize((Widget)pw, IsVert(pw));
- Boolean shrink = (*sizeused > pane_size);
-
- if (dir == LowRightPane)
- paneindex++;
-
- /* While all panes do not fit properly */
- while (*sizeused != pane_size) {
- /*
- * Choose a pane to resize
- * First look on the Pane Stack, and then go hunting for another one
- * If we fail to find a pane to resize then give up
- */
- Pane pane;
- int start_size;
- Dimension old;
- Boolean rule3_ok = False, from_stack = True;
-
- GetPaneStack(pw, shrink, &pane, &start_size);
- if (pane == NULL) {
- pane = ChoosePaneToResize(pw, paneindex, dir, shrink);
- if (pane == NULL)
- return; /* no one to resize, give up */
-
- rule3_ok = SatisfiesRule3(pane, shrink);
- from_stack = False;
- PushPaneStack(pw, pane);
- }
-
- /*
- * Try to resize this pane so that all panes will fit, take min and max
- * into account
- */
- old = pane->size;
- pane->size += pane_size - *sizeused;
-
- if (from_stack) {
- if (shrink) {
- AssignMax(pane->size, start_size);
- } /* don't remove these braces */
- else
- AssignMin(pane->size, start_size);
-
- if (pane->size == start_size)
- (void)PopPaneStack(pw);
- }
- else if (rule3_ok) {
- if (shrink) {
- AssignMax(pane->size, (int)pane->wp_size);
- } /* don't remove these braces */
- else
- AssignMin(pane->size, (int)pane->wp_size);
- }
-
- pane->paned_adjusted_me = pane->size != pane->wp_size;
- AssignMax(pane->size, (int)pane->min);
- AssignMin(pane->size, (int)pane->max);
- *sizeused += (pane->size - old);
- }
-}
-
-/*
- * Function:
- * RefigureLocations
- *
- * Parameters:
- * pw - paned widget
- * paneindex - child to start refiguring at
- * dir - direction to move from child
- *
- * Description:
- * Refigures all locations of children.
- * There are special arguments to paneindex and dir, they are:
- * paneindex - NO_INDEX.
- * dir - AnyPane.
- *
- * If either of these is true then all panes may be resized and
- * the choosing of panes procedes in reverse order starting with the
- * last child.
- */
-static void
-RefigureLocations(PanedWidget pw, int paneindex, Direction dir)
-{
- Widget *childP;
- int pane_size = (int)PaneSize((Widget)pw, IsVert(pw));
- int sizeused = 0;
- Position loc = 0;
-
- if (pw->paned.num_panes == 0 || !pw->paned.refiguremode)
- return;
-
- /*
- * Get an initial estimate of the size we will use
- */
- ForAllPanes(pw, childP) {
- Pane pane = PaneInfo(*childP);
-
- AssignMax(pane->size, (int) pane->min);
- AssignMin(pane->size, (int) pane->max);
- sizeused += (int)pane->size + (int)pw->paned.internal_bw;
- }
- sizeused -= (int)pw->paned.internal_bw;
-
- if (dir != ThisBorderOnly && sizeused != pane_size)
- LoopAndRefigureChildren(pw, paneindex, dir, &sizeused);
-
- /*
- * If we still are not the right size, then tell the pane that
- * wanted to resize that it can't
- */
- if (paneindex != NO_INDEX && dir != AnyPane) {
- Pane pane = PaneInfo(*(pw->composite.children + paneindex));
- Dimension old = pane->size;
-
- pane->size += pane_size - sizeused;
- AssignMax(pane->size, (int) pane->min);
- AssignMin(pane->size, (int) pane->max);
- sizeused += pane->size - old;
- }
-
- /*
- * It is possible that the panes will not fit inside the vpaned widget, but
- * we have tried out best
- *
- * Assign each pane a location
- */
- ForAllPanes(pw, childP) {
- PaneInfo(*childP)->delta = loc;
- loc += PaneInfo(*childP)->size + pw->paned.internal_bw;
- }
-}
-
-/*
- * Function:
- * CommitNewLocations
- *
- * Parameters:
- * pw - paned widget
- *
- * Description:
- * Commits all of the previously figured locations.
- */
-static void
-CommitNewLocations(PanedWidget pw)
-{
- Widget *childP;
- XWindowChanges changes;
-
- changes.stack_mode = Above;
-
- ForAllPanes(pw, childP) {
- Pane pane = PaneInfo(*childP);
- Widget grip = pane->grip; /* may be NULL */
-
- if (IsVert(pw)) {
- XtMoveWidget(*childP, (Position) 0, pane->delta);
- XtResizeWidget(*childP, XtWidth(pw), pane->size, 0);
-
- if (HasGrip(*childP)) { /* Move and Display the Grip */
- changes.x = XtWidth(pw) - pw->paned.grip_indent -
- XtWidth(grip) - (XtBorderWidth(grip) << 1);
- changes.y = XtY(*childP) + XtHeight(*childP) -
- (XtHeight(grip) >> 1) - XtBorderWidth(grip) +
- (pw->paned.internal_bw >> 1);
- }
- }
- else {
- XtMoveWidget(*childP, pane->delta, 0);
- XtResizeWidget(*childP, pane->size, XtHeight(pw), 0);
-
- if (HasGrip(*childP)) { /* Move and Display the Grip */
- changes.x = XtX(*childP) + XtWidth(*childP) -
- (XtWidth(grip) >> 1) - XtBorderWidth(grip) +
- (pw->paned.internal_bw >> 1);
- changes.y = XtHeight(pw) - pw->paned.grip_indent -
- XtHeight(grip) - (XtBorderWidth(grip) << 1);
- }
- }
-
- /*
- * This should match XtMoveWidget, except that we're also insuring the
- * grip is Raised in the same request
- */
-
- if (HasGrip(*childP)) {
- XtX(grip) = changes.x;
- XtY(grip) = changes.y;
-
- if (XtIsRealized(pane->grip))
- XConfigureWindow(XtDisplay(pane->grip), XtWindow(pane->grip),
- CWX | CWY | CWStackMode, &changes);
- }
- }
- ClearPaneStack(pw);
-}
-
-/*
- * Function:
- * RefigureLocationsAndCommit
- *
- * Parameters:
- * pw - paned widget
- *
- * Description:
- * Refigures all locations in a paned widget and commits them immediately.
- *
- * This function does nothing if any of the following are true.
- * o refiguremode is false.
- * o The widget is unrealized.
- * o There are no panes is the paned widget.
- */
-static void
-RefigureLocationsAndCommit(Widget w)
-{
- PanedWidget pw = (PanedWidget)w;
-
- if (pw->paned.refiguremode && XtIsRealized(w) && pw->paned.num_panes > 0) {
- RefigureLocations(pw, NO_INDEX, AnyPane);
- CommitNewLocations(pw);
- }
-}
-
-/*
- * Function:
- * _DrawRect
- *
- * Parameters:
- * pw - paned widget
- * gc - gc to used for the draw
- * on_olc - location of upper left corner of rect
- * off_loc - ""
- * on_size - size of rectangle
- * off_size - ""
- *
- * Description:
- * Draws a rectangle in the proper orientation.
- */
-static void
-_DrawRect(PanedWidget pw, GC gc, int on_loc, int off_loc,
- unsigned int on_size, unsigned int off_size)
-{
- if (IsVert(pw))
- XFillRectangle(XtDisplay((Widget)pw), XtWindow((Widget)pw), gc,
- off_loc, on_loc, off_size, on_size);
- else
- XFillRectangle(XtDisplay((Widget)pw), XtWindow((Widget)pw), gc,
- on_loc, off_loc, on_size, off_size);
-}
-
-/*
- * Function:
- * _DrawInternalBorders
- *
- * Parameters:
- * pw - paned widget
- * gc - GC to use to draw the borders
- *
- * Description:
- * Draws the internal borders into the paned widget.
- */
-static void
-_DrawInternalBorders(PanedWidget pw, GC gc)
-{
- Widget *childP;
- int on_loc, off_loc;
- unsigned int on_size, off_size;
-
- /*
- * This is an optimization. Do not paint the internal borders if
- * they are the same color as the background
- */
- if (pw->core.background_pixel == pw->paned.internal_bp)
- return;
-
- off_loc = 0;
- off_size = (unsigned int) PaneSize((Widget)pw, !IsVert(pw));
- on_size = (unsigned int)pw->paned.internal_bw;
-
- ForAllPanes(pw, childP) {
- on_loc = IsVert(pw) ? XtY(*childP) : XtX(*childP);
- on_loc -= (int)on_size;
-
- _DrawRect(pw, gc, on_loc, off_loc, on_size, off_size);
- }
-}
-
-#define DrawInternalBorders(pw) \
- _DrawInternalBorders((pw), (pw)->paned.normgc)
-#define EraseInternalBorders(pw) \
- _DrawInternalBorders((pw), (pw)->paned.invgc)
-/*
- * Function Name:
- * _DrawTrackLines
- *
- * Parameters:
- * pw - Paned widget
- * erase - if True then just erase track lines, else draw them in
- *
- * Description:
- * Draws the lines that animate the pane borders when the grips are moved.
- */
-static void
-_DrawTrackLines(PanedWidget pw, Bool erase)
-{
- Widget *childP;
- Pane pane;
- int on_loc, off_loc;
- unsigned int on_size, off_size;
-
- off_loc = 0;
- off_size = PaneSize((Widget)pw, !IsVert(pw));
-
- ForAllPanes(pw, childP) {
- pane = PaneInfo(*childP);
- if (erase || pane->olddelta != pane->delta) {
- on_size = pw->paned.internal_bw;
- if (!erase) {
- on_loc = PaneInfo(*childP)->olddelta - (int) on_size;
- _DrawRect(pw, pw->paned.flipgc,
- on_loc, off_loc, on_size, off_size);
- }
-
- on_loc = PaneInfo(*childP)->delta - (int)on_size;
-
- _DrawRect(pw, pw->paned.flipgc,
- on_loc, off_loc, on_size, off_size);
-
- pane->olddelta = pane->delta;
- }
- }
-}
-
-#define DrawTrackLines(pw) _DrawTrackLines((pw), False);
-#define EraseTrackLines(pw) _DrawTrackLines((pw), True);
-/*
- * Function:
- * GetEventLocation
- *
- * Parameters:
- * pw - the paned widget
- * event - pointer to an event
- *
- * Description:
- * Converts and event to an x and y location.
- *
- * Returns:
- * if this is a vertical pane then (y) else (x)
- */
-static int
-GetEventLocation(PanedWidget pw, XEvent *event)
-{
- int x, y;
-
- switch (event->xany.type) {
- case ButtonPress:
- case ButtonRelease:
- x = event->xbutton.x_root;
- y = event->xbutton.y_root;
- break;
- case KeyPress:
- case KeyRelease:
- x = event->xkey.x_root;
- y = event->xkey.y_root;
- break;
- case MotionNotify:
- x = event->xmotion.x_root;
- y = event->xmotion.y_root;
- break;
- default:
- x = pw->paned.start_loc;
- y = pw->paned.start_loc;
- }
-
- if (IsVert(pw))
- return (y);
-
- return (x);
-}
-
-/*
- * Function:
- * StartGripAdjustment
- *
- * Parameters:
- * pw - paned widget
- * grip - grip widget selected
- * dir - direction that we are to be moving
- *
- * Description:
- * Starts the grip adjustment procedure.
- */
-static void
-StartGripAdjustment(PanedWidget pw, Widget grip, Direction dir)
-{
- Widget *childP;
- Cursor cursor;
-
- pw->paned.whichadd = pw->paned.whichsub = NULL;
-
- if (dir == ThisBorderOnly || dir == UpLeftPane)
- pw->paned.whichadd = pw->composite.children[PaneIndex(grip)];
- if (dir == ThisBorderOnly || dir == LowRightPane)
- pw->paned.whichsub = pw->composite.children[PaneIndex(grip) + 1];
-
- /*
- * Change the cursor
- */
- if (XtIsRealized(grip)) {
- if (IsVert(pw)) {
- if (dir == UpLeftPane)
- cursor = pw->paned.adjust_upper_cursor;
- else if (dir == LowRightPane)
- cursor = pw->paned.adjust_lower_cursor;
- else {
- if (pw->paned.adjust_this_cursor == None)
- cursor = pw->paned.v_adjust_this_cursor;
- else
- cursor = pw->paned.adjust_this_cursor;
- }
- }
- else {
- if (dir == UpLeftPane)
- cursor = pw->paned.adjust_left_cursor;
- else if (dir == LowRightPane)
- cursor = pw->paned.adjust_right_cursor;
- else {
- if (pw->paned.adjust_this_cursor == None)
- cursor = pw->paned.h_adjust_this_cursor;
- else
- cursor = pw->paned.adjust_this_cursor;
- }
- }
-
- XDefineCursor(XtDisplay(grip), XtWindow(grip), cursor);
- }
-
- EraseInternalBorders(pw);
- ForAllPanes(pw, childP)
- PaneInfo(*childP)->olddelta = -99;
-
- EraseTrackLines(pw);
-}
-
-/*
- * Function:
- * MoveGripAdjustment
- *
- * Parameters:
- * pw - paned widget
- * grip - grip that we are moving
- * dir - direction the pane we are interested is w.r.t the grip
- * loc - location of pointer in proper direction
- *
- * Description:
- * This routine moves all panes around when a grip is moved.
- */
-static void
-MoveGripAdjustment(PanedWidget pw, Widget grip, Direction dir, int loc)
-{
- int diff, add_size = 0, sub_size = 0;
-
- diff = loc - pw->paned.start_loc;
-
- if (pw->paned.whichadd)
- add_size = PaneSize(pw->paned.whichadd, IsVert(pw)) + diff;
-
- if (pw->paned.whichsub)
- sub_size = PaneSize(pw->paned.whichsub, IsVert(pw)) - diff;
-
- /*
- * If moving this border only then do not allow either of the borders
- * to go beyond the min or max size allowed
- */
- if (dir == ThisBorderOnly) {
- int old_add_size = add_size, old_sub_size;
-
- AssignMax(add_size, (int)PaneInfo(pw->paned.whichadd)->min);
- AssignMin(add_size, (int)PaneInfo(pw->paned.whichadd)->max);
- if (add_size != old_add_size)
- sub_size += old_add_size - add_size;
-
- old_sub_size = sub_size;
- AssignMax(sub_size, (int)PaneInfo(pw->paned.whichsub)->min);
- AssignMin(sub_size, (int)PaneInfo(pw->paned.whichsub)->max);
- if (sub_size != old_sub_size)
- return; /* Abort to current sizes */
- }
-
- if (add_size != 0)
- PaneInfo(pw->paned.whichadd)->size = add_size;
- if (sub_size != 0)
- PaneInfo(pw->paned.whichsub)->size = sub_size;
- RefigureLocations(pw, PaneIndex(grip), dir);
- DrawTrackLines(pw);
-}
-
-/*
- * Function:
- * CommitGripAdjustment
- *
- * Parameters:
- * pw - paned widget
- *
- * Description:
- * Commits the grip adjustment.
- */
-static void
-CommitGripAdjustment(PanedWidget pw)
-{
- EraseTrackLines(pw);
- CommitNewLocations(pw);
- DrawInternalBorders(pw);
-
- /*
- * Since the user selected this size then use it as the preferred size
- */
- if (pw->paned.whichadd) {
- Pane pane = PaneInfo(pw->paned.whichadd);
-
- pane->wp_size = pane->size;
- }
- if (pw->paned.whichsub) {
- Pane pane = PaneInfo(pw->paned.whichsub);
-
- pane->wp_size = pane->size;
- }
-}
-
-/*
- * Function:
- * HandleGrip
- *
- * Parameters:
- * grip - grip widget that has been moved
- * temp - (not used)
- * call_data - data passed to us from the grip widget
- *
- * Description:
- * Handles the grip manipulations.
- */
-/*ARGSUSED*/
-static void
-HandleGrip(Widget grip, XtPointer temp, XtPointer callData)
-{
- XawGripCallData call_data = (XawGripCallData)callData;
- PanedWidget pw = (PanedWidget) XtParent(grip);
- int loc;
- char action_type[2], direction[2];
- Cursor cursor;
- Arg arglist[1];
-
- if (call_data->num_params)
- XmuNCopyISOLatin1Uppered(action_type, call_data->params[0],
- sizeof(action_type));
-
- if (call_data->num_params == 0
- || (action_type[0] == 'C' && call_data->num_params != 1)
- || (action_type[0] != 'C' && call_data->num_params != 2))
- XtAppError(XtWidgetToApplicationContext(grip),
- "Paned GripAction has been passed incorrect parameters.");
-
- loc = GetEventLocation(pw, (XEvent *)call_data->event);
-
- if (action_type[0] != 'C')
- XmuNCopyISOLatin1Uppered(direction, call_data->params[1],
- sizeof(direction));
-
- switch (action_type[0]) {
- case 'S': /* Start adjustment */
- pw->paned.resize_children_to_pref = False;
- StartGripAdjustment(pw, grip, (Direction)direction[0]);
- pw->paned.start_loc = loc;
- break;
- case 'M':
- MoveGripAdjustment(pw, grip, (Direction)direction[0], loc);
- break;
- case 'C':
- XtSetArg(arglist[0], XtNcursor, &cursor);
- XtGetValues(grip, arglist, 1);
- XDefineCursor(XtDisplay(grip), XtWindow(grip), cursor);
- CommitGripAdjustment(pw);
- break;
- default:
- XtAppError(XtWidgetToApplicationContext(grip),
- "Paned GripAction(); 1st parameter invalid");
- break;
- }
-}
-
-/*
- * Function:
- * ResortChildren
- *
- * Arguments:
- * pw - paned widget
- *
- * Description:
- * Resorts the children so that all managed children are first.
- */
-static void
-ResortChildren(PanedWidget pw)
-{
- Widget *unmanagedP, *childP;
-
- unmanagedP = NULL;
- ForAllChildren(pw, childP) {
- if (!IsPane(*childP) || !XtIsManaged(*childP)) {
- /*
- * We only keep track of the first unmanaged pane
- */
- if (unmanagedP == NULL)
- unmanagedP = childP;
- }
- else { /* must be a managed pane */
- /*
- * If an earlier widget was not a managed pane, then swap
- */
- if (unmanagedP != NULL) {
- Widget child = *unmanagedP;
-
- *unmanagedP = *childP;
- *childP = child;
- childP = unmanagedP; /* easiest to just back-track */
- unmanagedP = NULL; /* in case there is another managed */
- }
- }
- }
-}
-
-/*
- * Function:
- * ManageAndUnmanageGrips
- *
- * Parameters:
- * pw - paned widget
- *
- * Description:
- * This function manages and unmanages the grips so that
- * the managed state of each grip matches that of its pane.
- */
-static void
-ManageAndUnmanageGrips(PanedWidget pw)
-{
- WidgetList managed_grips, unmanaged_grips;
- Widget *managedP, *unmanagedP, *childP;
- Cardinal alloc_size;
-
- alloc_size = sizeof(Widget) * (pw->composite.num_children >> 1);
- managedP = managed_grips = (WidgetList)XtMalloc(alloc_size);
- unmanagedP = unmanaged_grips = (WidgetList)XtMalloc(alloc_size);
-
- ForAllChildren(pw, childP)
- if (IsPane(*childP) && HasGrip(*childP)) {
- if (XtIsManaged(*childP))
- *managedP++ = PaneInfo(*childP)->grip;
- else
- *unmanagedP++ = PaneInfo(*childP)->grip;
- }
-
- if (managedP != managed_grips) {
- *unmanagedP++ = *--managedP; /* Last grip is never managed */
- XtManageChildren(managed_grips, managedP - managed_grips);
- }
-
- if (unmanagedP != unmanaged_grips)
- XtUnmanageChildren(unmanaged_grips, unmanagedP - unmanaged_grips);
-
- XtFree((char *)managed_grips);
- XtFree((char *)unmanaged_grips);
-}
-
-/*
- * Function:
- * CreateGrip
- *
- * Parameters:
- * child - child that wants a grip to be created for it
- *
- * Description:
- * Creates a grip widget.
- */
-static void
-CreateGrip(Widget child)
-{
- PanedWidget pw = (PanedWidget)XtParent(child);
- Arg arglist[2];
- Cardinal num_args = 0;
- Cursor cursor;
-
- XtSetArg(arglist[num_args], XtNtranslations, pw->paned.grip_translations);
- num_args++;
- if ((cursor = pw->paned.grip_cursor) == None) {
- if (IsVert(pw))
- cursor = pw->paned.v_grip_cursor;
- else
- cursor = pw->paned.h_grip_cursor;
- }
-
- XtSetArg(arglist[num_args], XtNcursor, cursor);
- num_args++;
- PaneInfo(child)->grip = XtCreateWidget("grip", gripWidgetClass, (Widget)pw,
- arglist, num_args);
-
- XtAddCallback(PaneInfo(child)->grip, XtNcallback,
- HandleGrip, (XtPointer)child);
-}
-
-/*
- * Function:
- * GetGCs
- *
- * Parameters:
- * w - paned widget
- */
-static void
-GetGCs(Widget w)
-{
- PanedWidget pw = (PanedWidget)w;
- XtGCMask valuemask;
- XGCValues values;
-
- /*
- * Draw pane borders in internal border color
- */
- values.foreground = pw->paned.internal_bp;
- valuemask = GCForeground;
- pw->paned.normgc = XtGetGC(w, valuemask, &values);
-
- /*
- * Erase pane borders with background color
- */
- values.foreground = pw->core.background_pixel;
- valuemask = GCForeground;
- pw->paned.invgc = XtGetGC(w, valuemask, &values);
-
- /*
- * Draw Track lines (animate pane borders) in
- * internal border color ^ bg color
- */
- values.function = GXinvert;
- values.plane_mask = pw->paned.internal_bp ^ pw->core.background_pixel;
- values.subwindow_mode = IncludeInferiors;
- valuemask = GCPlaneMask | GCFunction | GCSubwindowMode;
- pw->paned.flipgc = XtGetGC(w, valuemask, &values);
-}
-
-/*
- * Function:
- * SetChildrenPrefSizes
- *
- * Parameters:
- * pw - paned widget
- *
- * Description:
- * Sets the preferred sizes of the children.
- */
-static void
-SetChildrenPrefSizes(PanedWidget pw, unsigned int off_size)
-{
- Widget *childP;
- Boolean vert = IsVert(pw);
- XtWidgetGeometry request, reply;
-
- ForAllPanes(pw, childP)
- if (pw->paned.resize_children_to_pref || PaneInfo(*childP)->size == 0 ||
- PaneInfo(*childP)->resize_to_pref) {
- if (PaneInfo(*childP)->preferred_size != PANED_ASK_CHILD)
- PaneInfo(*childP)->wp_size = PaneInfo(*childP)->preferred_size;
- else {
- if(vert) {
- request.request_mode = CWWidth;
- request.width = off_size;
- }
- else {
- request.request_mode = CWHeight;
- request.height = off_size;
- }
-
- if ((XtQueryGeometry(*childP, &request, &reply)
- == XtGeometryAlmost)
- && (reply.request_mode = (vert ? CWHeight : CWWidth)))
- PaneInfo(*childP)->wp_size = GetRequestInfo(&reply, vert);
- else
- PaneInfo(*childP)->wp_size = PaneSize(*childP, vert);
- }
-
- PaneInfo(*childP)->size = PaneInfo(*childP)->wp_size;
- }
-}
-
-/*
- * Function:
- * ChangeAllGripCursors
- *
- * Parameters:
- * pw - paned widget
- *
- * Description:
- * Changes all the grip cursors.
- */
-static void
-ChangeAllGripCursors(PanedWidget pw)
-{
- Widget *childP;
-
- ForAllPanes(pw, childP) {
- Arg arglist[1];
- Cursor cursor;
-
- if ((cursor = pw->paned.grip_cursor) == None) {
- if (IsVert(pw))
- cursor = pw->paned.v_grip_cursor;
- else
- cursor = pw->paned.h_grip_cursor;
- }
-
- if (HasGrip(*childP)) {
- XtSetArg(arglist[0], XtNcursor, cursor);
- XtSetValues(PaneInfo(*childP)->grip, arglist, 1);
- }
- }
-}
-
-/*
- * Function:
- * PushPaneStack
- *
- * Parameters:
- * pw - paned widget
- * pane - pane that we are pushing
- *
- * Description:
- * Pushes a value onto the pane stack.
- */
-static void
-PushPaneStack(PanedWidget pw, Pane pane)
-{
- PaneStack *stack = (PaneStack *)XtMalloc(sizeof(PaneStack));
-
- stack->next = pw->paned.stack;
- stack->pane = pane;
- stack->start_size = pane->size;
-
- pw->paned.stack = stack;
-}
-
-/*
- * Function:
- * GetPaneStack
- *
- * Parameters:
- * pw - paned widget
- * shrink - True if we want to shrink this pane, False otherwise
- * pane - pane that we are popping (return)
- * start_size - size that this pane started at (return)
- *
- * Description:
- * Gets the top value from the pane stack.
- */
-static void
-GetPaneStack(PanedWidget pw, Bool shrink, Pane *pane, int *start_size)
-{
- if (pw->paned.stack == NULL) {
- *pane = NULL;
- return;
- }
-
- *pane = pw->paned.stack->pane;
- *start_size = pw->paned.stack->start_size;
-
- if (shrink != ((*pane)->size > *start_size))
- *pane = NULL;
-}
-
-/*
- * Function:
- * PopPaneStack
- *
- * Parameters:
- * pw - paned widget
- *
- * Description:
- * Pops the top item off the pane stack.
- *
- * Returns: True if this is not the last element on the stack
- */
-static Bool
-PopPaneStack(PanedWidget pw)
-{
- PaneStack *stack = pw->paned.stack;
-
- if (stack == NULL)
- return (False);
-
- pw->paned.stack = stack->next;
- XtFree((char *)stack);
-
- if (pw->paned.stack == NULL)
- return (False);
-
- return (True);
-}
-
-/*
- * Function:
- * ClearPaneStack
- *
- * Parameters:
- * pw - paned widget
- *
- * Description:
- * Removes all entries from the pane stack.
- */
-static void
-ClearPaneStack(PanedWidget pw)
-{
- while(PopPaneStack(pw))
- ;
-}
-
-static void
-XawPanedClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation,
- NULL, 0);
- XtSetTypeConverter(XtROrientation, XtRString, XmuCvtOrientationToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-/* The Geometry Manager only allows changes after Realize if
- * allow_resize is True in the constraints record.
- *
- * For vertically paned widgets:
- *
- * It only allows height changes, but offers the requested height
- * as a compromise if both width and height changes were requested.
- *
- * For horizontal widgets the converse is true.
- * As all good Geometry Managers should, we will return No if the
- * request will have no effect; i.e. when the requestor is already
- * of the desired geometry.
- */
-static XtGeometryResult
-XawPanedGeometryManager(Widget w, XtWidgetGeometry *request,
- XtWidgetGeometry *reply)
-{
- PanedWidget pw = (PanedWidget)XtParent(w);
- XtGeometryMask mask = request->request_mode;
- Dimension old_size, old_wpsize, old_paned_size;
- Pane pane = PaneInfo(w);
- Boolean vert = IsVert(pw);
- Dimension on_size, off_size;
- XtGeometryResult result;
- Boolean almost = False;
-
- /*
- * If any of the following is true, disallow the geometry change
- *
- * o The paned widget is realized and allow_resize is false for the pane
- * o The child did not ask to change the on_size
- * o The request is not a width or height request
- * o The requested size is the same as the current size
- */
-
- if ((XtIsRealized((Widget)pw) && !pane->allow_resize)
- || !(mask & (vert ? CWHeight : CWWidth))
- ||(mask & ~(CWWidth | CWHeight))
- || GetRequestInfo(request, vert) == PaneSize(w, vert))
- return (XtGeometryNo);
-
- old_paned_size = PaneSize((Widget)pw, vert);
- old_wpsize = pane->wp_size;
- old_size = pane->size;
-
- pane->wp_size = pane->size = GetRequestInfo(request, vert);
-
- AdjustPanedSize(pw, PaneSize((Widget)pw, !vert), &result, &on_size,
- &off_size);
-
- /*
- * Fool the Refigure Locations proc to thinking that we are
- * a different on_size
- */
-
- if (result != XtGeometryNo) {
- if (vert)
- XtHeight(pw) = on_size;
- else
- XtWidth(pw) = on_size;
- }
-
- RefigureLocations(pw, PaneIndex(w), AnyPane);
-
- /*
- * Set up reply struct and reset core on_size
- */
- if (vert) {
- XtHeight(pw) = old_paned_size;
- reply->height = pane->size;
- reply->width = off_size;
- }
- else {
- XtWidth(pw) = old_paned_size;
- reply->height = off_size;
- reply->width = pane->size;
- }
-
- /*
- * IF either of the following is true
- *
- * o There was a "off_size" request and the new "off_size" is different
- * from that requested
- * o There was no "off_size" request and the new "off_size" is different
- *
- * o The "on_size" we will allow is different from that requested
- *
- * THEN: set almost
- */
- if (!((vert ? CWWidth : CWHeight) & mask)) {
- if (vert)
- request->width = XtWidth(w);
- else
- request->height = XtHeight(w);
- }
-
- almost = GetRequestInfo(request, !vert) != GetRequestInfo(reply, !vert);
- almost |= (GetRequestInfo(request, vert) != GetRequestInfo(reply, vert));
-
- if ((mask & XtCWQueryOnly) || almost) {
- pane->wp_size = old_wpsize;
- pane->size = old_size;
- RefigureLocations(pw, PaneIndex(w), AnyPane);
- reply->request_mode = CWWidth | CWHeight;
- if (almost)
- return (XtGeometryAlmost);
- }
- else {
- AdjustPanedSize(pw, PaneSize((Widget) pw, !vert), NULL, NULL, NULL);
- CommitNewLocations(pw); /* layout already refigured */
- }
-
- return (XtGeometryDone);
-}
-
-/*ARGSUSED*/
-static void
-XawPanedInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- PanedWidget pw = (PanedWidget)cnew;
-
- GetGCs((Widget)pw);
-
- pw->paned.recursively_called = False;
- pw->paned.stack = NULL;
- pw->paned.resize_children_to_pref = True;
- pw->paned.num_panes = 0;
-}
-
-static void
-XawPanedRealize(Widget w, Mask *valueMask, XSetWindowAttributes *attributes)
-{
- PanedWidget pw = (PanedWidget)w;
- Widget *childP;
-
- if ((attributes->cursor = pw->paned.cursor) != None)
- *valueMask |= CWCursor;
-
- (*SuperClass->core_class.realize)(w, valueMask, attributes);
-
- /*
- * Before we commit the new locations we need to realize all the panes and
- * their grips
- */
- ForAllPanes(pw, childP) {
- XtRealizeWidget(*childP);
- if (HasGrip(*childP))
- XtRealizeWidget(PaneInfo(*childP)->grip);
- }
-
- RefigureLocationsAndCommit(w);
- pw->paned.resize_children_to_pref = False;
-}
-
-static void
-XawPanedDestroy(Widget w)
-{
- ReleaseGCs(w);
-}
-
-static void
-ReleaseGCs(Widget w)
-{
- PanedWidget pw = (PanedWidget)w;
-
- XtReleaseGC(w, pw->paned.normgc);
- XtReleaseGC(w, pw->paned.invgc);
- XtReleaseGC(w, pw->paned.flipgc);
-}
-
-static void
-XawPanedInsertChild(Widget w)
-{
- Pane pane = PaneInfo(w);
-
- /* insert the child widget in the composite children list with the
- superclass insert_child routine
- */
- (*SuperClass->composite_class.insert_child)(w);
-
- if (!IsPane(w))
- return;
-
- if (pane->show_grip == True) {
- CreateGrip(w);
- if (pane->min == PANED_GRIP_SIZE)
- pane->min = PaneSize(pane->grip, IsVert((PanedWidget)XtParent(w)));
- }
- else {
- if (pane->min == PANED_GRIP_SIZE)
- pane->min = 1;
- pane->grip = NULL;
- }
-
- pane->size = 0;
- pane->paned_adjusted_me = False;
-}
-
-static void
-XawPanedDeleteChild(Widget w)
-{
- /* remove the subwidget info and destroy the grip */
- if (IsPane(w) && HasGrip(w))
- XtDestroyWidget(PaneInfo(w)->grip);
-
- /* delete the child widget in the composite children list with the
- superclass delete_child routine
- */
- (*SuperClass->composite_class.delete_child)(w);
-}
-
-static void
-XawPanedChangeManaged(Widget w)
-{
- PanedWidget pw = (PanedWidget)w;
- Boolean vert = IsVert(pw);
- Dimension size;
- Widget *childP;
-
- if (pw->paned.recursively_called++)
- return;
-
- /*
- * If the size is zero then set it to the size of the widest or tallest pane
- */
-
- if ((size = PaneSize((Widget)pw, !vert)) == 0) {
- size = 1;
- ForAllChildren(pw, childP)
- if (XtIsManaged(*childP) && (PaneSize(*childP, !vert) > size))
- size = PaneSize(*childP, !vert);
- }
-
- ManageAndUnmanageGrips(pw);
- pw->paned.recursively_called = False;
- ResortChildren(pw);
-
- pw->paned.num_panes = 0;
- ForAllChildren(pw, childP)
- if (IsPane(*childP)) {
- if (XtIsManaged(*childP)) {
- Pane pane = PaneInfo(*childP);
-
- if (HasGrip(*childP))
- PaneInfo(pane->grip)->position = pw->paned.num_panes;
- pane->position = pw->paned.num_panes; /* TEMPORY -CDP 3/89 */
- pw->paned.num_panes++;
- }
- else
- break; /* This list is already sorted */
- }
-
- SetChildrenPrefSizes((PanedWidget) w, size);
-
- /*
- * ForAllPanes can now be used
- */
- if (PaneSize((Widget) pw, vert) == 0)
- AdjustPanedSize(pw, size, NULL, NULL, NULL);
-
- if (XtIsRealized((Widget)pw))
- RefigureLocationsAndCommit((Widget)pw);
-}
-
-static void
-XawPanedResize(Widget w)
-{
- SetChildrenPrefSizes((PanedWidget)w,
- PaneSize(w, !IsVert((PanedWidget)w)));
- RefigureLocationsAndCommit(w);
-}
-
-/*ARGSUSED*/
-static void
-XawPanedRedisplay(Widget w, XEvent *event, Region region)
-{
- DrawInternalBorders((PanedWidget)w);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawPanedSetValues(Widget old, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- PanedWidget old_pw = (PanedWidget)old;
- PanedWidget new_pw = (PanedWidget)cnew;
- Boolean redisplay = False;
-
- if ((old_pw->paned.cursor != new_pw->paned.cursor) && XtIsRealized(cnew))
- XDefineCursor(XtDisplay(cnew), XtWindow(cnew), new_pw->paned.cursor);
-
- if (old_pw->paned.internal_bp != new_pw->paned.internal_bp ||
- old_pw->core.background_pixel != new_pw->core.background_pixel) {
- ReleaseGCs(old);
- GetGCs(cnew);
- redisplay = True;
- }
-
- if (old_pw->paned.grip_cursor != new_pw->paned.grip_cursor ||
- old_pw->paned.v_grip_cursor != new_pw->paned.v_grip_cursor ||
- old_pw->paned.h_grip_cursor != new_pw->paned.h_grip_cursor)
- ChangeAllGripCursors(new_pw);
-
- if (IsVert(old_pw) != IsVert(new_pw)) {
- /*
- * We are fooling the paned widget into thinking that is needs to
- * fully refigure everything, which is what we want
- */
- if (IsVert(new_pw))
- XtWidth(new_pw) = 0;
- else
- XtHeight(new_pw) = 0;
-
- new_pw->paned.resize_children_to_pref = True;
- XawPanedChangeManaged(cnew); /* Seems weird, but does the right thing */
- new_pw->paned.resize_children_to_pref = False;
- if (new_pw->paned.grip_cursor == None)
- ChangeAllGripCursors(new_pw);
- return (True);
- }
-
- if (old_pw->paned.internal_bw != new_pw->paned.internal_bw) {
- AdjustPanedSize(new_pw, PaneSize(cnew, !IsVert(old_pw)),
- NULL, NULL, NULL);
- RefigureLocationsAndCommit(cnew);
- return (True); /* We have done a full configuration, return */
- }
-
- if (old_pw->paned.grip_indent != new_pw->paned.grip_indent &&
- XtIsRealized(cnew)) {
- CommitNewLocations(new_pw);
- redisplay = True;
- }
-
- return (redisplay);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawPanedPaneSetValues(Widget old, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- Pane old_pane = PaneInfo(old);
- Pane new_pane = PaneInfo(cnew);
- Boolean redisplay = False;
-
- /* Check for new min and max */
- if (old_pane->min != new_pane->min || old_pane->max != new_pane->max)
- XawPanedSetMinMax(cnew, (int)new_pane->min, (int)new_pane->max);
-
- /* Check for change in XtNshowGrip */
- if (old_pane->show_grip != new_pane->show_grip) {
- if (new_pane->show_grip == True) {
- CreateGrip(cnew);
- if (XtIsRealized(XtParent(cnew))) {
- if (XtIsManaged(cnew)) /* if paned is unrealized this will
- happen automatically at realize time
- */
- XtManageChild(PaneInfo(cnew)->grip); /* manage the grip */
- XtRealizeWidget(PaneInfo(cnew)->grip); /* realize the grip */
- CommitNewLocations((PanedWidget)XtParent(cnew));
- }
- }
- else if (HasGrip(old)) {
- XtDestroyWidget(old_pane->grip);
- new_pane->grip = NULL;
- redisplay = True;
- }
- }
-
- return (redisplay);
-}
-
-/*
- * Public routines
- */
-/*
- * Function:
- * XawPanedSetMinMax
- *
- * Parameters:
- * widget - widget that is a child of the Paned widget
- * min - new min and max size for the pane
- * max - ""
- *
- * Description:
- * Sets the min and max size for a pane.
- */
-void
-XawPanedSetMinMax(Widget widget, int min, int max)
-{
- Pane pane = PaneInfo(widget);
-
- pane->min = min;
- pane->max = max;
- RefigureLocationsAndCommit(widget->core.parent);
-}
-
-/*
- * Function:
- * XawPanedGetMinMax
- *
- * Parameters:
- * widget - widget that is a child of the Paned widget
- * min - current min and max size for the pane (return)
- * max - ""
- *
- * Description:
- * Gets the min and max size for a pane.
- */
-void
-XawPanedGetMinMax(Widget widget, int *min, int *max)
-{
- Pane pane = PaneInfo(widget);
-
- *min = pane->min;
- *max = pane->max;
-}
-
-/*
- * Function:
- * XawPanedSetRefigureMode
- *
- * Parameters:
- * w - paned widget
- * mode - if False then inhibit refigure
- *
- * Description:
- * Allows a flag to be set the will inhibit
- * the paned widgets relayout routine.
- */
-void
-XawPanedSetRefigureMode(Widget w,
-#if NeedWidePrototypes
- int mode
-#else
- Boolean mode
-#endif
-)
-{
- ((PanedWidget)w)->paned.refiguremode = mode;
- RefigureLocationsAndCommit(w);
-}
-
-/*
- * Function:
- * XawPanedGetNumSub
- *
- * Parameters:
- * w - paned widget
- *
- * Description:
- * Returns the number of panes in the paned widget.
- * Returns:
- * the number of panes in the paned widget
- */
-int
-XawPanedGetNumSub(Widget w)
-{
- return (((PanedWidget)w)->paned.num_panes);
-}
-
-/*
- * Function:
- * XawPanedAllowResize
- *
- * Parameters:
- * widget - child of the paned widget
- *
- * Description:
- * Allows a flag to be set that determines if the paned
- * widget will allow geometry requests from this child.
- */
-void
-XawPanedAllowResize(Widget widget,
-#if NeedWidePrototypes
- int allow_resize
-#else
- Boolean allow_resize
-#endif
-)
-{
- PaneInfo(widget)->allow_resize = allow_resize;
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * Updated and significantly modified from the Athena VPaned Widget.
+ *
+ * Date: March 1, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/cursorfont.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/Converters.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/Grip.h>
+#include <X11/Xaw/PanedP.h>
+#include <X11/Xaw/XawImP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+typedef enum {
+ UpLeftPane = 'U',
+ LowRightPane = 'L',
+ ThisBorderOnly = 'T',
+ AnyPane = 'A'
+} Direction;
+
+#define NO_INDEX -100
+#define IS_GRIP NULL
+
+#define PaneInfo(w) ((Pane)(w)->core.constraints)
+#define HasGrip(w) (PaneInfo(w)->grip != NULL)
+#define IsPane(w) ((w)->core.widget_class != gripWidgetClass)
+#define PaneIndex(w) (PaneInfo(w)->position)
+#define IsVert(w) ((w)->paned.orientation == XtorientVertical)
+
+#define ForAllPanes(pw, childP) \
+for ((childP) = (pw)->composite.children; \
+ (childP) < (pw)->composite.children + (pw)->paned.num_panes; \
+ (childP)++)
+
+#define ForAllChildren(pw, childP) \
+for ((childP) = (pw)->composite.children; \
+ (childP) < (pw)->composite.children + (pw)->composite.num_children; \
+ (childP)++)
+
+#define PaneSize(paned, vertical) \
+ ((vertical) ? XtHeight(paned) : XtWidth(paned))
+
+#define GetRequestInfo(geo, vertical) \
+ ((vertical) ? (geo)->height : (geo)->width)
+
+#define SatisfiesRule1(pane, shrink) \
+ (((shrink) && ((pane)->size != (pane)->min)) \
+ || (!(shrink) && ((pane)->size != (pane)->max)))
+
+#define SatisfiesRule2(pane) \
+ (!(pane)->skip_adjust || (pane)->paned_adjusted_me)
+
+#define SatisfiesRule3(pane, shrink) \
+ ((pane)->paned_adjusted_me \
+ && (((shrink) && ((int)(pane)->wp_size <= (pane)->size)) \
+ || (!(shrink) && ((int)(pane)->wp_size >= (pane)->size))))
+
+
+/*
+ * Class Methods
+ */
+static void XawPanedClassInitialize(void);
+static void XawPanedChangeManaged(Widget);
+static void XawPanedDeleteChild(Widget);
+static void XawPanedDestroy(Widget);
+static XtGeometryResult XawPanedGeometryManager(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawPanedInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawPanedInsertChild(Widget);
+static Boolean XawPanedPaneSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static void XawPanedRealize(Widget, Mask*, XSetWindowAttributes*);
+static void XawPanedRedisplay(Widget, XEvent*, Region);
+static void XawPanedResize(Widget);
+static Boolean XawPanedSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void _DrawInternalBorders(PanedWidget, GC);
+static void _DrawRect(PanedWidget, GC, int, int, unsigned int, unsigned int);
+static void _DrawTrackLines(PanedWidget, Bool);
+static void AdjustPanedSize(PanedWidget, unsigned int, XtGeometryResult*,
+ Dimension*, Dimension*);
+static void ChangeAllGripCursors(PanedWidget);
+static Pane ChoosePaneToResize(PanedWidget, int, Direction, Bool);
+static void ClearPaneStack(PanedWidget);
+static void CommitGripAdjustment(PanedWidget);
+static void CreateGrip(Widget);
+static int GetEventLocation(PanedWidget, XEvent*);
+static void GetGCs(Widget);
+static void GetPaneStack(PanedWidget, Bool, Pane*, int*);
+static void HandleGrip(Widget, XtPointer, XtPointer);
+static void LoopAndRefigureChildren(PanedWidget, int, Direction, int*);
+static void ManageAndUnmanageGrips(PanedWidget);
+static void MoveGripAdjustment(PanedWidget, Widget, Direction, int);
+static Bool PopPaneStack(PanedWidget);
+static void PushPaneStack(PanedWidget, Pane);
+static void RefigureLocations(PanedWidget, int, Direction);
+static void RefigureLocationsAndCommit(Widget);
+static void ReleaseGCs(Widget);
+static void ResortChildren(PanedWidget);
+static void SetChildrenPrefSizes(PanedWidget, unsigned int);
+static void StartGripAdjustment(PanedWidget, Widget, Direction);
+
+/*
+ * Initialization
+ */
+static char defGripTranslations[] =
+"<Btn1Down>:" "GripAction(Start,UpLeftPane)\n"
+"<Btn2Down>:" "GripAction(Start,ThisBorderOnly)\n"
+"<Btn3Down>:" "GripAction(Start,LowRightPane)\n"
+"<Btn1Motion>:" "GripAction(Move,UpLeft)\n"
+"<Btn2Motion>:" "GripAction(Move,ThisBorder)\n"
+"<Btn3Motion>:" "GripAction(Move,LowRight)\n"
+"Any<BtnUp>:" "GripAction(Commit)\n"
+;
+
+#define offset(field) XtOffsetOf(PanedRec, paned.field)
+static XtResource resources[] = {
+ {
+ XtNinternalBorderColor,
+ XtCBorderColor,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(internal_bp),
+ XtRString,
+ (XtPointer)XtDefaultForeground
+ },
+ {
+ XtNinternalBorderWidth,
+ XtCBorderWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(internal_bw),
+ XtRImmediate,
+ (XtPointer)1
+ },
+ {
+ XtNgripIndent,
+ XtCGripIndent,
+ XtRPosition,
+ sizeof(Position),
+ offset(grip_indent),
+ XtRImmediate,
+ (XtPointer)10
+ },
+ {
+ XtNrefigureMode,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(refiguremode),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNgripTranslations,
+ XtCTranslations,
+ XtRTranslationTable,
+ sizeof(XtTranslations),
+ offset(grip_translations),
+ XtRString,
+ (XtPointer)defGripTranslations
+ },
+ {
+ XtNorientation,
+ XtCOrientation,
+ XtROrientation,
+ sizeof(XtOrientation),
+ offset(orientation),
+ XtRImmediate,
+ (XtPointer)XtorientVertical
+ },
+ {
+ XtNcursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(cursor),
+ XtRImmediate,
+ NULL
+ },
+ {
+ XtNgripCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(grip_cursor),
+ XtRImmediate,
+ NULL
+ },
+ {
+ XtNverticalGripCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(v_grip_cursor),
+ XtRString,
+ "sb_v_double_arrow"
+ },
+ {
+ XtNhorizontalGripCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(h_grip_cursor),
+ XtRString,
+ "sb_h_double_arrow"
+ },
+ {
+ XtNbetweenCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(adjust_this_cursor),
+ XtRString,
+ NULL
+ },
+ {
+ XtNverticalBetweenCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(v_adjust_this_cursor),
+ XtRString,
+ "sb_left_arrow"
+ },
+ {
+ XtNhorizontalBetweenCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(h_adjust_this_cursor),
+ XtRString,
+ "sb_up_arrow"
+ },
+ {
+ XtNupperCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(adjust_upper_cursor),
+ XtRString,
+ "sb_up_arrow"
+ },
+ {
+ XtNlowerCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(adjust_lower_cursor),
+ XtRString,
+ "sb_down_arrow"
+ },
+ {
+ XtNleftCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(adjust_left_cursor),
+ XtRString,
+ "sb_left_arrow"
+ },
+ {
+ XtNrightCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(adjust_right_cursor),
+ XtRString,
+ "sb_right_arrow"
+ },
+};
+#undef offset
+
+#define offset(field) XtOffsetOf(PanedConstraintsRec, paned.field)
+static XtResource subresources[] = {
+ {
+ XtNallowResize,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(allow_resize),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNposition,
+ XtCPosition,
+ XtRInt,
+ sizeof(int),
+ offset(position),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNmin,
+ XtCMin,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(min),
+ XtRImmediate,
+ (XtPointer)PANED_GRIP_SIZE
+ },
+ {
+ XtNmax,
+ XtCMax,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(max),
+ XtRImmediate,
+ (XtPointer)~0
+ },
+ {
+ XtNpreferredPaneSize,
+ XtCPreferredPaneSize,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(preferred_size),
+ XtRImmediate,
+ (XtPointer)PANED_ASK_CHILD
+ },
+ {
+ XtNresizeToPreferred,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(resize_to_pref),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNskipAdjust,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(skip_adjust),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNshowGrip,
+ XtCShowGrip,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(show_grip),
+ XtRImmediate,
+ (XtPointer)True
+ },
+};
+#undef offset
+
+#define SuperClass ((ConstraintWidgetClass)&constraintClassRec)
+
+PanedClassRec panedClassRec = {
+ /* core */
+ {
+ (WidgetClass)SuperClass, /* superclass */
+ "Paned", /* class name */
+ sizeof(PanedRec), /* size */
+ XawPanedClassInitialize, /* class_initialize */
+ NULL, /* class_part init */
+ False, /* class_inited */
+ XawPanedInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawPanedRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawPanedDestroy, /* destroy */
+ XawPanedResize, /* resize */
+ XawPanedRedisplay, /* expose */
+ XawPanedSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* composite */
+ {
+ XawPanedGeometryManager, /* geometry_manager */
+ XawPanedChangeManaged, /* change_managed */
+ XawPanedInsertChild, /* insert_child */
+ XawPanedDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ /* constraint */
+ {
+ subresources, /* subresources */
+ XtNumber(subresources), /* subresource_count */
+ sizeof(PanedConstraintsRec), /* constraint_size */
+ NULL, /* initialize */
+ NULL, /* destroy */
+ XawPanedPaneSetValues, /* set_values */
+ NULL, /* extension */
+ },
+};
+
+WidgetClass panedWidgetClass = (WidgetClass)&panedClassRec;
+WidgetClass vPanedWidgetClass = (WidgetClass)&panedClassRec;
+
+/*
+ * Implementation
+ */
+/* Function:
+ * AdjustPanedSize
+ *
+ * Parameters:
+ * pw - paned widget to adjust
+ * off_size - new off_size to use
+ * result_ret - result of query (return)
+ * on_size_ret - new on_size (return)
+ * off_size_ret - new off_size (return)
+ *
+ * Description:
+ * Adjusts the size of the pane.
+ *
+ * Returns:
+ * amount of change in size
+ */
+static void
+AdjustPanedSize(PanedWidget pw, unsigned int off_size,
+ XtGeometryResult *result_ret,
+ Dimension *on_size_ret, Dimension *off_size_ret)
+{
+ Dimension old_size = PaneSize((Widget)pw, IsVert(pw));
+ Dimension newsize = 0;
+ Widget *childP;
+ XtWidgetGeometry request, reply;
+
+ request.request_mode = CWWidth | CWHeight;
+
+ ForAllPanes(pw, childP) {
+ int size = Max(PaneInfo(*childP)->size, (int)PaneInfo(*childP)->min);
+
+ AssignMin(size, (int)PaneInfo(*childP)->max);
+ newsize += size + pw->paned.internal_bw;
+ }
+ newsize -= pw->paned.internal_bw;
+
+ if (newsize < 1)
+ newsize = 1;
+
+ if (IsVert(pw)) {
+ request.width = off_size;
+ request.height = newsize;
+ }
+ else {
+ request.width = newsize;
+ request.height = off_size;
+ }
+
+ if (result_ret != NULL) {
+ request.request_mode |= XtCWQueryOnly;
+
+ *result_ret = XtMakeGeometryRequest((Widget)pw, &request, &reply);
+ _XawImCallVendorShellExtResize((Widget)pw);
+
+ if (newsize == old_size || *result_ret == XtGeometryNo) {
+ *on_size_ret = old_size;
+ *off_size_ret = off_size;
+ return;
+ }
+ if (*result_ret != XtGeometryAlmost) {
+ *on_size_ret = GetRequestInfo(&request, IsVert(pw));
+ *off_size_ret = GetRequestInfo(&request, !IsVert(pw));
+ return;
+ }
+ *on_size_ret = GetRequestInfo(&reply, IsVert(pw));
+ *off_size_ret = GetRequestInfo(&reply, !IsVert(pw));
+ return;
+ }
+
+ if (newsize == old_size)
+ return;
+
+ if (XtMakeGeometryRequest((Widget)pw, &request, &reply) == XtGeometryAlmost)
+ XtMakeGeometryRequest((Widget)pw, &reply, &request);
+}
+
+/*
+ * Function:
+ * ChoosePaneToResize.
+ *
+ * Parameters:
+ * pw - paned widget
+ * paneindex - index of the current pane
+ * dir - direction to search first
+ * shrink - True if we need to shrink a pane, False otherwise
+ *
+ * Description:
+ * This function chooses a pane to resize.
+ They are chosen using the following rules:
+ *
+ * 1) size < max && size > min
+ * 2) skip adjust == False
+ * 3) widget not its prefered height
+ * && this change will bring it closer
+ * && The user has not resized this pane.
+ *
+ * If no widgets are found that fits all the rules then
+ * rule #3 is broken.
+ * If there are still no widgets found than
+ * rule #2 is broken.
+ * Rule #1 is never broken.
+ * If no widgets are found then NULL is returned.
+ *
+ * Returns:
+ * pane to resize or NULL
+ */
+static Pane
+ChoosePaneToResize(PanedWidget pw, int paneindex, Direction dir, Bool shrink)
+{
+ Widget *childP;
+ int rules = 3;
+ Direction _dir = dir;
+ int _index = paneindex;
+
+ if (paneindex == NO_INDEX || dir == AnyPane) { /* Use defaults */
+ _dir = LowRightPane; /* Go up - really */
+ _index = pw->paned.num_panes - 1; /* Start the last pane, and work
+ backwards */
+ }
+ childP = pw->composite.children + _index;
+
+ /*CONSTCOND*/
+ while(True) {
+ Pane pane = PaneInfo(*childP);
+
+ if ((rules < 3 || SatisfiesRule3(pane, shrink))
+ && (rules < 2 || SatisfiesRule2(pane))
+ && SatisfiesRule1(pane, shrink)
+ && (paneindex != PaneIndex(*childP) || dir == AnyPane))
+ return (pane);
+
+ /*
+ * This is counter-intuitive, but if we are resizing the pane
+ * above the grip we want to choose a pane below the grip to lose,
+ * and visa-versa
+ */
+ if (_dir == LowRightPane)
+ --childP;
+ else
+ ++childP;
+
+ /*
+ * If we have come to and edge then reduce the rule set, and try again
+ * If we are reduced the rules to none, then return NULL
+ */
+ if ((childP - pw->composite.children) < 0 ||
+ (childP - pw->composite.children) >= pw->paned.num_panes) {
+ if (--rules < 1) /* less strict rules */
+ return (NULL);
+ childP = pw->composite.children + _index;
+ }
+ }
+}
+
+/*
+ * Function:
+ * LoopAndRefigureChildren
+ *
+ * Parameters:
+ * pw - paned widget
+ * paneindex - number of the pane border we are moving
+ * dir - pane to move (either UpLeftPane or LowRightPane)
+ * sizeused - current amount of space used (used and returned)
+ *
+ * Description:
+ * If we are resizing either the UpleftPane or LowRight Pane loop
+ * through all the children to see if any will allow us to resize them.
+ */
+static void
+LoopAndRefigureChildren(PanedWidget pw, int paneindex, Direction dir,
+ int *sizeused)
+{
+ int pane_size = (int)PaneSize((Widget)pw, IsVert(pw));
+ Boolean shrink = (*sizeused > pane_size);
+
+ if (dir == LowRightPane)
+ paneindex++;
+
+ /* While all panes do not fit properly */
+ while (*sizeused != pane_size) {
+ /*
+ * Choose a pane to resize
+ * First look on the Pane Stack, and then go hunting for another one
+ * If we fail to find a pane to resize then give up
+ */
+ Pane pane;
+ int start_size;
+ Dimension old;
+ Boolean rule3_ok = False, from_stack = True;
+
+ GetPaneStack(pw, shrink, &pane, &start_size);
+ if (pane == NULL) {
+ pane = ChoosePaneToResize(pw, paneindex, dir, shrink);
+ if (pane == NULL)
+ return; /* no one to resize, give up */
+
+ rule3_ok = SatisfiesRule3(pane, shrink);
+ from_stack = False;
+ PushPaneStack(pw, pane);
+ }
+
+ /*
+ * Try to resize this pane so that all panes will fit, take min and max
+ * into account
+ */
+ old = pane->size;
+ pane->size += pane_size - *sizeused;
+
+ if (from_stack) {
+ if (shrink) {
+ AssignMax(pane->size, start_size);
+ } /* don't remove these braces */
+ else
+ AssignMin(pane->size, start_size);
+
+ if (pane->size == start_size)
+ (void)PopPaneStack(pw);
+ }
+ else if (rule3_ok) {
+ if (shrink) {
+ AssignMax(pane->size, (int)pane->wp_size);
+ } /* don't remove these braces */
+ else
+ AssignMin(pane->size, (int)pane->wp_size);
+ }
+
+ pane->paned_adjusted_me = pane->size != pane->wp_size;
+ AssignMax(pane->size, (int)pane->min);
+ AssignMin(pane->size, (int)pane->max);
+ *sizeused += (pane->size - old);
+ }
+}
+
+/*
+ * Function:
+ * RefigureLocations
+ *
+ * Parameters:
+ * pw - paned widget
+ * paneindex - child to start refiguring at
+ * dir - direction to move from child
+ *
+ * Description:
+ * Refigures all locations of children.
+ * There are special arguments to paneindex and dir, they are:
+ * paneindex - NO_INDEX.
+ * dir - AnyPane.
+ *
+ * If either of these is true then all panes may be resized and
+ * the choosing of panes procedes in reverse order starting with the
+ * last child.
+ */
+static void
+RefigureLocations(PanedWidget pw, int paneindex, Direction dir)
+{
+ Widget *childP;
+ int pane_size = (int)PaneSize((Widget)pw, IsVert(pw));
+ int sizeused = 0;
+ Position loc = 0;
+
+ if (pw->paned.num_panes == 0 || !pw->paned.refiguremode)
+ return;
+
+ /*
+ * Get an initial estimate of the size we will use
+ */
+ ForAllPanes(pw, childP) {
+ Pane pane = PaneInfo(*childP);
+
+ AssignMax(pane->size, (int) pane->min);
+ AssignMin(pane->size, (int) pane->max);
+ sizeused += (int)pane->size + (int)pw->paned.internal_bw;
+ }
+ sizeused -= (int)pw->paned.internal_bw;
+
+ if (dir != ThisBorderOnly && sizeused != pane_size)
+ LoopAndRefigureChildren(pw, paneindex, dir, &sizeused);
+
+ /*
+ * If we still are not the right size, then tell the pane that
+ * wanted to resize that it can't
+ */
+ if (paneindex != NO_INDEX && dir != AnyPane) {
+ Pane pane = PaneInfo(*(pw->composite.children + paneindex));
+ Dimension old = pane->size;
+
+ pane->size += pane_size - sizeused;
+ AssignMax(pane->size, (int) pane->min);
+ AssignMin(pane->size, (int) pane->max);
+ sizeused += pane->size - old;
+ }
+
+ /*
+ * It is possible that the panes will not fit inside the vpaned widget, but
+ * we have tried out best
+ *
+ * Assign each pane a location
+ */
+ ForAllPanes(pw, childP) {
+ PaneInfo(*childP)->delta = loc;
+ loc += PaneInfo(*childP)->size + pw->paned.internal_bw;
+ }
+}
+
+/*
+ * Function:
+ * CommitNewLocations
+ *
+ * Parameters:
+ * pw - paned widget
+ *
+ * Description:
+ * Commits all of the previously figured locations.
+ */
+static void
+CommitNewLocations(PanedWidget pw)
+{
+ Widget *childP;
+ XWindowChanges changes;
+
+ changes.stack_mode = Above;
+
+ ForAllPanes(pw, childP) {
+ Pane pane = PaneInfo(*childP);
+ Widget grip = pane->grip; /* may be NULL */
+
+ if (IsVert(pw)) {
+ XtMoveWidget(*childP, (Position) 0, pane->delta);
+ XtResizeWidget(*childP, XtWidth(pw), pane->size, 0);
+
+ if (HasGrip(*childP)) { /* Move and Display the Grip */
+ changes.x = XtWidth(pw) - pw->paned.grip_indent -
+ XtWidth(grip) - (XtBorderWidth(grip) << 1);
+ changes.y = XtY(*childP) + XtHeight(*childP) -
+ (XtHeight(grip) >> 1) - XtBorderWidth(grip) +
+ (pw->paned.internal_bw >> 1);
+ }
+ }
+ else {
+ XtMoveWidget(*childP, pane->delta, 0);
+ XtResizeWidget(*childP, pane->size, XtHeight(pw), 0);
+
+ if (HasGrip(*childP)) { /* Move and Display the Grip */
+ changes.x = XtX(*childP) + XtWidth(*childP) -
+ (XtWidth(grip) >> 1) - XtBorderWidth(grip) +
+ (pw->paned.internal_bw >> 1);
+ changes.y = XtHeight(pw) - pw->paned.grip_indent -
+ XtHeight(grip) - (XtBorderWidth(grip) << 1);
+ }
+ }
+
+ /*
+ * This should match XtMoveWidget, except that we're also insuring the
+ * grip is Raised in the same request
+ */
+
+ if (HasGrip(*childP)) {
+ XtX(grip) = changes.x;
+ XtY(grip) = changes.y;
+
+ if (XtIsRealized(pane->grip))
+ XConfigureWindow(XtDisplay(pane->grip), XtWindow(pane->grip),
+ CWX | CWY | CWStackMode, &changes);
+ }
+ }
+ ClearPaneStack(pw);
+}
+
+/*
+ * Function:
+ * RefigureLocationsAndCommit
+ *
+ * Parameters:
+ * pw - paned widget
+ *
+ * Description:
+ * Refigures all locations in a paned widget and commits them immediately.
+ *
+ * This function does nothing if any of the following are true.
+ * o refiguremode is false.
+ * o The widget is unrealized.
+ * o There are no panes is the paned widget.
+ */
+static void
+RefigureLocationsAndCommit(Widget w)
+{
+ PanedWidget pw = (PanedWidget)w;
+
+ if (pw->paned.refiguremode && XtIsRealized(w) && pw->paned.num_panes > 0) {
+ RefigureLocations(pw, NO_INDEX, AnyPane);
+ CommitNewLocations(pw);
+ }
+}
+
+/*
+ * Function:
+ * _DrawRect
+ *
+ * Parameters:
+ * pw - paned widget
+ * gc - gc to used for the draw
+ * on_olc - location of upper left corner of rect
+ * off_loc - ""
+ * on_size - size of rectangle
+ * off_size - ""
+ *
+ * Description:
+ * Draws a rectangle in the proper orientation.
+ */
+static void
+_DrawRect(PanedWidget pw, GC gc, int on_loc, int off_loc,
+ unsigned int on_size, unsigned int off_size)
+{
+ if (IsVert(pw))
+ XFillRectangle(XtDisplay((Widget)pw), XtWindow((Widget)pw), gc,
+ off_loc, on_loc, off_size, on_size);
+ else
+ XFillRectangle(XtDisplay((Widget)pw), XtWindow((Widget)pw), gc,
+ on_loc, off_loc, on_size, off_size);
+}
+
+/*
+ * Function:
+ * _DrawInternalBorders
+ *
+ * Parameters:
+ * pw - paned widget
+ * gc - GC to use to draw the borders
+ *
+ * Description:
+ * Draws the internal borders into the paned widget.
+ */
+static void
+_DrawInternalBorders(PanedWidget pw, GC gc)
+{
+ Widget *childP;
+ int on_loc, off_loc;
+ unsigned int on_size, off_size;
+
+ /*
+ * This is an optimization. Do not paint the internal borders if
+ * they are the same color as the background
+ */
+ if (pw->core.background_pixel == pw->paned.internal_bp)
+ return;
+
+ off_loc = 0;
+ off_size = (unsigned int) PaneSize((Widget)pw, !IsVert(pw));
+ on_size = (unsigned int)pw->paned.internal_bw;
+
+ ForAllPanes(pw, childP) {
+ on_loc = IsVert(pw) ? XtY(*childP) : XtX(*childP);
+ on_loc -= (int)on_size;
+
+ _DrawRect(pw, gc, on_loc, off_loc, on_size, off_size);
+ }
+}
+
+#define DrawInternalBorders(pw) \
+ _DrawInternalBorders((pw), (pw)->paned.normgc)
+#define EraseInternalBorders(pw) \
+ _DrawInternalBorders((pw), (pw)->paned.invgc)
+/*
+ * Function Name:
+ * _DrawTrackLines
+ *
+ * Parameters:
+ * pw - Paned widget
+ * erase - if True then just erase track lines, else draw them in
+ *
+ * Description:
+ * Draws the lines that animate the pane borders when the grips are moved.
+ */
+static void
+_DrawTrackLines(PanedWidget pw, Bool erase)
+{
+ Widget *childP;
+ Pane pane;
+ int on_loc, off_loc;
+ unsigned int on_size, off_size;
+
+ off_loc = 0;
+ off_size = PaneSize((Widget)pw, !IsVert(pw));
+
+ ForAllPanes(pw, childP) {
+ pane = PaneInfo(*childP);
+ if (erase || pane->olddelta != pane->delta) {
+ on_size = pw->paned.internal_bw;
+ if (!erase) {
+ on_loc = PaneInfo(*childP)->olddelta - (int) on_size;
+ _DrawRect(pw, pw->paned.flipgc,
+ on_loc, off_loc, on_size, off_size);
+ }
+
+ on_loc = PaneInfo(*childP)->delta - (int)on_size;
+
+ _DrawRect(pw, pw->paned.flipgc,
+ on_loc, off_loc, on_size, off_size);
+
+ pane->olddelta = pane->delta;
+ }
+ }
+}
+
+#define DrawTrackLines(pw) _DrawTrackLines((pw), False);
+#define EraseTrackLines(pw) _DrawTrackLines((pw), True);
+/*
+ * Function:
+ * GetEventLocation
+ *
+ * Parameters:
+ * pw - the paned widget
+ * event - pointer to an event
+ *
+ * Description:
+ * Converts and event to an x and y location.
+ *
+ * Returns:
+ * if this is a vertical pane then (y) else (x)
+ */
+static int
+GetEventLocation(PanedWidget pw, XEvent *event)
+{
+ int x, y;
+
+ switch (event->xany.type) {
+ case ButtonPress:
+ case ButtonRelease:
+ x = event->xbutton.x_root;
+ y = event->xbutton.y_root;
+ break;
+ case KeyPress:
+ case KeyRelease:
+ x = event->xkey.x_root;
+ y = event->xkey.y_root;
+ break;
+ case MotionNotify:
+ x = event->xmotion.x_root;
+ y = event->xmotion.y_root;
+ break;
+ default:
+ x = pw->paned.start_loc;
+ y = pw->paned.start_loc;
+ }
+
+ if (IsVert(pw))
+ return (y);
+
+ return (x);
+}
+
+/*
+ * Function:
+ * StartGripAdjustment
+ *
+ * Parameters:
+ * pw - paned widget
+ * grip - grip widget selected
+ * dir - direction that we are to be moving
+ *
+ * Description:
+ * Starts the grip adjustment procedure.
+ */
+static void
+StartGripAdjustment(PanedWidget pw, Widget grip, Direction dir)
+{
+ Widget *childP;
+ Cursor cursor;
+
+ pw->paned.whichadd = pw->paned.whichsub = NULL;
+
+ if (dir == ThisBorderOnly || dir == UpLeftPane)
+ pw->paned.whichadd = pw->composite.children[PaneIndex(grip)];
+ if (dir == ThisBorderOnly || dir == LowRightPane)
+ pw->paned.whichsub = pw->composite.children[PaneIndex(grip) + 1];
+
+ /*
+ * Change the cursor
+ */
+ if (XtIsRealized(grip)) {
+ if (IsVert(pw)) {
+ if (dir == UpLeftPane)
+ cursor = pw->paned.adjust_upper_cursor;
+ else if (dir == LowRightPane)
+ cursor = pw->paned.adjust_lower_cursor;
+ else {
+ if (pw->paned.adjust_this_cursor == None)
+ cursor = pw->paned.v_adjust_this_cursor;
+ else
+ cursor = pw->paned.adjust_this_cursor;
+ }
+ }
+ else {
+ if (dir == UpLeftPane)
+ cursor = pw->paned.adjust_left_cursor;
+ else if (dir == LowRightPane)
+ cursor = pw->paned.adjust_right_cursor;
+ else {
+ if (pw->paned.adjust_this_cursor == None)
+ cursor = pw->paned.h_adjust_this_cursor;
+ else
+ cursor = pw->paned.adjust_this_cursor;
+ }
+ }
+
+ XDefineCursor(XtDisplay(grip), XtWindow(grip), cursor);
+ }
+
+ EraseInternalBorders(pw);
+ ForAllPanes(pw, childP)
+ PaneInfo(*childP)->olddelta = -99;
+
+ EraseTrackLines(pw);
+}
+
+/*
+ * Function:
+ * MoveGripAdjustment
+ *
+ * Parameters:
+ * pw - paned widget
+ * grip - grip that we are moving
+ * dir - direction the pane we are interested is w.r.t the grip
+ * loc - location of pointer in proper direction
+ *
+ * Description:
+ * This routine moves all panes around when a grip is moved.
+ */
+static void
+MoveGripAdjustment(PanedWidget pw, Widget grip, Direction dir, int loc)
+{
+ int diff, add_size = 0, sub_size = 0;
+
+ diff = loc - pw->paned.start_loc;
+
+ if (pw->paned.whichadd)
+ add_size = PaneSize(pw->paned.whichadd, IsVert(pw)) + diff;
+
+ if (pw->paned.whichsub)
+ sub_size = PaneSize(pw->paned.whichsub, IsVert(pw)) - diff;
+
+ /*
+ * If moving this border only then do not allow either of the borders
+ * to go beyond the min or max size allowed
+ */
+ if (dir == ThisBorderOnly) {
+ int old_add_size = add_size, old_sub_size;
+
+ AssignMax(add_size, (int)PaneInfo(pw->paned.whichadd)->min);
+ AssignMin(add_size, (int)PaneInfo(pw->paned.whichadd)->max);
+ if (add_size != old_add_size)
+ sub_size += old_add_size - add_size;
+
+ old_sub_size = sub_size;
+ AssignMax(sub_size, (int)PaneInfo(pw->paned.whichsub)->min);
+ AssignMin(sub_size, (int)PaneInfo(pw->paned.whichsub)->max);
+ if (sub_size != old_sub_size)
+ return; /* Abort to current sizes */
+ }
+
+ if (add_size != 0)
+ PaneInfo(pw->paned.whichadd)->size = add_size;
+ if (sub_size != 0)
+ PaneInfo(pw->paned.whichsub)->size = sub_size;
+ RefigureLocations(pw, PaneIndex(grip), dir);
+ DrawTrackLines(pw);
+}
+
+/*
+ * Function:
+ * CommitGripAdjustment
+ *
+ * Parameters:
+ * pw - paned widget
+ *
+ * Description:
+ * Commits the grip adjustment.
+ */
+static void
+CommitGripAdjustment(PanedWidget pw)
+{
+ EraseTrackLines(pw);
+ CommitNewLocations(pw);
+ DrawInternalBorders(pw);
+
+ /*
+ * Since the user selected this size then use it as the preferred size
+ */
+ if (pw->paned.whichadd) {
+ Pane pane = PaneInfo(pw->paned.whichadd);
+
+ pane->wp_size = pane->size;
+ }
+ if (pw->paned.whichsub) {
+ Pane pane = PaneInfo(pw->paned.whichsub);
+
+ pane->wp_size = pane->size;
+ }
+}
+
+/*
+ * Function:
+ * HandleGrip
+ *
+ * Parameters:
+ * grip - grip widget that has been moved
+ * temp - (not used)
+ * call_data - data passed to us from the grip widget
+ *
+ * Description:
+ * Handles the grip manipulations.
+ */
+/*ARGSUSED*/
+static void
+HandleGrip(Widget grip, XtPointer temp, XtPointer callData)
+{
+ XawGripCallData call_data = (XawGripCallData)callData;
+ PanedWidget pw = (PanedWidget) XtParent(grip);
+ int loc;
+ char action_type[2], direction[2];
+ Cursor cursor;
+ Arg arglist[1];
+
+ if (call_data->num_params)
+ XmuNCopyISOLatin1Uppered(action_type, call_data->params[0],
+ sizeof(action_type));
+
+ if (call_data->num_params == 0
+ || (action_type[0] == 'C' && call_data->num_params != 1)
+ || (action_type[0] != 'C' && call_data->num_params != 2))
+ XtAppError(XtWidgetToApplicationContext(grip),
+ "Paned GripAction has been passed incorrect parameters.");
+
+ loc = GetEventLocation(pw, (XEvent *)call_data->event);
+
+ if (action_type[0] != 'C')
+ XmuNCopyISOLatin1Uppered(direction, call_data->params[1],
+ sizeof(direction));
+
+ switch (action_type[0]) {
+ case 'S': /* Start adjustment */
+ pw->paned.resize_children_to_pref = False;
+ StartGripAdjustment(pw, grip, (Direction)direction[0]);
+ pw->paned.start_loc = loc;
+ break;
+ case 'M':
+ MoveGripAdjustment(pw, grip, (Direction)direction[0], loc);
+ break;
+ case 'C':
+ XtSetArg(arglist[0], XtNcursor, &cursor);
+ XtGetValues(grip, arglist, 1);
+ XDefineCursor(XtDisplay(grip), XtWindow(grip), cursor);
+ CommitGripAdjustment(pw);
+ break;
+ default:
+ XtAppError(XtWidgetToApplicationContext(grip),
+ "Paned GripAction(); 1st parameter invalid");
+ break;
+ }
+}
+
+/*
+ * Function:
+ * ResortChildren
+ *
+ * Arguments:
+ * pw - paned widget
+ *
+ * Description:
+ * Resorts the children so that all managed children are first.
+ */
+static void
+ResortChildren(PanedWidget pw)
+{
+ Widget *unmanagedP, *childP;
+
+ unmanagedP = NULL;
+ ForAllChildren(pw, childP) {
+ if (!IsPane(*childP) || !XtIsManaged(*childP)) {
+ /*
+ * We only keep track of the first unmanaged pane
+ */
+ if (unmanagedP == NULL)
+ unmanagedP = childP;
+ }
+ else { /* must be a managed pane */
+ /*
+ * If an earlier widget was not a managed pane, then swap
+ */
+ if (unmanagedP != NULL) {
+ Widget child = *unmanagedP;
+
+ *unmanagedP = *childP;
+ *childP = child;
+ childP = unmanagedP; /* easiest to just back-track */
+ unmanagedP = NULL; /* in case there is another managed */
+ }
+ }
+ }
+}
+
+/*
+ * Function:
+ * ManageAndUnmanageGrips
+ *
+ * Parameters:
+ * pw - paned widget
+ *
+ * Description:
+ * This function manages and unmanages the grips so that
+ * the managed state of each grip matches that of its pane.
+ */
+static void
+ManageAndUnmanageGrips(PanedWidget pw)
+{
+ WidgetList managed_grips, unmanaged_grips;
+ Widget *managedP, *unmanagedP, *childP;
+ Cardinal alloc_size;
+
+ alloc_size = sizeof(Widget) * (pw->composite.num_children >> 1);
+ managedP = managed_grips = (WidgetList)XtMalloc(alloc_size);
+ unmanagedP = unmanaged_grips = (WidgetList)XtMalloc(alloc_size);
+
+ ForAllChildren(pw, childP)
+ if (IsPane(*childP) && HasGrip(*childP)) {
+ if (XtIsManaged(*childP))
+ *managedP++ = PaneInfo(*childP)->grip;
+ else
+ *unmanagedP++ = PaneInfo(*childP)->grip;
+ }
+
+ if (managedP != managed_grips) {
+ *unmanagedP++ = *--managedP; /* Last grip is never managed */
+ XtManageChildren(managed_grips, managedP - managed_grips);
+ }
+
+ if (unmanagedP != unmanaged_grips)
+ XtUnmanageChildren(unmanaged_grips, unmanagedP - unmanaged_grips);
+
+ XtFree((char *)managed_grips);
+ XtFree((char *)unmanaged_grips);
+}
+
+/*
+ * Function:
+ * CreateGrip
+ *
+ * Parameters:
+ * child - child that wants a grip to be created for it
+ *
+ * Description:
+ * Creates a grip widget.
+ */
+static void
+CreateGrip(Widget child)
+{
+ PanedWidget pw = (PanedWidget)XtParent(child);
+ Arg arglist[2];
+ Cardinal num_args = 0;
+ Cursor cursor;
+
+ XtSetArg(arglist[num_args], XtNtranslations, pw->paned.grip_translations);
+ num_args++;
+ if ((cursor = pw->paned.grip_cursor) == None) {
+ if (IsVert(pw))
+ cursor = pw->paned.v_grip_cursor;
+ else
+ cursor = pw->paned.h_grip_cursor;
+ }
+
+ XtSetArg(arglist[num_args], XtNcursor, cursor);
+ num_args++;
+ PaneInfo(child)->grip = XtCreateWidget("grip", gripWidgetClass, (Widget)pw,
+ arglist, num_args);
+
+ XtAddCallback(PaneInfo(child)->grip, XtNcallback,
+ HandleGrip, (XtPointer)child);
+}
+
+/*
+ * Function:
+ * GetGCs
+ *
+ * Parameters:
+ * w - paned widget
+ */
+static void
+GetGCs(Widget w)
+{
+ PanedWidget pw = (PanedWidget)w;
+ XtGCMask valuemask;
+ XGCValues values;
+
+ /*
+ * Draw pane borders in internal border color
+ */
+ values.foreground = pw->paned.internal_bp;
+ valuemask = GCForeground;
+ pw->paned.normgc = XtGetGC(w, valuemask, &values);
+
+ /*
+ * Erase pane borders with background color
+ */
+ values.foreground = pw->core.background_pixel;
+ valuemask = GCForeground;
+ pw->paned.invgc = XtGetGC(w, valuemask, &values);
+
+ /*
+ * Draw Track lines (animate pane borders) in
+ * internal border color ^ bg color
+ */
+ values.function = GXinvert;
+ values.plane_mask = pw->paned.internal_bp ^ pw->core.background_pixel;
+ values.subwindow_mode = IncludeInferiors;
+ valuemask = GCPlaneMask | GCFunction | GCSubwindowMode;
+ pw->paned.flipgc = XtGetGC(w, valuemask, &values);
+}
+
+/*
+ * Function:
+ * SetChildrenPrefSizes
+ *
+ * Parameters:
+ * pw - paned widget
+ *
+ * Description:
+ * Sets the preferred sizes of the children.
+ */
+static void
+SetChildrenPrefSizes(PanedWidget pw, unsigned int off_size)
+{
+ Widget *childP;
+ Boolean vert = IsVert(pw);
+ XtWidgetGeometry request, reply;
+
+ ForAllPanes(pw, childP)
+ if (pw->paned.resize_children_to_pref || PaneInfo(*childP)->size == 0 ||
+ PaneInfo(*childP)->resize_to_pref) {
+ if (PaneInfo(*childP)->preferred_size != PANED_ASK_CHILD)
+ PaneInfo(*childP)->wp_size = PaneInfo(*childP)->preferred_size;
+ else {
+ if(vert) {
+ request.request_mode = CWWidth;
+ request.width = off_size;
+ }
+ else {
+ request.request_mode = CWHeight;
+ request.height = off_size;
+ }
+
+ if ((XtQueryGeometry(*childP, &request, &reply)
+ == XtGeometryAlmost)
+ && (reply.request_mode = (vert ? CWHeight : CWWidth)))
+ PaneInfo(*childP)->wp_size = GetRequestInfo(&reply, vert);
+ else
+ PaneInfo(*childP)->wp_size = PaneSize(*childP, vert);
+ }
+
+ PaneInfo(*childP)->size = PaneInfo(*childP)->wp_size;
+ }
+}
+
+/*
+ * Function:
+ * ChangeAllGripCursors
+ *
+ * Parameters:
+ * pw - paned widget
+ *
+ * Description:
+ * Changes all the grip cursors.
+ */
+static void
+ChangeAllGripCursors(PanedWidget pw)
+{
+ Widget *childP;
+
+ ForAllPanes(pw, childP) {
+ Arg arglist[1];
+ Cursor cursor;
+
+ if ((cursor = pw->paned.grip_cursor) == None) {
+ if (IsVert(pw))
+ cursor = pw->paned.v_grip_cursor;
+ else
+ cursor = pw->paned.h_grip_cursor;
+ }
+
+ if (HasGrip(*childP)) {
+ XtSetArg(arglist[0], XtNcursor, cursor);
+ XtSetValues(PaneInfo(*childP)->grip, arglist, 1);
+ }
+ }
+}
+
+/*
+ * Function:
+ * PushPaneStack
+ *
+ * Parameters:
+ * pw - paned widget
+ * pane - pane that we are pushing
+ *
+ * Description:
+ * Pushes a value onto the pane stack.
+ */
+static void
+PushPaneStack(PanedWidget pw, Pane pane)
+{
+ PaneStack *stack = (PaneStack *)XtMalloc(sizeof(PaneStack));
+
+ stack->next = pw->paned.stack;
+ stack->pane = pane;
+ stack->start_size = pane->size;
+
+ pw->paned.stack = stack;
+}
+
+/*
+ * Function:
+ * GetPaneStack
+ *
+ * Parameters:
+ * pw - paned widget
+ * shrink - True if we want to shrink this pane, False otherwise
+ * pane - pane that we are popping (return)
+ * start_size - size that this pane started at (return)
+ *
+ * Description:
+ * Gets the top value from the pane stack.
+ */
+static void
+GetPaneStack(PanedWidget pw, Bool shrink, Pane *pane, int *start_size)
+{
+ if (pw->paned.stack == NULL) {
+ *pane = NULL;
+ return;
+ }
+
+ *pane = pw->paned.stack->pane;
+ *start_size = pw->paned.stack->start_size;
+
+ if (shrink != ((*pane)->size > *start_size))
+ *pane = NULL;
+}
+
+/*
+ * Function:
+ * PopPaneStack
+ *
+ * Parameters:
+ * pw - paned widget
+ *
+ * Description:
+ * Pops the top item off the pane stack.
+ *
+ * Returns: True if this is not the last element on the stack
+ */
+static Bool
+PopPaneStack(PanedWidget pw)
+{
+ PaneStack *stack = pw->paned.stack;
+
+ if (stack == NULL)
+ return (False);
+
+ pw->paned.stack = stack->next;
+ XtFree((char *)stack);
+
+ if (pw->paned.stack == NULL)
+ return (False);
+
+ return (True);
+}
+
+/*
+ * Function:
+ * ClearPaneStack
+ *
+ * Parameters:
+ * pw - paned widget
+ *
+ * Description:
+ * Removes all entries from the pane stack.
+ */
+static void
+ClearPaneStack(PanedWidget pw)
+{
+ while(PopPaneStack(pw))
+ ;
+}
+
+static void
+XawPanedClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation,
+ NULL, 0);
+ XtSetTypeConverter(XtROrientation, XtRString, XmuCvtOrientationToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+/* The Geometry Manager only allows changes after Realize if
+ * allow_resize is True in the constraints record.
+ *
+ * For vertically paned widgets:
+ *
+ * It only allows height changes, but offers the requested height
+ * as a compromise if both width and height changes were requested.
+ *
+ * For horizontal widgets the converse is true.
+ * As all good Geometry Managers should, we will return No if the
+ * request will have no effect; i.e. when the requestor is already
+ * of the desired geometry.
+ */
+static XtGeometryResult
+XawPanedGeometryManager(Widget w, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply)
+{
+ PanedWidget pw = (PanedWidget)XtParent(w);
+ XtGeometryMask mask = request->request_mode;
+ Dimension old_size, old_wpsize, old_paned_size;
+ Pane pane = PaneInfo(w);
+ Boolean vert = IsVert(pw);
+ Dimension on_size, off_size;
+ XtGeometryResult result;
+ Boolean almost = False;
+
+ /*
+ * If any of the following is true, disallow the geometry change
+ *
+ * o The paned widget is realized and allow_resize is false for the pane
+ * o The child did not ask to change the on_size
+ * o The request is not a width or height request
+ * o The requested size is the same as the current size
+ */
+
+ if ((XtIsRealized((Widget)pw) && !pane->allow_resize)
+ || !(mask & (vert ? CWHeight : CWWidth))
+ ||(mask & ~(CWWidth | CWHeight))
+ || GetRequestInfo(request, vert) == PaneSize(w, vert))
+ return (XtGeometryNo);
+
+ old_paned_size = PaneSize((Widget)pw, vert);
+ old_wpsize = pane->wp_size;
+ old_size = pane->size;
+
+ pane->wp_size = pane->size = GetRequestInfo(request, vert);
+
+ AdjustPanedSize(pw, PaneSize((Widget)pw, !vert), &result, &on_size,
+ &off_size);
+
+ /*
+ * Fool the Refigure Locations proc to thinking that we are
+ * a different on_size
+ */
+
+ if (result != XtGeometryNo) {
+ if (vert)
+ XtHeight(pw) = on_size;
+ else
+ XtWidth(pw) = on_size;
+ }
+
+ RefigureLocations(pw, PaneIndex(w), AnyPane);
+
+ /*
+ * Set up reply struct and reset core on_size
+ */
+ if (vert) {
+ XtHeight(pw) = old_paned_size;
+ reply->height = pane->size;
+ reply->width = off_size;
+ }
+ else {
+ XtWidth(pw) = old_paned_size;
+ reply->height = off_size;
+ reply->width = pane->size;
+ }
+
+ /*
+ * IF either of the following is true
+ *
+ * o There was a "off_size" request and the new "off_size" is different
+ * from that requested
+ * o There was no "off_size" request and the new "off_size" is different
+ *
+ * o The "on_size" we will allow is different from that requested
+ *
+ * THEN: set almost
+ */
+ if (!((vert ? CWWidth : CWHeight) & mask)) {
+ if (vert)
+ request->width = XtWidth(w);
+ else
+ request->height = XtHeight(w);
+ }
+
+ almost = GetRequestInfo(request, !vert) != GetRequestInfo(reply, !vert);
+ almost |= (GetRequestInfo(request, vert) != GetRequestInfo(reply, vert));
+
+ if ((mask & XtCWQueryOnly) || almost) {
+ pane->wp_size = old_wpsize;
+ pane->size = old_size;
+ RefigureLocations(pw, PaneIndex(w), AnyPane);
+ reply->request_mode = CWWidth | CWHeight;
+ if (almost)
+ return (XtGeometryAlmost);
+ }
+ else {
+ AdjustPanedSize(pw, PaneSize((Widget) pw, !vert), NULL, NULL, NULL);
+ CommitNewLocations(pw); /* layout already refigured */
+ }
+
+ return (XtGeometryDone);
+}
+
+/*ARGSUSED*/
+static void
+XawPanedInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ PanedWidget pw = (PanedWidget)cnew;
+
+ GetGCs((Widget)pw);
+
+ pw->paned.recursively_called = False;
+ pw->paned.stack = NULL;
+ pw->paned.resize_children_to_pref = True;
+ pw->paned.num_panes = 0;
+}
+
+static void
+XawPanedRealize(Widget w, Mask *valueMask, XSetWindowAttributes *attributes)
+{
+ PanedWidget pw = (PanedWidget)w;
+ Widget *childP;
+
+ if ((attributes->cursor = pw->paned.cursor) != None)
+ *valueMask |= CWCursor;
+
+ (*SuperClass->core_class.realize)(w, valueMask, attributes);
+
+ /*
+ * Before we commit the new locations we need to realize all the panes and
+ * their grips
+ */
+ ForAllPanes(pw, childP) {
+ XtRealizeWidget(*childP);
+ if (HasGrip(*childP))
+ XtRealizeWidget(PaneInfo(*childP)->grip);
+ }
+
+ RefigureLocationsAndCommit(w);
+ pw->paned.resize_children_to_pref = False;
+}
+
+static void
+XawPanedDestroy(Widget w)
+{
+ ReleaseGCs(w);
+}
+
+static void
+ReleaseGCs(Widget w)
+{
+ PanedWidget pw = (PanedWidget)w;
+
+ XtReleaseGC(w, pw->paned.normgc);
+ XtReleaseGC(w, pw->paned.invgc);
+ XtReleaseGC(w, pw->paned.flipgc);
+}
+
+static void
+XawPanedInsertChild(Widget w)
+{
+ Pane pane = PaneInfo(w);
+
+ /* insert the child widget in the composite children list with the
+ superclass insert_child routine
+ */
+ (*SuperClass->composite_class.insert_child)(w);
+
+ if (!IsPane(w))
+ return;
+
+ if (pane->show_grip == True) {
+ CreateGrip(w);
+ if (pane->min == PANED_GRIP_SIZE)
+ pane->min = PaneSize(pane->grip, IsVert((PanedWidget)XtParent(w)));
+ }
+ else {
+ if (pane->min == PANED_GRIP_SIZE)
+ pane->min = 1;
+ pane->grip = NULL;
+ }
+
+ pane->size = 0;
+ pane->paned_adjusted_me = False;
+}
+
+static void
+XawPanedDeleteChild(Widget w)
+{
+ /* remove the subwidget info and destroy the grip */
+ if (IsPane(w) && HasGrip(w))
+ XtDestroyWidget(PaneInfo(w)->grip);
+
+ /* delete the child widget in the composite children list with the
+ superclass delete_child routine
+ */
+ (*SuperClass->composite_class.delete_child)(w);
+}
+
+static void
+XawPanedChangeManaged(Widget w)
+{
+ PanedWidget pw = (PanedWidget)w;
+ Boolean vert = IsVert(pw);
+ Dimension size;
+ Widget *childP;
+
+ if (pw->paned.recursively_called++)
+ return;
+
+ /*
+ * If the size is zero then set it to the size of the widest or tallest pane
+ */
+
+ if ((size = PaneSize((Widget)pw, !vert)) == 0) {
+ size = 1;
+ ForAllChildren(pw, childP)
+ if (XtIsManaged(*childP) && (PaneSize(*childP, !vert) > size))
+ size = PaneSize(*childP, !vert);
+ }
+
+ ManageAndUnmanageGrips(pw);
+ pw->paned.recursively_called = False;
+ ResortChildren(pw);
+
+ pw->paned.num_panes = 0;
+ ForAllChildren(pw, childP)
+ if (IsPane(*childP)) {
+ if (XtIsManaged(*childP)) {
+ Pane pane = PaneInfo(*childP);
+
+ if (HasGrip(*childP))
+ PaneInfo(pane->grip)->position = pw->paned.num_panes;
+ pane->position = pw->paned.num_panes; /* TEMPORY -CDP 3/89 */
+ pw->paned.num_panes++;
+ }
+ else
+ break; /* This list is already sorted */
+ }
+
+ SetChildrenPrefSizes((PanedWidget) w, size);
+
+ /*
+ * ForAllPanes can now be used
+ */
+ if (PaneSize((Widget) pw, vert) == 0)
+ AdjustPanedSize(pw, size, NULL, NULL, NULL);
+
+ if (XtIsRealized((Widget)pw))
+ RefigureLocationsAndCommit((Widget)pw);
+}
+
+static void
+XawPanedResize(Widget w)
+{
+ SetChildrenPrefSizes((PanedWidget)w,
+ PaneSize(w, !IsVert((PanedWidget)w)));
+ RefigureLocationsAndCommit(w);
+}
+
+/*ARGSUSED*/
+static void
+XawPanedRedisplay(Widget w, XEvent *event, Region region)
+{
+ DrawInternalBorders((PanedWidget)w);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawPanedSetValues(Widget old, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ PanedWidget old_pw = (PanedWidget)old;
+ PanedWidget new_pw = (PanedWidget)cnew;
+ Boolean redisplay = False;
+
+ if ((old_pw->paned.cursor != new_pw->paned.cursor) && XtIsRealized(cnew))
+ XDefineCursor(XtDisplay(cnew), XtWindow(cnew), new_pw->paned.cursor);
+
+ if (old_pw->paned.internal_bp != new_pw->paned.internal_bp ||
+ old_pw->core.background_pixel != new_pw->core.background_pixel) {
+ ReleaseGCs(old);
+ GetGCs(cnew);
+ redisplay = True;
+ }
+
+ if (old_pw->paned.grip_cursor != new_pw->paned.grip_cursor ||
+ old_pw->paned.v_grip_cursor != new_pw->paned.v_grip_cursor ||
+ old_pw->paned.h_grip_cursor != new_pw->paned.h_grip_cursor)
+ ChangeAllGripCursors(new_pw);
+
+ if (IsVert(old_pw) != IsVert(new_pw)) {
+ /*
+ * We are fooling the paned widget into thinking that is needs to
+ * fully refigure everything, which is what we want
+ */
+ if (IsVert(new_pw))
+ XtWidth(new_pw) = 0;
+ else
+ XtHeight(new_pw) = 0;
+
+ new_pw->paned.resize_children_to_pref = True;
+ XawPanedChangeManaged(cnew); /* Seems weird, but does the right thing */
+ new_pw->paned.resize_children_to_pref = False;
+ if (new_pw->paned.grip_cursor == None)
+ ChangeAllGripCursors(new_pw);
+ return (True);
+ }
+
+ if (old_pw->paned.internal_bw != new_pw->paned.internal_bw) {
+ AdjustPanedSize(new_pw, PaneSize(cnew, !IsVert(old_pw)),
+ NULL, NULL, NULL);
+ RefigureLocationsAndCommit(cnew);
+ return (True); /* We have done a full configuration, return */
+ }
+
+ if (old_pw->paned.grip_indent != new_pw->paned.grip_indent &&
+ XtIsRealized(cnew)) {
+ CommitNewLocations(new_pw);
+ redisplay = True;
+ }
+
+ return (redisplay);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawPanedPaneSetValues(Widget old, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ Pane old_pane = PaneInfo(old);
+ Pane new_pane = PaneInfo(cnew);
+ Boolean redisplay = False;
+
+ /* Check for new min and max */
+ if (old_pane->min != new_pane->min || old_pane->max != new_pane->max)
+ XawPanedSetMinMax(cnew, (int)new_pane->min, (int)new_pane->max);
+
+ /* Check for change in XtNshowGrip */
+ if (old_pane->show_grip != new_pane->show_grip) {
+ if (new_pane->show_grip == True) {
+ CreateGrip(cnew);
+ if (XtIsRealized(XtParent(cnew))) {
+ if (XtIsManaged(cnew)) /* if paned is unrealized this will
+ happen automatically at realize time
+ */
+ XtManageChild(PaneInfo(cnew)->grip); /* manage the grip */
+ XtRealizeWidget(PaneInfo(cnew)->grip); /* realize the grip */
+ CommitNewLocations((PanedWidget)XtParent(cnew));
+ }
+ }
+ else if (HasGrip(old)) {
+ XtDestroyWidget(old_pane->grip);
+ new_pane->grip = NULL;
+ redisplay = True;
+ }
+ }
+
+ return (redisplay);
+}
+
+/*
+ * Public routines
+ */
+/*
+ * Function:
+ * XawPanedSetMinMax
+ *
+ * Parameters:
+ * widget - widget that is a child of the Paned widget
+ * min - new min and max size for the pane
+ * max - ""
+ *
+ * Description:
+ * Sets the min and max size for a pane.
+ */
+void
+XawPanedSetMinMax(Widget widget, int min, int max)
+{
+ Pane pane = PaneInfo(widget);
+
+ pane->min = min;
+ pane->max = max;
+ RefigureLocationsAndCommit(widget->core.parent);
+}
+
+/*
+ * Function:
+ * XawPanedGetMinMax
+ *
+ * Parameters:
+ * widget - widget that is a child of the Paned widget
+ * min - current min and max size for the pane (return)
+ * max - ""
+ *
+ * Description:
+ * Gets the min and max size for a pane.
+ */
+void
+XawPanedGetMinMax(Widget widget, int *min, int *max)
+{
+ Pane pane = PaneInfo(widget);
+
+ *min = pane->min;
+ *max = pane->max;
+}
+
+/*
+ * Function:
+ * XawPanedSetRefigureMode
+ *
+ * Parameters:
+ * w - paned widget
+ * mode - if False then inhibit refigure
+ *
+ * Description:
+ * Allows a flag to be set the will inhibit
+ * the paned widgets relayout routine.
+ */
+void
+XawPanedSetRefigureMode(Widget w,
+#if NeedWidePrototypes
+ int mode
+#else
+ Boolean mode
+#endif
+)
+{
+ ((PanedWidget)w)->paned.refiguremode = mode;
+ RefigureLocationsAndCommit(w);
+}
+
+/*
+ * Function:
+ * XawPanedGetNumSub
+ *
+ * Parameters:
+ * w - paned widget
+ *
+ * Description:
+ * Returns the number of panes in the paned widget.
+ * Returns:
+ * the number of panes in the paned widget
+ */
+int
+XawPanedGetNumSub(Widget w)
+{
+ return (((PanedWidget)w)->paned.num_panes);
+}
+
+/*
+ * Function:
+ * XawPanedAllowResize
+ *
+ * Parameters:
+ * widget - child of the paned widget
+ *
+ * Description:
+ * Allows a flag to be set that determines if the paned
+ * widget will allow geometry requests from this child.
+ */
+void
+XawPanedAllowResize(Widget widget,
+#if NeedWidePrototypes
+ int allow_resize
+#else
+ Boolean allow_resize
+#endif
+)
+{
+ PaneInfo(widget)->allow_resize = allow_resize;
+}
diff --git a/libXaw/src/Panner.c b/libXaw/src/Panner.c
index e0ae2c20a..04c3b4ce1 100644
--- a/libXaw/src/Panner.c
+++ b/libXaw/src/Panner.c
@@ -1,1082 +1,1079 @@
-/*
- * $Xorg: Panner.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1989, 1994, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- */
-
-/* $XFree86: xc/lib/Xaw/Panner.c,v 3.8 2001/07/25 15:04:49 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <ctype.h>
-#include <math.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xos.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/Drawing.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/PannerP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#if defined(ISC) && __STDC__ && !defined(ISC30)
-extern double atof(char *);
-#else
-#include <stdlib.h> /* for atof() */
-#endif
-
-/*
- * Class Methods
- */
-static void XawPannerDestroy(Widget);
-static void XawPannerInitialize(Widget, Widget, ArgList, Cardinal*);
-static XtGeometryResult XawPannerQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawPannerRealize(Widget, XtValueMask*, XSetWindowAttributes*);
-static void XawPannerRedisplay(Widget, XEvent*, Region);
-static void XawPannerResize(Widget);
-static Boolean XawPannerSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-static void XawPannerSetValuesAlmost(Widget, Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-
-/*
- * Prototypes
- */
-static void check_knob(PannerWidget, Bool);
-static void get_default_size(PannerWidget, Dimension*, Dimension*);
-static Bool get_event_xy(PannerWidget, XEvent*, int*, int*);
-static void move_shadow(PannerWidget);
-static int parse_page_string(char*, int, int, Bool*);
-static void rescale(PannerWidget);
-static void reset_shadow_gc(PannerWidget);
-static void reset_slider_gc(PannerWidget);
-static void reset_xor_gc(PannerWidget);
-static void scale_knob(PannerWidget, Bool, Bool);
-
-/*
- * Actions
- */
-static void ActionAbort(Widget, XEvent*, String*, Cardinal*);
-static void ActionMove(Widget, XEvent*, String*, Cardinal*);
-static void ActionNotify(Widget, XEvent*, String*, Cardinal*);
-static void ActionPage(Widget, XEvent*, String*, Cardinal*);
-static void ActionSet(Widget, XEvent*, String*, Cardinal*);
-static void ActionStart(Widget, XEvent*, String*, Cardinal*);
-static void ActionStop(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * From Xmu/Distinct.c
- */
-Bool XmuDistinguishablePixels(Display*, Colormap, unsigned long*, int);
-
-/*
- * Initialization
- */
-static char defaultTranslations[] =
-"<Btn1Down>:" "start()\n"
-"<Btn1Motion>:" "move()\n"
-"<Btn1Up>:" "notify() stop()\n"
-"<Btn2Down>:" "abort()\n"
-":<Key>KP_Enter:" "set(rubberband,toggle)\n"
-"<Key>space:" "page(+1p,+1p)\n"
-"<Key>Delete:" "page(-1p,-1p)\n"
-":<Key>KP_Delete:" "page(-1p,-1p)\n"
-"<Key>BackSpace:" "page(-1p,-1p)\n"
-"<Key>Left:" "page(-.5p,+0)\n"
-":<Key>KP_Left:" "page(-.5p,+0)\n"
-"<Key>Right:" "page(+.5p,+0)\n"
-":<Key>KP_Right:" "page(+.5p,+0)\n"
-"<Key>Up:" "page(+0,-.5p)\n"
-":<Key>KP_Up:" "page(+0,-.5p)\n"
-"<Key>Down:" "page(+0,+.5p)\n"
-":<Key>KP_Down:" "page(+0,+.5p)\n"
-"<Key>Home:" "page(0,0)\n"
-":<Key>KP_Home:" "page(0,0)\n"
-;
-
-static XtActionsRec actions[] = {
- {"start", ActionStart}, /* start tmp graphics */
- {"stop", ActionStop}, /* stop tmp graphics */
- {"abort", ActionAbort}, /* punt */
- {"move", ActionMove}, /* move tmp graphics on Motion event */
- {"page", ActionPage}, /* page around usually from keyboard */
- {"notify", ActionNotify}, /* callback new position */
- {"set", ActionSet}, /* set various parameters */
-};
-
-#define offset(field) XtOffsetOf(PannerRec, panner.field)
-static XtResource resources[] = {
- {
- XtNallowOff,
- XtCAllowOff,
- XtRBoolean,
- sizeof(Boolean),
- offset(allow_off),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNresize,
- XtCResize,
- XtRBoolean,
- sizeof(Boolean),
- offset(resize_to_pref),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNreportCallback,
- XtCReportCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(report_callbacks),
- XtRCallback,
- NULL
- },
- {
- XtNdefaultScale,
- XtCDefaultScale,
- XtRDimension,
- sizeof(Dimension),
- offset(default_scale),
- XtRImmediate,
- (XtPointer)PANNER_DEFAULT_SCALE
- },
- {
- XtNrubberBand,
- XtCRubberBand,
- XtRBoolean,
- sizeof(Boolean),
- offset(rubber_band),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(foreground),
- XtRString,
- (XtPointer)XtDefaultBackground
- },
- {
- XtNinternalSpace,
- XtCInternalSpace,
- XtRDimension,
- sizeof(Dimension),
- offset(internal_border),
- XtRImmediate,
- (XtPointer)4
- },
- {
- XtNlineWidth,
- XtCLineWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(line_width),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNcanvasWidth,
- XtCCanvasWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(canvas_width),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNcanvasHeight,
- XtCCanvasHeight,
- XtRDimension,
- sizeof(Dimension),
- offset(canvas_height),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNsliderX,
- XtCSliderX,
- XtRPosition,
- sizeof(Position),
- offset(slider_x),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNsliderY,
- XtCSliderY,
- XtRPosition,
- sizeof(Position),
- offset(slider_y),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNsliderWidth,
- XtCSliderWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(slider_width),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNsliderHeight,
- XtCSliderHeight,
- XtRDimension,
- sizeof(Dimension),
- offset(slider_height),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNshadowColor,
- XtCShadowColor,
- XtRPixel,
- sizeof(Pixel),
- offset(shadow_color),
- XtRString,
- (XtPointer)XtDefaultForeground
- },
- {
- XtNshadowThickness,
- XtCShadowThickness,
- XtRDimension,
- sizeof(Dimension),
- offset(shadow_thickness),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNbackgroundStipple,
- XtCBackgroundStipple,
- XtRString,
- sizeof(String),
- offset(stipple_name),
- XtRImmediate,
- NULL
- },
-};
-#undef offset
-
-#define Superclass (&simpleClassRec)
-PannerClassRec pannerClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Panner", /* class_name */
- sizeof(PannerRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawPannerInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawPannerRealize, /* realize */
- actions, /* actions */
- XtNumber(actions), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawPannerDestroy, /* destroy */
- XawPannerResize, /* resize */
- XawPannerRedisplay, /* expose */
- XawPannerSetValues, /* set_values */
- NULL, /* set_values_hook */
- XawPannerSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- defaultTranslations, /* tm_table */
- XawPannerQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* panner */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass pannerWidgetClass = (WidgetClass) &pannerClassRec;
-
-
-/*
- * Implementation
- */
-static void
-reset_shadow_gc(PannerWidget pw)
-{
- XtGCMask valuemask = GCForeground;
- XGCValues values;
- unsigned long pixels[3];
-
- if (pw->panner.shadow_gc)
- XtReleaseGC((Widget)pw, pw->panner.shadow_gc);
-
- pixels[0] = pw->panner.foreground;
- pixels[1] = pw->core.background_pixel;
- pixels[2] = pw->panner.shadow_color;
-
- if (!pw->panner.stipple_name &&
- !XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
- pixels, 3) &&
- XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
- pixels, 2)) {
- valuemask = GCTile | GCFillStyle;
- values.fill_style = FillTiled;
- values.tile = XmuCreateStippledPixmap(XtScreen((Widget)pw),
- pw->panner.foreground,
- pw->core.background_pixel,
- pw->core.depth);
- }
- else {
- if (!pw->panner.line_width &&
- !XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
- pixels, 2))
- pw->panner.line_width = 1;
- valuemask = GCForeground;
- values.foreground = pw->panner.shadow_color;
- }
- if (pw->panner.line_width > 0) {
- values.line_width = pw->panner.line_width;
- valuemask |= GCLineWidth;
- }
-
- pw->panner.shadow_gc = XtGetGC((Widget)pw, valuemask, &values);
-}
-
-static void
-reset_slider_gc(PannerWidget pw)
-{
- XtGCMask valuemask = GCForeground;
- XGCValues values;
-
- if (pw->panner.slider_gc)
- XtReleaseGC((Widget)pw, pw->panner.slider_gc);
-
- values.foreground = pw->panner.foreground;
-
- pw->panner.slider_gc = XtGetGC((Widget)pw, valuemask, &values);
-}
-
-static void
-reset_xor_gc(PannerWidget pw)
-{
- if (pw->panner.xor_gc)
- XtReleaseGC((Widget)pw, pw->panner.xor_gc);
-
- if (pw->panner.rubber_band) {
- XtGCMask valuemask = (GCForeground | GCFunction);
- XGCValues values;
- Pixel tmp;
-
- tmp = (pw->panner.foreground == pw->core.background_pixel ?
- pw->panner.shadow_color : pw->panner.foreground);
- values.foreground = tmp ^ pw->core.background_pixel;
- values.function = GXxor;
- if (pw->panner.line_width > 0) {
- valuemask |= GCLineWidth;
- values.line_width = pw->panner.line_width;
- }
- pw->panner.xor_gc = XtGetGC((Widget)pw, valuemask, &values);
- }
- else
- pw->panner.xor_gc = NULL;
-}
-
-static void
-check_knob(PannerWidget pw, Bool knob)
-{
- Position pad = pw->panner.internal_border << 1;
- Position maxx = (Position)XtWidth(pw) - pad -
- (Position)pw->panner.knob_width;
- Position maxy = (Position)XtHeight(pw) - pad -
- (Position)pw->panner.knob_height;
- Position *x = knob ? &pw->panner.knob_x : &pw->panner.tmp.x;
- Position *y = knob ? &pw->panner.knob_y : &pw->panner.tmp.y;
-
- /*
- * note that positions are already normalized (i.e. internal_border
- * has been subtracted out)
- */
- if (*x < 0)
- *x = 0;
- if (*x > maxx)
- *x = maxx;
-
- if (*y < 0)
- *y = 0;
- if (*y > maxy)
- *y = maxy;
-
- if (knob) {
- pw->panner.slider_x = (Position)((double)pw->panner.knob_x
- / pw->panner.haspect + 0.5);
- pw->panner.slider_y = (Position)((double)pw->panner.knob_y
- / pw->panner.vaspect + 0.5);
- pw->panner.last_x = pw->panner.last_y = PANNER_OUTOFRANGE;
- }
-}
-
-static void
-move_shadow(PannerWidget pw)
-{
- if (pw->panner.shadow_thickness > 0) {
- int lw = pw->panner.shadow_thickness + (pw->panner.line_width << 1);
- int pad = pw->panner.internal_border;
-
- if (pw->panner.knob_height > lw && pw->panner.knob_width > lw) {
- XRectangle *r = pw->panner.shadow_rects;
-
- r->x = pw->panner.knob_x + pad + pw->panner.knob_width;
- r->y = pw->panner.knob_y + pad + lw;
- r->width = pw->panner.shadow_thickness;
- r->height = pw->panner.knob_height - lw;
- r++;
- r->x = pw->panner.knob_x + pad + lw;
- r->y = pw->panner.knob_y + pad + pw->panner.knob_height;
- r->width = pw->panner.knob_width - lw + pw->panner.shadow_thickness;
- r->height = pw->panner.shadow_thickness;
- pw->panner.shadow_valid = True;
- return;
- }
- }
- pw->panner.shadow_valid = False;
-}
-
-static void
-scale_knob(PannerWidget pw, Bool location, Bool size)
-{
- if (location) {
- pw->panner.knob_x = (Position)PANNER_HSCALE(pw, pw->panner.slider_x);
- pw->panner.knob_y = (Position)PANNER_VSCALE(pw, pw->panner.slider_y);
- }
- if (size) {
- Dimension width, height;
-
- if (pw->panner.slider_width < 1)
- pw->panner.slider_width = pw->panner.canvas_width;
- if (pw->panner.slider_height < 1)
- pw->panner.slider_height = pw->panner.canvas_height;
- width = Min(pw->panner.slider_width, pw->panner.canvas_width);
- height = Min(pw->panner.slider_height, pw->panner.canvas_height);
-
- pw->panner.knob_width = (Dimension)PANNER_HSCALE(pw, width);
- pw->panner.knob_height = (Dimension)PANNER_VSCALE(pw, height);
- }
- if (!pw->panner.allow_off)
- check_knob(pw, True);
- move_shadow(pw);
-}
-
-static void
-rescale(PannerWidget pw)
-{
- int hpad = pw->panner.internal_border << 1;
- int vpad = hpad;
-
- if (pw->panner.canvas_width < 1)
- pw->panner.canvas_width = XtWidth(pw);
- if (pw->panner.canvas_height < 1)
- pw->panner.canvas_height = XtHeight(pw);
-
- if (XtWidth(pw) <= hpad)
- hpad = 0;
- if (XtHeight(pw) <= vpad)
- vpad = 0;
-
- pw->panner.haspect = ((double)XtWidth(pw) - hpad + .5)
- / (double)pw->panner.canvas_width;
- pw->panner.vaspect = ((double)XtHeight(pw) - vpad + .5)
- / (double)pw->panner.canvas_height;
- scale_knob(pw, True, True);
-}
-
-static void
-get_default_size(PannerWidget pw, Dimension *wp, Dimension *hp)
-{
- Dimension pad = pw->panner.internal_border << 1;
-
- *wp = PANNER_DSCALE(pw, pw->panner.canvas_width) + pad;
- *hp = PANNER_DSCALE(pw, pw->panner.canvas_height) + pad;
-}
-
-static Bool
-get_event_xy(PannerWidget pw, XEvent *event, int *x, int *y)
-{
- int pad = pw->panner.internal_border;
-
- switch (event->type) {
- case ButtonPress:
- case ButtonRelease:
- *x = event->xbutton.x - pad;
- *y = event->xbutton.y - pad;
- return (True);
- case KeyPress:
- case KeyRelease:
- *x = event->xkey.x - pad;
- *y = event->xkey.y - pad;
- return (True);
- case EnterNotify:
- case LeaveNotify:
- *x = event->xcrossing.x - pad;
- *y = event->xcrossing.y - pad;
- return (True);
- case MotionNotify:
- *x = event->xmotion.x - pad;
- *y = event->xmotion.y - pad;
- return (True);
- }
-
- return (False);
-}
-
-static int
-parse_page_string(char *s, int pagesize, int canvassize, Bool *relative)
-{
- char *cp;
- double val = 1.0;
- Bool rel = False;
-
- /*
- * syntax: spaces [+-] number spaces [pc\0] spaces
- */
- for (; isascii(*s) && isspace(*s); s++) /* skip white space */
- ;
-
- if (*s == '+' || *s == '-') { /* deal with signs */
- rel = True;
- if (*s == '-')
- val = -1.0;
- s++;
- }
- if (!*s) { /* if null then return nothing */
- *relative = True;
- return (0);
- }
-
- /* skip over numbers */
- for (cp = s; isascii(*s) && (isdigit(*s) || *s == '.'); s++)
- ;
- val *= atof(cp);
-
- /* skip blanks */
- for (; isascii(*s) && isspace(*s); s++)
- ;
-
- if (*s) { /* if units */
- switch (s[0]) {
- case 'p':
- case 'P':
- val *= (double)pagesize;
- break;
- case 'c':
- case 'C':
- val *= (double)canvassize;
- break;
- }
- }
- *relative = rel;
-
- return ((int)val);
-}
-
-#define DRAW_TMP(pw) \
-{ \
- XDrawRectangle(XtDisplay(pw), XtWindow(pw), \
- pw->panner.xor_gc, \
- pw->panner.tmp.x + pw->panner.internal_border, \
- pw->panner.tmp.y + pw->panner.internal_border, \
- pw->panner.knob_width - 1, \
- pw->panner.knob_height - 1); \
- pw->panner.tmp.showing = !pw->panner.tmp.showing; \
-}
-
-#define UNDRAW_TMP(pw) \
-{ \
- if (pw->panner.tmp.showing) \
- DRAW_TMP(pw); \
-}
-
-#define BACKGROUND_STIPPLE(pw) \
-XmuLocatePixmapFile(pw->core.screen, pw->panner.stipple_name, \
- pw->panner.shadow_color, pw->core.background_pixel, \
- pw->core.depth, NULL, 0, NULL, NULL, NULL, NULL)
-
-#define PIXMAP_OKAY(pm) ((pm) != None && (pm) != XtUnspecifiedPixmap)
-
-/*ARGSUSED*/
-static void
-XawPannerInitialize(Widget greq, Widget gnew, ArgList args, Cardinal *num_args)
-{
- PannerWidget req = (PannerWidget)greq, cnew = (PannerWidget)gnew;
- Dimension defwidth, defheight;
-
- if (req->panner.canvas_width < 1)
- cnew->panner.canvas_width = 1;
- if (req->panner.canvas_height < 1)
- cnew->panner.canvas_height = 1;
- if (req->panner.default_scale < 1)
- cnew->panner.default_scale = PANNER_DEFAULT_SCALE;
-
- get_default_size(req, &defwidth, &defheight);
- if (XtWidth(req) < 1)
- XtWidth(cnew) = defwidth;
- if (XtHeight(req) < 1)
- XtHeight(cnew) = defheight;
-
- cnew->panner.shadow_gc = NULL;
- reset_shadow_gc(cnew); /* shadowColor */
- cnew->panner.slider_gc = NULL;
- reset_slider_gc(cnew); /* foreground */
- cnew->panner.xor_gc = NULL;
- reset_xor_gc(cnew); /* foreground ^ background */
-
- rescale(cnew); /* does a position check */
- cnew->panner.shadow_valid = False;
- cnew->panner.tmp.doing = False;
- cnew->panner.tmp.showing = False;
- }
-
-static void
-XawPannerRealize(Widget gw, XtValueMask *valuemaskp,
- XSetWindowAttributes *attr)
-{
- PannerWidget pw = (PannerWidget)gw;
- Pixmap pm = XtUnspecifiedPixmap;
- Bool gotpm = False;
-
- if (pw->core.background_pixmap == XtUnspecifiedPixmap) {
- if (pw->panner.stipple_name)
- pm = BACKGROUND_STIPPLE(pw);
-
- if (PIXMAP_OKAY(pm)) {
- attr->background_pixmap = pm;
- *valuemaskp |= CWBackPixmap;
- *valuemaskp &= ~CWBackPixel;
- gotpm = True;
- }
- }
- (*pannerWidgetClass->core_class.superclass->core_class.realize)
- (gw, valuemaskp, attr);
-
- if (gotpm)
- XFreePixmap(XtDisplay(gw), pm);
-}
-
-static void
-XawPannerDestroy(Widget gw)
-{
- PannerWidget pw = (PannerWidget)gw;
-
- XtReleaseGC(gw, pw->panner.shadow_gc);
- XtReleaseGC(gw, pw->panner.slider_gc);
- XtReleaseGC(gw, pw->panner.xor_gc);
-}
-
-static void
-XawPannerResize(Widget gw)
-{
- rescale((PannerWidget)gw);
-}
-
-static void
-XawPannerRedisplay(Widget gw, XEvent *event, Region region)
-{
- PannerWidget pw = (PannerWidget)gw;
- Display *dpy = XtDisplay(gw);
- Window w = XtWindow(gw);
- int pad = pw->panner.internal_border;
- Dimension lw = pw->panner.line_width;
- Dimension extra = pw->panner.shadow_thickness + (lw << 1);
- int kx = pw->panner.knob_x + pad, ky = pw->panner.knob_y + pad;
-
- if (Superclass->core_class.expose)
- (Superclass->core_class.expose)(gw, event, region);
-
- pw->panner.tmp.showing = False;
- XClearArea(XtDisplay(pw), XtWindow(pw),
- (int)pw->panner.last_x - ((int)lw) + pad,
- (int)pw->panner.last_y - ((int)lw) + pad,
- pw->panner.knob_width + extra,
- pw->panner.knob_height + extra,
- False);
- pw->panner.last_x = pw->panner.knob_x;
- pw->panner.last_y = pw->panner.knob_y;
-
- XFillRectangle(dpy, w, pw->panner.slider_gc, kx, ky,
- pw->panner.knob_width - 1, pw->panner.knob_height - 1);
-
- if (lw)
- XDrawRectangle(dpy, w, pw->panner.shadow_gc, kx, ky,
- pw->panner.knob_width - 1, pw->panner.knob_height - 1);
-
- if (pw->panner.shadow_valid)
- XFillRectangles(dpy, w, pw->panner.shadow_gc, pw->panner.shadow_rects, 2);
-
- if (pw->panner.tmp.doing && pw->panner.rubber_band)
- DRAW_TMP(pw);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawPannerSetValues(Widget gcur, Widget greq, Widget gnew,
- ArgList args, Cardinal *num_args)
-{
- PannerWidget cur = (PannerWidget)gcur;
- PannerWidget cnew = (PannerWidget)gnew;
- Bool redisplay = False;
-
- if (cur->panner.foreground != cnew->panner.foreground) {
- reset_slider_gc(cnew);
- if (cur->panner.foreground != cur->core.background_pixel)
- reset_xor_gc(cnew);
- redisplay = True;
- }
- else if (cur->panner.line_width != cnew->panner.line_width ||
- cur->core.background_pixel != cnew->core.background_pixel) {
- reset_xor_gc(cnew);
- redisplay = True;
- }
- if (cur->panner.shadow_color != cnew->panner.shadow_color) {
- reset_shadow_gc(cnew);
- if (cur->panner.foreground == cur->core.background_pixel)
- reset_xor_gc(cnew);
- redisplay = True;
- }
- if (cur->panner.shadow_thickness != cnew->panner.shadow_thickness) {
- move_shadow(cnew);
- redisplay = True;
- }
- if (cur->panner.rubber_band != cnew->panner.rubber_band) {
- reset_xor_gc(cnew);
- if (cnew->panner.tmp.doing)
- redisplay = True;
- }
-
- if ((cur->panner.stipple_name != cnew->panner.stipple_name
- || cur->panner.shadow_color != cnew->panner.shadow_color
- || cur->core.background_pixel != cnew->core.background_pixel)
- && XtIsRealized(gnew)) {
- Pixmap pm = cnew->panner.stipple_name ?
- BACKGROUND_STIPPLE(cnew) : XtUnspecifiedPixmap;
-
- if (PIXMAP_OKAY(pm)) {
- XSetWindowBackgroundPixmap(XtDisplay(cnew), XtWindow(cnew), pm);
- XFreePixmap(XtDisplay(cnew), pm);
- }
- else
- XSetWindowBackground(XtDisplay(cnew), XtWindow(cnew),
- cnew->core.background_pixel);
-
- redisplay = True;
- }
-
- if (cnew->panner.resize_to_pref &&
- (cur->panner.canvas_width != cnew->panner.canvas_width
- || cur->panner.canvas_height != cnew->panner.canvas_height
- || cur->panner.resize_to_pref != cnew->panner.resize_to_pref)) {
- get_default_size(cnew, &cnew->core.width, &cnew->core.height);
- redisplay = True;
- }
- else if (cur->panner.canvas_width != cnew->panner.canvas_width
- || cur->panner.canvas_height != cnew->panner.canvas_height
- || cur->panner.internal_border != cnew->panner.internal_border) {
- rescale(cnew); /* does a scale_knob as well */
- redisplay = True;
- }
- else {
- Bool loc = cur->panner.slider_x != cnew->panner.slider_x ||
- cur->panner.slider_y != cnew->panner.slider_y;
- Bool siz = cur->panner.slider_width != cnew->panner.slider_width ||
- cur->panner.slider_height != cnew->panner.slider_height;
- if (loc || siz || (cur->panner.allow_off != cnew->panner.allow_off
- && cnew->panner.allow_off)) {
- scale_knob(cnew, loc, siz);
- redisplay = True;
- }
- }
-
- return (redisplay);
-}
-
-static void
-XawPannerSetValuesAlmost(Widget gold, Widget gnew, XtWidgetGeometry *req,
- XtWidgetGeometry *reply)
-{
- if (reply->request_mode == 0) /* got turned down, so cope */
- XawPannerResize(gnew);
-
- (*pannerWidgetClass->core_class.superclass->core_class.set_values_almost)
- (gold, gnew, req, reply);
-}
-
-static XtGeometryResult
-XawPannerQueryGeometry(Widget gw, XtWidgetGeometry *intended,
- XtWidgetGeometry *pref)
-{
- PannerWidget pw = (PannerWidget)gw;
-
- pref->request_mode = (CWWidth | CWHeight);
- get_default_size(pw, &pref->width, &pref->height);
-
- if (((intended->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight))
- && intended->width == pref->width && intended->height == pref->height)
- return (XtGeometryYes);
- else if (pref->width == XtWidth(pw) && pref->height == XtHeight(pw))
- return (XtGeometryNo);
-
- return (XtGeometryAlmost);
-}
-
-
-/*ARGSUSED*/
-static void
-ActionStart(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- PannerWidget pw = (PannerWidget)gw;
- int x, y;
-
- if (!get_event_xy(pw, event, &x, &y)) {
- XBell(XtDisplay(gw), 0);
- return;
- }
-
- pw->panner.tmp.doing = True;
- pw->panner.tmp.startx = pw->panner.knob_x;
- pw->panner.tmp.starty = pw->panner.knob_y;
- pw->panner.tmp.dx = x - pw->panner.knob_x;
- pw->panner.tmp.dy = y - pw->panner.knob_y;
- pw->panner.tmp.x = pw->panner.knob_x;
- pw->panner.tmp.y = pw->panner.knob_y;
- if (pw->panner.rubber_band)
- DRAW_TMP(pw);
-}
-
-/*ARGSUSED*/
-static void
-ActionStop(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- PannerWidget pw = (PannerWidget)gw;
- int x, y;
-
- if (get_event_xy(pw, event, &x, &y)) {
- pw->panner.tmp.x = x - pw->panner.tmp.dx;
- pw->panner.tmp.y = y - pw->panner.tmp.dy;
- if (!pw->panner.allow_off)
- check_knob(pw, False);
- }
- if (pw->panner.rubber_band)
- DRAW_TMP(pw);
- pw->panner.tmp.doing = False;
-}
-
-static void
-ActionAbort(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- PannerWidget pw = (PannerWidget)gw;
-
- if (!pw->panner.tmp.doing)
- return;
-
- if (pw->panner.rubber_band)
- UNDRAW_TMP(pw);
-
- if (!pw->panner.rubber_band) { /* restore old position */
- pw->panner.tmp.x = pw->panner.tmp.startx;
- pw->panner.tmp.y = pw->panner.tmp.starty;
- ActionNotify(gw, event, params, num_params);
- }
- pw->panner.tmp.doing = False;
-}
-
-static void
-ActionMove(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- PannerWidget pw = (PannerWidget)gw;
- int x, y;
-
- if (!pw->panner.tmp.doing)
- return;
-
- if (!get_event_xy(pw, event, &x, &y)) {
- XBell(XtDisplay(gw), 0); /* should do error message */
- return;
- }
-
- if (pw->panner.rubber_band)
- UNDRAW_TMP(pw);
- pw->panner.tmp.x = x - pw->panner.tmp.dx;
- pw->panner.tmp.y = y - pw->panner.tmp.dy;
-
- if (!pw->panner.rubber_band)
- ActionNotify(gw, event, params, num_params);
- else {
- if (!pw->panner.allow_off)
- check_knob(pw, False);
- DRAW_TMP(pw);
- }
-}
-
-
-static void
-ActionPage(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- PannerWidget pw = (PannerWidget)gw;
- Cardinal zero = 0;
- Bool isin = pw->panner.tmp.doing;
- int x, y;
- Bool relx, rely;
- int pad = pw->panner.internal_border << 1;
-
- if (*num_params != 2) {
- XBell(XtDisplay(gw), 0);
- return;
- }
-
- x = parse_page_string(params[0], pw->panner.knob_width,
- (int)XtWidth(pw) - pad, &relx);
- y = parse_page_string(params[1], pw->panner.knob_height,
- (int)XtHeight(pw) - pad, &rely);
-
- if (relx)
- x += pw->panner.knob_x;
- if (rely)
- y += pw->panner.knob_y;
-
- if (isin) { /* if in, then use move */
- XEvent ev;
-
- ev.xbutton.type = ButtonPress;
- ev.xbutton.x = x;
- ev.xbutton.y = y;
- ActionMove(gw, &ev, NULL, &zero);
- }
- else {
- pw->panner.tmp.doing = True;
- pw->panner.tmp.x = x;
- pw->panner.tmp.y = y;
- ActionNotify(gw, event, NULL, &zero);
- pw->panner.tmp.doing = False;
- }
-}
-
-/*ARGSUSED*/
-static void
-ActionNotify(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- PannerWidget pw = (PannerWidget)gw;
-
- if (!pw->panner.tmp.doing)
- return;
-
- if (!pw->panner.allow_off)
- check_knob(pw, False);
- pw->panner.knob_x = pw->panner.tmp.x;
- pw->panner.knob_y = pw->panner.tmp.y;
- move_shadow(pw);
-
- pw->panner.slider_x = (Position)((double)pw->panner.knob_x
- / pw->panner.haspect + 0.5);
- pw->panner.slider_y = (Position)((double) pw->panner.knob_y
- / pw->panner.vaspect + 0.5);
- if (!pw->panner.allow_off) {
- Position tmp;
-
- if (pw->panner.slider_x
- > (tmp = (Position)pw->panner.canvas_width -
- (Position)pw->panner.slider_width))
- pw->panner.slider_x = tmp;
- if (pw->panner.slider_x < 0)
- pw->panner.slider_x = 0;
- if (pw->panner.slider_y
- > (tmp = (Position)pw->panner.canvas_height -
- (Position)pw->panner.slider_height))
- pw->panner.slider_y = tmp;
- if (pw->panner.slider_y < 0)
- pw->panner.slider_y = 0;
- }
-
- if (pw->panner.last_x != pw->panner.knob_x ||
- pw->panner.last_y != pw->panner.knob_y) {
- XawPannerReport rep;
-
- XawPannerRedisplay(gw, NULL, NULL);
- rep.changed = XawPRSliderX | XawPRSliderY;
- rep.slider_x = pw->panner.slider_x;
- rep.slider_y = pw->panner.slider_y;
- rep.slider_width = pw->panner.slider_width;
- rep.slider_height = pw->panner.slider_height;
- rep.canvas_width = pw->panner.canvas_width;
- rep.canvas_height = pw->panner.canvas_height;
- XtCallCallbackList(gw, pw->panner.report_callbacks, (XtPointer)&rep);
- }
-}
-
-/*ARGSUSED*/
-static void
-ActionSet(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- PannerWidget pw = (PannerWidget)gw;
- Bool rb;
-
- if (*num_params < 2 ||
- XmuCompareISOLatin1(params[0], "rubberband") != 0) {
- XBell(XtDisplay(gw), 0);
- return;
- }
-
- if (XmuCompareISOLatin1(params[1], "on") == 0)
- rb = True;
- else if (XmuCompareISOLatin1(params[1], "off") == 0)
- rb = False;
- else if (XmuCompareISOLatin1(params[1], "toggle") == 0)
- rb = !pw->panner.rubber_band;
- else {
- XBell(XtDisplay(gw), 0);
- return;
- }
-
- if (rb != pw->panner.rubber_band) {
- Arg args[1];
-
- XtSetArg(args[0], XtNrubberBand, rb);
- XtSetValues(gw, args, 1);
- }
-}
+/*
+ *
+Copyright 1989, 1994, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <ctype.h>
+#include <math.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/Drawing.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/PannerP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#if defined(ISC) && __STDC__ && !defined(ISC30)
+extern double atof(char *);
+#else
+#include <stdlib.h> /* for atof() */
+#endif
+
+/*
+ * Class Methods
+ */
+static void XawPannerDestroy(Widget);
+static void XawPannerInitialize(Widget, Widget, ArgList, Cardinal*);
+static XtGeometryResult XawPannerQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawPannerRealize(Widget, XtValueMask*, XSetWindowAttributes*);
+static void XawPannerRedisplay(Widget, XEvent*, Region);
+static void XawPannerResize(Widget);
+static Boolean XawPannerSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+static void XawPannerSetValuesAlmost(Widget, Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+
+/*
+ * Prototypes
+ */
+static void check_knob(PannerWidget, Bool);
+static void get_default_size(PannerWidget, Dimension*, Dimension*);
+static Bool get_event_xy(PannerWidget, XEvent*, int*, int*);
+static void move_shadow(PannerWidget);
+static int parse_page_string(char*, int, int, Bool*);
+static void rescale(PannerWidget);
+static void reset_shadow_gc(PannerWidget);
+static void reset_slider_gc(PannerWidget);
+static void reset_xor_gc(PannerWidget);
+static void scale_knob(PannerWidget, Bool, Bool);
+
+/*
+ * Actions
+ */
+static void ActionAbort(Widget, XEvent*, String*, Cardinal*);
+static void ActionMove(Widget, XEvent*, String*, Cardinal*);
+static void ActionNotify(Widget, XEvent*, String*, Cardinal*);
+static void ActionPage(Widget, XEvent*, String*, Cardinal*);
+static void ActionSet(Widget, XEvent*, String*, Cardinal*);
+static void ActionStart(Widget, XEvent*, String*, Cardinal*);
+static void ActionStop(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * From Xmu/Distinct.c
+ */
+Bool XmuDistinguishablePixels(Display*, Colormap, unsigned long*, int);
+
+/*
+ * Initialization
+ */
+static char defaultTranslations[] =
+"<Btn1Down>:" "start()\n"
+"<Btn1Motion>:" "move()\n"
+"<Btn1Up>:" "notify() stop()\n"
+"<Btn2Down>:" "abort()\n"
+":<Key>KP_Enter:" "set(rubberband,toggle)\n"
+"<Key>space:" "page(+1p,+1p)\n"
+"<Key>Delete:" "page(-1p,-1p)\n"
+":<Key>KP_Delete:" "page(-1p,-1p)\n"
+"<Key>BackSpace:" "page(-1p,-1p)\n"
+"<Key>Left:" "page(-.5p,+0)\n"
+":<Key>KP_Left:" "page(-.5p,+0)\n"
+"<Key>Right:" "page(+.5p,+0)\n"
+":<Key>KP_Right:" "page(+.5p,+0)\n"
+"<Key>Up:" "page(+0,-.5p)\n"
+":<Key>KP_Up:" "page(+0,-.5p)\n"
+"<Key>Down:" "page(+0,+.5p)\n"
+":<Key>KP_Down:" "page(+0,+.5p)\n"
+"<Key>Home:" "page(0,0)\n"
+":<Key>KP_Home:" "page(0,0)\n"
+;
+
+static XtActionsRec actions[] = {
+ {"start", ActionStart}, /* start tmp graphics */
+ {"stop", ActionStop}, /* stop tmp graphics */
+ {"abort", ActionAbort}, /* punt */
+ {"move", ActionMove}, /* move tmp graphics on Motion event */
+ {"page", ActionPage}, /* page around usually from keyboard */
+ {"notify", ActionNotify}, /* callback new position */
+ {"set", ActionSet}, /* set various parameters */
+};
+
+#define offset(field) XtOffsetOf(PannerRec, panner.field)
+static XtResource resources[] = {
+ {
+ XtNallowOff,
+ XtCAllowOff,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(allow_off),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNresize,
+ XtCResize,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(resize_to_pref),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNreportCallback,
+ XtCReportCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(report_callbacks),
+ XtRCallback,
+ NULL
+ },
+ {
+ XtNdefaultScale,
+ XtCDefaultScale,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(default_scale),
+ XtRImmediate,
+ (XtPointer)PANNER_DEFAULT_SCALE
+ },
+ {
+ XtNrubberBand,
+ XtCRubberBand,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(rubber_band),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(foreground),
+ XtRString,
+ (XtPointer)XtDefaultBackground
+ },
+ {
+ XtNinternalSpace,
+ XtCInternalSpace,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(internal_border),
+ XtRImmediate,
+ (XtPointer)4
+ },
+ {
+ XtNlineWidth,
+ XtCLineWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(line_width),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNcanvasWidth,
+ XtCCanvasWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(canvas_width),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNcanvasHeight,
+ XtCCanvasHeight,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(canvas_height),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNsliderX,
+ XtCSliderX,
+ XtRPosition,
+ sizeof(Position),
+ offset(slider_x),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNsliderY,
+ XtCSliderY,
+ XtRPosition,
+ sizeof(Position),
+ offset(slider_y),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNsliderWidth,
+ XtCSliderWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(slider_width),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNsliderHeight,
+ XtCSliderHeight,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(slider_height),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNshadowColor,
+ XtCShadowColor,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(shadow_color),
+ XtRString,
+ (XtPointer)XtDefaultForeground
+ },
+ {
+ XtNshadowThickness,
+ XtCShadowThickness,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(shadow_thickness),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNbackgroundStipple,
+ XtCBackgroundStipple,
+ XtRString,
+ sizeof(String),
+ offset(stipple_name),
+ XtRImmediate,
+ NULL
+ },
+};
+#undef offset
+
+#define Superclass (&simpleClassRec)
+PannerClassRec pannerClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Panner", /* class_name */
+ sizeof(PannerRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawPannerInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawPannerRealize, /* realize */
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawPannerDestroy, /* destroy */
+ XawPannerResize, /* resize */
+ XawPannerRedisplay, /* expose */
+ XawPannerSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XawPannerSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ defaultTranslations, /* tm_table */
+ XawPannerQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* panner */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass pannerWidgetClass = (WidgetClass) &pannerClassRec;
+
+
+/*
+ * Implementation
+ */
+static void
+reset_shadow_gc(PannerWidget pw)
+{
+ XtGCMask valuemask = GCForeground;
+ XGCValues values;
+ unsigned long pixels[3];
+
+ if (pw->panner.shadow_gc)
+ XtReleaseGC((Widget)pw, pw->panner.shadow_gc);
+
+ pixels[0] = pw->panner.foreground;
+ pixels[1] = pw->core.background_pixel;
+ pixels[2] = pw->panner.shadow_color;
+
+ if (!pw->panner.stipple_name &&
+ !XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
+ pixels, 3) &&
+ XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
+ pixels, 2)) {
+ valuemask = GCTile | GCFillStyle;
+ values.fill_style = FillTiled;
+ values.tile = XmuCreateStippledPixmap(XtScreen((Widget)pw),
+ pw->panner.foreground,
+ pw->core.background_pixel,
+ pw->core.depth);
+ }
+ else {
+ if (!pw->panner.line_width &&
+ !XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
+ pixels, 2))
+ pw->panner.line_width = 1;
+ valuemask = GCForeground;
+ values.foreground = pw->panner.shadow_color;
+ }
+ if (pw->panner.line_width > 0) {
+ values.line_width = pw->panner.line_width;
+ valuemask |= GCLineWidth;
+ }
+
+ pw->panner.shadow_gc = XtGetGC((Widget)pw, valuemask, &values);
+}
+
+static void
+reset_slider_gc(PannerWidget pw)
+{
+ XtGCMask valuemask = GCForeground;
+ XGCValues values;
+
+ if (pw->panner.slider_gc)
+ XtReleaseGC((Widget)pw, pw->panner.slider_gc);
+
+ values.foreground = pw->panner.foreground;
+
+ pw->panner.slider_gc = XtGetGC((Widget)pw, valuemask, &values);
+}
+
+static void
+reset_xor_gc(PannerWidget pw)
+{
+ if (pw->panner.xor_gc)
+ XtReleaseGC((Widget)pw, pw->panner.xor_gc);
+
+ if (pw->panner.rubber_band) {
+ XtGCMask valuemask = (GCForeground | GCFunction);
+ XGCValues values;
+ Pixel tmp;
+
+ tmp = (pw->panner.foreground == pw->core.background_pixel ?
+ pw->panner.shadow_color : pw->panner.foreground);
+ values.foreground = tmp ^ pw->core.background_pixel;
+ values.function = GXxor;
+ if (pw->panner.line_width > 0) {
+ valuemask |= GCLineWidth;
+ values.line_width = pw->panner.line_width;
+ }
+ pw->panner.xor_gc = XtGetGC((Widget)pw, valuemask, &values);
+ }
+ else
+ pw->panner.xor_gc = NULL;
+}
+
+static void
+check_knob(PannerWidget pw, Bool knob)
+{
+ Position pad = pw->panner.internal_border << 1;
+ Position maxx = (Position)XtWidth(pw) - pad -
+ (Position)pw->panner.knob_width;
+ Position maxy = (Position)XtHeight(pw) - pad -
+ (Position)pw->panner.knob_height;
+ Position *x = knob ? &pw->panner.knob_x : &pw->panner.tmp.x;
+ Position *y = knob ? &pw->panner.knob_y : &pw->panner.tmp.y;
+
+ /*
+ * note that positions are already normalized (i.e. internal_border
+ * has been subtracted out)
+ */
+ if (*x < 0)
+ *x = 0;
+ if (*x > maxx)
+ *x = maxx;
+
+ if (*y < 0)
+ *y = 0;
+ if (*y > maxy)
+ *y = maxy;
+
+ if (knob) {
+ pw->panner.slider_x = (Position)((double)pw->panner.knob_x
+ / pw->panner.haspect + 0.5);
+ pw->panner.slider_y = (Position)((double)pw->panner.knob_y
+ / pw->panner.vaspect + 0.5);
+ pw->panner.last_x = pw->panner.last_y = PANNER_OUTOFRANGE;
+ }
+}
+
+static void
+move_shadow(PannerWidget pw)
+{
+ if (pw->panner.shadow_thickness > 0) {
+ int lw = pw->panner.shadow_thickness + (pw->panner.line_width << 1);
+ int pad = pw->panner.internal_border;
+
+ if (pw->panner.knob_height > lw && pw->panner.knob_width > lw) {
+ XRectangle *r = pw->panner.shadow_rects;
+
+ r->x = pw->panner.knob_x + pad + pw->panner.knob_width;
+ r->y = pw->panner.knob_y + pad + lw;
+ r->width = pw->panner.shadow_thickness;
+ r->height = pw->panner.knob_height - lw;
+ r++;
+ r->x = pw->panner.knob_x + pad + lw;
+ r->y = pw->panner.knob_y + pad + pw->panner.knob_height;
+ r->width = pw->panner.knob_width - lw + pw->panner.shadow_thickness;
+ r->height = pw->panner.shadow_thickness;
+ pw->panner.shadow_valid = True;
+ return;
+ }
+ }
+ pw->panner.shadow_valid = False;
+}
+
+static void
+scale_knob(PannerWidget pw, Bool location, Bool size)
+{
+ if (location) {
+ pw->panner.knob_x = (Position)PANNER_HSCALE(pw, pw->panner.slider_x);
+ pw->panner.knob_y = (Position)PANNER_VSCALE(pw, pw->panner.slider_y);
+ }
+ if (size) {
+ Dimension width, height;
+
+ if (pw->panner.slider_width < 1)
+ pw->panner.slider_width = pw->panner.canvas_width;
+ if (pw->panner.slider_height < 1)
+ pw->panner.slider_height = pw->panner.canvas_height;
+ width = Min(pw->panner.slider_width, pw->panner.canvas_width);
+ height = Min(pw->panner.slider_height, pw->panner.canvas_height);
+
+ pw->panner.knob_width = (Dimension)PANNER_HSCALE(pw, width);
+ pw->panner.knob_height = (Dimension)PANNER_VSCALE(pw, height);
+ }
+ if (!pw->panner.allow_off)
+ check_knob(pw, True);
+ move_shadow(pw);
+}
+
+static void
+rescale(PannerWidget pw)
+{
+ int hpad = pw->panner.internal_border << 1;
+ int vpad = hpad;
+
+ if (pw->panner.canvas_width < 1)
+ pw->panner.canvas_width = XtWidth(pw);
+ if (pw->panner.canvas_height < 1)
+ pw->panner.canvas_height = XtHeight(pw);
+
+ if (XtWidth(pw) <= hpad)
+ hpad = 0;
+ if (XtHeight(pw) <= vpad)
+ vpad = 0;
+
+ pw->panner.haspect = ((double)XtWidth(pw) - hpad + .5)
+ / (double)pw->panner.canvas_width;
+ pw->panner.vaspect = ((double)XtHeight(pw) - vpad + .5)
+ / (double)pw->panner.canvas_height;
+ scale_knob(pw, True, True);
+}
+
+static void
+get_default_size(PannerWidget pw, Dimension *wp, Dimension *hp)
+{
+ Dimension pad = pw->panner.internal_border << 1;
+
+ *wp = PANNER_DSCALE(pw, pw->panner.canvas_width) + pad;
+ *hp = PANNER_DSCALE(pw, pw->panner.canvas_height) + pad;
+}
+
+static Bool
+get_event_xy(PannerWidget pw, XEvent *event, int *x, int *y)
+{
+ int pad = pw->panner.internal_border;
+
+ switch (event->type) {
+ case ButtonPress:
+ case ButtonRelease:
+ *x = event->xbutton.x - pad;
+ *y = event->xbutton.y - pad;
+ return (True);
+ case KeyPress:
+ case KeyRelease:
+ *x = event->xkey.x - pad;
+ *y = event->xkey.y - pad;
+ return (True);
+ case EnterNotify:
+ case LeaveNotify:
+ *x = event->xcrossing.x - pad;
+ *y = event->xcrossing.y - pad;
+ return (True);
+ case MotionNotify:
+ *x = event->xmotion.x - pad;
+ *y = event->xmotion.y - pad;
+ return (True);
+ }
+
+ return (False);
+}
+
+static int
+parse_page_string(char *s, int pagesize, int canvassize, Bool *relative)
+{
+ char *cp;
+ double val = 1.0;
+ Bool rel = False;
+
+ /*
+ * syntax: spaces [+-] number spaces [pc\0] spaces
+ */
+ for (; isascii(*s) && isspace(*s); s++) /* skip white space */
+ ;
+
+ if (*s == '+' || *s == '-') { /* deal with signs */
+ rel = True;
+ if (*s == '-')
+ val = -1.0;
+ s++;
+ }
+ if (!*s) { /* if null then return nothing */
+ *relative = True;
+ return (0);
+ }
+
+ /* skip over numbers */
+ for (cp = s; isascii(*s) && (isdigit(*s) || *s == '.'); s++)
+ ;
+ val *= atof(cp);
+
+ /* skip blanks */
+ for (; isascii(*s) && isspace(*s); s++)
+ ;
+
+ if (*s) { /* if units */
+ switch (s[0]) {
+ case 'p':
+ case 'P':
+ val *= (double)pagesize;
+ break;
+ case 'c':
+ case 'C':
+ val *= (double)canvassize;
+ break;
+ }
+ }
+ *relative = rel;
+
+ return ((int)val);
+}
+
+#define DRAW_TMP(pw) \
+{ \
+ XDrawRectangle(XtDisplay(pw), XtWindow(pw), \
+ pw->panner.xor_gc, \
+ pw->panner.tmp.x + pw->panner.internal_border, \
+ pw->panner.tmp.y + pw->panner.internal_border, \
+ pw->panner.knob_width - 1, \
+ pw->panner.knob_height - 1); \
+ pw->panner.tmp.showing = !pw->panner.tmp.showing; \
+}
+
+#define UNDRAW_TMP(pw) \
+{ \
+ if (pw->panner.tmp.showing) \
+ DRAW_TMP(pw); \
+}
+
+#define BACKGROUND_STIPPLE(pw) \
+XmuLocatePixmapFile(pw->core.screen, pw->panner.stipple_name, \
+ pw->panner.shadow_color, pw->core.background_pixel, \
+ pw->core.depth, NULL, 0, NULL, NULL, NULL, NULL)
+
+#define PIXMAP_OKAY(pm) ((pm) != None && (pm) != XtUnspecifiedPixmap)
+
+/*ARGSUSED*/
+static void
+XawPannerInitialize(Widget greq, Widget gnew, ArgList args, Cardinal *num_args)
+{
+ PannerWidget req = (PannerWidget)greq, cnew = (PannerWidget)gnew;
+ Dimension defwidth, defheight;
+
+ if (req->panner.canvas_width < 1)
+ cnew->panner.canvas_width = 1;
+ if (req->panner.canvas_height < 1)
+ cnew->panner.canvas_height = 1;
+ if (req->panner.default_scale < 1)
+ cnew->panner.default_scale = PANNER_DEFAULT_SCALE;
+
+ get_default_size(req, &defwidth, &defheight);
+ if (XtWidth(req) < 1)
+ XtWidth(cnew) = defwidth;
+ if (XtHeight(req) < 1)
+ XtHeight(cnew) = defheight;
+
+ cnew->panner.shadow_gc = NULL;
+ reset_shadow_gc(cnew); /* shadowColor */
+ cnew->panner.slider_gc = NULL;
+ reset_slider_gc(cnew); /* foreground */
+ cnew->panner.xor_gc = NULL;
+ reset_xor_gc(cnew); /* foreground ^ background */
+
+ rescale(cnew); /* does a position check */
+ cnew->panner.shadow_valid = False;
+ cnew->panner.tmp.doing = False;
+ cnew->panner.tmp.showing = False;
+ }
+
+static void
+XawPannerRealize(Widget gw, XtValueMask *valuemaskp,
+ XSetWindowAttributes *attr)
+{
+ PannerWidget pw = (PannerWidget)gw;
+ Pixmap pm = XtUnspecifiedPixmap;
+ Bool gotpm = False;
+
+ if (pw->core.background_pixmap == XtUnspecifiedPixmap) {
+ if (pw->panner.stipple_name)
+ pm = BACKGROUND_STIPPLE(pw);
+
+ if (PIXMAP_OKAY(pm)) {
+ attr->background_pixmap = pm;
+ *valuemaskp |= CWBackPixmap;
+ *valuemaskp &= ~CWBackPixel;
+ gotpm = True;
+ }
+ }
+ (*pannerWidgetClass->core_class.superclass->core_class.realize)
+ (gw, valuemaskp, attr);
+
+ if (gotpm)
+ XFreePixmap(XtDisplay(gw), pm);
+}
+
+static void
+XawPannerDestroy(Widget gw)
+{
+ PannerWidget pw = (PannerWidget)gw;
+
+ XtReleaseGC(gw, pw->panner.shadow_gc);
+ XtReleaseGC(gw, pw->panner.slider_gc);
+ XtReleaseGC(gw, pw->panner.xor_gc);
+}
+
+static void
+XawPannerResize(Widget gw)
+{
+ rescale((PannerWidget)gw);
+}
+
+static void
+XawPannerRedisplay(Widget gw, XEvent *event, Region region)
+{
+ PannerWidget pw = (PannerWidget)gw;
+ Display *dpy = XtDisplay(gw);
+ Window w = XtWindow(gw);
+ int pad = pw->panner.internal_border;
+ Dimension lw = pw->panner.line_width;
+ Dimension extra = pw->panner.shadow_thickness + (lw << 1);
+ int kx = pw->panner.knob_x + pad, ky = pw->panner.knob_y + pad;
+
+ if (Superclass->core_class.expose)
+ (Superclass->core_class.expose)(gw, event, region);
+
+ pw->panner.tmp.showing = False;
+ XClearArea(XtDisplay(pw), XtWindow(pw),
+ (int)pw->panner.last_x - ((int)lw) + pad,
+ (int)pw->panner.last_y - ((int)lw) + pad,
+ pw->panner.knob_width + extra,
+ pw->panner.knob_height + extra,
+ False);
+ pw->panner.last_x = pw->panner.knob_x;
+ pw->panner.last_y = pw->panner.knob_y;
+
+ XFillRectangle(dpy, w, pw->panner.slider_gc, kx, ky,
+ pw->panner.knob_width - 1, pw->panner.knob_height - 1);
+
+ if (lw)
+ XDrawRectangle(dpy, w, pw->panner.shadow_gc, kx, ky,
+ pw->panner.knob_width - 1, pw->panner.knob_height - 1);
+
+ if (pw->panner.shadow_valid)
+ XFillRectangles(dpy, w, pw->panner.shadow_gc, pw->panner.shadow_rects, 2);
+
+ if (pw->panner.tmp.doing && pw->panner.rubber_band)
+ DRAW_TMP(pw);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawPannerSetValues(Widget gcur, Widget greq, Widget gnew,
+ ArgList args, Cardinal *num_args)
+{
+ PannerWidget cur = (PannerWidget)gcur;
+ PannerWidget cnew = (PannerWidget)gnew;
+ Bool redisplay = False;
+
+ if (cur->panner.foreground != cnew->panner.foreground) {
+ reset_slider_gc(cnew);
+ if (cur->panner.foreground != cur->core.background_pixel)
+ reset_xor_gc(cnew);
+ redisplay = True;
+ }
+ else if (cur->panner.line_width != cnew->panner.line_width ||
+ cur->core.background_pixel != cnew->core.background_pixel) {
+ reset_xor_gc(cnew);
+ redisplay = True;
+ }
+ if (cur->panner.shadow_color != cnew->panner.shadow_color) {
+ reset_shadow_gc(cnew);
+ if (cur->panner.foreground == cur->core.background_pixel)
+ reset_xor_gc(cnew);
+ redisplay = True;
+ }
+ if (cur->panner.shadow_thickness != cnew->panner.shadow_thickness) {
+ move_shadow(cnew);
+ redisplay = True;
+ }
+ if (cur->panner.rubber_band != cnew->panner.rubber_band) {
+ reset_xor_gc(cnew);
+ if (cnew->panner.tmp.doing)
+ redisplay = True;
+ }
+
+ if ((cur->panner.stipple_name != cnew->panner.stipple_name
+ || cur->panner.shadow_color != cnew->panner.shadow_color
+ || cur->core.background_pixel != cnew->core.background_pixel)
+ && XtIsRealized(gnew)) {
+ Pixmap pm = cnew->panner.stipple_name ?
+ BACKGROUND_STIPPLE(cnew) : XtUnspecifiedPixmap;
+
+ if (PIXMAP_OKAY(pm)) {
+ XSetWindowBackgroundPixmap(XtDisplay(cnew), XtWindow(cnew), pm);
+ XFreePixmap(XtDisplay(cnew), pm);
+ }
+ else
+ XSetWindowBackground(XtDisplay(cnew), XtWindow(cnew),
+ cnew->core.background_pixel);
+
+ redisplay = True;
+ }
+
+ if (cnew->panner.resize_to_pref &&
+ (cur->panner.canvas_width != cnew->panner.canvas_width
+ || cur->panner.canvas_height != cnew->panner.canvas_height
+ || cur->panner.resize_to_pref != cnew->panner.resize_to_pref)) {
+ get_default_size(cnew, &cnew->core.width, &cnew->core.height);
+ redisplay = True;
+ }
+ else if (cur->panner.canvas_width != cnew->panner.canvas_width
+ || cur->panner.canvas_height != cnew->panner.canvas_height
+ || cur->panner.internal_border != cnew->panner.internal_border) {
+ rescale(cnew); /* does a scale_knob as well */
+ redisplay = True;
+ }
+ else {
+ Bool loc = cur->panner.slider_x != cnew->panner.slider_x ||
+ cur->panner.slider_y != cnew->panner.slider_y;
+ Bool siz = cur->panner.slider_width != cnew->panner.slider_width ||
+ cur->panner.slider_height != cnew->panner.slider_height;
+ if (loc || siz || (cur->panner.allow_off != cnew->panner.allow_off
+ && cnew->panner.allow_off)) {
+ scale_knob(cnew, loc, siz);
+ redisplay = True;
+ }
+ }
+
+ return (redisplay);
+}
+
+static void
+XawPannerSetValuesAlmost(Widget gold, Widget gnew, XtWidgetGeometry *req,
+ XtWidgetGeometry *reply)
+{
+ if (reply->request_mode == 0) /* got turned down, so cope */
+ XawPannerResize(gnew);
+
+ (*pannerWidgetClass->core_class.superclass->core_class.set_values_almost)
+ (gold, gnew, req, reply);
+}
+
+static XtGeometryResult
+XawPannerQueryGeometry(Widget gw, XtWidgetGeometry *intended,
+ XtWidgetGeometry *pref)
+{
+ PannerWidget pw = (PannerWidget)gw;
+
+ pref->request_mode = (CWWidth | CWHeight);
+ get_default_size(pw, &pref->width, &pref->height);
+
+ if (((intended->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight))
+ && intended->width == pref->width && intended->height == pref->height)
+ return (XtGeometryYes);
+ else if (pref->width == XtWidth(pw) && pref->height == XtHeight(pw))
+ return (XtGeometryNo);
+
+ return (XtGeometryAlmost);
+}
+
+
+/*ARGSUSED*/
+static void
+ActionStart(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ PannerWidget pw = (PannerWidget)gw;
+ int x, y;
+
+ if (!get_event_xy(pw, event, &x, &y)) {
+ XBell(XtDisplay(gw), 0);
+ return;
+ }
+
+ pw->panner.tmp.doing = True;
+ pw->panner.tmp.startx = pw->panner.knob_x;
+ pw->panner.tmp.starty = pw->panner.knob_y;
+ pw->panner.tmp.dx = x - pw->panner.knob_x;
+ pw->panner.tmp.dy = y - pw->panner.knob_y;
+ pw->panner.tmp.x = pw->panner.knob_x;
+ pw->panner.tmp.y = pw->panner.knob_y;
+ if (pw->panner.rubber_band)
+ DRAW_TMP(pw);
+}
+
+/*ARGSUSED*/
+static void
+ActionStop(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ PannerWidget pw = (PannerWidget)gw;
+ int x, y;
+
+ if (get_event_xy(pw, event, &x, &y)) {
+ pw->panner.tmp.x = x - pw->panner.tmp.dx;
+ pw->panner.tmp.y = y - pw->panner.tmp.dy;
+ if (!pw->panner.allow_off)
+ check_knob(pw, False);
+ }
+ if (pw->panner.rubber_band)
+ DRAW_TMP(pw);
+ pw->panner.tmp.doing = False;
+}
+
+static void
+ActionAbort(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ PannerWidget pw = (PannerWidget)gw;
+
+ if (!pw->panner.tmp.doing)
+ return;
+
+ if (pw->panner.rubber_band)
+ UNDRAW_TMP(pw);
+
+ if (!pw->panner.rubber_band) { /* restore old position */
+ pw->panner.tmp.x = pw->panner.tmp.startx;
+ pw->panner.tmp.y = pw->panner.tmp.starty;
+ ActionNotify(gw, event, params, num_params);
+ }
+ pw->panner.tmp.doing = False;
+}
+
+static void
+ActionMove(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ PannerWidget pw = (PannerWidget)gw;
+ int x, y;
+
+ if (!pw->panner.tmp.doing)
+ return;
+
+ if (!get_event_xy(pw, event, &x, &y)) {
+ XBell(XtDisplay(gw), 0); /* should do error message */
+ return;
+ }
+
+ if (pw->panner.rubber_band)
+ UNDRAW_TMP(pw);
+ pw->panner.tmp.x = x - pw->panner.tmp.dx;
+ pw->panner.tmp.y = y - pw->panner.tmp.dy;
+
+ if (!pw->panner.rubber_band)
+ ActionNotify(gw, event, params, num_params);
+ else {
+ if (!pw->panner.allow_off)
+ check_knob(pw, False);
+ DRAW_TMP(pw);
+ }
+}
+
+
+static void
+ActionPage(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ PannerWidget pw = (PannerWidget)gw;
+ Cardinal zero = 0;
+ Bool isin = pw->panner.tmp.doing;
+ int x, y;
+ Bool relx, rely;
+ int pad = pw->panner.internal_border << 1;
+
+ if (*num_params != 2) {
+ XBell(XtDisplay(gw), 0);
+ return;
+ }
+
+ x = parse_page_string(params[0], pw->panner.knob_width,
+ (int)XtWidth(pw) - pad, &relx);
+ y = parse_page_string(params[1], pw->panner.knob_height,
+ (int)XtHeight(pw) - pad, &rely);
+
+ if (relx)
+ x += pw->panner.knob_x;
+ if (rely)
+ y += pw->panner.knob_y;
+
+ if (isin) { /* if in, then use move */
+ XEvent ev;
+
+ ev.xbutton.type = ButtonPress;
+ ev.xbutton.x = x;
+ ev.xbutton.y = y;
+ ActionMove(gw, &ev, NULL, &zero);
+ }
+ else {
+ pw->panner.tmp.doing = True;
+ pw->panner.tmp.x = x;
+ pw->panner.tmp.y = y;
+ ActionNotify(gw, event, NULL, &zero);
+ pw->panner.tmp.doing = False;
+ }
+}
+
+/*ARGSUSED*/
+static void
+ActionNotify(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ PannerWidget pw = (PannerWidget)gw;
+
+ if (!pw->panner.tmp.doing)
+ return;
+
+ if (!pw->panner.allow_off)
+ check_knob(pw, False);
+ pw->panner.knob_x = pw->panner.tmp.x;
+ pw->panner.knob_y = pw->panner.tmp.y;
+ move_shadow(pw);
+
+ pw->panner.slider_x = (Position)((double)pw->panner.knob_x
+ / pw->panner.haspect + 0.5);
+ pw->panner.slider_y = (Position)((double) pw->panner.knob_y
+ / pw->panner.vaspect + 0.5);
+ if (!pw->panner.allow_off) {
+ Position tmp;
+
+ if (pw->panner.slider_x
+ > (tmp = (Position)pw->panner.canvas_width -
+ (Position)pw->panner.slider_width))
+ pw->panner.slider_x = tmp;
+ if (pw->panner.slider_x < 0)
+ pw->panner.slider_x = 0;
+ if (pw->panner.slider_y
+ > (tmp = (Position)pw->panner.canvas_height -
+ (Position)pw->panner.slider_height))
+ pw->panner.slider_y = tmp;
+ if (pw->panner.slider_y < 0)
+ pw->panner.slider_y = 0;
+ }
+
+ if (pw->panner.last_x != pw->panner.knob_x ||
+ pw->panner.last_y != pw->panner.knob_y) {
+ XawPannerReport rep;
+
+ XawPannerRedisplay(gw, NULL, NULL);
+ rep.changed = XawPRSliderX | XawPRSliderY;
+ rep.slider_x = pw->panner.slider_x;
+ rep.slider_y = pw->panner.slider_y;
+ rep.slider_width = pw->panner.slider_width;
+ rep.slider_height = pw->panner.slider_height;
+ rep.canvas_width = pw->panner.canvas_width;
+ rep.canvas_height = pw->panner.canvas_height;
+ XtCallCallbackList(gw, pw->panner.report_callbacks, (XtPointer)&rep);
+ }
+}
+
+/*ARGSUSED*/
+static void
+ActionSet(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ PannerWidget pw = (PannerWidget)gw;
+ Bool rb;
+
+ if (*num_params < 2 ||
+ XmuCompareISOLatin1(params[0], "rubberband") != 0) {
+ XBell(XtDisplay(gw), 0);
+ return;
+ }
+
+ if (XmuCompareISOLatin1(params[1], "on") == 0)
+ rb = True;
+ else if (XmuCompareISOLatin1(params[1], "off") == 0)
+ rb = False;
+ else if (XmuCompareISOLatin1(params[1], "toggle") == 0)
+ rb = !pw->panner.rubber_band;
+ else {
+ XBell(XtDisplay(gw), 0);
+ return;
+ }
+
+ if (rb != pw->panner.rubber_band) {
+ Arg args[1];
+
+ XtSetArg(args[0], XtNrubberBand, rb);
+ XtSetValues(gw, args, 1);
+ }
+}
diff --git a/libXaw/src/Pixmap.c b/libXaw/src/Pixmap.c
index d8e1f1dae..92880c247 100644
--- a/libXaw/src/Pixmap.c
+++ b/libXaw/src/Pixmap.c
@@ -1,997 +1,995 @@
-/*
- * Copyright (c) 1998 by The XFree86 Project, 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 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.
- */
-
-/* $XFree86: xc/lib/Xaw/Pixmap.c,v 3.17 2002/05/18 02:05:39 paulo Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <X11/IntrinsicP.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xfuncs.h>
-#include <X11/extensions/shape.h>
-#ifndef OLDXAW
-#include <X11/xpm.h>
-#endif
-#include "Private.h"
-
-#ifdef __UNIXOS2__
-static char dummy;
-#endif
-
-#ifndef OLDXAW
-
-/*
- * Types
- */
-typedef struct _XawCache {
- long value;
- XtPointer *elems;
- unsigned int num_elems;
-} XawCache;
-
-typedef struct _XawPixmapLoaderInfo {
- XawPixmapLoader loader;
- String type;
- String ext;
-} XawPixmapLoaderInfo;
-
-/*
- * Private Methods
- */
-static Bool BitmapLoader(XawParams*, Screen*, Colormap, int,
- Pixmap*, Pixmap*, Dimension*, Dimension*);
-static Bool GradientLoader(XawParams*, Screen*, Colormap, int,
- Pixmap*, Pixmap*, Dimension*, Dimension*);
-static Bool XPixmapLoader(XawParams*, Screen*, Colormap, int,
- Pixmap*, Pixmap*, Dimension*, Dimension*);
-static XawPixmap *_XawFindPixmap(String, Screen*, Colormap, int);
-static void _XawCachePixmap(XawPixmap*, Screen*, Colormap, int);
-static int _XawFindPixmapLoaderIndex(String, String);
-static int qcmp_long(register _Xconst void*, register _Xconst void *);
-static int bcmp_long(register _Xconst void*, register _Xconst void *);
-static int qcmp_string(register _Xconst void*, register _Xconst void *);
-static int bcmp_string(register _Xconst void*, register _Xconst void *);
-static void GetResourcePixmapPath(Display*);
-
-/*
- * Initialization
- */
-static XawCache xaw_pixmaps;
-static XawCache x_pixmaps; /* for fast reverse search */
-static XawPixmapLoaderInfo **loader_info;
-static Cardinal num_loader_info;
-
-/*
- * Implementation
- */
-Bool
-XawPixmapsInitialize(void)
-{
- static Boolean first_time = True;
-
- if (!first_time)
- return (False);
-
- (void)XawAddPixmapLoader(NULL, NULL, BitmapLoader);
- (void)XawAddPixmapLoader("bitmap", NULL, BitmapLoader);
- (void)XawAddPixmapLoader("gradient", NULL, GradientLoader);
- (void)XawAddPixmapLoader("xpm", "xpm", XPixmapLoader);
-
- return (True);
-}
-
-XawParams *
-XawParseParamsString(String name)
-{
- XawParams *xaw_params;
- char *tok, *str, *type = NULL, *ext = NULL, *params = NULL;
-
- if (!name)
- return (NULL);
-
- xaw_params = (XawParams *)XtMalloc(sizeof(XawParams));
-
- str = XtNewString(name);
-
- /* Find type */
- tok = str;
- while (tok = strchr(tok, ':'), tok)
- {
- if (tok == str || tok[-1] != '\\')
- break;
- memmove(&tok[-1], tok, strlen(tok) + 1);
- }
- if (tok)
- {
- *tok = '\0';
- if (strchr(str, '?'))
- {
- *tok = ':';
- }
- else
- {
- ++tok;
- type = XtNewString(str);
- memmove(str, tok, strlen(tok) + 1);
- }
- }
-
- /* Find params */
- tok = str;
- while (tok = strchr(tok, '?'), tok)
- {
- if (tok == str || tok[-1] != '\\')
- params = tok;
- if (tok != str && tok[-1] == '\\')
- memmove(&tok[-1], tok, strlen(tok) + 1);
- else
- break;
- }
- if (params)
- {
- *params = '\0';
- ++params;
- }
-
- /* Find ext */
- tok = str;
- while (tok = strchr(tok, '.'), tok)
- {
- if (tok == str || tok[-1] != '\\')
- ext = tok;
- if (tok != str && tok[-1] == '\\')
- memmove(&tok[-1], tok, strlen(tok) + 1);
- else
- break;
- }
- if (ext)
- {
- ++ext;
- if (strchr(ext, '/'))
- ext = NULL;
- }
-
- xaw_params->name = XtNewString(str);
- xaw_params->type = type;
- xaw_params->ext = ext ? XtNewString(ext) : ext;
- xaw_params->args = NULL;
- xaw_params->num_args = 0;
-
- /* Parse params */
- if (params)
- {
- char *arg, *val;
- XawArgVal *xaw_arg;
-
- for (tok = strtok(params, "&"); tok; tok = strtok(NULL, "&"))
- {
- val = strchr(tok, '=');
- if (val)
- {
- *val = '\0';
- ++val;
- if (*val != '\0')
- val = XtNewString(val);
- else
- val = NULL;
- }
- arg = XtNewString(tok);
- xaw_arg = (XawArgVal *)XtMalloc(sizeof(XawArgVal));
- xaw_arg->name = arg;
- xaw_arg->value = val;
- if (!xaw_params->num_args)
- {
- xaw_params->num_args = 1;
- xaw_params->args = (XawArgVal **)
- XtMalloc(sizeof(XawArgVal*));
- }
- else
- {
- ++xaw_params->num_args;
- xaw_params->args = (XawArgVal **)
- XtRealloc((char *)xaw_params->args,
- sizeof(XawArgVal*) * xaw_params->num_args);
- }
- xaw_params->args[xaw_params->num_args - 1] = xaw_arg;
- }
- }
-
- if (xaw_params->num_args > 1)
- qsort(xaw_params->args, xaw_params->num_args, sizeof(XtPointer),
- qcmp_string);
-
- XtFree(str);
-
- return (xaw_params);
-}
-
-void
-XawFreeParamsStruct(XawParams *params)
-{
- unsigned int i;
-
- if (!params)
- return;
-
- for (i = 0; i < params->num_args; i++)
- {
- XtFree(params->args[i]->name);
- if (params->args[i]->value)
- XtFree(params->args[i]->value);
- XtFree((char *)params->args[i]);
- }
-
- if (params->args)
- XtFree((char *)params->args);
- XtFree((char *)params);
-}
-
-XawArgVal *
-XawFindArgVal(XawParams *params, String name)
-{
- XawArgVal **arg_val;
-
- if (!params->args)
- return (NULL);
-
- arg_val = (XawArgVal **)bsearch((void *)name, params->args,
- params->num_args, sizeof(XtPointer*),
- bcmp_string);
- if (!arg_val)
- return (NULL);
-
- return (*arg_val);
-}
-
-XawPixmap *
-XawLoadPixmap(String name, Screen *screen, Colormap colormap, int depth)
-{
- int idx;
- Bool success;
- XawPixmap *xaw_pixmap;
- Pixmap pixmap, mask;
- Dimension width, height;
- XawParams *xaw_params;
-
- if (!name)
- return (NULL);
-
- xaw_pixmap = _XawFindPixmap(name, screen, colormap, depth);
-
- if (xaw_pixmap)
- return (xaw_pixmap);
-
- if ((xaw_params = XawParseParamsString(name)) == NULL)
- return (NULL);
-
- idx = _XawFindPixmapLoaderIndex(xaw_params->type, xaw_params->ext);
- if (idx < 0)
- return (NULL);
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "(*) Loading pixmap \"%s\": ", name);
-#endif
-
- success = loader_info[idx]->loader(xaw_params, screen, colormap, depth,
- &pixmap, &mask, &width, &height);
- if (success)
- {
- xaw_pixmap = (XawPixmap *)XtMalloc(sizeof(XawPixmap));
- xaw_pixmap->name = XtNewString(name);
- xaw_pixmap->pixmap = pixmap;
- xaw_pixmap->mask = mask;
- xaw_pixmap->width = width;
- xaw_pixmap->height = height;
- _XawCachePixmap(xaw_pixmap, screen, colormap, depth);
- }
-
- XawFreeParamsStruct(xaw_params);
-
-#ifdef DIAGNOSTIC
- fprintf(stderr, "%s", success ? "success\n" : "failed\n");
-#endif
-
- return (success ? xaw_pixmap : NULL);
-}
-
-Bool
-XawAddPixmapLoader(String type, String ext, XawPixmapLoader loader)
-{
- XawPixmapLoaderInfo *info;
- int i;
-
- if (!loader)
- return (False);
-
- i = _XawFindPixmapLoaderIndex(type, ext);
-
- if (i >= 0)
- {
- loader_info[i]->loader = loader;
- if (loader_info[i]->type)
- XtFree(loader_info[i]->type);
- if (loader_info[i]->ext)
- XtFree(loader_info[i]->ext);
- loader_info[i]->type = type ? XtNewString(type) : NULL;
- loader_info[i]->ext = ext ? XtNewString(ext) : NULL;
- return (True);
- }
-
- if ((info = (XawPixmapLoaderInfo *)XtMalloc(sizeof(XawPixmapLoaderInfo)))
- == NULL)
- return (False);
-
- info->loader = loader;
- info->type = type ? XtNewString(type) : NULL;
- info->ext = ext ? XtNewString(ext) : NULL;
-
- if (!loader_info)
- {
- num_loader_info = 1;
- loader_info = (XawPixmapLoaderInfo**)
- XtMalloc(sizeof(XawPixmapLoaderInfo*));
- }
- else
- {
- ++num_loader_info;
- loader_info = (XawPixmapLoaderInfo**)
- XtRealloc((char *)loader_info,
- sizeof(XawPixmapLoaderInfo) * num_loader_info);
- }
- loader_info[num_loader_info - 1] = info;
-
- return (True);
-}
-
-static int
-_XawFindPixmapLoaderIndex(String type, String ext)
-{
- Cardinal i;
-
- if (!loader_info)
- return (-1);
-
- for (i = 0; i < num_loader_info; i++)
- if ((type && loader_info[i]->type && strcmp(type, loader_info[i]->type) == 0)
- || (ext && loader_info[i]->ext && strcmp(ext, loader_info[i]->ext) == 0))
- return ((int)i);
-
- if (!type)
- return (0); /* try a bitmap */
-
- return (-1);
-}
-
-static int
-qcmp_x_cache(register _Xconst void *left, register _Xconst void *right)
-{
- return ((int)((*(XawPixmap **)left)->pixmap) -
- (int)((*(XawPixmap **)right)->pixmap));
-}
-
-static int
-bcmp_x_cache(register _Xconst void *pixmap, register _Xconst void *xaw)
-{
- return (int)((long)pixmap - (long)((*(XawPixmap **)xaw)->pixmap));
-}
-
-static int
-qcmp_long(register _Xconst void *left, register _Xconst void *right)
-{
- return ((long)((*(XawCache **)left)->value) -
- (long)((*(XawCache **)right)->value));
-}
-
-static int
-qcmp_string(register _Xconst void *left, register _Xconst void *right)
-{
- return (strcmp((String)((*(XawCache **)left)->value),
- (String)((*(XawCache **)right)->value)));
-}
-
-static int
-bcmp_long(register _Xconst void *value, register _Xconst void *cache)
-{
- return ((long)value - (long)((*(XawCache **)cache)->value));
-}
-
-static int
-bcmp_string(register _Xconst void *string,
- register _Xconst void *cache)
-{
- return (strcmp((String)string, (String)((*(XawCache **)cache)->value)));
-}
-
-#define FIND_ALL 0
-#define FIND_SCREEN 1
-#define FIND_COLORMAP 2
-#define FIND_DEPTH 3
-static XawCache *
-_XawFindCache(XawCache *xaw,
- Screen *screen, Colormap colormap, int depth, int flags)
-{
- XawCache **cache;
-
- if (!xaw->num_elems)
- return (NULL);
-
- /* Screen */
- cache = (XawCache **)bsearch(screen, xaw->elems,
- xaw->num_elems, sizeof(XtPointer),
- bcmp_long);
- if (!cache || !(*cache)->num_elems)
- return (NULL);
- if (flags == FIND_SCREEN)
- return (*cache);
-
- /* Colormap */
- cache = (XawCache **)bsearch((void *)colormap, (*cache)->elems,
- (*cache)->num_elems, sizeof(XtPointer),
- bcmp_long);
- if (!cache || !(*cache)->num_elems)
- return (NULL);
- if (flags == FIND_COLORMAP)
- return (*cache);
-
- /* Depth */
- cache = (XawCache **)bsearch((void *)(long)depth, (*cache)->elems,
- (*cache)->num_elems, sizeof(XtPointer),
- bcmp_long);
-
- if (!cache || !(*cache)->num_elems)
- return (NULL);
- return (*cache);
-}
-
-static XawCache *
-_XawGetCache(XawCache *xaw, Screen *screen, Colormap colormap, int depth)
-{
- XawCache *s_cache, *c_cache, *d_cache, *cache, *pcache;
-
- cache = _XawFindCache(xaw, screen, colormap, depth, FIND_ALL);
-
- if (!cache)
- {
- s_cache = _XawFindCache(xaw,
- screen, colormap, depth, FIND_SCREEN);
- if (!s_cache)
- {
- pcache = (XawCache *)XtMalloc(sizeof(XawCache));
- if (!xaw->num_elems)
- {
- xaw->num_elems = 1;
- xaw->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
- }
- else
- {
- ++xaw->num_elems;
- xaw->elems = (XtPointer*)
- XtRealloc((char *)xaw->elems,
- sizeof(XtPointer) * xaw->num_elems);
- }
- pcache->value = (long)screen;
- pcache->elems = NULL;
- pcache->num_elems = 0;
- xaw->elems[xaw->num_elems - 1] = (XtPointer)pcache;
- s_cache = (XawCache *)xaw->elems[xaw->num_elems - 1];
- if (xaw->num_elems > 1)
- qsort(xaw->elems, xaw->num_elems, sizeof(XtPointer), qcmp_long);
- }
-
- c_cache = _XawFindCache(xaw,
- screen, colormap, depth, FIND_COLORMAP);
- if (!c_cache)
- {
- pcache = (XawCache *)XtMalloc(sizeof(XawCache));
- if (!s_cache->num_elems)
- {
- s_cache->num_elems = 1;
- s_cache->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
- }
- else
- {
- ++s_cache->num_elems;
- s_cache->elems = (XtPointer*)
- XtRealloc((char *)s_cache->elems,
- sizeof(XtPointer) * s_cache->num_elems);
- }
- pcache->value = (long)colormap;
- pcache->elems = NULL;
- pcache->num_elems = 0;
- s_cache->elems[s_cache->num_elems - 1] = (XtPointer)pcache;
- c_cache = (XawCache *)s_cache->elems[s_cache->num_elems - 1];
- if (s_cache->num_elems > 1)
- qsort(s_cache->elems, s_cache->num_elems,
- sizeof(XtPointer), qcmp_long);
- }
-
- d_cache = _XawFindCache(xaw,
- screen, colormap, depth, FIND_DEPTH);
- if (!d_cache)
- {
- pcache = (XawCache *)XtMalloc(sizeof(XawCache));
- if (!c_cache->num_elems)
- {
- c_cache->num_elems = 1;
- c_cache->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
- }
- else
- {
- ++c_cache->num_elems;
- c_cache->elems = (XtPointer*)
- XtRealloc((char *)c_cache->elems,
- sizeof(XtPointer) * c_cache->num_elems);
- }
- pcache->value = (long)depth;
- pcache->elems = NULL;
- pcache->num_elems = 0;
- c_cache->elems[c_cache->num_elems - 1] = (XtPointer)pcache;
- d_cache = (XawCache *)c_cache->elems[c_cache->num_elems - 1];
- if (c_cache->num_elems > 1)
- qsort(c_cache->elems, c_cache->num_elems,
- sizeof(XtPointer), qcmp_long);
- }
-
- cache = d_cache;
- }
-
- return (cache);
-}
-
-static XawPixmap *
-_XawFindPixmap(String name, Screen *screen, Colormap colormap, int depth)
-{
- XawCache *cache;
- XawPixmap **pixmap;
-
- cache = _XawFindCache(&xaw_pixmaps, screen, colormap, depth, FIND_ALL);
-
- if (!cache)
- return (NULL);
-
- /* Name */
- pixmap = (XawPixmap **)bsearch((void *)name, cache->elems,
- cache->num_elems, sizeof(XtPointer),
- bcmp_string);
- if (!pixmap)
- return (NULL);
-
- return (*pixmap);
-}
-
-XawPixmap *
-XawPixmapFromXPixmap(Pixmap pixmap,
- Screen *screen, Colormap colormap, int depth)
-{
- XawCache *cache;
- XawPixmap **x_pixmap;
-
- cache = _XawFindCache(&x_pixmaps, screen, colormap, depth, FIND_ALL);
-
- if (!cache)
- return (NULL);
-
- /* Pixmap */
- x_pixmap = (XawPixmap **)bsearch((void *)pixmap, cache->elems,
- cache->num_elems, sizeof(XtPointer),
- bcmp_x_cache);
- if (!x_pixmap)
- return (NULL);
-
- return (*x_pixmap);
-}
-
-static void
-_XawCachePixmap(XawPixmap *pixmap,
- Screen *screen, Colormap colormap, int depth)
-{
- XawCache *xaw_cache, *x_cache;
-
- xaw_cache = _XawGetCache(&xaw_pixmaps, screen, colormap, depth);
- x_cache = _XawGetCache(&x_pixmaps, screen, colormap, depth);
-
- if (!xaw_cache->num_elems)
- {
- xaw_cache->num_elems = 1;
- xaw_cache->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
- }
- else
- {
- ++xaw_cache->num_elems;
- xaw_cache->elems = (XtPointer*)XtRealloc((char *)xaw_cache->elems,
- sizeof(XtPointer) *
- xaw_cache->num_elems);
- }
-
- xaw_cache->elems[xaw_cache->num_elems - 1] = (XtPointer)pixmap;
- if (xaw_cache->num_elems > 1)
- qsort(xaw_cache->elems, xaw_cache->num_elems,
- sizeof(XtPointer), qcmp_string);
-
-
- if (!x_cache->num_elems)
- {
- x_cache->num_elems = 1;
- x_cache->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
- }
- else
- {
- ++x_cache->num_elems;
- x_cache->elems = (XtPointer*)XtRealloc((char *)x_cache->elems,
- sizeof(XtPointer) *
- x_cache->num_elems);
- }
-
- x_cache->elems[x_cache->num_elems - 1] = (XtPointer)pixmap;
- if (x_cache->num_elems > 1)
- qsort(x_cache->elems, x_cache->num_elems, sizeof(XtPointer), qcmp_x_cache);
-}
-
-#ifndef PROJECT_ROOT
-#define PROJECT_ROOT "/usr/X11R6"
-#endif
-
-static char *pixmap_path = NULL;
-
-static void
-GetResourcePixmapPath(Display *display)
-{
- XrmName xrm_name[2];
- XrmClass xrm_class[2];
- XrmRepresentation rep_type;
- XrmValue value;
- static char *default_path =
- "%H/%T/%N:%P/include/X11/%T/%N:/usr/X11R6/include/X11/%T/%N:/usr/include/X11/%T/%N:%N";
-
- xrm_name[0] = XrmPermStringToQuark("pixmapFilePath");
- xrm_name[1] = NULLQUARK;
- xrm_class[0] = XrmPermStringToQuark("PixmapFilePath");
- xrm_class[1] = NULLQUARK;
- if (!XrmGetDatabase(display))
- (void) XGetDefault(display, "", "");
- if (XrmQGetResource(XrmGetDatabase(display), xrm_name, xrm_class,
- &rep_type, &value) &&
- rep_type == XrmPermStringToQuark("String")) {
- int length = 0;
- char *tok, *buffer = XtNewString(value.addr);
-
- for (tok = strtok(buffer, ":"); tok; tok = strtok(NULL, ":")) {
- int toklen = strlen(tok);
-
- if (toklen) {
- pixmap_path = XtRealloc(pixmap_path, length + toklen + 5);
- strcpy(pixmap_path + length, tok);
- if (length)
- pixmap_path[length++] = ':';
- sprintf(pixmap_path + length, "%s/%%N", tok);
- length += strlen(tok) + 3;
- }
- }
- pixmap_path = XtRealloc(pixmap_path, length + strlen(default_path) + 2);
- if (length)
- pixmap_path[length++] = ':';
- strcpy(pixmap_path + length, default_path);
- }
- else
- pixmap_path = default_path;
-}
-
-static Bool
-BitmapLoader(XawParams *params, Screen *screen, Colormap colormap, int depth,
- Pixmap *pixmap_return, Pixmap *mask_return,
- Dimension *width_return, Dimension *height_return)
-{
- Pixel fg, bg;
- XColor color, exact;
- Pixmap pixmap;
- unsigned int width, height;
- unsigned char *data = NULL;
- int hotX, hotY;
- XawArgVal *argval;
- Bool retval = False;
- static SubstitutionRec sub[] = {
- {'H', NULL},
- {'N', NULL},
- {'T', "bitmaps"},
- {'P', PROJECT_ROOT},
- };
- char *filename;
-
- fg = BlackPixelOfScreen(screen);
- bg = WhitePixelOfScreen(screen);
-
- if ((argval = XawFindArgVal(params, "foreground")) != NULL
- && argval->value)
- {
- if (XAllocNamedColor(DisplayOfScreen(screen), colormap, argval->value,
- &color, &exact))
- fg = color.pixel;
- else
- return (False);
- }
- if ((argval = XawFindArgVal(params, "background")) != NULL
- && argval->value)
- {
- if (XAllocNamedColor(DisplayOfScreen(screen), colormap, argval->value,
- &color, &exact))
- bg = color.pixel;
- else
- return (False);
- }
-
- if (params->name[0] != '/' && params->name[0] != '.')
- {
- if (!sub[0].substitution)
- #ifdef _MSC_VER
- sub[0].substitution = ".";
- #else
- sub[0].substitution = getenv("HOME");
- #endif
- sub[1].substitution = params->name;
- if (pixmap_path == NULL)
- GetResourcePixmapPath(DisplayOfScreen(screen));
- filename = XtFindFile(pixmap_path, sub, XtNumber(sub), NULL);
- if (!filename)
- return (FALSE);
- }
- else
- filename = params->name;
-
- if (XReadBitmapFileData(filename, &width, &height, &data,
- &hotX, &hotY) == BitmapSuccess)
- {
- pixmap = XCreatePixmapFromBitmapData(DisplayOfScreen(screen),
- RootWindowOfScreen(screen),
- (char *)data,
- width, height, fg, bg, depth);
- if (data)
- XFree(data);
- *pixmap_return = pixmap;
- *mask_return = None;
- *width_return = width;
- *height_return = height;
-
- retval = True;
- }
-
- if (filename != params->name)
- XtFree(filename);
-
- return (retval);
-}
-
-#define VERTICAL 1
-#define HORIZONTAL 2
-static Bool
-GradientLoader(XawParams *params, Screen *screen, Colormap colormap, int depth,
- Pixmap *pixmap_return, Pixmap *mask_return,
- Dimension *width_return, Dimension *height_return)
-{
- double ired, igreen, iblue, red, green, blue;
- XColor start, end, color;
- XGCValues values;
- GC gc;
- double i, inc, x, y, xend, yend;
- Pixmap pixmap;
- XawArgVal *argval;
- int orientation, dimension, steps;
- char *value;
-
- if (XmuCompareISOLatin1(params->name, "vertical") == 0)
- orientation = VERTICAL;
- else if (XmuCompareISOLatin1(params->name, "horizontal") == 0)
- orientation = HORIZONTAL;
- else
- return (False);
-
- if ((argval = XawFindArgVal(params, "dimension")) != NULL
- && argval->value)
- {
- dimension = atoi(argval->value);
- if (dimension <= 0)
- return (False);
- }
- else
- dimension = 50;
-
- if ((argval = XawFindArgVal(params, "steps")) != NULL
- && argval->value)
- {
- steps = atoi(argval->value);
- if (steps <= 0)
- return (False);
- }
- else
- steps = dimension;
-
- steps = XawMin(steps, dimension);
-
- value = NULL;
- if ((argval = XawFindArgVal(params, "start")) != NULL)
- value = argval->value;
- if (value && !XAllocNamedColor(DisplayOfScreen(screen), colormap, value,
- &start, &color))
- return (False);
- else if (!value)
- {
- start.pixel = WhitePixelOfScreen(screen);
- XQueryColor(DisplayOfScreen(screen), colormap, &start);
- }
- value = NULL;
- if ((argval = XawFindArgVal(params, "end")) != NULL)
- value = argval->value;
- if (value && !XAllocNamedColor(DisplayOfScreen(screen), colormap, value,
- &end, &color))
- return (False);
- else if (!value)
- {
- end.pixel = BlackPixelOfScreen(screen);
- XQueryColor(DisplayOfScreen(screen), colormap, &end);
- }
-
- if ((pixmap = XCreatePixmap(DisplayOfScreen(screen),
- RootWindowOfScreen(screen),
- orientation == VERTICAL ? 1 : dimension,
- orientation == VERTICAL ? dimension : 1, depth))
- == 0)
- return (False);
-
- ired = (double)(end.red - start.red) / (double)steps;
- igreen = (double)(end.green - start.green) / (double)steps;
- iblue = (double)(end.blue - start.blue) / (double)steps;
-
- red = color.red = start.red;
- green = color.green = start.green;
- blue = color.blue = start.blue;
-
- inc = (double)dimension / (double)steps;
-
- gc = XCreateGC(DisplayOfScreen(screen), pixmap, 0, &values);
-
- x = y = 0.0;
- if (orientation == VERTICAL)
- {
- xend = 1;
- yend = 0;
- }
- else
- {
- xend = 0;
- yend = 1;
- }
-
- color.flags = DoRed | DoGreen | DoBlue;
-
- XSetForeground(DisplayOfScreen(screen), gc, start.pixel);
- for (i = 0.0; i < dimension; i += inc)
- {
- if ((int)color.red != (int)red || (int)color.green != (int)green
- || (int)color.blue != (int)blue)
- {
- XFillRectangle(DisplayOfScreen(screen), pixmap, gc, (int)x, (int)y,
- (unsigned int)xend, (unsigned int)yend);
- color.red = (unsigned short)red;
- color.green = (unsigned short)green;
- color.blue = (unsigned short)blue;
- if (!XAllocColor(DisplayOfScreen(screen), colormap, &color))
- {
- XFreePixmap(DisplayOfScreen(screen), pixmap);
- return (False);
- }
- XSetForeground(DisplayOfScreen(screen), gc, color.pixel);
- if (orientation == VERTICAL)
- y = yend;
- else
- x = xend;
- }
- red += ired;
- green += igreen;
- blue += iblue;
- if (orientation == VERTICAL)
- yend += inc;
- else
- xend += inc;
- }
- XFillRectangle(DisplayOfScreen(screen), pixmap, gc, (int)x, (int)y,
- (unsigned int)xend, (unsigned int)yend);
-
- *pixmap_return = pixmap;
- *mask_return = None;
- *width_return = orientation == VERTICAL ? 1 : dimension;
- *height_return = orientation == VERTICAL ? dimension : 1;
-
- XFreeGC(DisplayOfScreen(screen), gc);
-
- return (True);
-}
-
-static Bool
-XPixmapLoader(XawParams *params, Screen *screen, Colormap colormap, int depth,
- Pixmap *pixmap_return, Pixmap *mask_return,
- Dimension *width_return, Dimension *height_return)
-{
- XpmAttributes xpm_attributes;
- XawArgVal *argval;
- unsigned int closeness = 4000;
- static SubstitutionRec sub[] = {
- {'H', NULL},
- {'N', NULL},
- {'T', "pixmaps"},
- {'P', PROJECT_ROOT},
- };
- char *filename;
-
- if ((argval = XawFindArgVal(params, "closeness")) != NULL
- && argval->value)
- closeness = atoi(argval->value);
-
- if (params->name[0] != '/' && params->name[0] != '.')
- {
- if (!sub[0].substitution)
- sub[0].substitution = getenv("HOME");
- sub[1].substitution = params->name;
- if (pixmap_path == NULL)
- GetResourcePixmapPath(DisplayOfScreen(screen));
- filename = XtFindFile(pixmap_path, sub, XtNumber(sub), NULL);
- if (!filename)
- return (False);
- }
- else
- filename = params->name;
-
- xpm_attributes.colormap = colormap;
- xpm_attributes.closeness = closeness;
- xpm_attributes.valuemask = XpmSize | XpmColormap | XpmCloseness;
- if (XpmReadFileToPixmap(DisplayOfScreen(screen),
- RootWindowOfScreen(screen), filename, pixmap_return,
- mask_return, &xpm_attributes) == XpmSuccess)
- {
- *width_return = xpm_attributes.width;
- *height_return = xpm_attributes.height;
-
- return (True);
- }
-
- return (False);
-}
-
-void
-XawReshapeWidget(Widget w, XawPixmap *pixmap)
-{
- if (!pixmap || pixmap->mask == None)
- XShapeCombineMask(XtDisplay(w), XtWindow(w), ShapeBounding, 0, 0,
- None, ShapeSet);
- else
- XShapeCombineMask(XtDisplay(w), XtWindow(w), ShapeBounding, 0, 0,
- pixmap->mask, ShapeSet);
-}
-
-#endif /* OLDXAW */
+/*
+ * Copyright (c) 1998 by The XFree86 Project, 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/IntrinsicP.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xfuncs.h>
+#include <X11/extensions/shape.h>
+#ifndef OLDXAW
+#include <X11/xpm.h>
+#endif
+#include "Private.h"
+
+#ifdef __UNIXOS2__
+static char dummy;
+#endif
+
+#ifndef OLDXAW
+
+/*
+ * Types
+ */
+typedef struct _XawCache {
+ long value;
+ XtPointer *elems;
+ unsigned int num_elems;
+} XawCache;
+
+typedef struct _XawPixmapLoaderInfo {
+ XawPixmapLoader loader;
+ String type;
+ String ext;
+} XawPixmapLoaderInfo;
+
+/*
+ * Private Methods
+ */
+static Bool BitmapLoader(XawParams*, Screen*, Colormap, int,
+ Pixmap*, Pixmap*, Dimension*, Dimension*);
+static Bool GradientLoader(XawParams*, Screen*, Colormap, int,
+ Pixmap*, Pixmap*, Dimension*, Dimension*);
+static Bool XPixmapLoader(XawParams*, Screen*, Colormap, int,
+ Pixmap*, Pixmap*, Dimension*, Dimension*);
+static XawPixmap *_XawFindPixmap(String, Screen*, Colormap, int);
+static void _XawCachePixmap(XawPixmap*, Screen*, Colormap, int);
+static int _XawFindPixmapLoaderIndex(String, String);
+static int qcmp_long(register _Xconst void*, register _Xconst void *);
+static int bcmp_long(register _Xconst void*, register _Xconst void *);
+static int qcmp_string(register _Xconst void*, register _Xconst void *);
+static int bcmp_string(register _Xconst void*, register _Xconst void *);
+static void GetResourcePixmapPath(Display*);
+
+/*
+ * Initialization
+ */
+static XawCache xaw_pixmaps;
+static XawCache x_pixmaps; /* for fast reverse search */
+static XawPixmapLoaderInfo **loader_info;
+static Cardinal num_loader_info;
+
+/*
+ * Implementation
+ */
+Bool
+XawPixmapsInitialize(void)
+{
+ static Boolean first_time = True;
+
+ if (!first_time)
+ return (False);
+
+ (void)XawAddPixmapLoader(NULL, NULL, BitmapLoader);
+ (void)XawAddPixmapLoader("bitmap", NULL, BitmapLoader);
+ (void)XawAddPixmapLoader("gradient", NULL, GradientLoader);
+ (void)XawAddPixmapLoader("xpm", "xpm", XPixmapLoader);
+
+ return (True);
+}
+
+XawParams *
+XawParseParamsString(String name)
+{
+ XawParams *xaw_params;
+ char *tok, *str, *type = NULL, *ext = NULL, *params = NULL;
+
+ if (!name)
+ return (NULL);
+
+ xaw_params = (XawParams *)XtMalloc(sizeof(XawParams));
+
+ str = XtNewString(name);
+
+ /* Find type */
+ tok = str;
+ while (tok = strchr(tok, ':'), tok)
+ {
+ if (tok == str || tok[-1] != '\\')
+ break;
+ memmove(&tok[-1], tok, strlen(tok) + 1);
+ }
+ if (tok)
+ {
+ *tok = '\0';
+ if (strchr(str, '?'))
+ {
+ *tok = ':';
+ }
+ else
+ {
+ ++tok;
+ type = XtNewString(str);
+ memmove(str, tok, strlen(tok) + 1);
+ }
+ }
+
+ /* Find params */
+ tok = str;
+ while (tok = strchr(tok, '?'), tok)
+ {
+ if (tok == str || tok[-1] != '\\')
+ params = tok;
+ if (tok != str && tok[-1] == '\\')
+ memmove(&tok[-1], tok, strlen(tok) + 1);
+ else
+ break;
+ }
+ if (params)
+ {
+ *params = '\0';
+ ++params;
+ }
+
+ /* Find ext */
+ tok = str;
+ while (tok = strchr(tok, '.'), tok)
+ {
+ if (tok == str || tok[-1] != '\\')
+ ext = tok;
+ if (tok != str && tok[-1] == '\\')
+ memmove(&tok[-1], tok, strlen(tok) + 1);
+ else
+ break;
+ }
+ if (ext)
+ {
+ ++ext;
+ if (strchr(ext, '/'))
+ ext = NULL;
+ }
+
+ xaw_params->name = XtNewString(str);
+ xaw_params->type = type;
+ xaw_params->ext = ext ? XtNewString(ext) : ext;
+ xaw_params->args = NULL;
+ xaw_params->num_args = 0;
+
+ /* Parse params */
+ if (params)
+ {
+ char *arg, *val;
+ XawArgVal *xaw_arg;
+
+ for (tok = strtok(params, "&"); tok; tok = strtok(NULL, "&"))
+ {
+ val = strchr(tok, '=');
+ if (val)
+ {
+ *val = '\0';
+ ++val;
+ if (*val != '\0')
+ val = XtNewString(val);
+ else
+ val = NULL;
+ }
+ arg = XtNewString(tok);
+ xaw_arg = (XawArgVal *)XtMalloc(sizeof(XawArgVal));
+ xaw_arg->name = arg;
+ xaw_arg->value = val;
+ if (!xaw_params->num_args)
+ {
+ xaw_params->num_args = 1;
+ xaw_params->args = (XawArgVal **)
+ XtMalloc(sizeof(XawArgVal*));
+ }
+ else
+ {
+ ++xaw_params->num_args;
+ xaw_params->args = (XawArgVal **)
+ XtRealloc((char *)xaw_params->args,
+ sizeof(XawArgVal*) * xaw_params->num_args);
+ }
+ xaw_params->args[xaw_params->num_args - 1] = xaw_arg;
+ }
+ }
+
+ if (xaw_params->num_args > 1)
+ qsort(xaw_params->args, xaw_params->num_args, sizeof(XtPointer),
+ qcmp_string);
+
+ XtFree(str);
+
+ return (xaw_params);
+}
+
+void
+XawFreeParamsStruct(XawParams *params)
+{
+ unsigned int i;
+
+ if (!params)
+ return;
+
+ for (i = 0; i < params->num_args; i++)
+ {
+ XtFree(params->args[i]->name);
+ if (params->args[i]->value)
+ XtFree(params->args[i]->value);
+ XtFree((char *)params->args[i]);
+ }
+
+ if (params->args)
+ XtFree((char *)params->args);
+ XtFree((char *)params);
+}
+
+XawArgVal *
+XawFindArgVal(XawParams *params, String name)
+{
+ XawArgVal **arg_val;
+
+ if (!params->args)
+ return (NULL);
+
+ arg_val = (XawArgVal **)bsearch((void *)name, params->args,
+ params->num_args, sizeof(XtPointer*),
+ bcmp_string);
+ if (!arg_val)
+ return (NULL);
+
+ return (*arg_val);
+}
+
+XawPixmap *
+XawLoadPixmap(String name, Screen *screen, Colormap colormap, int depth)
+{
+ int idx;
+ Bool success;
+ XawPixmap *xaw_pixmap;
+ Pixmap pixmap, mask;
+ Dimension width, height;
+ XawParams *xaw_params;
+
+ if (!name)
+ return (NULL);
+
+ xaw_pixmap = _XawFindPixmap(name, screen, colormap, depth);
+
+ if (xaw_pixmap)
+ return (xaw_pixmap);
+
+ if ((xaw_params = XawParseParamsString(name)) == NULL)
+ return (NULL);
+
+ idx = _XawFindPixmapLoaderIndex(xaw_params->type, xaw_params->ext);
+ if (idx < 0)
+ return (NULL);
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "(*) Loading pixmap \"%s\": ", name);
+#endif
+
+ success = loader_info[idx]->loader(xaw_params, screen, colormap, depth,
+ &pixmap, &mask, &width, &height);
+ if (success)
+ {
+ xaw_pixmap = (XawPixmap *)XtMalloc(sizeof(XawPixmap));
+ xaw_pixmap->name = XtNewString(name);
+ xaw_pixmap->pixmap = pixmap;
+ xaw_pixmap->mask = mask;
+ xaw_pixmap->width = width;
+ xaw_pixmap->height = height;
+ _XawCachePixmap(xaw_pixmap, screen, colormap, depth);
+ }
+
+ XawFreeParamsStruct(xaw_params);
+
+#ifdef DIAGNOSTIC
+ fprintf(stderr, "%s", success ? "success\n" : "failed\n");
+#endif
+
+ return (success ? xaw_pixmap : NULL);
+}
+
+Bool
+XawAddPixmapLoader(String type, String ext, XawPixmapLoader loader)
+{
+ XawPixmapLoaderInfo *info;
+ int i;
+
+ if (!loader)
+ return (False);
+
+ i = _XawFindPixmapLoaderIndex(type, ext);
+
+ if (i >= 0)
+ {
+ loader_info[i]->loader = loader;
+ if (loader_info[i]->type)
+ XtFree(loader_info[i]->type);
+ if (loader_info[i]->ext)
+ XtFree(loader_info[i]->ext);
+ loader_info[i]->type = type ? XtNewString(type) : NULL;
+ loader_info[i]->ext = ext ? XtNewString(ext) : NULL;
+ return (True);
+ }
+
+ if ((info = (XawPixmapLoaderInfo *)XtMalloc(sizeof(XawPixmapLoaderInfo)))
+ == NULL)
+ return (False);
+
+ info->loader = loader;
+ info->type = type ? XtNewString(type) : NULL;
+ info->ext = ext ? XtNewString(ext) : NULL;
+
+ if (!loader_info)
+ {
+ num_loader_info = 1;
+ loader_info = (XawPixmapLoaderInfo**)
+ XtMalloc(sizeof(XawPixmapLoaderInfo*));
+ }
+ else
+ {
+ ++num_loader_info;
+ loader_info = (XawPixmapLoaderInfo**)
+ XtRealloc((char *)loader_info,
+ sizeof(XawPixmapLoaderInfo) * num_loader_info);
+ }
+ loader_info[num_loader_info - 1] = info;
+
+ return (True);
+}
+
+static int
+_XawFindPixmapLoaderIndex(String type, String ext)
+{
+ Cardinal i;
+
+ if (!loader_info)
+ return (-1);
+
+ for (i = 0; i < num_loader_info; i++)
+ if ((type && loader_info[i]->type && strcmp(type, loader_info[i]->type) == 0)
+ || (ext && loader_info[i]->ext && strcmp(ext, loader_info[i]->ext) == 0))
+ return ((int)i);
+
+ if (!type)
+ return (0); /* try a bitmap */
+
+ return (-1);
+}
+
+static int
+qcmp_x_cache(register _Xconst void *left, register _Xconst void *right)
+{
+ return ((int)((*(XawPixmap **)left)->pixmap) -
+ (int)((*(XawPixmap **)right)->pixmap));
+}
+
+static int
+bcmp_x_cache(register _Xconst void *pixmap, register _Xconst void *xaw)
+{
+ return (int)((long)pixmap - (long)((*(XawPixmap **)xaw)->pixmap));
+}
+
+static int
+qcmp_long(register _Xconst void *left, register _Xconst void *right)
+{
+ return ((long)((*(XawCache **)left)->value) -
+ (long)((*(XawCache **)right)->value));
+}
+
+static int
+qcmp_string(register _Xconst void *left, register _Xconst void *right)
+{
+ return (strcmp((String)((*(XawCache **)left)->value),
+ (String)((*(XawCache **)right)->value)));
+}
+
+static int
+bcmp_long(register _Xconst void *value, register _Xconst void *cache)
+{
+ return ((long)value - (long)((*(XawCache **)cache)->value));
+}
+
+static int
+bcmp_string(register _Xconst void *string,
+ register _Xconst void *cache)
+{
+ return (strcmp((String)string, (String)((*(XawCache **)cache)->value)));
+}
+
+#define FIND_ALL 0
+#define FIND_SCREEN 1
+#define FIND_COLORMAP 2
+#define FIND_DEPTH 3
+static XawCache *
+_XawFindCache(XawCache *xaw,
+ Screen *screen, Colormap colormap, int depth, int flags)
+{
+ XawCache **cache;
+
+ if (!xaw->num_elems)
+ return (NULL);
+
+ /* Screen */
+ cache = (XawCache **)bsearch(screen, xaw->elems,
+ xaw->num_elems, sizeof(XtPointer),
+ bcmp_long);
+ if (!cache || !(*cache)->num_elems)
+ return (NULL);
+ if (flags == FIND_SCREEN)
+ return (*cache);
+
+ /* Colormap */
+ cache = (XawCache **)bsearch((void *)colormap, (*cache)->elems,
+ (*cache)->num_elems, sizeof(XtPointer),
+ bcmp_long);
+ if (!cache || !(*cache)->num_elems)
+ return (NULL);
+ if (flags == FIND_COLORMAP)
+ return (*cache);
+
+ /* Depth */
+ cache = (XawCache **)bsearch((void *)(long)depth, (*cache)->elems,
+ (*cache)->num_elems, sizeof(XtPointer),
+ bcmp_long);
+
+ if (!cache || !(*cache)->num_elems)
+ return (NULL);
+ return (*cache);
+}
+
+static XawCache *
+_XawGetCache(XawCache *xaw, Screen *screen, Colormap colormap, int depth)
+{
+ XawCache *s_cache, *c_cache, *d_cache, *cache, *pcache;
+
+ cache = _XawFindCache(xaw, screen, colormap, depth, FIND_ALL);
+
+ if (!cache)
+ {
+ s_cache = _XawFindCache(xaw,
+ screen, colormap, depth, FIND_SCREEN);
+ if (!s_cache)
+ {
+ pcache = (XawCache *)XtMalloc(sizeof(XawCache));
+ if (!xaw->num_elems)
+ {
+ xaw->num_elems = 1;
+ xaw->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
+ }
+ else
+ {
+ ++xaw->num_elems;
+ xaw->elems = (XtPointer*)
+ XtRealloc((char *)xaw->elems,
+ sizeof(XtPointer) * xaw->num_elems);
+ }
+ pcache->value = (long)screen;
+ pcache->elems = NULL;
+ pcache->num_elems = 0;
+ xaw->elems[xaw->num_elems - 1] = (XtPointer)pcache;
+ s_cache = (XawCache *)xaw->elems[xaw->num_elems - 1];
+ if (xaw->num_elems > 1)
+ qsort(xaw->elems, xaw->num_elems, sizeof(XtPointer), qcmp_long);
+ }
+
+ c_cache = _XawFindCache(xaw,
+ screen, colormap, depth, FIND_COLORMAP);
+ if (!c_cache)
+ {
+ pcache = (XawCache *)XtMalloc(sizeof(XawCache));
+ if (!s_cache->num_elems)
+ {
+ s_cache->num_elems = 1;
+ s_cache->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
+ }
+ else
+ {
+ ++s_cache->num_elems;
+ s_cache->elems = (XtPointer*)
+ XtRealloc((char *)s_cache->elems,
+ sizeof(XtPointer) * s_cache->num_elems);
+ }
+ pcache->value = (long)colormap;
+ pcache->elems = NULL;
+ pcache->num_elems = 0;
+ s_cache->elems[s_cache->num_elems - 1] = (XtPointer)pcache;
+ c_cache = (XawCache *)s_cache->elems[s_cache->num_elems - 1];
+ if (s_cache->num_elems > 1)
+ qsort(s_cache->elems, s_cache->num_elems,
+ sizeof(XtPointer), qcmp_long);
+ }
+
+ d_cache = _XawFindCache(xaw,
+ screen, colormap, depth, FIND_DEPTH);
+ if (!d_cache)
+ {
+ pcache = (XawCache *)XtMalloc(sizeof(XawCache));
+ if (!c_cache->num_elems)
+ {
+ c_cache->num_elems = 1;
+ c_cache->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
+ }
+ else
+ {
+ ++c_cache->num_elems;
+ c_cache->elems = (XtPointer*)
+ XtRealloc((char *)c_cache->elems,
+ sizeof(XtPointer) * c_cache->num_elems);
+ }
+ pcache->value = (long)depth;
+ pcache->elems = NULL;
+ pcache->num_elems = 0;
+ c_cache->elems[c_cache->num_elems - 1] = (XtPointer)pcache;
+ d_cache = (XawCache *)c_cache->elems[c_cache->num_elems - 1];
+ if (c_cache->num_elems > 1)
+ qsort(c_cache->elems, c_cache->num_elems,
+ sizeof(XtPointer), qcmp_long);
+ }
+
+ cache = d_cache;
+ }
+
+ return (cache);
+}
+
+static XawPixmap *
+_XawFindPixmap(String name, Screen *screen, Colormap colormap, int depth)
+{
+ XawCache *cache;
+ XawPixmap **pixmap;
+
+ cache = _XawFindCache(&xaw_pixmaps, screen, colormap, depth, FIND_ALL);
+
+ if (!cache)
+ return (NULL);
+
+ /* Name */
+ pixmap = (XawPixmap **)bsearch((void *)name, cache->elems,
+ cache->num_elems, sizeof(XtPointer),
+ bcmp_string);
+ if (!pixmap)
+ return (NULL);
+
+ return (*pixmap);
+}
+
+XawPixmap *
+XawPixmapFromXPixmap(Pixmap pixmap,
+ Screen *screen, Colormap colormap, int depth)
+{
+ XawCache *cache;
+ XawPixmap **x_pixmap;
+
+ cache = _XawFindCache(&x_pixmaps, screen, colormap, depth, FIND_ALL);
+
+ if (!cache)
+ return (NULL);
+
+ /* Pixmap */
+ x_pixmap = (XawPixmap **)bsearch((void *)pixmap, cache->elems,
+ cache->num_elems, sizeof(XtPointer),
+ bcmp_x_cache);
+ if (!x_pixmap)
+ return (NULL);
+
+ return (*x_pixmap);
+}
+
+static void
+_XawCachePixmap(XawPixmap *pixmap,
+ Screen *screen, Colormap colormap, int depth)
+{
+ XawCache *xaw_cache, *x_cache;
+
+ xaw_cache = _XawGetCache(&xaw_pixmaps, screen, colormap, depth);
+ x_cache = _XawGetCache(&x_pixmaps, screen, colormap, depth);
+
+ if (!xaw_cache->num_elems)
+ {
+ xaw_cache->num_elems = 1;
+ xaw_cache->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
+ }
+ else
+ {
+ ++xaw_cache->num_elems;
+ xaw_cache->elems = (XtPointer*)XtRealloc((char *)xaw_cache->elems,
+ sizeof(XtPointer) *
+ xaw_cache->num_elems);
+ }
+
+ xaw_cache->elems[xaw_cache->num_elems - 1] = (XtPointer)pixmap;
+ if (xaw_cache->num_elems > 1)
+ qsort(xaw_cache->elems, xaw_cache->num_elems,
+ sizeof(XtPointer), qcmp_string);
+
+
+ if (!x_cache->num_elems)
+ {
+ x_cache->num_elems = 1;
+ x_cache->elems = (XtPointer*)XtMalloc(sizeof(XtPointer));
+ }
+ else
+ {
+ ++x_cache->num_elems;
+ x_cache->elems = (XtPointer*)XtRealloc((char *)x_cache->elems,
+ sizeof(XtPointer) *
+ x_cache->num_elems);
+ }
+
+ x_cache->elems[x_cache->num_elems - 1] = (XtPointer)pixmap;
+ if (x_cache->num_elems > 1)
+ qsort(x_cache->elems, x_cache->num_elems, sizeof(XtPointer), qcmp_x_cache);
+}
+
+#ifndef PROJECT_ROOT
+#define PROJECT_ROOT "/usr/X11R6"
+#endif
+
+static char *pixmap_path = NULL;
+
+static void
+GetResourcePixmapPath(Display *display)
+{
+ XrmName xrm_name[2];
+ XrmClass xrm_class[2];
+ XrmRepresentation rep_type;
+ XrmValue value;
+ static char *default_path =
+ "%H/%T/%N:%P/include/X11/%T/%N:/usr/X11R6/include/X11/%T/%N:/usr/include/X11/%T/%N:%N";
+
+ xrm_name[0] = XrmPermStringToQuark("pixmapFilePath");
+ xrm_name[1] = NULLQUARK;
+ xrm_class[0] = XrmPermStringToQuark("PixmapFilePath");
+ xrm_class[1] = NULLQUARK;
+ if (!XrmGetDatabase(display))
+ (void) XGetDefault(display, "", "");
+ if (XrmQGetResource(XrmGetDatabase(display), xrm_name, xrm_class,
+ &rep_type, &value) &&
+ rep_type == XrmPermStringToQuark("String")) {
+ int length = 0;
+ char *tok, *buffer = XtNewString(value.addr);
+
+ for (tok = strtok(buffer, ":"); tok; tok = strtok(NULL, ":")) {
+ int toklen = strlen(tok);
+
+ if (toklen) {
+ pixmap_path = XtRealloc(pixmap_path, length + toklen + 5);
+ strcpy(pixmap_path + length, tok);
+ if (length)
+ pixmap_path[length++] = ':';
+ sprintf(pixmap_path + length, "%s/%%N", tok);
+ length += strlen(tok) + 3;
+ }
+ }
+ pixmap_path = XtRealloc(pixmap_path, length + strlen(default_path) + 2);
+ if (length)
+ pixmap_path[length++] = ':';
+ strcpy(pixmap_path + length, default_path);
+ }
+ else
+ pixmap_path = default_path;
+}
+
+static Bool
+BitmapLoader(XawParams *params, Screen *screen, Colormap colormap, int depth,
+ Pixmap *pixmap_return, Pixmap *mask_return,
+ Dimension *width_return, Dimension *height_return)
+{
+ Pixel fg, bg;
+ XColor color, exact;
+ Pixmap pixmap;
+ unsigned int width, height;
+ unsigned char *data = NULL;
+ int hotX, hotY;
+ XawArgVal *argval;
+ Bool retval = False;
+ static SubstitutionRec sub[] = {
+ {'H', NULL},
+ {'N', NULL},
+ {'T', "bitmaps"},
+ {'P', PROJECT_ROOT},
+ };
+ char *filename;
+
+ fg = BlackPixelOfScreen(screen);
+ bg = WhitePixelOfScreen(screen);
+
+ if ((argval = XawFindArgVal(params, "foreground")) != NULL
+ && argval->value)
+ {
+ if (XAllocNamedColor(DisplayOfScreen(screen), colormap, argval->value,
+ &color, &exact))
+ fg = color.pixel;
+ else
+ return (False);
+ }
+ if ((argval = XawFindArgVal(params, "background")) != NULL
+ && argval->value)
+ {
+ if (XAllocNamedColor(DisplayOfScreen(screen), colormap, argval->value,
+ &color, &exact))
+ bg = color.pixel;
+ else
+ return (False);
+ }
+
+ if (params->name[0] != '/' && params->name[0] != '.')
+ {
+ if (!sub[0].substitution)
+ #ifdef _MSC_VER
+ sub[0].substitution = ".";
+ #else
+ sub[0].substitution = getenv("HOME");
+ #endif
+ sub[1].substitution = params->name;
+ if (pixmap_path == NULL)
+ GetResourcePixmapPath(DisplayOfScreen(screen));
+ filename = XtFindFile(pixmap_path, sub, XtNumber(sub), NULL);
+ if (!filename)
+ return (FALSE);
+ }
+ else
+ filename = params->name;
+
+ if (XReadBitmapFileData(filename, &width, &height, &data,
+ &hotX, &hotY) == BitmapSuccess)
+ {
+ pixmap = XCreatePixmapFromBitmapData(DisplayOfScreen(screen),
+ RootWindowOfScreen(screen),
+ (char *)data,
+ width, height, fg, bg, depth);
+ if (data)
+ XFree(data);
+ *pixmap_return = pixmap;
+ *mask_return = None;
+ *width_return = width;
+ *height_return = height;
+
+ retval = True;
+ }
+
+ if (filename != params->name)
+ XtFree(filename);
+
+ return (retval);
+}
+
+#define VERTICAL 1
+#define HORIZONTAL 2
+static Bool
+GradientLoader(XawParams *params, Screen *screen, Colormap colormap, int depth,
+ Pixmap *pixmap_return, Pixmap *mask_return,
+ Dimension *width_return, Dimension *height_return)
+{
+ double ired, igreen, iblue, red, green, blue;
+ XColor start, end, color;
+ XGCValues values;
+ GC gc;
+ double i, inc, x, y, xend, yend;
+ Pixmap pixmap;
+ XawArgVal *argval;
+ int orientation, dimension, steps;
+ char *value;
+
+ if (XmuCompareISOLatin1(params->name, "vertical") == 0)
+ orientation = VERTICAL;
+ else if (XmuCompareISOLatin1(params->name, "horizontal") == 0)
+ orientation = HORIZONTAL;
+ else
+ return (False);
+
+ if ((argval = XawFindArgVal(params, "dimension")) != NULL
+ && argval->value)
+ {
+ dimension = atoi(argval->value);
+ if (dimension <= 0)
+ return (False);
+ }
+ else
+ dimension = 50;
+
+ if ((argval = XawFindArgVal(params, "steps")) != NULL
+ && argval->value)
+ {
+ steps = atoi(argval->value);
+ if (steps <= 0)
+ return (False);
+ }
+ else
+ steps = dimension;
+
+ steps = XawMin(steps, dimension);
+
+ value = NULL;
+ if ((argval = XawFindArgVal(params, "start")) != NULL)
+ value = argval->value;
+ if (value && !XAllocNamedColor(DisplayOfScreen(screen), colormap, value,
+ &start, &color))
+ return (False);
+ else if (!value)
+ {
+ start.pixel = WhitePixelOfScreen(screen);
+ XQueryColor(DisplayOfScreen(screen), colormap, &start);
+ }
+ value = NULL;
+ if ((argval = XawFindArgVal(params, "end")) != NULL)
+ value = argval->value;
+ if (value && !XAllocNamedColor(DisplayOfScreen(screen), colormap, value,
+ &end, &color))
+ return (False);
+ else if (!value)
+ {
+ end.pixel = BlackPixelOfScreen(screen);
+ XQueryColor(DisplayOfScreen(screen), colormap, &end);
+ }
+
+ if ((pixmap = XCreatePixmap(DisplayOfScreen(screen),
+ RootWindowOfScreen(screen),
+ orientation == VERTICAL ? 1 : dimension,
+ orientation == VERTICAL ? dimension : 1, depth))
+ == 0)
+ return (False);
+
+ ired = (double)(end.red - start.red) / (double)steps;
+ igreen = (double)(end.green - start.green) / (double)steps;
+ iblue = (double)(end.blue - start.blue) / (double)steps;
+
+ red = color.red = start.red;
+ green = color.green = start.green;
+ blue = color.blue = start.blue;
+
+ inc = (double)dimension / (double)steps;
+
+ gc = XCreateGC(DisplayOfScreen(screen), pixmap, 0, &values);
+
+ x = y = 0.0;
+ if (orientation == VERTICAL)
+ {
+ xend = 1;
+ yend = 0;
+ }
+ else
+ {
+ xend = 0;
+ yend = 1;
+ }
+
+ color.flags = DoRed | DoGreen | DoBlue;
+
+ XSetForeground(DisplayOfScreen(screen), gc, start.pixel);
+ for (i = 0.0; i < dimension; i += inc)
+ {
+ if ((int)color.red != (int)red || (int)color.green != (int)green
+ || (int)color.blue != (int)blue)
+ {
+ XFillRectangle(DisplayOfScreen(screen), pixmap, gc, (int)x, (int)y,
+ (unsigned int)xend, (unsigned int)yend);
+ color.red = (unsigned short)red;
+ color.green = (unsigned short)green;
+ color.blue = (unsigned short)blue;
+ if (!XAllocColor(DisplayOfScreen(screen), colormap, &color))
+ {
+ XFreePixmap(DisplayOfScreen(screen), pixmap);
+ return (False);
+ }
+ XSetForeground(DisplayOfScreen(screen), gc, color.pixel);
+ if (orientation == VERTICAL)
+ y = yend;
+ else
+ x = xend;
+ }
+ red += ired;
+ green += igreen;
+ blue += iblue;
+ if (orientation == VERTICAL)
+ yend += inc;
+ else
+ xend += inc;
+ }
+ XFillRectangle(DisplayOfScreen(screen), pixmap, gc, (int)x, (int)y,
+ (unsigned int)xend, (unsigned int)yend);
+
+ *pixmap_return = pixmap;
+ *mask_return = None;
+ *width_return = orientation == VERTICAL ? 1 : dimension;
+ *height_return = orientation == VERTICAL ? dimension : 1;
+
+ XFreeGC(DisplayOfScreen(screen), gc);
+
+ return (True);
+}
+
+static Bool
+XPixmapLoader(XawParams *params, Screen *screen, Colormap colormap, int depth,
+ Pixmap *pixmap_return, Pixmap *mask_return,
+ Dimension *width_return, Dimension *height_return)
+{
+ XpmAttributes xpm_attributes;
+ XawArgVal *argval;
+ unsigned int closeness = 4000;
+ static SubstitutionRec sub[] = {
+ {'H', NULL},
+ {'N', NULL},
+ {'T', "pixmaps"},
+ {'P', PROJECT_ROOT},
+ };
+ char *filename;
+
+ if ((argval = XawFindArgVal(params, "closeness")) != NULL
+ && argval->value)
+ closeness = atoi(argval->value);
+
+ if (params->name[0] != '/' && params->name[0] != '.')
+ {
+ if (!sub[0].substitution)
+ sub[0].substitution = getenv("HOME");
+ sub[1].substitution = params->name;
+ if (pixmap_path == NULL)
+ GetResourcePixmapPath(DisplayOfScreen(screen));
+ filename = XtFindFile(pixmap_path, sub, XtNumber(sub), NULL);
+ if (!filename)
+ return (False);
+ }
+ else
+ filename = params->name;
+
+ xpm_attributes.colormap = colormap;
+ xpm_attributes.closeness = closeness;
+ xpm_attributes.valuemask = XpmSize | XpmColormap | XpmCloseness;
+ if (XpmReadFileToPixmap(DisplayOfScreen(screen),
+ RootWindowOfScreen(screen), filename, pixmap_return,
+ mask_return, &xpm_attributes) == XpmSuccess)
+ {
+ *width_return = xpm_attributes.width;
+ *height_return = xpm_attributes.height;
+
+ return (True);
+ }
+
+ return (False);
+}
+
+void
+XawReshapeWidget(Widget w, XawPixmap *pixmap)
+{
+ if (!pixmap || pixmap->mask == None)
+ XShapeCombineMask(XtDisplay(w), XtWindow(w), ShapeBounding, 0, 0,
+ None, ShapeSet);
+ else
+ XShapeCombineMask(XtDisplay(w), XtWindow(w), ShapeBounding, 0, 0,
+ pixmap->mask, ShapeSet);
+}
+
+#endif /* OLDXAW */
diff --git a/libXaw/src/Porthole.c b/libXaw/src/Porthole.c
index 3bf161592..082e98a12 100644
--- a/libXaw/src/Porthole.c
+++ b/libXaw/src/Porthole.c
@@ -1,378 +1,376 @@
-/*
- * $Xorg: Porthole.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1990, 1994, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- *
- * This widget is a trivial clipping widget. It is typically used with a
- * panner or scrollbar to navigate.
- */
-/* $XFree86: xc/lib/Xaw/Porthole.c,v 1.6 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/PortholeP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Class Methods
- */
-static void XawPortholeChangeManaged(Widget);
-static XtGeometryResult XawPortholeGeometryManager(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static XtGeometryResult XawPortholeQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawPortholeRealize(Widget, Mask*, XSetWindowAttributes*);
-static void XawPortholeResize(Widget);
-
-/*
- * Prototypes
- */
-static Widget find_child(PortholeWidget);
-static void layout_child(PortholeWidget, Widget, XtWidgetGeometry*,
- Position*, Position*, Dimension*, Dimension*);
-static void SendReport(PortholeWidget, unsigned int);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(PortholeRec, porthole.field)
-static XtResource resources[] = {
- {
- XtNreportCallback,
- XtCReportCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(report_callbacks),
- XtRCallback,
- NULL
- },
-};
-#undef offset
-
-#define Superclass (&compositeClassRec)
-PortholeClassRec portholeClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Porthole", /* class_name */
- sizeof(PortholeRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- NULL, /* initialize */
- NULL, /* initialize_hook */
- XawPortholeRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XawPortholeResize, /* resize */
- NULL, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XawPortholeQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* composite */
- {
- XawPortholeGeometryManager, /* geometry_manager */
- XawPortholeChangeManaged, /* change_managed */
- XtInheritInsertChild, /* insert_child */
- XtInheritDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- { /* porthole */
- NULL, /* extension */
- },
-};
-
-WidgetClass portholeWidgetClass = (WidgetClass)&portholeClassRec;
-
-/*
- * Implementation
- */
-static Widget
-find_child(PortholeWidget pw)
-{
- Widget *children;
- unsigned int i;
-
- /*
- * Find the managed child on which we should operate. Ignore multiple
- * managed children
- */
- for (i = 0, children = pw->composite.children;
- i < pw->composite.num_children; i++, children++)
- if (XtIsManaged(*children))
- return (*children);
-
- return (NULL);
-}
-
-static void
-SendReport(PortholeWidget pw, unsigned int changed)
-{
- Widget child = find_child(pw);
-
- if (pw->porthole.report_callbacks && child) {
- XawPannerReport prep;
-
- prep.changed = changed;
- prep.slider_x = -XtX(child); /* porthole is "inner" */
- prep.slider_y = -XtY(child); /* child is outer since it is larger */
- prep.slider_width = XtWidth(pw);
- prep.slider_height = XtHeight(pw);
- prep.canvas_width = XtWidth(child);
- prep.canvas_height = XtHeight(child);
- XtCallCallbackList((Widget)pw, pw->porthole.report_callbacks,
- (XtPointer)&prep);
- }
-}
-
-static void
-layout_child(PortholeWidget pw, Widget child, XtWidgetGeometry *geomp,
- Position *xp, Position *yp, Dimension *widthp, Dimension *heightp)
-{
- Position minx, miny;
-
- *xp = XtX(child); /* default to current values */
- *yp = XtY(child);
- *widthp = XtWidth(child);
- *heightp = XtHeight(child);
- if (geomp) { /* mix in any requested changes */
- if (geomp->request_mode & CWX)
- *xp = geomp->x;
- if (geomp->request_mode & CWY)
- *yp = geomp->y;
- if (geomp->request_mode & CWWidth)
- *widthp = geomp->width;
- if (geomp->request_mode & CWHeight)
- *heightp = geomp->height;
- }
-
- /*
- * Make sure that the child is at least as large as the porthole; there
- * is no maximum size
- */
- if (*widthp < XtWidth(pw)) *widthp = XtWidth(pw);
- if (*heightp < XtHeight(pw)) *heightp = XtHeight(pw);
-
- /*
- * Make sure that the child is still on the screen. Note that this must
- * be done *after* the size computation so that we know where to put it
- */
- minx = (Position)XtWidth(pw) - (Position)*widthp;
- miny = (Position)XtHeight(pw) - (Position)*heightp;
-
- if (*xp < minx)
- *xp = minx;
- if (*yp < miny)
- *yp = miny;
-
- if (*xp > 0)
- *xp = 0;
- if (*yp > 0)
- *yp = 0;
-}
-
-static void
-XawPortholeRealize(Widget gw, Mask *valueMask, XSetWindowAttributes *attr)
-{
- attr->bit_gravity = NorthWestGravity;
- *valueMask |= CWBitGravity;
-
- if (XtWidth(gw) < 1)
- XtWidth(gw) = 1;
- if (XtHeight(gw) < 1)
- XtHeight(gw) = 1;
- (*portholeWidgetClass->core_class.superclass->core_class.realize)
- (gw, valueMask, attr);
-}
-
-static void
-XawPortholeResize(Widget gw)
-{
- PortholeWidget pw = (PortholeWidget)gw;
- Widget child = find_child(pw);
-
- /*
- * If we have a child, we need to make sure that it is at least as big
- * as we are and in the right place
- */
- if (child) {
- Position x, y;
- Dimension width, height;
-
- layout_child(pw, child, NULL, &x, &y, &width, &height);
- XtConfigureWidget(child, x, y, width, height, 0);
- }
-
- SendReport(pw, XawPRCanvasWidth | XawPRCanvasHeight);
-}
-
-static XtGeometryResult
-XawPortholeQueryGeometry(Widget gw, XtWidgetGeometry *intended,
- XtWidgetGeometry *preferred)
-{
- PortholeWidget pw = (PortholeWidget)gw;
- Widget child = find_child(pw);
-
- if (child) {
-#define SIZEONLY (CWWidth | CWHeight)
- preferred->request_mode = SIZEONLY;
- preferred->width = XtWidth(child);
- preferred->height = XtHeight(child);
-
- if ((intended->request_mode & SIZEONLY) == SIZEONLY &&
- intended->width == preferred->width &&
- intended->height == preferred->height)
- return (XtGeometryYes);
- else if (preferred->width == XtWidth(pw) &&
- preferred->height == XtHeight(pw))
- return (XtGeometryNo);
-
- return (XtGeometryAlmost);
-#undef SIZEONLY
- }
-
- return (XtGeometryNo);
-}
-
-static XtGeometryResult
-XawPortholeGeometryManager(Widget w, XtWidgetGeometry *req,
- XtWidgetGeometry *reply)
-{
- PortholeWidget pw = (PortholeWidget) w->core.parent;
- Widget child = find_child(pw);
- Bool okay = True;
-
- if (child != w)
- return (XtGeometryNo);
-
- *reply = *req; /* assume we'll grant everything */
-
- if ((req->request_mode & CWBorderWidth) && req->border_width != 0) {
- reply->border_width = 0;
- okay = False;
- }
-
- layout_child(pw, child, req, &reply->x, &reply->y,
- &reply->width, &reply->height);
-
- if ((req->request_mode & CWX) && req->x != reply->x)
- okay = False;
- if ((req->request_mode & CWY) && req->x != reply->x)
- okay = False;
- if ((req->request_mode & CWWidth) && req->width != reply->width)
- okay = False;
- if ((req->request_mode & CWHeight) && req->height != reply->height)
- okay = False;
-
- /*
- * If we failed on anything, simply return without touching widget
- */
- if (!okay)
- return (XtGeometryAlmost);
-
- /*
- * If not just doing a query, update widget and send report. Note that
- * we will often set fields that weren't requested because we want to keep
- * the child visible
- */
- if (!(req->request_mode & XtCWQueryOnly)) {
- unsigned int changed = 0;
-
- if (XtX(child) != reply->x) {
- changed |= XawPRSliderX;
- XtX(child) = reply->x;
- }
- if (XtY(child) != reply->y) {
- changed |= XawPRSliderY;
- XtY(child) = reply->y;
- }
- if (XtWidth(child) != reply->width) {
- changed |= XawPRSliderWidth;
- XtWidth(child) = reply->width;
- }
- if (XtHeight(child) != reply->height) {
- changed |= XawPRSliderHeight;
- XtHeight(child) = reply->height;
- }
- if (changed)
- SendReport(pw, changed);
- }
-
- return (XtGeometryYes); /* success! */
-}
-
-static void
-XawPortholeChangeManaged(Widget gw)
-{
- PortholeWidget pw = (PortholeWidget)gw;
- Widget child = find_child (pw); /* ignore extra children */
-
- if (child) {
- if (!XtIsRealized (gw)) {
- XtWidgetGeometry geom, retgeom;
-
- geom.request_mode = 0;
- if (XtWidth(pw) == 0) {
- geom.width = XtWidth(child);
- geom.request_mode |= CWWidth;
- }
- if (XtHeight(pw) == 0) {
- geom.height = XtHeight(child);
- geom.request_mode |= CWHeight;
- }
- if (geom.request_mode &&
- XtMakeGeometryRequest (gw, &geom, &retgeom)
- == XtGeometryAlmost)
- (void)XtMakeGeometryRequest(gw, &retgeom, NULL);
- }
-
- XtResizeWidget(child, Max(XtWidth(child), XtWidth(pw)),
- Max(XtHeight(child), XtHeight(pw)), 0);
-
- SendReport(pw, XawPRAll);
- }
-}
+/*
+ *
+Copyright 1990, 1994, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ *
+ * This widget is a trivial clipping widget. It is typically used with a
+ * panner or scrollbar to navigate.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/PortholeP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Class Methods
+ */
+static void XawPortholeChangeManaged(Widget);
+static XtGeometryResult XawPortholeGeometryManager(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static XtGeometryResult XawPortholeQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawPortholeRealize(Widget, Mask*, XSetWindowAttributes*);
+static void XawPortholeResize(Widget);
+
+/*
+ * Prototypes
+ */
+static Widget find_child(PortholeWidget);
+static void layout_child(PortholeWidget, Widget, XtWidgetGeometry*,
+ Position*, Position*, Dimension*, Dimension*);
+static void SendReport(PortholeWidget, unsigned int);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(PortholeRec, porthole.field)
+static XtResource resources[] = {
+ {
+ XtNreportCallback,
+ XtCReportCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(report_callbacks),
+ XtRCallback,
+ NULL
+ },
+};
+#undef offset
+
+#define Superclass (&compositeClassRec)
+PortholeClassRec portholeClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Porthole", /* class_name */
+ sizeof(PortholeRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ NULL, /* initialize */
+ NULL, /* initialize_hook */
+ XawPortholeRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XawPortholeResize, /* resize */
+ NULL, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XawPortholeQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* composite */
+ {
+ XawPortholeGeometryManager, /* geometry_manager */
+ XawPortholeChangeManaged, /* change_managed */
+ XtInheritInsertChild, /* insert_child */
+ XtInheritDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ { /* porthole */
+ NULL, /* extension */
+ },
+};
+
+WidgetClass portholeWidgetClass = (WidgetClass)&portholeClassRec;
+
+/*
+ * Implementation
+ */
+static Widget
+find_child(PortholeWidget pw)
+{
+ Widget *children;
+ unsigned int i;
+
+ /*
+ * Find the managed child on which we should operate. Ignore multiple
+ * managed children
+ */
+ for (i = 0, children = pw->composite.children;
+ i < pw->composite.num_children; i++, children++)
+ if (XtIsManaged(*children))
+ return (*children);
+
+ return (NULL);
+}
+
+static void
+SendReport(PortholeWidget pw, unsigned int changed)
+{
+ Widget child = find_child(pw);
+
+ if (pw->porthole.report_callbacks && child) {
+ XawPannerReport prep;
+
+ prep.changed = changed;
+ prep.slider_x = -XtX(child); /* porthole is "inner" */
+ prep.slider_y = -XtY(child); /* child is outer since it is larger */
+ prep.slider_width = XtWidth(pw);
+ prep.slider_height = XtHeight(pw);
+ prep.canvas_width = XtWidth(child);
+ prep.canvas_height = XtHeight(child);
+ XtCallCallbackList((Widget)pw, pw->porthole.report_callbacks,
+ (XtPointer)&prep);
+ }
+}
+
+static void
+layout_child(PortholeWidget pw, Widget child, XtWidgetGeometry *geomp,
+ Position *xp, Position *yp, Dimension *widthp, Dimension *heightp)
+{
+ Position minx, miny;
+
+ *xp = XtX(child); /* default to current values */
+ *yp = XtY(child);
+ *widthp = XtWidth(child);
+ *heightp = XtHeight(child);
+ if (geomp) { /* mix in any requested changes */
+ if (geomp->request_mode & CWX)
+ *xp = geomp->x;
+ if (geomp->request_mode & CWY)
+ *yp = geomp->y;
+ if (geomp->request_mode & CWWidth)
+ *widthp = geomp->width;
+ if (geomp->request_mode & CWHeight)
+ *heightp = geomp->height;
+ }
+
+ /*
+ * Make sure that the child is at least as large as the porthole; there
+ * is no maximum size
+ */
+ if (*widthp < XtWidth(pw)) *widthp = XtWidth(pw);
+ if (*heightp < XtHeight(pw)) *heightp = XtHeight(pw);
+
+ /*
+ * Make sure that the child is still on the screen. Note that this must
+ * be done *after* the size computation so that we know where to put it
+ */
+ minx = (Position)XtWidth(pw) - (Position)*widthp;
+ miny = (Position)XtHeight(pw) - (Position)*heightp;
+
+ if (*xp < minx)
+ *xp = minx;
+ if (*yp < miny)
+ *yp = miny;
+
+ if (*xp > 0)
+ *xp = 0;
+ if (*yp > 0)
+ *yp = 0;
+}
+
+static void
+XawPortholeRealize(Widget gw, Mask *valueMask, XSetWindowAttributes *attr)
+{
+ attr->bit_gravity = NorthWestGravity;
+ *valueMask |= CWBitGravity;
+
+ if (XtWidth(gw) < 1)
+ XtWidth(gw) = 1;
+ if (XtHeight(gw) < 1)
+ XtHeight(gw) = 1;
+ (*portholeWidgetClass->core_class.superclass->core_class.realize)
+ (gw, valueMask, attr);
+}
+
+static void
+XawPortholeResize(Widget gw)
+{
+ PortholeWidget pw = (PortholeWidget)gw;
+ Widget child = find_child(pw);
+
+ /*
+ * If we have a child, we need to make sure that it is at least as big
+ * as we are and in the right place
+ */
+ if (child) {
+ Position x, y;
+ Dimension width, height;
+
+ layout_child(pw, child, NULL, &x, &y, &width, &height);
+ XtConfigureWidget(child, x, y, width, height, 0);
+ }
+
+ SendReport(pw, XawPRCanvasWidth | XawPRCanvasHeight);
+}
+
+static XtGeometryResult
+XawPortholeQueryGeometry(Widget gw, XtWidgetGeometry *intended,
+ XtWidgetGeometry *preferred)
+{
+ PortholeWidget pw = (PortholeWidget)gw;
+ Widget child = find_child(pw);
+
+ if (child) {
+#define SIZEONLY (CWWidth | CWHeight)
+ preferred->request_mode = SIZEONLY;
+ preferred->width = XtWidth(child);
+ preferred->height = XtHeight(child);
+
+ if ((intended->request_mode & SIZEONLY) == SIZEONLY &&
+ intended->width == preferred->width &&
+ intended->height == preferred->height)
+ return (XtGeometryYes);
+ else if (preferred->width == XtWidth(pw) &&
+ preferred->height == XtHeight(pw))
+ return (XtGeometryNo);
+
+ return (XtGeometryAlmost);
+#undef SIZEONLY
+ }
+
+ return (XtGeometryNo);
+}
+
+static XtGeometryResult
+XawPortholeGeometryManager(Widget w, XtWidgetGeometry *req,
+ XtWidgetGeometry *reply)
+{
+ PortholeWidget pw = (PortholeWidget) w->core.parent;
+ Widget child = find_child(pw);
+ Bool okay = True;
+
+ if (child != w)
+ return (XtGeometryNo);
+
+ *reply = *req; /* assume we'll grant everything */
+
+ if ((req->request_mode & CWBorderWidth) && req->border_width != 0) {
+ reply->border_width = 0;
+ okay = False;
+ }
+
+ layout_child(pw, child, req, &reply->x, &reply->y,
+ &reply->width, &reply->height);
+
+ if ((req->request_mode & CWX) && req->x != reply->x)
+ okay = False;
+ if ((req->request_mode & CWY) && req->x != reply->x)
+ okay = False;
+ if ((req->request_mode & CWWidth) && req->width != reply->width)
+ okay = False;
+ if ((req->request_mode & CWHeight) && req->height != reply->height)
+ okay = False;
+
+ /*
+ * If we failed on anything, simply return without touching widget
+ */
+ if (!okay)
+ return (XtGeometryAlmost);
+
+ /*
+ * If not just doing a query, update widget and send report. Note that
+ * we will often set fields that weren't requested because we want to keep
+ * the child visible
+ */
+ if (!(req->request_mode & XtCWQueryOnly)) {
+ unsigned int changed = 0;
+
+ if (XtX(child) != reply->x) {
+ changed |= XawPRSliderX;
+ XtX(child) = reply->x;
+ }
+ if (XtY(child) != reply->y) {
+ changed |= XawPRSliderY;
+ XtY(child) = reply->y;
+ }
+ if (XtWidth(child) != reply->width) {
+ changed |= XawPRSliderWidth;
+ XtWidth(child) = reply->width;
+ }
+ if (XtHeight(child) != reply->height) {
+ changed |= XawPRSliderHeight;
+ XtHeight(child) = reply->height;
+ }
+ if (changed)
+ SendReport(pw, changed);
+ }
+
+ return (XtGeometryYes); /* success! */
+}
+
+static void
+XawPortholeChangeManaged(Widget gw)
+{
+ PortholeWidget pw = (PortholeWidget)gw;
+ Widget child = find_child (pw); /* ignore extra children */
+
+ if (child) {
+ if (!XtIsRealized (gw)) {
+ XtWidgetGeometry geom, retgeom;
+
+ geom.request_mode = 0;
+ if (XtWidth(pw) == 0) {
+ geom.width = XtWidth(child);
+ geom.request_mode |= CWWidth;
+ }
+ if (XtHeight(pw) == 0) {
+ geom.height = XtHeight(child);
+ geom.request_mode |= CWHeight;
+ }
+ if (geom.request_mode &&
+ XtMakeGeometryRequest (gw, &geom, &retgeom)
+ == XtGeometryAlmost)
+ (void)XtMakeGeometryRequest(gw, &retgeom, NULL);
+ }
+
+ XtResizeWidget(child, Max(XtWidth(child), XtWidth(pw)),
+ Max(XtHeight(child), XtHeight(pw)), 0);
+
+ SendReport(pw, XawPRAll);
+ }
+}
diff --git a/libXaw/src/Private.h b/libXaw/src/Private.h
index a76207a4d..672062aeb 100644
--- a/libXaw/src/Private.h
+++ b/libXaw/src/Private.h
@@ -1,154 +1,152 @@
-/*
- * Copyright (c) 1998 by The XFree86 Project, 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 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.
- */
-
-/* $XFree86: xc/lib/Xaw/Private.h,v 3.9 1999/05/16 10:12:48 dawes Exp $ */
-
-#ifndef _XawPrivate_h
-#define _XawPrivate_h
-
-#define XawMax(a, b) ((a) > (b) ? (a) : (b))
-#define XawMin(a, b) ((a) < (b) ? (a) : (b))
-#define XawAbs(a) ((a) < 0 ? -(a) : (a))
-
-#define XawStackAlloc(size, stk_buffer) \
-((size) <= sizeof(stk_buffer) \
- ? (XtPointer)(stk_buffer) \
- : XtMalloc((unsigned)(size)))
-
-#define XawStackFree(pointer, stk_buffer) \
-do { \
- if ((pointer) != (XtPointer)(stk_buffer)) \
- XtFree((char *)pointer); \
-} while (0)
-
-#ifndef XtX
-#define XtX(w) (((RectObj)w)->rectangle.x)
-#endif
-#ifndef XtY
-#define XtY(w) (((RectObj)w)->rectangle.y)
-#endif
-#ifndef XtWidth
-#define XtWidth(w) (((RectObj)w)->rectangle.width)
-#endif
-#ifndef XtHeight
-#define XtHeight(w) (((RectObj)w)->rectangle.height)
-#endif
-#ifndef XtBorderWidth
-#define XtBorderWidth(w) (((RectObj)w)->rectangle.border_width)
-#endif
-
-#ifndef OLDXAW
-#define XAW_PRIV_VAR_PREFIX '$'
-
-typedef Bool (*XawParseBooleanProc)(Widget, String, XEvent*, Bool*);
-
-typedef struct _XawActionVarList XawActionVarList;
-typedef struct _XawActionResList XawActionResList;
-
-/* Boolean expressions */
-Bool XawParseBoolean(Widget, String, XEvent*, Bool*);
-Bool XawBooleanExpression(Widget, String, XEvent*);
-
-/* actions */
-void XawPrintActionErrorMsg(String, Widget, String*, Cardinal*);
-XawActionResList *XawGetActionResList(WidgetClass);
-XawActionVarList *XawGetActionVarList(Widget);
-
-void XawSetValuesAction(Widget, XEvent*, String*, Cardinal*);
-void XawGetValuesAction(Widget, XEvent*, String*, Cardinal*);
-void XawDeclareAction(Widget, XEvent*, String*, Cardinal*);
-void XawCallProcAction(Widget, XEvent*, String*, Cardinal*);
-
-/* display lists */
-#define XAWDL_CONVERT_ERROR (XtPointer)-1
-typedef struct _XawDL _XawDisplayList;
-typedef struct _XawDLClass XawDLClass, XawDisplayListClass;
-
-typedef void (*XawDisplayListProc)(Widget, XtPointer, XtPointer,
- XEvent*, Region);
-typedef void *(*XawDLArgsInitProc)(String, String*, Cardinal*,
- Screen*, Colormap, int);
-typedef void *(*XawDLDataInitProc)(String,
- Screen*, Colormap, int);
-typedef void (*XawDLArgsDestructor)(Display*, String, XtPointer,
- String*, Cardinal*);
-typedef void (*XawDLDataDestructor)(Display*, String, XtPointer);
-
-void XawRunDisplayList(Widget, _XawDisplayList*, XEvent*, Region);
-void XawDisplayListInitialize(void);
-
-_XawDisplayList *XawCreateDisplayList(String, Screen*, Colormap, int);
-void XawDestroyDisplayList(_XawDisplayList*);
-String XawDisplayListString(_XawDisplayList*);
-XawDLClass *XawGetDisplayListClass(String);
-XawDLClass *XawCreateDisplayListClass(String,
- XawDLArgsInitProc, XawDLArgsDestructor,
- XawDLDataInitProc, XawDLDataDestructor);
-Bool XawDeclareDisplayListProc(XawDLClass*, String, XawDisplayListProc);
-
-/* pixmaps */
-typedef struct _XawArgVal {
- String name;
- String value;
-} XawArgVal;
-
-typedef struct _XawParams {
- String name;
- String type;
- String ext;
- XawArgVal **args;
- Cardinal num_args;
-} XawParams;
-
-typedef struct _XawPixmap {
- String name;
- Pixmap pixmap;
- Pixmap mask;
- Dimension width;
- Dimension height;
-} XawPixmap;
-
-typedef Bool (*XawPixmapLoader)(XawParams*, Screen*, Colormap, int,
- Pixmap*, Pixmap*,
- Dimension*, Dimension*);
-Bool XawPixmapsInitialize(void);
-Bool XawAddPixmapLoader(String, String, XawPixmapLoader);
-XawPixmap *XawLoadPixmap(String, Screen*, Colormap, int);
-XawPixmap *XawPixmapFromXPixmap(Pixmap, Screen*, Colormap, int);
-XawParams *XawParseParamsString(String name);
-void XawFreeParamsStruct(XawParams *params);
-XawArgVal *XawFindArgVal(XawParams *params, String name);
-void XawReshapeWidget(Widget, XawPixmap*);
-#endif /* OLDXAW */
-
-/* misc */
-void XawTypeToStringWarning(Display*, String);
-
-/* OS.c */
-int _XawGetPageSize(void);
-
-#endif /* _XawPrivate_h */
+/*
+ * Copyright (c) 1998 by The XFree86 Project, 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 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.
+ */
+
+#ifndef _XawPrivate_h
+#define _XawPrivate_h
+
+#define XawMax(a, b) ((a) > (b) ? (a) : (b))
+#define XawMin(a, b) ((a) < (b) ? (a) : (b))
+#define XawAbs(a) ((a) < 0 ? -(a) : (a))
+
+#define XawStackAlloc(size, stk_buffer) \
+((size) <= sizeof(stk_buffer) \
+ ? (XtPointer)(stk_buffer) \
+ : XtMalloc((unsigned)(size)))
+
+#define XawStackFree(pointer, stk_buffer) \
+do { \
+ if ((pointer) != (XtPointer)(stk_buffer)) \
+ XtFree((char *)pointer); \
+} while (0)
+
+#ifndef XtX
+#define XtX(w) (((RectObj)w)->rectangle.x)
+#endif
+#ifndef XtY
+#define XtY(w) (((RectObj)w)->rectangle.y)
+#endif
+#ifndef XtWidth
+#define XtWidth(w) (((RectObj)w)->rectangle.width)
+#endif
+#ifndef XtHeight
+#define XtHeight(w) (((RectObj)w)->rectangle.height)
+#endif
+#ifndef XtBorderWidth
+#define XtBorderWidth(w) (((RectObj)w)->rectangle.border_width)
+#endif
+
+#ifndef OLDXAW
+#define XAW_PRIV_VAR_PREFIX '$'
+
+typedef Bool (*XawParseBooleanProc)(Widget, String, XEvent*, Bool*);
+
+typedef struct _XawActionVarList XawActionVarList;
+typedef struct _XawActionResList XawActionResList;
+
+/* Boolean expressions */
+Bool XawParseBoolean(Widget, String, XEvent*, Bool*);
+Bool XawBooleanExpression(Widget, String, XEvent*);
+
+/* actions */
+void XawPrintActionErrorMsg(String, Widget, String*, Cardinal*);
+XawActionResList *XawGetActionResList(WidgetClass);
+XawActionVarList *XawGetActionVarList(Widget);
+
+void XawSetValuesAction(Widget, XEvent*, String*, Cardinal*);
+void XawGetValuesAction(Widget, XEvent*, String*, Cardinal*);
+void XawDeclareAction(Widget, XEvent*, String*, Cardinal*);
+void XawCallProcAction(Widget, XEvent*, String*, Cardinal*);
+
+/* display lists */
+#define XAWDL_CONVERT_ERROR (XtPointer)-1
+typedef struct _XawDL _XawDisplayList;
+typedef struct _XawDLClass XawDLClass, XawDisplayListClass;
+
+typedef void (*XawDisplayListProc)(Widget, XtPointer, XtPointer,
+ XEvent*, Region);
+typedef void *(*XawDLArgsInitProc)(String, String*, Cardinal*,
+ Screen*, Colormap, int);
+typedef void *(*XawDLDataInitProc)(String,
+ Screen*, Colormap, int);
+typedef void (*XawDLArgsDestructor)(Display*, String, XtPointer,
+ String*, Cardinal*);
+typedef void (*XawDLDataDestructor)(Display*, String, XtPointer);
+
+void XawRunDisplayList(Widget, _XawDisplayList*, XEvent*, Region);
+void XawDisplayListInitialize(void);
+
+_XawDisplayList *XawCreateDisplayList(String, Screen*, Colormap, int);
+void XawDestroyDisplayList(_XawDisplayList*);
+String XawDisplayListString(_XawDisplayList*);
+XawDLClass *XawGetDisplayListClass(String);
+XawDLClass *XawCreateDisplayListClass(String,
+ XawDLArgsInitProc, XawDLArgsDestructor,
+ XawDLDataInitProc, XawDLDataDestructor);
+Bool XawDeclareDisplayListProc(XawDLClass*, String, XawDisplayListProc);
+
+/* pixmaps */
+typedef struct _XawArgVal {
+ String name;
+ String value;
+} XawArgVal;
+
+typedef struct _XawParams {
+ String name;
+ String type;
+ String ext;
+ XawArgVal **args;
+ Cardinal num_args;
+} XawParams;
+
+typedef struct _XawPixmap {
+ String name;
+ Pixmap pixmap;
+ Pixmap mask;
+ Dimension width;
+ Dimension height;
+} XawPixmap;
+
+typedef Bool (*XawPixmapLoader)(XawParams*, Screen*, Colormap, int,
+ Pixmap*, Pixmap*,
+ Dimension*, Dimension*);
+Bool XawPixmapsInitialize(void);
+Bool XawAddPixmapLoader(String, String, XawPixmapLoader);
+XawPixmap *XawLoadPixmap(String, Screen*, Colormap, int);
+XawPixmap *XawPixmapFromXPixmap(Pixmap, Screen*, Colormap, int);
+XawParams *XawParseParamsString(String name);
+void XawFreeParamsStruct(XawParams *params);
+XawArgVal *XawFindArgVal(XawParams *params, String name);
+void XawReshapeWidget(Widget, XawPixmap*);
+#endif /* OLDXAW */
+
+/* misc */
+void XawTypeToStringWarning(Display*, String);
+
+/* OS.c */
+int _XawGetPageSize(void);
+
+#endif /* _XawPrivate_h */
diff --git a/libXaw/src/Repeater.c b/libXaw/src/Repeater.c
index 52ae2959e..b70fa67c0 100644
--- a/libXaw/src/Repeater.c
+++ b/libXaw/src/Repeater.c
@@ -1,300 +1,298 @@
-/*
- * $Xorg: Repeater.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1990, 1994, 1998 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.
- *
- * Author: Jim Fulton, MIT X Consortium
- *
- * This widget is used for press-and-hold style buttons.
- */
-/* $XFree86: xc/lib/Xaw/Repeater.c,v 1.6 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xaw/RepeaterP.h>
-#include <X11/Xaw/XawInit.h>
-
-#define DO_CALLBACK(rw) \
-XtCallCallbackList((Widget)rw, rw->command.callbacks, NULL)
-
-#define ADD_TIMEOUT(rw, delay) \
-XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)rw), \
- delay, tic, (XtPointer)rw)
-
-#define CLEAR_TIMEOUT(rw) \
-if ((rw)->repeater.timer) { \
- XtRemoveTimeOut((rw)->repeater.timer); \
- (rw)->repeater.timer = 0; \
-}
-
-/*
- * Class Methods
- */
-static void XawRepeaterInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawRepeaterDestroy(Widget);
-static Boolean XawRepeaterSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void tic(XtPointer, XtIntervalId*);
-
-/*
- * Actions
- */
-static void ActionStart(Widget, XEvent*, String*, Cardinal*);
-static void ActionStop(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-static char defaultTranslations[] =
-"<Enter>:" "highlight()\n"
-"<Leave>:" "unhighlight()\n"
-"<Btn1Down>:" "set() start()\n"
-"<Btn1Up>:" "stop() unset()\n"
-;
-
-static XtActionsRec actions[] = {
- {"start", ActionStart},
- {"stop", ActionStop},
-};
-
-#define offset(field) XtOffsetOf(RepeaterRec, repeater.field)
-static XtResource resources[] = {
- {
- XtNdecay,
- XtCDecay,
- XtRInt,
- sizeof(int),
- offset(decay),
- XtRImmediate,
- (XtPointer)REP_DEF_DECAY
- },
- {
- XtNinitialDelay,
- XtCDelay,
- XtRInt,
- sizeof(int),
- offset(initial_delay),
- XtRImmediate,
- (XtPointer)REP_DEF_INITIAL_DELAY
- },
- {
- XtNminimumDelay,
- XtCMinimumDelay,
- XtRInt,
- sizeof(int),
- offset(minimum_delay),
- XtRImmediate,
- (XtPointer)REP_DEF_MINIMUM_DELAY
- },
- {
- XtNrepeatDelay,
- XtCDelay,
- XtRInt,
- sizeof(int),
- offset(repeat_delay),
- XtRImmediate,
- (XtPointer)REP_DEF_REPEAT_DELAY
- },
- {
- XtNflash,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(flash),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNstartCallback,
- XtCStartCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(start_callbacks),
- XtRImmediate,
- NULL
- },
- {
- XtNstopCallback,
- XtCStopCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(stop_callbacks),
- XtRImmediate,
- NULL
- },
-};
-#undef offset
-
-#define Superclass (&commandClassRec)
-RepeaterClassRec repeaterClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Repeater", /* class_name */
- sizeof(RepeaterRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawRepeaterInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- actions, /* actions */
- XtNumber(actions), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawRepeaterDestroy, /* destroy */
- XtInheritResize, /* resize */
- XtInheritExpose, /* expose */
- XawRepeaterSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* label */
- {
- NULL, /* extension */
- },
- /* command */
- {
- NULL, /* extension */
- },
- /* repeater */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass repeaterWidgetClass = (WidgetClass) &repeaterClassRec;
-
-
-/*
- * Implementation
- */
-/*ARGSUSED*/
-static void
-tic(XtPointer client_data, XtIntervalId *id)
-{
- RepeaterWidget rw = (RepeaterWidget)client_data;
-
- rw->repeater.timer = 0; /* timer is removed */
- if (rw->repeater.flash) {
- Widget w = (Widget)rw;
-
- XClearWindow(XtDisplay(w), XtWindow(w));
- XtCallActionProc(w, "reset", NULL, NULL, 0);
- XClearWindow(XtDisplay(w), XtWindow(w));
- XtCallActionProc(w, "set", NULL, NULL, 0);
- }
- DO_CALLBACK(rw);
-
- rw->repeater.timer = ADD_TIMEOUT(rw, rw->repeater.next_delay);
-
- if (rw->repeater.decay) {
- rw->repeater.next_delay -= rw->repeater.decay;
- if (rw->repeater.next_delay < rw->repeater.minimum_delay)
- rw->repeater.next_delay = rw->repeater.minimum_delay;
- }
-}
-
-/*ARGSUSED*/
-static void
-XawRepeaterInitialize(Widget greq, Widget gnew,
- ArgList args, Cardinal *num_args)
-{
- RepeaterWidget cnew = (RepeaterWidget)gnew;
-
- if (cnew->repeater.minimum_delay < 0)
- cnew->repeater.minimum_delay = 0;
- cnew->repeater.timer = 0;
-}
-
-static void
-XawRepeaterDestroy(Widget gw)
-{
- CLEAR_TIMEOUT((RepeaterWidget)gw);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawRepeaterSetValues(Widget gcur, Widget greq, Widget gnew,
- ArgList args, Cardinal *num_args)
-{
- RepeaterWidget cur = (RepeaterWidget)gcur;
- RepeaterWidget cnew = (RepeaterWidget)gnew;
-
- if (cur->repeater.minimum_delay != cnew->repeater.minimum_delay) {
- if (cnew->repeater.next_delay < cnew->repeater.minimum_delay)
- cnew->repeater.next_delay = cnew->repeater.minimum_delay;
- }
-
- return (False);
-}
-
-/*ARGSUSED*/
-static void
-ActionStart(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- RepeaterWidget rw = (RepeaterWidget)gw;
-
- CLEAR_TIMEOUT(rw);
- if (rw->repeater.start_callbacks)
- XtCallCallbackList(gw, rw->repeater.start_callbacks, NULL);
-
- DO_CALLBACK(rw);
- rw->repeater.timer = ADD_TIMEOUT(rw, rw->repeater.initial_delay);
- rw->repeater.next_delay = rw->repeater.repeat_delay;
-}
-
-/*ARGSUSED*/
-static void
-ActionStop(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- RepeaterWidget rw = (RepeaterWidget)gw;
-
- CLEAR_TIMEOUT((RepeaterWidget)gw);
- if (rw->repeater.stop_callbacks)
- XtCallCallbackList(gw, rw->repeater.stop_callbacks, NULL);
-}
+/*
+ *
+Copyright 1990, 1994, 1998 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.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ *
+ * This widget is used for press-and-hold style buttons.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/RepeaterP.h>
+#include <X11/Xaw/XawInit.h>
+
+#define DO_CALLBACK(rw) \
+XtCallCallbackList((Widget)rw, rw->command.callbacks, NULL)
+
+#define ADD_TIMEOUT(rw, delay) \
+XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)rw), \
+ delay, tic, (XtPointer)rw)
+
+#define CLEAR_TIMEOUT(rw) \
+if ((rw)->repeater.timer) { \
+ XtRemoveTimeOut((rw)->repeater.timer); \
+ (rw)->repeater.timer = 0; \
+}
+
+/*
+ * Class Methods
+ */
+static void XawRepeaterInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawRepeaterDestroy(Widget);
+static Boolean XawRepeaterSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void tic(XtPointer, XtIntervalId*);
+
+/*
+ * Actions
+ */
+static void ActionStart(Widget, XEvent*, String*, Cardinal*);
+static void ActionStop(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+static char defaultTranslations[] =
+"<Enter>:" "highlight()\n"
+"<Leave>:" "unhighlight()\n"
+"<Btn1Down>:" "set() start()\n"
+"<Btn1Up>:" "stop() unset()\n"
+;
+
+static XtActionsRec actions[] = {
+ {"start", ActionStart},
+ {"stop", ActionStop},
+};
+
+#define offset(field) XtOffsetOf(RepeaterRec, repeater.field)
+static XtResource resources[] = {
+ {
+ XtNdecay,
+ XtCDecay,
+ XtRInt,
+ sizeof(int),
+ offset(decay),
+ XtRImmediate,
+ (XtPointer)REP_DEF_DECAY
+ },
+ {
+ XtNinitialDelay,
+ XtCDelay,
+ XtRInt,
+ sizeof(int),
+ offset(initial_delay),
+ XtRImmediate,
+ (XtPointer)REP_DEF_INITIAL_DELAY
+ },
+ {
+ XtNminimumDelay,
+ XtCMinimumDelay,
+ XtRInt,
+ sizeof(int),
+ offset(minimum_delay),
+ XtRImmediate,
+ (XtPointer)REP_DEF_MINIMUM_DELAY
+ },
+ {
+ XtNrepeatDelay,
+ XtCDelay,
+ XtRInt,
+ sizeof(int),
+ offset(repeat_delay),
+ XtRImmediate,
+ (XtPointer)REP_DEF_REPEAT_DELAY
+ },
+ {
+ XtNflash,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(flash),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNstartCallback,
+ XtCStartCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(start_callbacks),
+ XtRImmediate,
+ NULL
+ },
+ {
+ XtNstopCallback,
+ XtCStopCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(stop_callbacks),
+ XtRImmediate,
+ NULL
+ },
+};
+#undef offset
+
+#define Superclass (&commandClassRec)
+RepeaterClassRec repeaterClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Repeater", /* class_name */
+ sizeof(RepeaterRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawRepeaterInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawRepeaterDestroy, /* destroy */
+ XtInheritResize, /* resize */
+ XtInheritExpose, /* expose */
+ XawRepeaterSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ defaultTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* label */
+ {
+ NULL, /* extension */
+ },
+ /* command */
+ {
+ NULL, /* extension */
+ },
+ /* repeater */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass repeaterWidgetClass = (WidgetClass) &repeaterClassRec;
+
+
+/*
+ * Implementation
+ */
+/*ARGSUSED*/
+static void
+tic(XtPointer client_data, XtIntervalId *id)
+{
+ RepeaterWidget rw = (RepeaterWidget)client_data;
+
+ rw->repeater.timer = 0; /* timer is removed */
+ if (rw->repeater.flash) {
+ Widget w = (Widget)rw;
+
+ XClearWindow(XtDisplay(w), XtWindow(w));
+ XtCallActionProc(w, "reset", NULL, NULL, 0);
+ XClearWindow(XtDisplay(w), XtWindow(w));
+ XtCallActionProc(w, "set", NULL, NULL, 0);
+ }
+ DO_CALLBACK(rw);
+
+ rw->repeater.timer = ADD_TIMEOUT(rw, rw->repeater.next_delay);
+
+ if (rw->repeater.decay) {
+ rw->repeater.next_delay -= rw->repeater.decay;
+ if (rw->repeater.next_delay < rw->repeater.minimum_delay)
+ rw->repeater.next_delay = rw->repeater.minimum_delay;
+ }
+}
+
+/*ARGSUSED*/
+static void
+XawRepeaterInitialize(Widget greq, Widget gnew,
+ ArgList args, Cardinal *num_args)
+{
+ RepeaterWidget cnew = (RepeaterWidget)gnew;
+
+ if (cnew->repeater.minimum_delay < 0)
+ cnew->repeater.minimum_delay = 0;
+ cnew->repeater.timer = 0;
+}
+
+static void
+XawRepeaterDestroy(Widget gw)
+{
+ CLEAR_TIMEOUT((RepeaterWidget)gw);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawRepeaterSetValues(Widget gcur, Widget greq, Widget gnew,
+ ArgList args, Cardinal *num_args)
+{
+ RepeaterWidget cur = (RepeaterWidget)gcur;
+ RepeaterWidget cnew = (RepeaterWidget)gnew;
+
+ if (cur->repeater.minimum_delay != cnew->repeater.minimum_delay) {
+ if (cnew->repeater.next_delay < cnew->repeater.minimum_delay)
+ cnew->repeater.next_delay = cnew->repeater.minimum_delay;
+ }
+
+ return (False);
+}
+
+/*ARGSUSED*/
+static void
+ActionStart(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ RepeaterWidget rw = (RepeaterWidget)gw;
+
+ CLEAR_TIMEOUT(rw);
+ if (rw->repeater.start_callbacks)
+ XtCallCallbackList(gw, rw->repeater.start_callbacks, NULL);
+
+ DO_CALLBACK(rw);
+ rw->repeater.timer = ADD_TIMEOUT(rw, rw->repeater.initial_delay);
+ rw->repeater.next_delay = rw->repeater.repeat_delay;
+}
+
+/*ARGSUSED*/
+static void
+ActionStop(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ RepeaterWidget rw = (RepeaterWidget)gw;
+
+ CLEAR_TIMEOUT((RepeaterWidget)gw);
+ if (rw->repeater.stop_callbacks)
+ XtCallCallbackList(gw, rw->repeater.stop_callbacks, NULL);
+}
diff --git a/libXaw/src/Scrollbar.c b/libXaw/src/Scrollbar.c
index e6dea9c41..777043063 100644
--- a/libXaw/src/Scrollbar.c
+++ b/libXaw/src/Scrollbar.c
@@ -1,885 +1,882 @@
-/* $Xorg: Scrollbar.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Scrollbar.c,v 1.12 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Drawing.h>
-#include <X11/Xaw/ScrollbarP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#define NoButton -1
-#define PICKLENGTH(widget, x, y) \
-(((widget)->scrollbar.orientation == XtorientHorizontal) ? (x) : (y))
-
-/*
- * Class Methods
- */
-static void XawScrollbarClassInitialize(void);
-static void XawScrollbarDestroy(Widget);
-static void XawScrollbarInitialize(Widget, Widget, ArgList, Cardinal*_args);
-static void XawScrollbarRealize(Widget, Mask*, XSetWindowAttributes*);
-static void XawScrollbarRedisplay(Widget, XEvent*, Region);
-static void XawScrollbarResize(Widget);
-static Boolean XawScrollbarSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static Boolean CompareEvents(XEvent*, XEvent*);
-static void CreateGC(Widget);
-static float FloatInRange(float, float, float);
-static float FractionLoc(ScrollbarWidget, int, int);
-static void ExtractPosition(XEvent*, Position*, Position*);
-static int InRange(int, int, int);
-static void FillArea(ScrollbarWidget, int, int, int);
-static Bool LookAhead(Widget, XEvent*);
-static void PaintThumb(ScrollbarWidget);
-static Bool PeekNotifyEvent(Display*, XEvent*, char*);
-static void SetDimensions(ScrollbarWidget);
-
-/*
- * Actions
- */
-static void EndScroll(Widget, XEvent*, String*, Cardinal*);
-static void MoveThumb(Widget, XEvent*, String*, Cardinal*);
-static void NotifyScroll(Widget, XEvent*, String*, Cardinal*);
-static void NotifyThumb(Widget, XEvent*, String*, Cardinal*);
-static void StartScroll(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-static char defaultTranslations[] =
-"<Btn1Down>:" "StartScroll(Forward)\n"
-"<Btn2Down>:" "StartScroll(Continuous) MoveThumb() NotifyThumb()\n"
-"<Btn3Down>:" "StartScroll(Backward)\n"
-"<Btn2Motion>:" "MoveThumb() NotifyThumb()\n"
-"<BtnUp>:" "NotifyScroll(Proportional) EndScroll()\n";
-
-static float floatZero = 0.0;
-
-#define Offset(field) XtOffsetOf(ScrollbarRec, field)
-
-static XtResource resources[] = {
- {
- XtNlength,
- XtCLength,
- XtRDimension,
- sizeof(Dimension),
- Offset(scrollbar.length),
- XtRImmediate,
- (XtPointer)1
- },
- {
- XtNthickness,
- XtCThickness,
- XtRDimension,
- sizeof(Dimension),
- Offset(scrollbar.thickness),
- XtRImmediate,
- (XtPointer)14
- },
- {
- XtNorientation,
- XtCOrientation,
- XtROrientation,
- sizeof(XtOrientation),
- Offset(scrollbar.orientation),
- XtRImmediate,
- (XtPointer)XtorientVertical
- },
- {
- XtNscrollProc,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- Offset(scrollbar.scrollProc),
- XtRCallback,
- NULL
- },
- {
- XtNthumbProc,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- Offset(scrollbar.thumbProc),
- XtRCallback,
- NULL
- },
- {
- XtNjumpProc,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- Offset(scrollbar.jumpProc),
- XtRCallback,
- NULL
- },
- {
- XtNthumb,
- XtCThumb,
- XtRBitmap,
- sizeof(Pixmap),
- Offset(scrollbar.thumb),
- XtRImmediate,
- (XtPointer)XtUnspecifiedPixmap
- },
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- Offset(scrollbar.foreground),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNshown,
- XtCShown,
- XtRFloat,
- sizeof(float),
- Offset(scrollbar.shown),
- XtRFloat,
- (XtPointer)&floatZero
- },
- {
- XtNtopOfThumb,
- XtCTopOfThumb,
- XtRFloat,
- sizeof(float),
- Offset(scrollbar.top),
- XtRFloat,
- (XtPointer)&floatZero
- },
- {
- XtNscrollVCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- Offset(scrollbar.verCursor),
- XtRString,
- "sb_v_double_arrow"
- },
- {
- XtNscrollHCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- Offset(scrollbar.horCursor),
- XtRString,
- "sb_h_double_arrow"
- },
- {
- XtNscrollUCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- Offset(scrollbar.upCursor),
- XtRString,
- "sb_up_arrow"
- },
- {
- XtNscrollDCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- Offset(scrollbar.downCursor),
- XtRString,
- "sb_down_arrow"
- },
- {
- XtNscrollLCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- Offset(scrollbar.leftCursor),
- XtRString,
- "sb_left_arrow"
- },
- {
- XtNscrollRCursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- Offset(scrollbar.rightCursor),
- XtRString,
- "sb_right_arrow"
- },
- {
- XtNminimumThumb,
- XtCMinimumThumb,
- XtRDimension,
- sizeof(Dimension),
- Offset(scrollbar.min_thumb),
- XtRImmediate,
- (XtPointer)7
- },
-};
-#undef Offset
-
-static XtActionsRec actions[] = {
- {"StartScroll", StartScroll},
- {"MoveThumb", MoveThumb},
- {"NotifyThumb", NotifyThumb},
- {"NotifyScroll", NotifyScroll},
- {"EndScroll", EndScroll},
-};
-
-#define Superclass (&simpleClassRec)
-ScrollbarClassRec scrollbarClassRec = {
- /* core */
- {
- (WidgetClass)&simpleClassRec, /* superclass */
- "Scrollbar", /* class_name */
- sizeof(ScrollbarRec), /* widget_size */
- XawScrollbarClassInitialize, /* class_initialize */
- NULL, /* class_part_init */
- False, /* class_inited */
- XawScrollbarInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawScrollbarRealize, /* realize */
- actions, /* actions */
- XtNumber(actions), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawScrollbarDestroy, /* destroy */
- XawScrollbarResize, /* resize */
- XawScrollbarRedisplay, /* expose */
- XawScrollbarSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* scrollbar */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass scrollbarWidgetClass = (WidgetClass)&scrollbarClassRec;
-
-/*
- * Implementation
- */
-static void
-XawScrollbarClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation,
- NULL, 0);
- XtSetTypeConverter(XtROrientation, XtRString, XmuCvtOrientationToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-/*
- * Make sure the first number is within the range specified by the other
- * two numbers.
- */
-static int
-InRange(int num, int small, int big)
-{
- return ((num < small) ? small : ((num > big) ? big : num));
-}
-
-/*
- * Same as above, but for floating numbers
- */
-static float
-FloatInRange(float num, float small, float big)
-{
- return ((num < small) ? small : ((num > big) ? big : num));
-}
-
-/* Fill the area specified by top and bottom with the given pattern */
-static float
-FractionLoc(ScrollbarWidget w, int x, int y)
-{
- float result;
-
- result = PICKLENGTH(w, x / (float)XtWidth(w), y / (float)XtHeight(w));
-
- return (FloatInRange(result, 0.0, 1.0));
-}
-
-static void
-FillArea(ScrollbarWidget w, int top, int bottom, int thumb)
-{
- Dimension length;
-
- top = XawMax(1, top);
- if (w->scrollbar.orientation == XtorientHorizontal)
- bottom = XawMin(bottom, XtWidth(w) - 1);
- else
- bottom = XawMin(bottom, XtHeight(w) - 1);
-
- if (bottom <= top)
- return;
-
- length = bottom - top;
-
- switch(thumb) {
- /* Fill the new Thumb location */
- case 1:
- if (w->scrollbar.orientation == XtorientHorizontal)
- XFillRectangle(XtDisplay(w), XtWindow(w), w->scrollbar.gc,
- top, 1, length, XtHeight(w) - 2);
- else
- XFillRectangle(XtDisplay(w), XtWindow(w), w->scrollbar.gc,
- 1, top, XtWidth(w) - 2, length);
- break;
- /* Clear the old Thumb location */
- case 0:
- if (w->scrollbar.orientation == XtorientHorizontal)
- XClearArea(XtDisplay(w), XtWindow(w),
- top, 1, length, XtHeight(w) - 2, False);
- else
- XClearArea(XtDisplay(w), XtWindow(w),
- 1, top, XtWidth(w) - 2, length, False);
- break;
- }
-}
-
-
-/* Paint the thumb in the area specified by w->top and
- w->shown. The old area is erased. The painting and
- erasing is done cleverly so that no flickering will occur. */
-static void
-PaintThumb(ScrollbarWidget w)
-{
- Position oldtop, oldbot, newtop, newbot;
-
- oldtop = w->scrollbar.topLoc;
- oldbot = oldtop + w->scrollbar.shownLength;
- newtop = w->scrollbar.length * w->scrollbar.top;
- newbot = newtop + (int)(w->scrollbar.length * w->scrollbar.shown);
- if (newbot < newtop + (int)w->scrollbar.min_thumb)
- newbot = newtop + w->scrollbar.min_thumb;
- w->scrollbar.topLoc = newtop;
- w->scrollbar.shownLength = newbot - newtop;
-
- if (XtIsRealized((Widget)w)) {
- if (newtop < oldtop)
- FillArea(w, newtop, XawMin(newbot, oldtop), 1);
- if (newtop > oldtop)
- FillArea(w, oldtop, XawMin(newtop, oldbot), 0);
- if (newbot < oldbot)
- FillArea(w, XawMax(newbot, oldtop), oldbot, 0);
- if (newbot > oldbot)
- FillArea(w, XawMax(newtop, oldbot), newbot, 1);
- }
-}
-
-static void
-SetDimensions(ScrollbarWidget w)
-{
- if (w->scrollbar.orientation == XtorientVertical) {
- w->scrollbar.length = XtHeight(w);
- w->scrollbar.thickness = XtWidth(w);
- }
- else {
- w->scrollbar.length = XtWidth(w);
- w->scrollbar.thickness = XtHeight(w);
- }
-}
-
-static void
-XawScrollbarDestroy(Widget w)
-{
- ScrollbarWidget sbw = (ScrollbarWidget)w;
-
- XtReleaseGC(w, sbw->scrollbar.gc);
-}
-
-static void
-CreateGC(Widget w)
-{
- ScrollbarWidget sbw = (ScrollbarWidget)w;
- XGCValues gcValues;
- XtGCMask mask;
- unsigned int depth = 1;
-
- if (sbw->scrollbar.thumb == XtUnspecifiedPixmap)
- sbw->scrollbar.thumb = XmuCreateStippledPixmap(XtScreen(w),
- (Pixel)1, (Pixel)0,
- depth);
- else if (sbw->scrollbar.thumb != None) {
- Window root;
- int x, y;
- unsigned int width, height, bw;
-
- XGetGeometry(XtDisplay(w), sbw->scrollbar.thumb, &root, &x, &y,
- &width, &height, &bw, &depth);
- }
-
- gcValues.foreground = sbw->scrollbar.foreground;
- gcValues.background = sbw->core.background_pixel;
- mask = GCForeground | GCBackground;
-
- if (sbw->scrollbar.thumb != None) {
- if (depth == 1) {
- gcValues.fill_style = FillOpaqueStippled;
- gcValues.stipple = sbw->scrollbar.thumb;
- mask |= GCFillStyle | GCStipple;
- }
- else {
- gcValues.fill_style = FillTiled;
- gcValues.tile = sbw->scrollbar.thumb;
- mask |= GCFillStyle | GCTile;
- }
- }
- sbw->scrollbar.gc = XtGetGC(w, mask, &gcValues);
-}
-
-/* ARGSUSED */
-static void
-XawScrollbarInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- ScrollbarWidget w = (ScrollbarWidget)cnew;
-
- CreateGC(cnew);
-
- if (XtWidth(w) == 0)
- XtWidth(w) = w->scrollbar.orientation == XtorientVertical ?
- w->scrollbar.thickness : w->scrollbar.length;
-
- if (XtHeight(w) == 0)
- XtHeight(w) = w->scrollbar.orientation == XtorientHorizontal ?
- w->scrollbar.thickness : w->scrollbar.length;
-
- SetDimensions(w);
- w->scrollbar.direction = 0;
- w->scrollbar.topLoc = 0;
- w->scrollbar.shownLength = w->scrollbar.min_thumb;
-}
-
-static void
-XawScrollbarRealize(Widget gw, Mask *valueMask,
- XSetWindowAttributes *attributes)
-{
- ScrollbarWidget w = (ScrollbarWidget)gw;
-
- w->scrollbar.inactiveCursor = w->scrollbar.orientation == XtorientVertical ?
- w->scrollbar.verCursor : w->scrollbar.horCursor;
-
- XtVaSetValues(gw, XtNcursor, w->scrollbar.inactiveCursor, NULL);
-
- /*
- * The Simple widget actually stuffs the value in the valuemask
- */
- (*scrollbarWidgetClass->core_class.superclass->core_class.realize)
- (gw, valueMask, attributes);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawScrollbarSetValues(Widget current, Widget request, Widget desired,
- ArgList args, Cardinal *num_args)
-{
- ScrollbarWidget w = (ScrollbarWidget)current;
- ScrollbarWidget dw = (ScrollbarWidget)desired;
- Boolean redraw = False;
-
- /*
- * If these values are outside the acceptable range ignore them...
- */
- if (dw->scrollbar.top < 0.0 || dw->scrollbar.top > 1.0)
- dw->scrollbar.top = w->scrollbar.top;
-
- if (dw->scrollbar.shown < 0.0 || dw->scrollbar.shown > 1.0)
- dw->scrollbar.shown = w->scrollbar.shown;
-
- if (XtIsRealized (desired)) {
- if (w->scrollbar.foreground != dw->scrollbar.foreground ||
- w->core.background_pixel != dw->core.background_pixel ||
- w->scrollbar.thumb != dw->scrollbar.thumb) {
- XtReleaseGC((Widget)dw, w->scrollbar.gc);
- CreateGC((Widget)dw);
- redraw = True;
- }
- if (w->scrollbar.top != dw->scrollbar.top ||
- w->scrollbar.shown != dw->scrollbar.shown)
- redraw = True;
- }
-
- return (redraw);
-}
-
-static void
-XawScrollbarResize(Widget gw)
-{
- /* ForgetGravity has taken care of background, but thumb may
- * have to move as a result of the new size. */
- SetDimensions((ScrollbarWidget)gw);
- XawScrollbarRedisplay(gw, NULL, NULL);
-}
-
-/*ARGSUSED*/
-static void
-XawScrollbarRedisplay(Widget gw, XEvent *event, Region region)
-{
- ScrollbarWidget w = (ScrollbarWidget)gw;
- int x, y;
- unsigned int width, height;
-
- if (Superclass->core_class.expose)
- (*Superclass->core_class.expose)(gw, event, region);
-
- if (w->scrollbar.orientation == XtorientHorizontal) {
- x = w->scrollbar.topLoc;
- y = 1;
- width = w->scrollbar.shownLength;
- height = XtHeight(w) - 2;
- }
- else {
- x = 1;
- y = w->scrollbar.topLoc;
- width = XtWidth(w) - 2;
- height = w->scrollbar.shownLength;
- }
-
- if (region == NULL ||
- XRectInRegion(region, x, y, width, height) != RectangleOut) {
- /* Forces entire thumb to be painted */
- w->scrollbar.topLoc = -(w->scrollbar.length + 1);
- PaintThumb(w);
- }
-}
-
-/*ARGSUSED*/
-static void
-StartScroll(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- ScrollbarWidget w = (ScrollbarWidget)gw;
- Cursor cursor;
- char direction;
-
- if (w->scrollbar.direction != 0) /* if we're already scrolling */
- return;
- if (*num_params > 0)
- direction = *params[0];
- else
- direction = 'C';
-
- w->scrollbar.direction = direction;
-
- switch(direction) {
- case 'B':
- case 'b':
- cursor = w->scrollbar.orientation == XtorientVertical ?
- w->scrollbar.downCursor : w->scrollbar.rightCursor;
- break;
- case 'F':
- case 'f':
- cursor = w->scrollbar.orientation == XtorientVertical ?
- w->scrollbar.upCursor : w->scrollbar.leftCursor;
- break;
- case 'C':
- case 'c':
- cursor = w->scrollbar.orientation == XtorientVertical ?
- w->scrollbar.rightCursor : w->scrollbar.upCursor;
- break;
- default:
- return; /* invalid invocation */
- }
-
- XtVaSetValues(gw, XtNcursor, cursor, NULL);
-
- XFlush(XtDisplay(w));
-}
-
-static Boolean
-CompareEvents(XEvent *oldEvent, XEvent *newEvent)
-{
-#define Check(field) if (newEvent->field != oldEvent->field) return (False)
-
- Check(xany.display);
- Check(xany.type);
- Check(xany.window);
-
- switch(newEvent->type) {
- case MotionNotify:
- Check(xmotion.state);
- break;
- case ButtonPress:
- case ButtonRelease:
- Check(xbutton.state);
- Check(xbutton.button);
- break;
- case KeyPress:
- case KeyRelease:
- Check(xkey.state);
- Check(xkey.keycode);
- break;
- case EnterNotify:
- case LeaveNotify:
- Check(xcrossing.mode);
- Check(xcrossing.detail);
- Check(xcrossing.state);
- break;
- }
-#undef Check
-
- return (True);
-}
-
-struct EventData {
- XEvent *oldEvent;
- int count;
-};
-
-static Bool
-PeekNotifyEvent(Display *dpy, XEvent *event, char *args)
-{
- struct EventData *eventData = (struct EventData*)args;
-
- return (++eventData->count == QLength(dpy) /* since PeekIf blocks */
- || CompareEvents(event, eventData->oldEvent));
-}
-
-static Bool
-LookAhead(Widget w, XEvent *event)
-{
- XEvent newEvent;
- struct EventData eventData;
-
- if (QLength(XtDisplay(w)) == 0)
- return (False);
-
- eventData.count = 0;
- eventData.oldEvent = event;
-
- XPeekIfEvent(XtDisplay(w), &newEvent, PeekNotifyEvent, (char*)&eventData);
-
- if (CompareEvents(event, &newEvent))
- return (True);
-
- return (False);
-}
-
-static void
-ExtractPosition(XEvent *event, Position *x, Position *y)
-{
- switch(event->type) {
- case MotionNotify:
- *x = event->xmotion.x;
- *y = event->xmotion.y;
- break;
- case ButtonPress:
- case ButtonRelease:
- *x = event->xbutton.x;
- *y = event->xbutton.y;
- break;
- case KeyPress:
- case KeyRelease:
- *x = event->xkey.x;
- *y = event->xkey.y;
- break;
- case EnterNotify:
- case LeaveNotify:
- *x = event->xcrossing.x;
- *y = event->xcrossing.y;
- break;
- default:
- *x = 0;
- *y = 0;
- break;
- }
-}
-
-static void
-NotifyScroll(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- ScrollbarWidget w = (ScrollbarWidget)gw;
- long call_data = 0;
- char style;
- Position x, y;
-
- if (w->scrollbar.direction == 0) /* if no StartScroll */
- return;
-
- if (LookAhead(gw, event))
- return;
-
- if (*num_params > 0)
- style = *params[0];
- else
- style = 'P';
-
- switch(style) {
- case 'P': /* Proportional */
- case 'p':
- ExtractPosition(event, &x, &y);
- call_data = InRange(PICKLENGTH(w, x, y), 0, (int)w->scrollbar.length);
- break;
- case 'F': /* FullLength */
- case 'f':
- call_data = w->scrollbar.length;
- break;
- }
-
- switch(w->scrollbar.direction) {
- case 'B':
- case 'b':
- call_data = -call_data;
- /*FALLTHROUGH*/
- case 'F':
- case 'f':
- XtCallCallbacks(gw, XtNscrollProc, (XtPointer)call_data);
- break;
- case 'C':
- case 'c': /* NotifyThumb has already called the thumbProc(s) */
- break;
- }
-}
-
-/*ARGSUSED*/
-static void
-EndScroll(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- ScrollbarWidget w = (ScrollbarWidget)gw;
-
- XtVaSetValues(gw, XtNcursor, w->scrollbar.inactiveCursor, NULL);
- XFlush(XtDisplay(w)); /* make sure it get propogated */
-
- w->scrollbar.direction = 0;
-}
-
-/*ARGSUSED*/
-static void
-MoveThumb(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- ScrollbarWidget w = (ScrollbarWidget)gw;
- Position x, y;
-
- if (w->scrollbar.direction == 0) /* if no StartScroll */
- return;
-
- if (LookAhead(gw, event))
- return;
-
- if (!event->xmotion.same_screen)
- return;
-
- ExtractPosition(event, &x, &y);
- w->scrollbar.top = FractionLoc(w, x, y);
-}
-
-/*ARGSUSED*/
-static void
-NotifyThumb(Widget gw, XEvent *event, String *params, Cardinal *num_params)
-{
- ScrollbarWidget w = (ScrollbarWidget)gw;
- union {
- XtPointer xtp;
- float xtf;
- } xtpf;
-
- if (w->scrollbar.direction == 0) /* if no StartScroll */
- return;
-
- if (LookAhead(gw, event))
- return;
-
- /* thumbProc is not pretty, but is necessary for backwards
- compatibility on those architectures for which it work{s,ed};
- the intent is to pass a (truncated) float by value. */
- xtpf.xtf = w->scrollbar.top;
- XtCallCallbacks(gw, XtNthumbProc, xtpf.xtp);
- XtCallCallbacks(gw, XtNjumpProc, (XtPointer)&w->scrollbar.top);
-
- PaintThumb(w);
-}
-
-/*
- * Public routines
- */
-/* Set the scroll bar to the given location. */
-void
-XawScrollbarSetThumb(Widget gw,
-#if NeedWidePrototypes
- double top, double shown
-#else
- float top, float shown
-#endif
- )
-{
- ScrollbarWidget w = (ScrollbarWidget)gw;
-
- if (w->scrollbar.direction == 'c') /* if still thumbing */
- return;
-
- w->scrollbar.top = top > 1.0 ? 1.0 : top >= 0.0 ? top : w->scrollbar.top;
-
- w->scrollbar.shown = shown > 1.0 ? 1.0 : shown >= 0.0 ?
- shown : w->scrollbar.shown;
- PaintThumb(w);
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Drawing.h>
+#include <X11/Xaw/ScrollbarP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#define NoButton -1
+#define PICKLENGTH(widget, x, y) \
+(((widget)->scrollbar.orientation == XtorientHorizontal) ? (x) : (y))
+
+/*
+ * Class Methods
+ */
+static void XawScrollbarClassInitialize(void);
+static void XawScrollbarDestroy(Widget);
+static void XawScrollbarInitialize(Widget, Widget, ArgList, Cardinal*_args);
+static void XawScrollbarRealize(Widget, Mask*, XSetWindowAttributes*);
+static void XawScrollbarRedisplay(Widget, XEvent*, Region);
+static void XawScrollbarResize(Widget);
+static Boolean XawScrollbarSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static Boolean CompareEvents(XEvent*, XEvent*);
+static void CreateGC(Widget);
+static float FloatInRange(float, float, float);
+static float FractionLoc(ScrollbarWidget, int, int);
+static void ExtractPosition(XEvent*, Position*, Position*);
+static int InRange(int, int, int);
+static void FillArea(ScrollbarWidget, int, int, int);
+static Bool LookAhead(Widget, XEvent*);
+static void PaintThumb(ScrollbarWidget);
+static Bool PeekNotifyEvent(Display*, XEvent*, char*);
+static void SetDimensions(ScrollbarWidget);
+
+/*
+ * Actions
+ */
+static void EndScroll(Widget, XEvent*, String*, Cardinal*);
+static void MoveThumb(Widget, XEvent*, String*, Cardinal*);
+static void NotifyScroll(Widget, XEvent*, String*, Cardinal*);
+static void NotifyThumb(Widget, XEvent*, String*, Cardinal*);
+static void StartScroll(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+static char defaultTranslations[] =
+"<Btn1Down>:" "StartScroll(Forward)\n"
+"<Btn2Down>:" "StartScroll(Continuous) MoveThumb() NotifyThumb()\n"
+"<Btn3Down>:" "StartScroll(Backward)\n"
+"<Btn2Motion>:" "MoveThumb() NotifyThumb()\n"
+"<BtnUp>:" "NotifyScroll(Proportional) EndScroll()\n";
+
+static float floatZero = 0.0;
+
+#define Offset(field) XtOffsetOf(ScrollbarRec, field)
+
+static XtResource resources[] = {
+ {
+ XtNlength,
+ XtCLength,
+ XtRDimension,
+ sizeof(Dimension),
+ Offset(scrollbar.length),
+ XtRImmediate,
+ (XtPointer)1
+ },
+ {
+ XtNthickness,
+ XtCThickness,
+ XtRDimension,
+ sizeof(Dimension),
+ Offset(scrollbar.thickness),
+ XtRImmediate,
+ (XtPointer)14
+ },
+ {
+ XtNorientation,
+ XtCOrientation,
+ XtROrientation,
+ sizeof(XtOrientation),
+ Offset(scrollbar.orientation),
+ XtRImmediate,
+ (XtPointer)XtorientVertical
+ },
+ {
+ XtNscrollProc,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ Offset(scrollbar.scrollProc),
+ XtRCallback,
+ NULL
+ },
+ {
+ XtNthumbProc,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ Offset(scrollbar.thumbProc),
+ XtRCallback,
+ NULL
+ },
+ {
+ XtNjumpProc,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ Offset(scrollbar.jumpProc),
+ XtRCallback,
+ NULL
+ },
+ {
+ XtNthumb,
+ XtCThumb,
+ XtRBitmap,
+ sizeof(Pixmap),
+ Offset(scrollbar.thumb),
+ XtRImmediate,
+ (XtPointer)XtUnspecifiedPixmap
+ },
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ Offset(scrollbar.foreground),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNshown,
+ XtCShown,
+ XtRFloat,
+ sizeof(float),
+ Offset(scrollbar.shown),
+ XtRFloat,
+ (XtPointer)&floatZero
+ },
+ {
+ XtNtopOfThumb,
+ XtCTopOfThumb,
+ XtRFloat,
+ sizeof(float),
+ Offset(scrollbar.top),
+ XtRFloat,
+ (XtPointer)&floatZero
+ },
+ {
+ XtNscrollVCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ Offset(scrollbar.verCursor),
+ XtRString,
+ "sb_v_double_arrow"
+ },
+ {
+ XtNscrollHCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ Offset(scrollbar.horCursor),
+ XtRString,
+ "sb_h_double_arrow"
+ },
+ {
+ XtNscrollUCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ Offset(scrollbar.upCursor),
+ XtRString,
+ "sb_up_arrow"
+ },
+ {
+ XtNscrollDCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ Offset(scrollbar.downCursor),
+ XtRString,
+ "sb_down_arrow"
+ },
+ {
+ XtNscrollLCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ Offset(scrollbar.leftCursor),
+ XtRString,
+ "sb_left_arrow"
+ },
+ {
+ XtNscrollRCursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ Offset(scrollbar.rightCursor),
+ XtRString,
+ "sb_right_arrow"
+ },
+ {
+ XtNminimumThumb,
+ XtCMinimumThumb,
+ XtRDimension,
+ sizeof(Dimension),
+ Offset(scrollbar.min_thumb),
+ XtRImmediate,
+ (XtPointer)7
+ },
+};
+#undef Offset
+
+static XtActionsRec actions[] = {
+ {"StartScroll", StartScroll},
+ {"MoveThumb", MoveThumb},
+ {"NotifyThumb", NotifyThumb},
+ {"NotifyScroll", NotifyScroll},
+ {"EndScroll", EndScroll},
+};
+
+#define Superclass (&simpleClassRec)
+ScrollbarClassRec scrollbarClassRec = {
+ /* core */
+ {
+ (WidgetClass)&simpleClassRec, /* superclass */
+ "Scrollbar", /* class_name */
+ sizeof(ScrollbarRec), /* widget_size */
+ XawScrollbarClassInitialize, /* class_initialize */
+ NULL, /* class_part_init */
+ False, /* class_inited */
+ XawScrollbarInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawScrollbarRealize, /* realize */
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawScrollbarDestroy, /* destroy */
+ XawScrollbarResize, /* resize */
+ XawScrollbarRedisplay, /* expose */
+ XawScrollbarSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ defaultTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* scrollbar */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass scrollbarWidgetClass = (WidgetClass)&scrollbarClassRec;
+
+/*
+ * Implementation
+ */
+static void
+XawScrollbarClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation,
+ NULL, 0);
+ XtSetTypeConverter(XtROrientation, XtRString, XmuCvtOrientationToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+/*
+ * Make sure the first number is within the range specified by the other
+ * two numbers.
+ */
+static int
+InRange(int num, int small, int big)
+{
+ return ((num < small) ? small : ((num > big) ? big : num));
+}
+
+/*
+ * Same as above, but for floating numbers
+ */
+static float
+FloatInRange(float num, float small, float big)
+{
+ return ((num < small) ? small : ((num > big) ? big : num));
+}
+
+/* Fill the area specified by top and bottom with the given pattern */
+static float
+FractionLoc(ScrollbarWidget w, int x, int y)
+{
+ float result;
+
+ result = PICKLENGTH(w, x / (float)XtWidth(w), y / (float)XtHeight(w));
+
+ return (FloatInRange(result, 0.0, 1.0));
+}
+
+static void
+FillArea(ScrollbarWidget w, int top, int bottom, int thumb)
+{
+ Dimension length;
+
+ top = XawMax(1, top);
+ if (w->scrollbar.orientation == XtorientHorizontal)
+ bottom = XawMin(bottom, XtWidth(w) - 1);
+ else
+ bottom = XawMin(bottom, XtHeight(w) - 1);
+
+ if (bottom <= top)
+ return;
+
+ length = bottom - top;
+
+ switch(thumb) {
+ /* Fill the new Thumb location */
+ case 1:
+ if (w->scrollbar.orientation == XtorientHorizontal)
+ XFillRectangle(XtDisplay(w), XtWindow(w), w->scrollbar.gc,
+ top, 1, length, XtHeight(w) - 2);
+ else
+ XFillRectangle(XtDisplay(w), XtWindow(w), w->scrollbar.gc,
+ 1, top, XtWidth(w) - 2, length);
+ break;
+ /* Clear the old Thumb location */
+ case 0:
+ if (w->scrollbar.orientation == XtorientHorizontal)
+ XClearArea(XtDisplay(w), XtWindow(w),
+ top, 1, length, XtHeight(w) - 2, False);
+ else
+ XClearArea(XtDisplay(w), XtWindow(w),
+ 1, top, XtWidth(w) - 2, length, False);
+ break;
+ }
+}
+
+
+/* Paint the thumb in the area specified by w->top and
+ w->shown. The old area is erased. The painting and
+ erasing is done cleverly so that no flickering will occur. */
+static void
+PaintThumb(ScrollbarWidget w)
+{
+ Position oldtop, oldbot, newtop, newbot;
+
+ oldtop = w->scrollbar.topLoc;
+ oldbot = oldtop + w->scrollbar.shownLength;
+ newtop = w->scrollbar.length * w->scrollbar.top;
+ newbot = newtop + (int)(w->scrollbar.length * w->scrollbar.shown);
+ if (newbot < newtop + (int)w->scrollbar.min_thumb)
+ newbot = newtop + w->scrollbar.min_thumb;
+ w->scrollbar.topLoc = newtop;
+ w->scrollbar.shownLength = newbot - newtop;
+
+ if (XtIsRealized((Widget)w)) {
+ if (newtop < oldtop)
+ FillArea(w, newtop, XawMin(newbot, oldtop), 1);
+ if (newtop > oldtop)
+ FillArea(w, oldtop, XawMin(newtop, oldbot), 0);
+ if (newbot < oldbot)
+ FillArea(w, XawMax(newbot, oldtop), oldbot, 0);
+ if (newbot > oldbot)
+ FillArea(w, XawMax(newtop, oldbot), newbot, 1);
+ }
+}
+
+static void
+SetDimensions(ScrollbarWidget w)
+{
+ if (w->scrollbar.orientation == XtorientVertical) {
+ w->scrollbar.length = XtHeight(w);
+ w->scrollbar.thickness = XtWidth(w);
+ }
+ else {
+ w->scrollbar.length = XtWidth(w);
+ w->scrollbar.thickness = XtHeight(w);
+ }
+}
+
+static void
+XawScrollbarDestroy(Widget w)
+{
+ ScrollbarWidget sbw = (ScrollbarWidget)w;
+
+ XtReleaseGC(w, sbw->scrollbar.gc);
+}
+
+static void
+CreateGC(Widget w)
+{
+ ScrollbarWidget sbw = (ScrollbarWidget)w;
+ XGCValues gcValues;
+ XtGCMask mask;
+ unsigned int depth = 1;
+
+ if (sbw->scrollbar.thumb == XtUnspecifiedPixmap)
+ sbw->scrollbar.thumb = XmuCreateStippledPixmap(XtScreen(w),
+ (Pixel)1, (Pixel)0,
+ depth);
+ else if (sbw->scrollbar.thumb != None) {
+ Window root;
+ int x, y;
+ unsigned int width, height, bw;
+
+ XGetGeometry(XtDisplay(w), sbw->scrollbar.thumb, &root, &x, &y,
+ &width, &height, &bw, &depth);
+ }
+
+ gcValues.foreground = sbw->scrollbar.foreground;
+ gcValues.background = sbw->core.background_pixel;
+ mask = GCForeground | GCBackground;
+
+ if (sbw->scrollbar.thumb != None) {
+ if (depth == 1) {
+ gcValues.fill_style = FillOpaqueStippled;
+ gcValues.stipple = sbw->scrollbar.thumb;
+ mask |= GCFillStyle | GCStipple;
+ }
+ else {
+ gcValues.fill_style = FillTiled;
+ gcValues.tile = sbw->scrollbar.thumb;
+ mask |= GCFillStyle | GCTile;
+ }
+ }
+ sbw->scrollbar.gc = XtGetGC(w, mask, &gcValues);
+}
+
+/* ARGSUSED */
+static void
+XawScrollbarInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ ScrollbarWidget w = (ScrollbarWidget)cnew;
+
+ CreateGC(cnew);
+
+ if (XtWidth(w) == 0)
+ XtWidth(w) = w->scrollbar.orientation == XtorientVertical ?
+ w->scrollbar.thickness : w->scrollbar.length;
+
+ if (XtHeight(w) == 0)
+ XtHeight(w) = w->scrollbar.orientation == XtorientHorizontal ?
+ w->scrollbar.thickness : w->scrollbar.length;
+
+ SetDimensions(w);
+ w->scrollbar.direction = 0;
+ w->scrollbar.topLoc = 0;
+ w->scrollbar.shownLength = w->scrollbar.min_thumb;
+}
+
+static void
+XawScrollbarRealize(Widget gw, Mask *valueMask,
+ XSetWindowAttributes *attributes)
+{
+ ScrollbarWidget w = (ScrollbarWidget)gw;
+
+ w->scrollbar.inactiveCursor = w->scrollbar.orientation == XtorientVertical ?
+ w->scrollbar.verCursor : w->scrollbar.horCursor;
+
+ XtVaSetValues(gw, XtNcursor, w->scrollbar.inactiveCursor, NULL);
+
+ /*
+ * The Simple widget actually stuffs the value in the valuemask
+ */
+ (*scrollbarWidgetClass->core_class.superclass->core_class.realize)
+ (gw, valueMask, attributes);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawScrollbarSetValues(Widget current, Widget request, Widget desired,
+ ArgList args, Cardinal *num_args)
+{
+ ScrollbarWidget w = (ScrollbarWidget)current;
+ ScrollbarWidget dw = (ScrollbarWidget)desired;
+ Boolean redraw = False;
+
+ /*
+ * If these values are outside the acceptable range ignore them...
+ */
+ if (dw->scrollbar.top < 0.0 || dw->scrollbar.top > 1.0)
+ dw->scrollbar.top = w->scrollbar.top;
+
+ if (dw->scrollbar.shown < 0.0 || dw->scrollbar.shown > 1.0)
+ dw->scrollbar.shown = w->scrollbar.shown;
+
+ if (XtIsRealized (desired)) {
+ if (w->scrollbar.foreground != dw->scrollbar.foreground ||
+ w->core.background_pixel != dw->core.background_pixel ||
+ w->scrollbar.thumb != dw->scrollbar.thumb) {
+ XtReleaseGC((Widget)dw, w->scrollbar.gc);
+ CreateGC((Widget)dw);
+ redraw = True;
+ }
+ if (w->scrollbar.top != dw->scrollbar.top ||
+ w->scrollbar.shown != dw->scrollbar.shown)
+ redraw = True;
+ }
+
+ return (redraw);
+}
+
+static void
+XawScrollbarResize(Widget gw)
+{
+ /* ForgetGravity has taken care of background, but thumb may
+ * have to move as a result of the new size. */
+ SetDimensions((ScrollbarWidget)gw);
+ XawScrollbarRedisplay(gw, NULL, NULL);
+}
+
+/*ARGSUSED*/
+static void
+XawScrollbarRedisplay(Widget gw, XEvent *event, Region region)
+{
+ ScrollbarWidget w = (ScrollbarWidget)gw;
+ int x, y;
+ unsigned int width, height;
+
+ if (Superclass->core_class.expose)
+ (*Superclass->core_class.expose)(gw, event, region);
+
+ if (w->scrollbar.orientation == XtorientHorizontal) {
+ x = w->scrollbar.topLoc;
+ y = 1;
+ width = w->scrollbar.shownLength;
+ height = XtHeight(w) - 2;
+ }
+ else {
+ x = 1;
+ y = w->scrollbar.topLoc;
+ width = XtWidth(w) - 2;
+ height = w->scrollbar.shownLength;
+ }
+
+ if (region == NULL ||
+ XRectInRegion(region, x, y, width, height) != RectangleOut) {
+ /* Forces entire thumb to be painted */
+ w->scrollbar.topLoc = -(w->scrollbar.length + 1);
+ PaintThumb(w);
+ }
+}
+
+/*ARGSUSED*/
+static void
+StartScroll(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ ScrollbarWidget w = (ScrollbarWidget)gw;
+ Cursor cursor;
+ char direction;
+
+ if (w->scrollbar.direction != 0) /* if we're already scrolling */
+ return;
+ if (*num_params > 0)
+ direction = *params[0];
+ else
+ direction = 'C';
+
+ w->scrollbar.direction = direction;
+
+ switch(direction) {
+ case 'B':
+ case 'b':
+ cursor = w->scrollbar.orientation == XtorientVertical ?
+ w->scrollbar.downCursor : w->scrollbar.rightCursor;
+ break;
+ case 'F':
+ case 'f':
+ cursor = w->scrollbar.orientation == XtorientVertical ?
+ w->scrollbar.upCursor : w->scrollbar.leftCursor;
+ break;
+ case 'C':
+ case 'c':
+ cursor = w->scrollbar.orientation == XtorientVertical ?
+ w->scrollbar.rightCursor : w->scrollbar.upCursor;
+ break;
+ default:
+ return; /* invalid invocation */
+ }
+
+ XtVaSetValues(gw, XtNcursor, cursor, NULL);
+
+ XFlush(XtDisplay(w));
+}
+
+static Boolean
+CompareEvents(XEvent *oldEvent, XEvent *newEvent)
+{
+#define Check(field) if (newEvent->field != oldEvent->field) return (False)
+
+ Check(xany.display);
+ Check(xany.type);
+ Check(xany.window);
+
+ switch(newEvent->type) {
+ case MotionNotify:
+ Check(xmotion.state);
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ Check(xbutton.state);
+ Check(xbutton.button);
+ break;
+ case KeyPress:
+ case KeyRelease:
+ Check(xkey.state);
+ Check(xkey.keycode);
+ break;
+ case EnterNotify:
+ case LeaveNotify:
+ Check(xcrossing.mode);
+ Check(xcrossing.detail);
+ Check(xcrossing.state);
+ break;
+ }
+#undef Check
+
+ return (True);
+}
+
+struct EventData {
+ XEvent *oldEvent;
+ int count;
+};
+
+static Bool
+PeekNotifyEvent(Display *dpy, XEvent *event, char *args)
+{
+ struct EventData *eventData = (struct EventData*)args;
+
+ return (++eventData->count == QLength(dpy) /* since PeekIf blocks */
+ || CompareEvents(event, eventData->oldEvent));
+}
+
+static Bool
+LookAhead(Widget w, XEvent *event)
+{
+ XEvent newEvent;
+ struct EventData eventData;
+
+ if (QLength(XtDisplay(w)) == 0)
+ return (False);
+
+ eventData.count = 0;
+ eventData.oldEvent = event;
+
+ XPeekIfEvent(XtDisplay(w), &newEvent, PeekNotifyEvent, (char*)&eventData);
+
+ if (CompareEvents(event, &newEvent))
+ return (True);
+
+ return (False);
+}
+
+static void
+ExtractPosition(XEvent *event, Position *x, Position *y)
+{
+ switch(event->type) {
+ case MotionNotify:
+ *x = event->xmotion.x;
+ *y = event->xmotion.y;
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ *x = event->xbutton.x;
+ *y = event->xbutton.y;
+ break;
+ case KeyPress:
+ case KeyRelease:
+ *x = event->xkey.x;
+ *y = event->xkey.y;
+ break;
+ case EnterNotify:
+ case LeaveNotify:
+ *x = event->xcrossing.x;
+ *y = event->xcrossing.y;
+ break;
+ default:
+ *x = 0;
+ *y = 0;
+ break;
+ }
+}
+
+static void
+NotifyScroll(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ ScrollbarWidget w = (ScrollbarWidget)gw;
+ long call_data = 0;
+ char style;
+ Position x, y;
+
+ if (w->scrollbar.direction == 0) /* if no StartScroll */
+ return;
+
+ if (LookAhead(gw, event))
+ return;
+
+ if (*num_params > 0)
+ style = *params[0];
+ else
+ style = 'P';
+
+ switch(style) {
+ case 'P': /* Proportional */
+ case 'p':
+ ExtractPosition(event, &x, &y);
+ call_data = InRange(PICKLENGTH(w, x, y), 0, (int)w->scrollbar.length);
+ break;
+ case 'F': /* FullLength */
+ case 'f':
+ call_data = w->scrollbar.length;
+ break;
+ }
+
+ switch(w->scrollbar.direction) {
+ case 'B':
+ case 'b':
+ call_data = -call_data;
+ /*FALLTHROUGH*/
+ case 'F':
+ case 'f':
+ XtCallCallbacks(gw, XtNscrollProc, (XtPointer)call_data);
+ break;
+ case 'C':
+ case 'c': /* NotifyThumb has already called the thumbProc(s) */
+ break;
+ }
+}
+
+/*ARGSUSED*/
+static void
+EndScroll(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ ScrollbarWidget w = (ScrollbarWidget)gw;
+
+ XtVaSetValues(gw, XtNcursor, w->scrollbar.inactiveCursor, NULL);
+ XFlush(XtDisplay(w)); /* make sure it get propogated */
+
+ w->scrollbar.direction = 0;
+}
+
+/*ARGSUSED*/
+static void
+MoveThumb(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ ScrollbarWidget w = (ScrollbarWidget)gw;
+ Position x, y;
+
+ if (w->scrollbar.direction == 0) /* if no StartScroll */
+ return;
+
+ if (LookAhead(gw, event))
+ return;
+
+ if (!event->xmotion.same_screen)
+ return;
+
+ ExtractPosition(event, &x, &y);
+ w->scrollbar.top = FractionLoc(w, x, y);
+}
+
+/*ARGSUSED*/
+static void
+NotifyThumb(Widget gw, XEvent *event, String *params, Cardinal *num_params)
+{
+ ScrollbarWidget w = (ScrollbarWidget)gw;
+ union {
+ XtPointer xtp;
+ float xtf;
+ } xtpf;
+
+ if (w->scrollbar.direction == 0) /* if no StartScroll */
+ return;
+
+ if (LookAhead(gw, event))
+ return;
+
+ /* thumbProc is not pretty, but is necessary for backwards
+ compatibility on those architectures for which it work{s,ed};
+ the intent is to pass a (truncated) float by value. */
+ xtpf.xtf = w->scrollbar.top;
+ XtCallCallbacks(gw, XtNthumbProc, xtpf.xtp);
+ XtCallCallbacks(gw, XtNjumpProc, (XtPointer)&w->scrollbar.top);
+
+ PaintThumb(w);
+}
+
+/*
+ * Public routines
+ */
+/* Set the scroll bar to the given location. */
+void
+XawScrollbarSetThumb(Widget gw,
+#if NeedWidePrototypes
+ double top, double shown
+#else
+ float top, float shown
+#endif
+ )
+{
+ ScrollbarWidget w = (ScrollbarWidget)gw;
+
+ if (w->scrollbar.direction == 'c') /* if still thumbing */
+ return;
+
+ w->scrollbar.top = top > 1.0 ? 1.0 : top >= 0.0 ? top : w->scrollbar.top;
+
+ w->scrollbar.shown = shown > 1.0 ? 1.0 : shown >= 0.0 ?
+ shown : w->scrollbar.shown;
+ PaintThumb(w);
+}
diff --git a/libXaw/src/Simple.c b/libXaw/src/Simple.c
index 95b7a1aa1..b5d2fddd8 100644
--- a/libXaw/src/Simple.c
+++ b/libXaw/src/Simple.c
@@ -1,504 +1,500 @@
-/* $Xorg: Simple.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-
-/* $XFree86: xc/lib/Xaw/Simple.c,v 1.16 2001/09/29 04:36:02 paulo Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Drawing.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/SimpleP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-#ifndef OLDXAW
-#include <X11/Xaw/Tip.h>
-#endif
-
-/*
- * Class Methods
- */
-static Bool ChangeSensitive(Widget);
-static void XawSimpleClassInitialize(void);
-static void XawSimpleClassPartInitialize(WidgetClass);
-#ifndef OLDXAW
-static void XawSimpleInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawSimpleDestroy(Widget);
-static void XawSimpleExpose(Widget, XEvent*, Region);
-#endif
-static void XawSimpleRealize(Widget, Mask*, XSetWindowAttributes*);
-static Boolean XawSimpleSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void ConvertCursor(Widget);
-
-/*
- * Initialization
- */
-#ifndef OLDXAW
-static XtActionsRec actions[] = {
- {"set-values", XawSetValuesAction},
- {"get-values", XawGetValuesAction},
- {"declare", XawDeclareAction},
- {"call-proc", XawCallProcAction},
-};
-#endif
-
-#define offset(field) XtOffsetOf(SimpleRec, simple.field)
-static XtResource resources[] = {
- {
- XtNcursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(cursor),
- XtRImmediate,
- (XtPointer)None
- },
- {
- XtNinsensitiveBorder,
- XtCInsensitive,
- XtRPixmap,
- sizeof(Pixmap),
- offset(insensitive_border),
- XtRImmediate,
- NULL
- },
- {
- XtNpointerColor,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(pointer_fg),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNpointerColorBackground,
- XtCBackground,
- XtRPixel,
- sizeof(Pixel),
- offset(pointer_bg),
- XtRString,
- XtDefaultBackground
- },
- {
- XtNcursorName,
- XtCCursor,
- XtRString,
- sizeof(String),
- offset(cursor_name),
- XtRString,
- NULL
- },
- {
- XtNinternational,
- XtCInternational,
- XtRBoolean,
- sizeof(Boolean),
- offset(international),
- XtRImmediate,
- (XtPointer)False
- },
-#ifndef OLDXAW
- {
- XawNdisplayList,
- XawCDisplayList,
- XawRDisplayList,
- sizeof(XawDisplayList*),
- offset(display_list),
- XtRImmediate,
- NULL
- },
- {
- XtNtip,
- XtCTip,
- XtRString,
- sizeof(String),
- offset(tip),
- XtRImmediate,
- NULL
- },
-#endif
-#undef offset
-};
-
-SimpleClassRec simpleClassRec = {
- /* core */
- {
- (WidgetClass)&widgetClassRec, /* superclass */
- "Simple", /* class_name */
- sizeof(SimpleRec), /* widget_size */
- XawSimpleClassInitialize, /* class_initialize */
- XawSimpleClassPartInitialize, /* class_part_initialize */
- False, /* class_inited */
-#ifndef OLDXAW
- XawSimpleInitialize, /* initialize */
-#else
- NULL, /* initialize */
-#endif
- NULL, /* initialize_hook */
- XawSimpleRealize, /* realize */
-#ifndef OLDXAW
- actions, /* actions */
- XtNumber(actions), /* num_actions */
-#else
- NULL, /* actions */
- 0, /* num_actions */
-#endif
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
-#ifndef OLDXAW
- XawSimpleDestroy, /* destroy */
-#else
- NULL, /* destroy */
-#endif
- NULL, /* resize */
-#ifndef OLDXAW
- XawSimpleExpose, /* expose */
-#else
- NULL, /* expose */
-#endif
- XawSimpleSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- ChangeSensitive, /* change_sensitive */
- },
-};
-
-WidgetClass simpleWidgetClass = (WidgetClass)&simpleClassRec;
-
-static void
-XawSimpleClassInitialize(void)
-{
- static XtConvertArgRec convertArg[] = {
- {
- 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)
- },
- };
-
- XawInitializeWidgetSet();
- XtSetTypeConverter(XtRString, XtRColorCursor, XmuCvtStringToColorCursor,
- convertArg, XtNumber(convertArg), XtCacheByDisplay, NULL);
-}
-
-static void
-XawSimpleClassPartInitialize(WidgetClass cclass)
-{
- SimpleWidgetClass c = (SimpleWidgetClass)cclass;
- SimpleWidgetClass super = (SimpleWidgetClass)c->core_class.superclass;
-
- if (c->simple_class.change_sensitive == NULL) {
- char buf[BUFSIZ];
-
- (void)XmuSnprintf(buf, sizeof(buf),
- "%s Widget: The Simple Widget class method "
- "'change_sensitive' is undefined.\nA function "
- "must be defined or inherited.",
- c->core_class.class_name);
- XtWarning(buf);
- c->simple_class.change_sensitive = ChangeSensitive;
- }
-
- if (c->simple_class.change_sensitive == XtInheritChangeSensitive)
- c->simple_class.change_sensitive = super->simple_class.change_sensitive;
-}
-
-#ifndef OLDXAW
-/*ARGSUSED*/
-static void
-XawSimpleInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SimpleWidget simple = (SimpleWidget)cnew;
-
- if (simple->simple.tip)
- simple->simple.tip = XtNewString(simple->simple.tip);
-}
-
-static void
-XawSimpleDestroy(Widget w)
-{
- SimpleWidget simple = (SimpleWidget)w;
-
- if (simple->simple.tip)
- XtFree((XtPointer)simple->simple.tip);
-}
-#endif
-
-static void
-XawSimpleRealize(Widget w, Mask *valueMask, XSetWindowAttributes *attributes)
-{
-#ifndef OLDXAW
- XawPixmap *pixmap;
-#endif
- Pixmap border_pixmap = CopyFromParent;
-
- if (!XtIsSensitive(w))
- {
- /* change border to gray; have to remember the old one,
- * so XtDestroyWidget deletes the proper one */
- if (((SimpleWidget)w)->simple.insensitive_border == None)
- ((SimpleWidget)w)->simple.insensitive_border =
- XmuCreateStippledPixmap(XtScreen(w),
- w->core.border_pixel,
- w->core.background_pixel,
- w->core.depth);
- border_pixmap = w->core.border_pixmap;
- attributes->border_pixmap =
- w->core.border_pixmap = ((SimpleWidget)w)->simple.insensitive_border;
-
- *valueMask |= CWBorderPixmap;
- *valueMask &= ~CWBorderPixel;
- }
-
- ConvertCursor(w);
-
- if ((attributes->cursor = ((SimpleWidget)w)->simple.cursor) != None)
- *valueMask |= CWCursor;
-
- XtCreateWindow(w, InputOutput, (Visual *)CopyFromParent,
- *valueMask, attributes);
-
- if (!XtIsSensitive(w))
- w->core.border_pixmap = border_pixmap;
-
-#ifndef OLDXAW
- if (w->core.background_pixmap > XtUnspecifiedPixmap) {
- pixmap = XawPixmapFromXPixmap(w->core.background_pixmap, XtScreen(w),
- w->core.colormap, w->core.depth);
- if (pixmap && pixmap->mask)
- XawReshapeWidget(w, pixmap);
- }
-
- if (((SimpleWidget)w)->simple.tip)
- XawTipEnable(w);
-#endif
-}
-
-/*
- * Function:
- * ConvertCursor
- *
- * Parameters:
- * w - simple widget
- *
- * Description:
- * Converts a name to a new cursor.
- */
-static void
-ConvertCursor(Widget w)
-{
- SimpleWidget simple = (SimpleWidget) w;
- XrmValue from, to;
- Cursor cursor = None;
-
- if (simple->simple.cursor_name == NULL)
- return;
-
- from.addr = (XPointer)simple->simple.cursor_name;
- from.size = strlen((char *)from.addr) + 1;
-
- to.size = sizeof(Cursor);
- to.addr = (XPointer)&cursor;
-
- if (XtConvertAndStore(w, XtRString, &from, XtRColorCursor, &to))
- simple->simple.cursor = cursor;
- else
- XtAppErrorMsg(XtWidgetToApplicationContext(w),
- "convertFailed","ConvertCursor","XawError",
- "Simple: ConvertCursor failed.",
- NULL, NULL);
-}
-
-
-/*ARGSUSED*/
-static Boolean
-XawSimpleSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SimpleWidget s_old = (SimpleWidget)current;
- SimpleWidget s_new = (SimpleWidget)cnew;
- Bool new_cursor = False;
-
- /* this disables user changes after creation */
- s_new->simple.international = s_old->simple.international;
-
- if (XtIsSensitive(current) != XtIsSensitive(cnew))
- (*((SimpleWidgetClass)XtClass(cnew))->simple_class.change_sensitive)
- (cnew);
-
- if (s_old->simple.cursor != s_new->simple.cursor)
- new_cursor = True;
-
- /*
- * We are not handling the string cursor_name correctly here
- */
-
- if (s_old->simple.pointer_fg != s_new->simple.pointer_fg ||
- s_old->simple.pointer_bg != s_new->simple.pointer_bg ||
- s_old->simple.cursor_name != s_new->simple.cursor_name) {
- ConvertCursor(cnew);
- new_cursor = True;
- }
-
- if (new_cursor && XtIsRealized(cnew)) {
- if (s_new->simple.cursor != None)
- XDefineCursor(XtDisplay(cnew), XtWindow(cnew), s_new->simple.cursor);
- else
- XUndefineCursor(XtDisplay(cnew), XtWindow(cnew));
- }
-
-#ifndef OLDXAW
- if (s_old->core.background_pixmap != s_new->core.background_pixmap) {
- XawPixmap *opix, *npix;
-
- opix = XawPixmapFromXPixmap(s_old->core.background_pixmap,
- XtScreen(s_old), s_old->core.colormap,
- s_old->core.depth);
- npix = XawPixmapFromXPixmap(s_new->core.background_pixmap,
- XtScreen(s_new), s_new->core.colormap,
- s_new->core.depth);
- if ((npix && npix->mask) || (opix && opix->mask))
- XawReshapeWidget(cnew, npix);
- }
-
- if (s_old->simple.tip != s_new->simple.tip) {
- if (s_old->simple.tip)
- XtFree((XtPointer)s_old->simple.tip);
- if (s_new->simple.tip)
- s_new->simple.tip = XtNewString(s_new->simple.tip);
- }
-
- if (s_old->simple.tip && !s_new->simple.tip)
- XawTipDisable(cnew);
- else if (!s_old->simple.tip && s_new->simple.tip)
- XawTipEnable(cnew);
-
- if (s_old->simple.display_list != s_new->simple.display_list)
- return (True);
-#endif /* OLDXAW */
-
- return (False);
-}
-
-#ifndef OLDXAW
-static void
-XawSimpleExpose(Widget w, XEvent *event, Region region)
-{
- SimpleWidget xaw = (SimpleWidget)w;
-
- if (xaw->simple.display_list)
- XawRunDisplayList(w, xaw->simple.display_list, event, region);
-}
-#endif
-
-static Bool
-ChangeSensitive(Widget w)
-{
- if (XtIsRealized(w)) {
- if (XtIsSensitive(w))
- if (w->core.border_pixmap != XtUnspecifiedPixmap)
- XSetWindowBorderPixmap(XtDisplay(w), XtWindow(w),
- w->core.border_pixmap);
- else
- XSetWindowBorder(XtDisplay(w), XtWindow(w),
- w->core.border_pixel);
- else {
- if (((SimpleWidget)w)->simple.insensitive_border == None)
- ((SimpleWidget)w)->simple.insensitive_border =
- XmuCreateStippledPixmap(XtScreen(w),
- w->core.border_pixel,
- w->core.background_pixel,
- w->core.depth);
- XSetWindowBorderPixmap(XtDisplay(w), XtWindow(w),
- ((SimpleWidget)w)->simple.insensitive_border);
- }
- }
-
- return (False);
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Drawing.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/SimpleP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+#ifndef OLDXAW
+#include <X11/Xaw/Tip.h>
+#endif
+
+/*
+ * Class Methods
+ */
+static Bool ChangeSensitive(Widget);
+static void XawSimpleClassInitialize(void);
+static void XawSimpleClassPartInitialize(WidgetClass);
+#ifndef OLDXAW
+static void XawSimpleInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawSimpleDestroy(Widget);
+static void XawSimpleExpose(Widget, XEvent*, Region);
+#endif
+static void XawSimpleRealize(Widget, Mask*, XSetWindowAttributes*);
+static Boolean XawSimpleSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void ConvertCursor(Widget);
+
+/*
+ * Initialization
+ */
+#ifndef OLDXAW
+static XtActionsRec actions[] = {
+ {"set-values", XawSetValuesAction},
+ {"get-values", XawGetValuesAction},
+ {"declare", XawDeclareAction},
+ {"call-proc", XawCallProcAction},
+};
+#endif
+
+#define offset(field) XtOffsetOf(SimpleRec, simple.field)
+static XtResource resources[] = {
+ {
+ XtNcursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(cursor),
+ XtRImmediate,
+ (XtPointer)None
+ },
+ {
+ XtNinsensitiveBorder,
+ XtCInsensitive,
+ XtRPixmap,
+ sizeof(Pixmap),
+ offset(insensitive_border),
+ XtRImmediate,
+ NULL
+ },
+ {
+ XtNpointerColor,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(pointer_fg),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNpointerColorBackground,
+ XtCBackground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(pointer_bg),
+ XtRString,
+ XtDefaultBackground
+ },
+ {
+ XtNcursorName,
+ XtCCursor,
+ XtRString,
+ sizeof(String),
+ offset(cursor_name),
+ XtRString,
+ NULL
+ },
+ {
+ XtNinternational,
+ XtCInternational,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(international),
+ XtRImmediate,
+ (XtPointer)False
+ },
+#ifndef OLDXAW
+ {
+ XawNdisplayList,
+ XawCDisplayList,
+ XawRDisplayList,
+ sizeof(XawDisplayList*),
+ offset(display_list),
+ XtRImmediate,
+ NULL
+ },
+ {
+ XtNtip,
+ XtCTip,
+ XtRString,
+ sizeof(String),
+ offset(tip),
+ XtRImmediate,
+ NULL
+ },
+#endif
+#undef offset
+};
+
+SimpleClassRec simpleClassRec = {
+ /* core */
+ {
+ (WidgetClass)&widgetClassRec, /* superclass */
+ "Simple", /* class_name */
+ sizeof(SimpleRec), /* widget_size */
+ XawSimpleClassInitialize, /* class_initialize */
+ XawSimpleClassPartInitialize, /* class_part_initialize */
+ False, /* class_inited */
+#ifndef OLDXAW
+ XawSimpleInitialize, /* initialize */
+#else
+ NULL, /* initialize */
+#endif
+ NULL, /* initialize_hook */
+ XawSimpleRealize, /* realize */
+#ifndef OLDXAW
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+#else
+ NULL, /* actions */
+ 0, /* num_actions */
+#endif
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+#ifndef OLDXAW
+ XawSimpleDestroy, /* destroy */
+#else
+ NULL, /* destroy */
+#endif
+ NULL, /* resize */
+#ifndef OLDXAW
+ XawSimpleExpose, /* expose */
+#else
+ NULL, /* expose */
+#endif
+ XawSimpleSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ ChangeSensitive, /* change_sensitive */
+ },
+};
+
+WidgetClass simpleWidgetClass = (WidgetClass)&simpleClassRec;
+
+static void
+XawSimpleClassInitialize(void)
+{
+ static XtConvertArgRec convertArg[] = {
+ {
+ 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)
+ },
+ };
+
+ XawInitializeWidgetSet();
+ XtSetTypeConverter(XtRString, XtRColorCursor, XmuCvtStringToColorCursor,
+ convertArg, XtNumber(convertArg), XtCacheByDisplay, NULL);
+}
+
+static void
+XawSimpleClassPartInitialize(WidgetClass cclass)
+{
+ SimpleWidgetClass c = (SimpleWidgetClass)cclass;
+ SimpleWidgetClass super = (SimpleWidgetClass)c->core_class.superclass;
+
+ if (c->simple_class.change_sensitive == NULL) {
+ char buf[BUFSIZ];
+
+ (void)XmuSnprintf(buf, sizeof(buf),
+ "%s Widget: The Simple Widget class method "
+ "'change_sensitive' is undefined.\nA function "
+ "must be defined or inherited.",
+ c->core_class.class_name);
+ XtWarning(buf);
+ c->simple_class.change_sensitive = ChangeSensitive;
+ }
+
+ if (c->simple_class.change_sensitive == XtInheritChangeSensitive)
+ c->simple_class.change_sensitive = super->simple_class.change_sensitive;
+}
+
+#ifndef OLDXAW
+/*ARGSUSED*/
+static void
+XawSimpleInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SimpleWidget simple = (SimpleWidget)cnew;
+
+ if (simple->simple.tip)
+ simple->simple.tip = XtNewString(simple->simple.tip);
+}
+
+static void
+XawSimpleDestroy(Widget w)
+{
+ SimpleWidget simple = (SimpleWidget)w;
+
+ if (simple->simple.tip)
+ XtFree((XtPointer)simple->simple.tip);
+}
+#endif
+
+static void
+XawSimpleRealize(Widget w, Mask *valueMask, XSetWindowAttributes *attributes)
+{
+#ifndef OLDXAW
+ XawPixmap *pixmap;
+#endif
+ Pixmap border_pixmap = CopyFromParent;
+
+ if (!XtIsSensitive(w))
+ {
+ /* change border to gray; have to remember the old one,
+ * so XtDestroyWidget deletes the proper one */
+ if (((SimpleWidget)w)->simple.insensitive_border == None)
+ ((SimpleWidget)w)->simple.insensitive_border =
+ XmuCreateStippledPixmap(XtScreen(w),
+ w->core.border_pixel,
+ w->core.background_pixel,
+ w->core.depth);
+ border_pixmap = w->core.border_pixmap;
+ attributes->border_pixmap =
+ w->core.border_pixmap = ((SimpleWidget)w)->simple.insensitive_border;
+
+ *valueMask |= CWBorderPixmap;
+ *valueMask &= ~CWBorderPixel;
+ }
+
+ ConvertCursor(w);
+
+ if ((attributes->cursor = ((SimpleWidget)w)->simple.cursor) != None)
+ *valueMask |= CWCursor;
+
+ XtCreateWindow(w, InputOutput, (Visual *)CopyFromParent,
+ *valueMask, attributes);
+
+ if (!XtIsSensitive(w))
+ w->core.border_pixmap = border_pixmap;
+
+#ifndef OLDXAW
+ if (w->core.background_pixmap > XtUnspecifiedPixmap) {
+ pixmap = XawPixmapFromXPixmap(w->core.background_pixmap, XtScreen(w),
+ w->core.colormap, w->core.depth);
+ if (pixmap && pixmap->mask)
+ XawReshapeWidget(w, pixmap);
+ }
+
+ if (((SimpleWidget)w)->simple.tip)
+ XawTipEnable(w);
+#endif
+}
+
+/*
+ * Function:
+ * ConvertCursor
+ *
+ * Parameters:
+ * w - simple widget
+ *
+ * Description:
+ * Converts a name to a new cursor.
+ */
+static void
+ConvertCursor(Widget w)
+{
+ SimpleWidget simple = (SimpleWidget) w;
+ XrmValue from, to;
+ Cursor cursor = None;
+
+ if (simple->simple.cursor_name == NULL)
+ return;
+
+ from.addr = (XPointer)simple->simple.cursor_name;
+ from.size = strlen((char *)from.addr) + 1;
+
+ to.size = sizeof(Cursor);
+ to.addr = (XPointer)&cursor;
+
+ if (XtConvertAndStore(w, XtRString, &from, XtRColorCursor, &to))
+ simple->simple.cursor = cursor;
+ else
+ XtAppErrorMsg(XtWidgetToApplicationContext(w),
+ "convertFailed","ConvertCursor","XawError",
+ "Simple: ConvertCursor failed.",
+ NULL, NULL);
+}
+
+
+/*ARGSUSED*/
+static Boolean
+XawSimpleSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SimpleWidget s_old = (SimpleWidget)current;
+ SimpleWidget s_new = (SimpleWidget)cnew;
+ Bool new_cursor = False;
+
+ /* this disables user changes after creation */
+ s_new->simple.international = s_old->simple.international;
+
+ if (XtIsSensitive(current) != XtIsSensitive(cnew))
+ (*((SimpleWidgetClass)XtClass(cnew))->simple_class.change_sensitive)
+ (cnew);
+
+ if (s_old->simple.cursor != s_new->simple.cursor)
+ new_cursor = True;
+
+ /*
+ * We are not handling the string cursor_name correctly here
+ */
+
+ if (s_old->simple.pointer_fg != s_new->simple.pointer_fg ||
+ s_old->simple.pointer_bg != s_new->simple.pointer_bg ||
+ s_old->simple.cursor_name != s_new->simple.cursor_name) {
+ ConvertCursor(cnew);
+ new_cursor = True;
+ }
+
+ if (new_cursor && XtIsRealized(cnew)) {
+ if (s_new->simple.cursor != None)
+ XDefineCursor(XtDisplay(cnew), XtWindow(cnew), s_new->simple.cursor);
+ else
+ XUndefineCursor(XtDisplay(cnew), XtWindow(cnew));
+ }
+
+#ifndef OLDXAW
+ if (s_old->core.background_pixmap != s_new->core.background_pixmap) {
+ XawPixmap *opix, *npix;
+
+ opix = XawPixmapFromXPixmap(s_old->core.background_pixmap,
+ XtScreen(s_old), s_old->core.colormap,
+ s_old->core.depth);
+ npix = XawPixmapFromXPixmap(s_new->core.background_pixmap,
+ XtScreen(s_new), s_new->core.colormap,
+ s_new->core.depth);
+ if ((npix && npix->mask) || (opix && opix->mask))
+ XawReshapeWidget(cnew, npix);
+ }
+
+ if (s_old->simple.tip != s_new->simple.tip) {
+ if (s_old->simple.tip)
+ XtFree((XtPointer)s_old->simple.tip);
+ if (s_new->simple.tip)
+ s_new->simple.tip = XtNewString(s_new->simple.tip);
+ }
+
+ if (s_old->simple.tip && !s_new->simple.tip)
+ XawTipDisable(cnew);
+ else if (!s_old->simple.tip && s_new->simple.tip)
+ XawTipEnable(cnew);
+
+ if (s_old->simple.display_list != s_new->simple.display_list)
+ return (True);
+#endif /* OLDXAW */
+
+ return (False);
+}
+
+#ifndef OLDXAW
+static void
+XawSimpleExpose(Widget w, XEvent *event, Region region)
+{
+ SimpleWidget xaw = (SimpleWidget)w;
+
+ if (xaw->simple.display_list)
+ XawRunDisplayList(w, xaw->simple.display_list, event, region);
+}
+#endif
+
+static Bool
+ChangeSensitive(Widget w)
+{
+ if (XtIsRealized(w)) {
+ if (XtIsSensitive(w))
+ if (w->core.border_pixmap != XtUnspecifiedPixmap)
+ XSetWindowBorderPixmap(XtDisplay(w), XtWindow(w),
+ w->core.border_pixmap);
+ else
+ XSetWindowBorder(XtDisplay(w), XtWindow(w),
+ w->core.border_pixel);
+ else {
+ if (((SimpleWidget)w)->simple.insensitive_border == None)
+ ((SimpleWidget)w)->simple.insensitive_border =
+ XmuCreateStippledPixmap(XtScreen(w),
+ w->core.border_pixel,
+ w->core.background_pixel,
+ w->core.depth);
+ XSetWindowBorderPixmap(XtDisplay(w), XtWindow(w),
+ ((SimpleWidget)w)->simple.insensitive_border);
+ }
+ }
+
+ return (False);
+}
diff --git a/libXaw/src/SimpleMenu.c b/libXaw/src/SimpleMenu.c
index b7ed28651..cfde9df29 100644
--- a/libXaw/src/SimpleMenu.c
+++ b/libXaw/src/SimpleMenu.c
@@ -1,1834 +1,1830 @@
-/* $Xorg: SimpleMenu.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/*
-Copyright 1989, 1994, 1998 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.
- */
-
-/* $XFree86: xc/lib/Xaw/SimpleMenu.c,v 3.21 2001/03/23 23:59:15 paulo Exp $ */
-
-/*
- * SimpleMenu.c - Source code file for SimpleMenu widget.
- *
- * Date: April 3, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Initer.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/SimpleMenP.h>
-#include <X11/Xaw/SmeBSBP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#define streq(a, b) (strcmp((a), (b)) == 0)
-
-#define ForAllChildren(smw, childP) \
-for ((childP) = (SmeObject *)(smw)->composite.children; \
- (childP) < (SmeObject *)((smw)->composite.children \
- + (smw)->composite.num_children); \
- (childP)++)
-
-#ifndef OLDXAW
-#define SMW_UNMAPPING 0x01
-#define SMW_POPLEFT 0x02
-#endif
-
-/*
- * Class Methods
- */
-static void XawSimpleMenuChangeManaged(Widget);
-static void XawSimpleMenuClassInitialize(void);
-static void XawSimpleMenuClassPartInitialize(WidgetClass);
-static XtGeometryResult XawSimpleMenuGeometryManager(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawSimpleMenuInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawSimpleMenuRealize(Widget, XtValueMask*, XSetWindowAttributes*);
-static void XawSimpleMenuRedisplay(Widget, XEvent*, Region);
-static void XawSimpleMenuResize(Widget);
-static Boolean XawSimpleMenuSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static Boolean XawSimpleMenuSetValuesHook(Widget, ArgList, Cardinal*);
-#ifndef OLDXAW
-static void PopupSubMenu(SimpleMenuWidget);
-static void PopdownSubMenu(SimpleMenuWidget);
-static void PopupCB(Widget, XtPointer, XtPointer);
-#endif
-
-/*
- * Prototypes
- */
-static void AddPositionAction(XtAppContext, XPointer);
-static void CalculateNewSize(Widget, Dimension*, Dimension*);
-static void ChangeCursorOnGrab(Widget, XtPointer, XtPointer);
-static void CreateLabel(Widget);
-static SmeObject DoGetEventEntry(Widget, int, int);
-static Widget FindMenu(Widget, String);
-static SmeObject GetEventEntry(Widget, XEvent*);
-static void Layout(Widget, Dimension*, Dimension*);
-static void MakeResizeRequest(Widget);
-static void MakeSetValuesRequest(Widget, unsigned int, unsigned int);
-static void MoveMenu(Widget, int, int);
-static void PositionMenu(Widget, XPoint*);
-
-/*
- * Actions
- */
-static void Highlight(Widget, XEvent*, String*, Cardinal*);
-static void Notify(Widget, XEvent*, String*, Cardinal*);
-#ifndef OLDXAW
-static void Popdown(Widget, XEvent*, String*, Cardinal*);
-#endif
-static void PositionMenuAction(Widget, XEvent*, String*, Cardinal*);
-static void Unhighlight(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(SimpleMenuRec, simple_menu.field)
-
-static XtResource resources[] = {
- /* label */
- {
- XtNlabel,
- XtCLabel,
- XtRString,
- sizeof(String),
- offset(label_string),
- XtRString,
- NULL
- },
- {
- XtNlabelClass,
- XtCLabelClass,
- XtRPointer,
- sizeof(WidgetClass),
- offset(label_class),
- XtRImmediate,
- NULL
- },
-
- /* layout */
- {
- XtNrowHeight,
- XtCRowHeight,
- XtRDimension,
- sizeof(Dimension),
- offset(row_height),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNtopMargin,
- XtCVerticalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(top_margin),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNbottomMargin,
- XtCVerticalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(bottom_margin),
- XtRImmediate,
- (XtPointer)0
- },
-#ifndef OLDXAW
- {
- XtNleftMargin,
- XtCHorizontalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(left_margin),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNrightMargin,
- XtCHorizontalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(right_margin),
- XtRImmediate,
- (XtPointer)0
- },
-#endif
-
- /* misc */
- {
- XtNallowShellResize,
- XtCAllowShellResize,
- XtRBoolean,
- sizeof(Boolean),
- XtOffsetOf(SimpleMenuRec, shell.allow_shell_resize),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNcursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(cursor),
- XtRImmediate,
- (XtPointer)None
- },
- {
- XtNmenuOnScreen,
- XtCMenuOnScreen,
- XtRBoolean,
- sizeof(Boolean),
- offset(menu_on_screen),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNpopupOnEntry,
- XtCPopupOnEntry,
- XtRWidget,
- sizeof(Widget),
- offset(popup_entry),
- XtRWidget,
- NULL
- },
- {
- XtNbackingStore,
- XtCBackingStore,
- XtRBackingStore,
- sizeof(int),
- offset(backing_store),
- XtRImmediate,
- (XtPointer)(Always + WhenMapped + NotUseful)
- },
-#ifndef OLDXAW
- {
- XawNdisplayList,
- XawCDisplayList,
- XawRDisplayList,
- sizeof(XawDisplayList*),
- offset(display_list),
- XtRImmediate,
- NULL
- },
-#endif
-};
-#undef offset
-
-static char defaultTranslations[] =
-"<Enter>:" "highlight()\n"
-"<Leave>:" "unhighlight()\n"
-"<BtnMotion>:" "highlight()\n"
-#ifndef OLDXAW
-"<BtnUp>:" "popdown() notify() unhighlight()\n"
-#else
-"<BtnUp>:" "MenuPopdown() notify() unhighlight()\n"
-#endif
-;
-
-static XtActionsRec actionsList[] =
-{
- {"notify", Notify},
- {"highlight", Highlight},
- {"unhighlight", Unhighlight},
-#ifndef OLDXAW
- {"popdown", Popdown},
- {"set-values", XawSetValuesAction},
- {"get-values", XawGetValuesAction},
- {"declare", XawDeclareAction},
- {"call-proc", XawCallProcAction},
-#endif
-};
-
-static CompositeClassExtensionRec extension_rec = {
- NULL, /* next_extension */
- NULLQUARK, /* record_type */
- XtCompositeExtensionVersion, /* version */
- sizeof(CompositeClassExtensionRec), /* record_size */
- True, /* accepts_objects */
-};
-
-#define Superclass (&overrideShellClassRec)
-SimpleMenuClassRec simpleMenuClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "SimpleMenu", /* class_name */
- sizeof(SimpleMenuRec), /* size */
- XawSimpleMenuClassInitialize, /* class_initialize */
- XawSimpleMenuClassPartInitialize, /* class_part_initialize */
- False, /* class_inited */
- XawSimpleMenuInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawSimpleMenuRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XawSimpleMenuResize, /* resize */
- XawSimpleMenuRedisplay, /* expose */
- XawSimpleMenuSetValues, /* set_values */
- XawSimpleMenuSetValuesHook, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* intrinsics version */
- NULL, /* callback offsets */
- defaultTranslations, /* tm_table */
- NULL, /* query_geometry */
- NULL, /* display_accelerator */
- NULL, /* extension */
- },
- /* composite */
- {
- XawSimpleMenuGeometryManager, /* geometry_manager */
- XawSimpleMenuChangeManaged, /* change_managed */
- XtInheritInsertChild, /* insert_child */
- XtInheritDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- /* shell */
- {
- NULL, /* extension */
- },
- /* override */
- {
- NULL, /* extension */
- },
- /* simple_menu */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass simpleMenuWidgetClass = (WidgetClass)&simpleMenuClassRec;
-
-/*
- * Implementation
- */
-/*
- * Function:
- * XawSimpleMenuClassInitialize
- *
- * Description:
- * Class Initialize routine, called only once.
- */
-static void
-XawSimpleMenuClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtAddConverter(XtRString, XtRBackingStore, XmuCvtStringToBackingStore,
- NULL, 0);
- XtSetTypeConverter(XtRBackingStore, XtRString, XmuCvtBackingStoreToString,
- NULL, 0, XtCacheNone, NULL);
- XmuAddInitializer(AddPositionAction, NULL);
-}
-
-/*
- * Function:
- * XawSimpleMenuClassPartInitialize
- * Arguments: wc - the widget class of the subclass.
- *
- * Description:
- * Class Part Initialize routine, called for every subclass. Makes
- * sure that the subclasses pick up the extension record.
- */
-static void
-XawSimpleMenuClassPartInitialize(WidgetClass wc)
-{
- SimpleMenuWidgetClass smwc = (SimpleMenuWidgetClass)wc;
-
- /*
- * Make sure that our subclass gets the extension rec too
- */
- extension_rec.next_extension = smwc->composite_class.extension;
- smwc->composite_class.extension = (XtPointer) &extension_rec;
-}
-
-/*
- * Function:
- * XawSimpleMenuInitialize
- *
- * Parameters:
- * request - widget requested by the argument list
- * cnew - new widget with both resource and non resource values
- *
- * Description:
- * Initializes the simple menu widget.
- */
-/*ARGSUSED*/
-static void
-XawSimpleMenuInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)cnew;
- Dimension width, height;
-
- XmuCallInitializers(XtWidgetToApplicationContext(cnew));
-
- if (smw->simple_menu.label_class == NULL)
- smw->simple_menu.label_class = smeBSBObjectClass;
-
- smw->simple_menu.label = NULL;
- smw->simple_menu.entry_set = NULL;
- smw->simple_menu.recursive_set_values = False;
-#ifndef OLDXAW
- smw->simple_menu.sub_menu = NULL;
- smw->simple_menu.state = 0;
-
- XtAddCallback(cnew, XtNpopupCallback, PopupCB, NULL);
-#endif
-
- if (smw->simple_menu.label_string != NULL)
- CreateLabel(cnew);
-
- width = height = 0;
- CalculateNewSize(cnew, &width, &height);
-
- smw->simple_menu.menu_width = True;
-
- if (XtWidth(smw) == 0) {
- smw->simple_menu.menu_width = False;
- XtWidth(smw) = width;
- }
-
- smw->simple_menu.menu_height = True;
-
- if (XtHeight(smw) == 0) {
- smw->simple_menu.menu_height = False;
- XtHeight(smw) = height;
- }
-
- /*
- * Add a popup_callback routine for changing the cursor
- */
- XtAddCallback(cnew, XtNpopupCallback, ChangeCursorOnGrab, NULL);
-}
-
-/*
- * Function:
- * XawSimpleMenuRedisplay
- *
- * Parameters:
- * w - simple menu widget
- * event - X event that caused this redisplay
- * region - region the needs to be repainted
- *
- * Description:
- * Redisplays the contents of the widget.
- */
-/*ARGSUSED*/
-static void
-XawSimpleMenuRedisplay(Widget w, XEvent *event, Region region)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
- SmeObject *entry;
- SmeObjectClass cclass;
-
- if (region == NULL)
- XClearWindow(XtDisplay(w), XtWindow(w));
-
-#ifndef OLDXAW
- if (smw->simple_menu.display_list)
- XawRunDisplayList(w, smw->simple_menu.display_list, event, region);
-#endif
-
- /*
- * Check and Paint each of the entries - including the label
- */
- ForAllChildren(smw, entry) {
- if (!XtIsManaged((Widget)*entry))
- continue;
-
- if (region != NULL)
- switch(XRectInRegion(region, XtX(*entry),XtY(*entry),
- XtWidth(*entry), XtHeight(*entry))) {
- case RectangleIn:
- case RectanglePart:
- break;
- default:
- continue;
- }
-
- cclass = (SmeObjectClass)(*entry)->object.widget_class;
-
- if (cclass->rect_class.expose != NULL)
- (cclass->rect_class.expose)((Widget)*entry, NULL, NULL);
- }
-}
-
-/*
- * Function:
- * XawSimpleMenuRealize
- *
- * Parameters:
- * w - simple menu widget
- * mask - value mask for the window to create
- * attrs - attributes for the window to create
- *
- * Description:
- * Realizes the widget.
- */
-static void
-XawSimpleMenuRealize(Widget w, XtValueMask *mask, XSetWindowAttributes *attrs)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
-#ifndef OLDXAW
- XawPixmap *pixmap;
-#endif
-
- attrs->cursor = smw->simple_menu.cursor;
- *mask |= CWCursor;
- if (smw->simple_menu.backing_store == Always ||
- smw->simple_menu.backing_store == NotUseful ||
- smw->simple_menu.backing_store == WhenMapped) {
- *mask |= CWBackingStore;
- attrs->backing_store = smw->simple_menu.backing_store;
- }
- else
- *mask &= ~CWBackingStore;
-
- (*Superclass->core_class.realize)(w, mask, attrs);
-
-#ifndef OLDXAW
- if (w->core.background_pixmap > XtUnspecifiedPixmap) {
- pixmap = XawPixmapFromXPixmap(w->core.background_pixmap, XtScreen(w),
- w->core.colormap, w->core.depth);
- if (pixmap && pixmap->mask)
- XawReshapeWidget(w, pixmap);
- }
-#endif
-}
-
-/*
- * Function:
- * XawSimpleMenuResize
- *
- * Parameters:
- * w - simple menu widget
- *
- * Description:
- * Handle the menu being resized.
- */
-static void
-XawSimpleMenuResize(Widget w)
-{
- if (!XtIsRealized(w))
- return;
-
- Layout(w, NULL, NULL);
-
- XawSimpleMenuRedisplay(w, NULL, NULL);
-}
-
-/*
- * Function:
- * XawSimpleMenuSetValues
- *
- * Parameters:
- * current - current state of the widget
- * request - what was requested
- * cnew - what the widget will become
- *
- * Description:
- * Relayout the menu when one of the resources is changed.
- */
-/*ARGSUSED*/
-static Boolean
-XawSimpleMenuSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SimpleMenuWidget smw_old = (SimpleMenuWidget)current;
- SimpleMenuWidget smw_new = (SimpleMenuWidget)cnew;
- Boolean ret_val = False, layout = False;
-
- if (!XtIsRealized(current))
- return (False);
-
- if (!smw_new->simple_menu.recursive_set_values) {
- if (XtWidth(smw_new) != XtWidth(smw_old)) {
- smw_new->simple_menu.menu_width = XtWidth(smw_new) != 0;
- layout = True;
- }
- if (XtHeight(smw_new) != XtHeight(smw_old)) {
- smw_new->simple_menu.menu_height = XtHeight(smw_new) != 0;
- layout = True;
- }
- }
-
- if (smw_old->simple_menu.cursor != smw_new->simple_menu.cursor)
- XDefineCursor(XtDisplay(cnew), XtWindow(cnew),
- smw_new->simple_menu.cursor);
-
- if (smw_old->simple_menu.label_string !=smw_new->simple_menu.label_string) {
- if (smw_new->simple_menu.label_string == NULL) /* Destroy */
- XtDestroyWidget((Widget)smw_old->simple_menu.label);
- else if (smw_old->simple_menu.label_string == NULL) /* Create */
- CreateLabel(cnew);
- else { /* Change */
- Arg arglist[1];
-
- XtSetArg(arglist[0], XtNlabel, smw_new->simple_menu.label_string);
- XtSetValues((Widget)smw_new->simple_menu.label, arglist, ONE);
- }
- }
-
- if (smw_old->simple_menu.label_class != smw_new->simple_menu.label_class)
- XtAppWarning(XtWidgetToApplicationContext(cnew),
- "No Dynamic class change of the SimpleMenu Label.");
-
- if (smw_old->simple_menu.top_margin != smw_new->simple_menu.top_margin
- || smw_old->simple_menu.bottom_margin
- != smw_new->simple_menu.bottom_margin) {
- layout = True;
- ret_val = True;
- }
-
-#ifndef OLDXAW
- if (smw_old->core.background_pixmap != smw_new->core.background_pixmap) {
- XawPixmap *opix, *npix;
-
- opix = XawPixmapFromXPixmap(smw_old->core.background_pixmap,
- XtScreen(smw_old), smw_old->core.colormap,
- smw_old->core.depth);
- npix = XawPixmapFromXPixmap(smw_new->core.background_pixmap,
- XtScreen(smw_new), smw_new->core.colormap,
- smw_new->core.depth);
- if ((npix && npix->mask) || (opix && opix->mask))
- XawReshapeWidget(cnew, npix);
- }
-#endif
-
- if (layout)
- Layout(cnew, NULL, NULL);
-
- return (ret_val);
-}
-
-/*
- * Function:
- * XawSimpleMenuSetValuesHook
- *
- * Parameters:
- * w - menu widget
- * arglist - argument list passed to XtSetValues
- * num_args - number of args
- *
- * Description:
- * To handle a special case, this is passed the actual arguments.
- */
-static Boolean
-XawSimpleMenuSetValuesHook(Widget w, ArgList arglist, Cardinal *num_args)
-{
- Cardinal i;
- Dimension width, height;
-
- width = XtWidth(w);
- height = XtHeight(w);
-
- for (i = 0 ; i < *num_args ; i++) {
- if (streq(arglist[i].name, XtNwidth))
- width = (Dimension)arglist[i].value;
- if (streq(arglist[i].name, XtNheight))
- height = (Dimension) arglist[i].value;
- }
-
- if (width != XtWidth(w) || height != XtHeight(w))
- MakeSetValuesRequest(w, width, height);
-
- return (False);
-}
-
-/*
- * Geometry Management routines
- */
-/*
- * Function:
- * XawSimpleMenuGeometryManager
- *
- * Parameters:
- * w - Menu Entry making the request
- * request - requested new geometry
- * reply - the allowed geometry.
- *
- * Description:
- * This is the SimpleMenu Widget's Geometry Manager.
- *
- * Returns:
- * XtGeometry{Yes, No, Almost}
- */
-static XtGeometryResult
-XawSimpleMenuGeometryManager(Widget w, XtWidgetGeometry *request,
- XtWidgetGeometry *reply)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)XtParent(w);
- SmeObject entry = (SmeObject)w;
- XtGeometryMask mode = request->request_mode;
- XtGeometryResult answer;
- Dimension old_height, old_width;
-
- if (!(mode & CWWidth) && !(mode & CWHeight))
- return (XtGeometryNo);
-
- reply->width = request->width;
- reply->height = request->height;
-
- old_width = XtWidth(entry);
- old_height = XtHeight(entry);
-
- Layout(w, &reply->width, &reply->height);
-
- /*
- * Since we are an override shell and have no parent there is no one to
- * ask to see if this geom change is okay, so I am just going to assume
- * we can do whatever we want. If you subclass be very careful with this
- * assumption, it could bite you.
- *
- * Chris D. Peterson - Sept. 1989.
- */
- if ((!(mode & CWWidth) || reply->width == request->width)
- && (!(mode & CWHeight) || reply->height == request->height)) {
- if (mode & XtCWQueryOnly) { /* Actually perform the layout */
- XtWidth(entry) = old_width;
- XtHeight(entry) = old_height;
- }
- else
- Layout((Widget)smw, NULL, NULL);
- answer = XtGeometryDone;
- }
- else {
- XtWidth(entry) = old_width;
- XtHeight(entry) = old_height;
-
- if ((reply->width == request->width && !(mode & CWHeight))
- || (reply->height == request->height && !(mode & CWWidth))
- || (reply->width == request->width
- && reply->height == request->height))
- answer = XtGeometryNo;
- else {
- answer = XtGeometryAlmost;
- reply->request_mode = 0;
- if (reply->width != request->width)
- reply->request_mode |= CWWidth;
- if (reply->height != request->height)
- reply->request_mode |= CWHeight;
- }
- }
-
- return (answer);
-}
-
-/*
- * Function:
- * XawSimpleMenuChangeManaged
- *
- * Parameters:
- * w - simple menu widget
- *
- * Description:
- * Called whenever a new child is managed.
- */
-static void
-XawSimpleMenuChangeManaged(Widget w)
-{
- Layout(w, NULL, NULL);
-}
-
-/*
- * Global Action Routines
- *
- * These actions routines will be added to the application's
- * global action list
- */
-/*
- * Function:
- * PositionMenuAction
- *
- * Parameters:
- * w - a widget (no the simple menu widget)
- * event - the event that caused this action
- * params - parameters passed to the routine.
- * we expect the name of the menu here.
- * num_params - ""
- *
- * Description:
- * Positions the simple menu widget.
- */
-/*ARGSUSED*/
-static void
-PositionMenuAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- Widget menu;
- XPoint loc;
-
- if (*num_params != 1) {
- XtAppWarning(XtWidgetToApplicationContext(w),
- "SimpleMenuWidget: position menu action expects "
- "only one parameter which is the name of the menu.");
- return;
- }
-
- if ((menu = FindMenu(w, params[0])) == NULL) {
- char error_buf[BUFSIZ];
-
- (void)XmuSnprintf(error_buf, sizeof(error_buf),
- "SimpleMenuWidget: could not find menu named %s.",
- params[0]);
- XtAppWarning(XtWidgetToApplicationContext(w), error_buf);
- return;
- }
-
- switch (event->type) {
- case ButtonPress:
- case ButtonRelease:
- loc.x = event->xbutton.x_root;
- loc.y = event->xbutton.y_root;
- PositionMenu(menu, &loc);
- break;
- case EnterNotify:
- case LeaveNotify:
- loc.x = event->xcrossing.x_root;
- loc.y = event->xcrossing.y_root;
- PositionMenu(menu, &loc);
- break;
- case MotionNotify:
- loc.x = event->xmotion.x_root;
- loc.y = event->xmotion.y_root;
- PositionMenu(menu, &loc);
- break;
- default:
- PositionMenu(menu, NULL);
- break;
- }
-}
-
-/*
- * Widget Action Routines
- */
-/*
- * Function:
- * Unhighlight
- *
- * Parameters:
- * w - simple menu widget
- * event - event that caused this action
- * params - not used
- * num_params - ""
- *
- * Description:
- * Unhighlights current entry.
- */
-/*ARGSUSED*/
-static void
-Unhighlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
- SmeObject entry = smw->simple_menu.entry_set;
-
- if (entry == NULL)
- return;
-
-#ifndef OLDXAW
- if (!smw->simple_menu.sub_menu)
-#endif
- {
- SmeObjectClass cclass;
-
- smw->simple_menu.entry_set = NULL;
- cclass = (SmeObjectClass)entry->object.widget_class;
- (cclass->sme_class.unhighlight)((Widget)entry);
- }
-}
-
-/*
- * Function:
- * Highlight
- *
- * Parameters:
- * w - simple menu widget
- * event - event that caused this action
- * params - not used
- * num_params - ""
- *
- * Description:
- * Highlights current entry.
- */
-/*ARGSUSED*/
-static void
-Highlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
- SmeObject entry;
-
- if (!XtIsSensitive(w))
- return;
-
- entry = GetEventEntry(w, event);
-
- if (entry == smw->simple_menu.entry_set)
- return;
-
-#ifndef OLDXAW
- if (!smw->simple_menu.sub_menu)
-#endif
- Unhighlight(w, event, params, num_params);
-
- if (entry == NULL)
- return;
-
- if (!XtIsSensitive((Widget)entry))
- return;
-
-#ifndef OLDXAW
- if (smw->simple_menu.sub_menu)
- PopdownSubMenu(smw);
-#endif
-
- Unhighlight(w, event, params, num_params);
-
-#ifndef OLDXAW
- if (!(smw->simple_menu.state & SMW_UNMAPPING))
-#endif
- {
- SmeObjectClass cclass;
-
- smw->simple_menu.entry_set = entry;
- cclass = (SmeObjectClass)entry->object.widget_class;
-
- (cclass->sme_class.highlight)((Widget)entry);
-
-#ifndef OLDXAW
- if (XtIsSubclass((Widget)entry, smeBSBObjectClass))
- PopupSubMenu(smw);
-#endif
- }
-}
-
-/*
- * Function:
- * Notify
- *
- * Parameters:
- * w - simple menu widget
- * event - event that caused this action
- * params - not used
- * num_params - ""
- *
- * Description:
- * Notify user of current entry.
- */
-/*ARGSUSED*/
-static void
-Notify(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- SmeObject entry;
- SmeObjectClass cclass;
-
- /* may be a propagated event from a sub menu, need to check it */
- if (XtWindow(w) != event->xany.window)
- return;
- entry = GetEventEntry(w, event);
- if (entry == NULL || !XtIsSensitive((Widget)entry))
- return;
-
- cclass = (SmeObjectClass) entry->object.widget_class;
- (cclass->sme_class.notify)((Widget)entry);
-}
-
-/*
- * Public Functions
- */
-/*
- * Function:
- * XawSimpleMenuAddGlobalActions
- *
- * Arguments:
- * app_con - appcontext
- *
- * Description:
- * Adds the global actions to the simple menu widget.
- */
-void
-XawSimpleMenuAddGlobalActions(XtAppContext app_con)
-{
- XtInitializeWidgetClass(simpleMenuWidgetClass);
- XmuCallInitializers(app_con);
-}
-
-/*
- * Function:
- * XawSimpleMenuGetActiveEntry
- *
- * Parameters:
- * w - smw widget
- *
- * Description:
- * Gets the currently active (set) entry.
- *
- * Returns:
- * The currently set entry or NULL if none is set
- */
-Widget
-XawSimpleMenuGetActiveEntry(Widget w)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
-
- return ((Widget)smw->simple_menu.entry_set);
-}
-
-/*
- * Function:
- * XawSimpleMenuClearActiveEntry
- *
- * Parameters:
- * w - smw widget
- *
- * Description:
- * Unsets the currently active (set) entry.
- */
-void
-XawSimpleMenuClearActiveEntry(Widget w)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
-
- smw->simple_menu.entry_set = NULL;
-}
-
-/*
- * Private Functions
- */
-/*
- * Function:
- * CreateLabel
- *
- * Parameters:
- * w - smw widget
- *
- * Description:
- * Creates the label object and makes sure it is the first child in
- * in the list.
- */
-static void
-CreateLabel(Widget w)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
- Widget *child, *next_child;
- int i;
- Arg args[2];
-
- if (smw->simple_menu.label_string == NULL ||
- smw->simple_menu.label != NULL) {
- XtAppWarning(XtWidgetToApplicationContext(w),
- "Xaw Simple Menu Widget: label string is NULL or "
- "label already exists, no label is being created.");
- return;
- }
-
- XtSetArg(args[0], XtNlabel, smw->simple_menu.label_string);
- XtSetArg(args[1], XtNjustify, XtJustifyCenter);
- smw->simple_menu.label = (SmeObject)
- XtCreateManagedWidget("menuLabel",
- smw->simple_menu.label_class, w, args, TWO);
-
- next_child = NULL;
- for (child = smw->composite.children + smw->composite.num_children,
- i = smw->composite.num_children; i > 0; i--, child--) {
- if (next_child != NULL)
- *next_child = *child;
- next_child = child;
- }
- *child = (Widget)smw->simple_menu.label;
-}
-
-/*
- * Function:
- * Layout
- *
- * Arguments:
- * w - See below
- * width_ret - returned width
- * height_ret - returned height
- *
- * Note:
- * if width == NULL || height == NULL then it assumes the you do not care
- * about the return values, and just want a relayout.
- *
- * if this is not the case then it will set width_ret and height_ret
- * to be width and height that the child would get if it were layed out
- * at this time.
- *
- * "w" can be the simple menu widget or any of its object children.
- */
-static void
-Layout(Widget w, Dimension *width_ret, Dimension *height_ret)
-{
- SmeObject current_entry;
- SimpleMenuWidget smw;
- Dimension width, height;
- Boolean allow_change_size;
- Widget kid;
- Cardinal i, count, n;
- int width_kid, height_kid, tmp_w, tmp_h;
- short vadd, hadd, x_ins, y_ins;
- Dimension *widths;
-
- height = 0;
-
- if (XtIsSubclass(w, simpleMenuWidgetClass)) {
- smw = (SimpleMenuWidget)w;
- current_entry = NULL;
- }
- else {
- smw = (SimpleMenuWidget)XtParent(w);
- current_entry = (SmeObject)w;
- }
-
- allow_change_size = (!XtIsRealized((Widget)smw)
- || smw->shell.allow_shell_resize);
-
- for (i = smw->simple_menu.label ? 1 : 0;
- i < smw->composite.num_children;
- i++) {
- XtWidgetGeometry preferred;
-
- kid = smw->composite.children[i];
- if (!XtIsManaged(kid))
- continue;
- if (smw->simple_menu.row_height != 0)
- XtHeight(kid) = smw->simple_menu.row_height;
- XtQueryGeometry(kid, NULL, &preferred);
- if (preferred.request_mode & CWWidth)
- XtWidth(kid) = preferred.width;
- }
-
- if (smw->simple_menu.label
- && XtIsManaged((Widget)smw->simple_menu.label)) {
- XtWidgetGeometry preferred;
-
- kid = (Widget)smw->simple_menu.label;
- XtQueryGeometry(kid, NULL, &preferred);
- if (preferred.request_mode & CWWidth)
- XtWidth(kid) = preferred.width;
- if (preferred.request_mode & CWHeight)
- XtHeight(kid) = preferred.height;
- }
-
- /* reset */
- if (!smw->simple_menu.menu_width)
- XtWidth(smw) = 0;
- if (!smw->simple_menu.menu_height)
- XtHeight(smw) = 0;
- if (!XtWidth(smw) || !XtHeight(smw))
- MakeResizeRequest((Widget)smw);
-
- widths = (Dimension *)XtMalloc(sizeof(Dimension));
-#ifndef OLDXAW
- hadd = smw->simple_menu.left_margin;
-#else
- hadd = 0;
-#endif
- vadd = smw->simple_menu.top_margin;
- if (smw->simple_menu.label)
- vadd += XtHeight(smw->simple_menu.label);
-
- count = 1;
- width = tmp_w = tmp_h = n = 0;
- height = vadd;
-
- for (i = smw->simple_menu.label ? 1 : 0;
- i < smw->composite.num_children;
- i++) {
- kid = smw->composite.children[i];
- if (!XtIsManaged(kid))
- continue;
- width_kid = XtWidth(kid);
- height_kid = XtHeight(kid);
-
- if (n && (height + height_kid + smw->simple_menu.bottom_margin
- > XtHeight(smw))) {
- ++count;
- widths = (Dimension *)XtRealloc((char *)widths,
- sizeof(Dimension) * count);
- widths[count - 1] = width_kid;
- width += tmp_w;
- tmp_w = width_kid;
- height = height_kid + vadd;
- }
- else
- height += height_kid;
- if (height > tmp_h)
- tmp_h = height;
- if (width_kid > tmp_w)
- widths[count - 1] = tmp_w = width_kid;
- ++n;
- }
-
- height = tmp_h + smw->simple_menu.bottom_margin;
- width += tmp_w;
-
- if (smw->simple_menu.label && width < XtWidth(smw->simple_menu.label)) {
- float inc;
-
- inc = (XtWidth(smw->simple_menu.label) - width) / (float)count;
- width = XtWidth(smw->simple_menu.label);
- for (n = 0; n < count; n++)
- widths[n] += inc;
- }
-
-#ifndef OLDXAW
- width += hadd + smw->simple_menu.right_margin;
-#endif
-
- x_ins = n = count = 0;
- tmp_w = widths[0];
- tmp_h = vadd;
-
- for (i = smw->simple_menu.label ? 1 : 0;
- i < smw->composite.num_children;
- i++) {
- kid = smw->composite.children[i];
- if (!XtIsManaged(kid))
- continue;
-
- height_kid = XtHeight(kid);
-
- if (n && (tmp_h + height_kid + smw->simple_menu.bottom_margin
- > XtHeight(smw))) {
- x_ins = tmp_w;
- y_ins = vadd;
- ++count;
- tmp_w += widths[count];
- tmp_h = height_kid + vadd;
- }
- else {
- y_ins = tmp_h;
- tmp_h += height_kid;
- }
- ++n;
-
- XtX(kid) = x_ins + hadd;
- XtY(kid) = y_ins;
- XtWidth(kid) = widths[count];
- }
-
- XtFree((char *)widths);
-
- if (allow_change_size)
- MakeSetValuesRequest((Widget) smw, width, height);
-
- if (smw->simple_menu.label) {
- XtX(smw->simple_menu.label) = 0;
- XtY(smw->simple_menu.label) = smw->simple_menu.top_margin;
- XtWidth(smw->simple_menu.label) = XtWidth(smw)
-#ifndef OLDXAW
- - (smw->simple_menu.left_margin + smw->simple_menu.right_margin)
-#endif
- ;
- }
- if (current_entry) {
- if (width_ret)
- *width_ret = XtWidth(current_entry);
- if (height_ret)
- *height_ret = XtHeight(current_entry);
- }
-}
-
-/*
- * Function:
- * AddPositionAction
- *
- * Parameters:
- * app_con - application context
- * data - (not used)
- *
- * Description:
- * Adds the XawPositionSimpleMenu action to the global
- * action list for this appcon.
- */
-/*ARGSUSED*/
-static void
-AddPositionAction(XtAppContext app_con, XPointer data)
-{
- static XtActionsRec pos_action[] = {
- {"XawPositionSimpleMenu", PositionMenuAction},
- };
-
- XtAppAddActions(app_con, pos_action, XtNumber(pos_action));
-}
-
-/*
- * Function:
- * FindMenu
- *
- * Parameters:
- * widget - reference widget
- * name - menu widget's name
- *
- * Description:
- * Find the menu give a name and reference widget
- *
- * Returns:
- * The menu widget or NULL.
- */
-static Widget
-FindMenu(Widget widget, String name)
-{
- Widget w, menu;
-
- for (w = widget; w != NULL; w = XtParent(w))
- if ((menu = XtNameToWidget(w, name)) != NULL)
- return (menu);
-
- return (NULL);
-}
-
-/*
- * Function:
- * PositionMenu
- *
- * Parameters:
- * w - simple menu widget
- * location - pointer the the position or NULL
- *
- * Description:
- * Places the menu
- */
-static void
-PositionMenu(Widget w, XPoint *location)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
- SmeObject entry;
- XPoint t_point;
-
- if (location == NULL) {
- Window temp1, temp2;
- int root_x, root_y, tempX, tempY;
- unsigned int tempM;
-
- location = &t_point;
- if (XQueryPointer(XtDisplay(w), XtWindow(w), &temp1, &temp2,
- &root_x, &root_y, &tempX, &tempY, &tempM) == False) {
- XtAppWarning(XtWidgetToApplicationContext(w),
- "Xaw Simple Menu Widget: "
- "Could not find location of mouse pointer");
- return;
- }
- location->x = (short) root_x;
- location->y = (short) root_y;
- }
-
- /*
- * The width will not be correct unless it is realized
- */
- XtRealizeWidget(w);
-
- location->x -= XtWidth(w) >> 1;
-
- if (smw->simple_menu.popup_entry == NULL)
- entry = smw->simple_menu.label;
- else
- entry = smw->simple_menu.popup_entry;
-
- if (entry != NULL)
- location->y -= XtY(entry) + (XtHeight(entry) >> 1);
-
- MoveMenu(w, location->x, location->y);
-}
-
-/*
- * Function:
- * MoveMenu
- *
- * Parameters:
- * w - simple menu widget
- * x - current location of the widget
- * y - ""
- *
- * Description:
- * Actually moves the menu, may force it to
- * to be fully visable if menu_on_screen is True.
- */
-static void
-MoveMenu(Widget w, int x, int y)
-{
- Arg arglist[2];
- Cardinal num_args = 0;
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
-
- if (smw->simple_menu.menu_on_screen) {
- int width = XtWidth(w) + (XtBorderWidth(w) << 1);
- int height = XtHeight(w) + (XtBorderWidth(w) << 1);
-
- if (x >= 0) {
- int scr_width = WidthOfScreen(XtScreen(w));
-
- if (x + width > scr_width)
- x = scr_width - width;
- }
- if (x < 0)
- x = 0;
-
- if (y >= 0) {
- int scr_height = HeightOfScreen(XtScreen(w));
-
- if (y + height > scr_height)
- y = scr_height - height;
- }
- if (y < 0)
- y = 0;
- }
-
- XtSetArg(arglist[num_args], XtNx, x); num_args++;
- XtSetArg(arglist[num_args], XtNy, y); num_args++;
- XtSetValues(w, arglist, num_args);
-}
-
-/*
- * Function:
- * ChangeCursorOnGrab
- *
- * Parameters:
- * w - menu widget
- * temp1 - not used
- * temp2 - ""
- *
- * Description:
- * Changes the cursor on the active grab to the one
- * specified in out resource list.
- */
-/*ARGSUSED*/
-static void
-ChangeCursorOnGrab(Widget w, XtPointer temp1, XtPointer temp2)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
-
- /*
- * The event mask here is what is currently in the MIT implementation.
- * There really needs to be a way to get the value of the mask out
- * of the toolkit (CDP 5/26/89).
- */
- XChangeActivePointerGrab(XtDisplay(w), ButtonPressMask | ButtonReleaseMask,
- smw->simple_menu.cursor,
- XtLastTimestampProcessed(XtDisplay(w)));
-}
-
-/*
- * Function:
- * MakeSetValuesRequest
- *
- * Parameters:
- * w - simple menu widget
- * width - size requested
- * height - ""
- */
-static void
-MakeSetValuesRequest(Widget w, unsigned int width, unsigned int height)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
- Arg arglist[2];
- Cardinal num_args = 0;
-
- if (!smw->simple_menu.recursive_set_values) {
- if (XtWidth(smw) != width || XtHeight(smw) != height) {
- smw->simple_menu.recursive_set_values = True;
- XtSetArg(arglist[num_args], XtNwidth, width); num_args++;
- XtSetArg(arglist[num_args], XtNheight, height); num_args++;
- XtSetValues(w, arglist, num_args);
- }
- else if (XtIsRealized((Widget)smw))
- XawSimpleMenuRedisplay((Widget)smw, NULL, NULL);
- }
- smw->simple_menu.recursive_set_values = False;
-}
-
-static SmeObject
-DoGetEventEntry(Widget w, int x_loc, int y_loc)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
- SmeObject *entry;
-
- ForAllChildren(smw, entry) {
- if (!XtIsManaged((Widget)*entry))
- continue;
-
- if (x_loc > XtX(*entry)
- && x_loc <= XtX(*entry) + XtWidth(*entry)
- && y_loc > XtY(*entry)
- && y_loc <= XtY(*entry) + XtHeight(*entry)) {
- if (*entry == smw->simple_menu.label)
- return (NULL); /* cannot select the label */
- else
- return (*entry);
- }
- }
-
- return (NULL);
-}
-
-/*
- * Function:
- * GetEventEntry
- *
- * Parameters:
- * w - simple menu widget
- * event - X event
- *
- * Description:
- * Gets an entry given an event that has X and Y coords.
- *
- * Returns:
- * The entry that this point is in
- */
-static SmeObject
-GetEventEntry(Widget w, XEvent *event)
-{
- int x_loc, y_loc, x_root;
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
- SmeObject entry;
- int warp, move;
-
- switch (event->type) {
- case MotionNotify:
- x_loc = event->xmotion.x;
- y_loc = event->xmotion.y;
- x_root = event->xmotion.x_root;
- break;
- case EnterNotify:
- case LeaveNotify:
- x_loc = event->xcrossing.x;
- y_loc = event->xcrossing.y;
- x_root = event->xcrossing.x_root;
- break;
- case ButtonPress:
- case ButtonRelease:
- x_loc = event->xbutton.x;
- y_loc = event->xbutton.y;
- x_root = event->xbutton.x_root;
- break;
- default:
- XtAppError(XtWidgetToApplicationContext(w),
- "Unknown event type in GetEventEntry().");
- return (NULL);
- }
-
- if (x_loc < 0 || x_loc >= XtWidth(smw) ||
- y_loc < 0 || y_loc >= XtHeight(smw))
- return (NULL);
-
- /* Move the menu if it's outside the screen, does not check
- * smw->simple_menu.menu_on_screen because menus is bigger than screen
- */
- if (x_root == WidthOfScreen(XtScreen(w)) - 1 &&
- XtX(w) + XtWidth(w) + (XtBorderWidth(w)) > x_root) {
- warp = -8;
- if (smw->simple_menu.entry_set) {
- entry = DoGetEventEntry(w,
- XtX(smw->simple_menu.entry_set)
- + XtWidth(smw->simple_menu.entry_set) + 1,
- y_loc);
- Unhighlight(w, event, NULL, NULL);
- if (entry) {
- warp = -(int)XtWidth(entry) >> 1;
- move = x_loc - XtWidth(entry) - XtX(entry) + XtBorderWidth(w);
- }
- else {
- warp = 0;
- move = WidthOfScreen(XtScreen(w)) -
- (XtX(w) + XtWidth(w) + (XtBorderWidth(w) << 1));
- }
- }
- else {
- warp = 0;
- move = WidthOfScreen(XtScreen(w)) -
- (XtX(w) + XtWidth(w) + (XtBorderWidth(w) << 1));
- }
- }
- else if (x_root == 0 && XtX(w) < 0) {
- warp = 8;
- if (smw->simple_menu.entry_set) {
- entry = DoGetEventEntry(w, XtX(smw->simple_menu.entry_set) - 1,
- y_loc);
- Unhighlight(w, event, NULL, NULL);
- if (entry) {
- warp = XtWidth(entry) >> 1;
- move = x_loc - XtX(entry);
- }
- else
- move = x_loc + XtBorderWidth(w);
- }
- else
- move = x_loc + XtBorderWidth(w);
- }
- else
- move = warp = 0;
-
- if (move)
- XtMoveWidget(w, XtX(w) + move, XtY(w));
- if (warp)
- XWarpPointer(XtDisplay(w), None, None, 0, 0, 0, 0, warp, 0);
-
- return (DoGetEventEntry(w, x_loc, y_loc));
-}
-
-static void
-CalculateNewSize(Widget w, Dimension *width_return, Dimension *height_return)
-{
- SimpleMenuWidget xaw = (SimpleMenuWidget)w;
- Widget kid;
- Cardinal i;
- int width_kid, height_kid;
- int width, height, tmp_w, tmp_h, max_dim;
- short vadd, hadd;
- int n, columns, test_h, num_children = 0;
- Boolean try_layout = False;
-
-#ifndef OLDXAW
- hadd = xaw->simple_menu.left_margin + xaw->simple_menu.right_margin;
-#else
- hadd = 0;
-#endif
- vadd = xaw->simple_menu.top_margin + xaw->simple_menu.bottom_margin;
- if (xaw->simple_menu.label)
- vadd += XtHeight(xaw->simple_menu.label);
-
- if (*height_return)
- max_dim = *height_return;
- else if (!XtHeight(w)) {
- max_dim = HeightOfScreen(XtScreen(w));
- try_layout = True;
- }
- else
- max_dim = XtHeight(w);
- max_dim -= vadd;
-
- width = height = tmp_w = tmp_h = n = test_h = 0;
- columns = 1;
- for (i = xaw->simple_menu.label ? 1 : 0;
- i < xaw->composite.num_children;
- i++) {
- kid = xaw->composite.children[i];
- if (!XtIsManaged(kid))
- continue;
- ++num_children;
- width_kid = XtWidth(kid);
- height_kid = XtHeight(kid);
-
- if (try_layout) {
- if (!test_h)
- test_h = height_kid;
- else if (test_h != height_kid)
- try_layout = False;
- }
-
- if (n && (height + height_kid > max_dim)) {
- ++columns;
- width += tmp_w;
- tmp_w = width_kid;
- height = height_kid;
- }
- else
- height += height_kid;
- if (height > tmp_h)
- tmp_h = height;
- if (width_kid > tmp_w)
- tmp_w = width_kid;
- ++n;
- }
-
- height = tmp_h + vadd;
- width += tmp_w + hadd;
-
- if (xaw->simple_menu.label)
- width = XawMax(width, XtWidth(xaw->simple_menu.label) + hadd);
-
- *width_return = width;
- *height_return = height;
-
- if (try_layout && columns > 1 && num_children > 2) {
- int space;
-
- height = test_h * (xaw->simple_menu.label ?
- num_children - 1 :
- num_children);
-
- max_dim -= max_dim % test_h;
- space = max_dim - (height % max_dim);
- if (space >= test_h * columns) {
- height = max_dim - space / columns;
- if (height % test_h)
- height += test_h - (height % test_h);
- *height_return = height + vadd;
- CalculateNewSize(w, width_return, height_return);
- }
- }
-}
-
-static void
-MakeResizeRequest(Widget w)
-{
- int tries;
- Dimension width, height;
-
- width = XtWidth(w);
- height = XtHeight(w);
-
- for (tries = 0; tries < 100; tries++) {
- CalculateNewSize(w, &width, &height);
- if (width == XtWidth(w) && height == XtHeight(w))
- break;
- if (XtMakeResizeRequest(w, width, height, &width, &height) ==
- XtGeometryNo)
- break;
- }
-}
-
-#ifndef OLDXAW
-static void
-Popdown(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
-
- while (XtParent(w) &&
- XtIsSubclass(XtParent(w), simpleMenuWidgetClass)) {
- if (((SimpleMenuWidget)XtParent(w))->simple_menu.sub_menu == (Widget)w) {
- w = XtParent(w);
- smw = (SimpleMenuWidget)w;
- smw->simple_menu.entry_set = NULL;
- }
- else
- break;
- }
-
- smw->simple_menu.state |= SMW_UNMAPPING;
- if (smw->simple_menu.sub_menu)
- PopdownSubMenu(smw);
- XtCallActionProc(w, "XtMenuPopdown", event, params, *num_params);
-}
-
-static void
-PopupSubMenu(SimpleMenuWidget smw)
-{
- Arg args[2];
- Cardinal num_args;
- Widget menu;
- SmeBSBObject entry = (SmeBSBObject)smw->simple_menu.entry_set;
- Position menu_x, menu_y;
- Bool popleft;
-
- if (entry->sme_bsb.menu_name == NULL)
- return;
-
- if ((menu = FindMenu((Widget)smw, entry->sme_bsb.menu_name)) == NULL)
- return;
-
- smw->simple_menu.sub_menu = menu;
-
- if (!XtIsRealized(menu))
- XtRealizeWidget(menu);
-
- popleft = (smw->simple_menu.state & SMW_POPLEFT) != 0;
-
- if (popleft)
- XtTranslateCoords((Widget)smw, -(int)XtWidth(menu),
- XtY(entry) - XtBorderWidth(menu), &menu_x, &menu_y);
- else
- XtTranslateCoords((Widget)smw, XtWidth(smw), XtY(entry)
- - XtBorderWidth(menu), &menu_x, &menu_y);
-
- if (!popleft && menu_x >= 0) {
- int scr_width = WidthOfScreen(XtScreen(menu));
-
- if (menu_x + XtWidth(menu) > scr_width) {
- menu_x -= XtWidth(menu) + XtWidth(smw);
- popleft = True;
- }
- }
- else if (popleft && menu_x < 0) {
- menu_x = 0;
- popleft = False;
- }
- if (menu_y >= 0) {
- int scr_height = HeightOfScreen(XtScreen(menu));
-
- if (menu_y + XtHeight(menu) > scr_height)
- menu_y = scr_height - XtHeight(menu) - XtBorderWidth(menu);
- }
- if (menu_y < 0)
- menu_y = 0;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNx, menu_x); num_args++;
- XtSetArg(args[num_args], XtNy, menu_y); num_args++;
- XtSetValues(menu, args, num_args);
-
- if (popleft)
- ((SimpleMenuWidget)menu)->simple_menu.state |= SMW_POPLEFT;
- else
- ((SimpleMenuWidget)menu)->simple_menu.state &= ~SMW_POPLEFT;
-
- XtPopup(menu, XtGrabNone);
-}
-
-static void
-PopdownSubMenu(SimpleMenuWidget smw)
-{
- SimpleMenuWidget menu = (SimpleMenuWidget)smw->simple_menu.sub_menu;
-
- if (!menu)
- return;
-
- menu->simple_menu.state |= SMW_UNMAPPING;
- PopdownSubMenu(menu);
-
- XtPopdown((Widget)menu);
-
- smw->simple_menu.sub_menu = NULL;
-}
-
-/*ARGSUSED*/
-static void
-PopupCB(Widget w, XtPointer client_data, XtPointer call_data)
-{
- SimpleMenuWidget smw = (SimpleMenuWidget)w;
-
- smw->simple_menu.state &= ~(SMW_UNMAPPING | SMW_POPLEFT);
-}
-#endif /* OLDXAW */
+/*
+Copyright 1989, 1994, 1998 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.
+ */
+
+/*
+ * SimpleMenu.c - Source code file for SimpleMenu widget.
+ *
+ * Date: April 3, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Initer.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/SimpleMenP.h>
+#include <X11/Xaw/SmeBSBP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#define streq(a, b) (strcmp((a), (b)) == 0)
+
+#define ForAllChildren(smw, childP) \
+for ((childP) = (SmeObject *)(smw)->composite.children; \
+ (childP) < (SmeObject *)((smw)->composite.children \
+ + (smw)->composite.num_children); \
+ (childP)++)
+
+#ifndef OLDXAW
+#define SMW_UNMAPPING 0x01
+#define SMW_POPLEFT 0x02
+#endif
+
+/*
+ * Class Methods
+ */
+static void XawSimpleMenuChangeManaged(Widget);
+static void XawSimpleMenuClassInitialize(void);
+static void XawSimpleMenuClassPartInitialize(WidgetClass);
+static XtGeometryResult XawSimpleMenuGeometryManager(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawSimpleMenuInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawSimpleMenuRealize(Widget, XtValueMask*, XSetWindowAttributes*);
+static void XawSimpleMenuRedisplay(Widget, XEvent*, Region);
+static void XawSimpleMenuResize(Widget);
+static Boolean XawSimpleMenuSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static Boolean XawSimpleMenuSetValuesHook(Widget, ArgList, Cardinal*);
+#ifndef OLDXAW
+static void PopupSubMenu(SimpleMenuWidget);
+static void PopdownSubMenu(SimpleMenuWidget);
+static void PopupCB(Widget, XtPointer, XtPointer);
+#endif
+
+/*
+ * Prototypes
+ */
+static void AddPositionAction(XtAppContext, XPointer);
+static void CalculateNewSize(Widget, Dimension*, Dimension*);
+static void ChangeCursorOnGrab(Widget, XtPointer, XtPointer);
+static void CreateLabel(Widget);
+static SmeObject DoGetEventEntry(Widget, int, int);
+static Widget FindMenu(Widget, String);
+static SmeObject GetEventEntry(Widget, XEvent*);
+static void Layout(Widget, Dimension*, Dimension*);
+static void MakeResizeRequest(Widget);
+static void MakeSetValuesRequest(Widget, unsigned int, unsigned int);
+static void MoveMenu(Widget, int, int);
+static void PositionMenu(Widget, XPoint*);
+
+/*
+ * Actions
+ */
+static void Highlight(Widget, XEvent*, String*, Cardinal*);
+static void Notify(Widget, XEvent*, String*, Cardinal*);
+#ifndef OLDXAW
+static void Popdown(Widget, XEvent*, String*, Cardinal*);
+#endif
+static void PositionMenuAction(Widget, XEvent*, String*, Cardinal*);
+static void Unhighlight(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(SimpleMenuRec, simple_menu.field)
+
+static XtResource resources[] = {
+ /* label */
+ {
+ XtNlabel,
+ XtCLabel,
+ XtRString,
+ sizeof(String),
+ offset(label_string),
+ XtRString,
+ NULL
+ },
+ {
+ XtNlabelClass,
+ XtCLabelClass,
+ XtRPointer,
+ sizeof(WidgetClass),
+ offset(label_class),
+ XtRImmediate,
+ NULL
+ },
+
+ /* layout */
+ {
+ XtNrowHeight,
+ XtCRowHeight,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(row_height),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNtopMargin,
+ XtCVerticalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(top_margin),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNbottomMargin,
+ XtCVerticalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(bottom_margin),
+ XtRImmediate,
+ (XtPointer)0
+ },
+#ifndef OLDXAW
+ {
+ XtNleftMargin,
+ XtCHorizontalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(left_margin),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNrightMargin,
+ XtCHorizontalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(right_margin),
+ XtRImmediate,
+ (XtPointer)0
+ },
+#endif
+
+ /* misc */
+ {
+ XtNallowShellResize,
+ XtCAllowShellResize,
+ XtRBoolean,
+ sizeof(Boolean),
+ XtOffsetOf(SimpleMenuRec, shell.allow_shell_resize),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNcursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(cursor),
+ XtRImmediate,
+ (XtPointer)None
+ },
+ {
+ XtNmenuOnScreen,
+ XtCMenuOnScreen,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(menu_on_screen),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNpopupOnEntry,
+ XtCPopupOnEntry,
+ XtRWidget,
+ sizeof(Widget),
+ offset(popup_entry),
+ XtRWidget,
+ NULL
+ },
+ {
+ XtNbackingStore,
+ XtCBackingStore,
+ XtRBackingStore,
+ sizeof(int),
+ offset(backing_store),
+ XtRImmediate,
+ (XtPointer)(Always + WhenMapped + NotUseful)
+ },
+#ifndef OLDXAW
+ {
+ XawNdisplayList,
+ XawCDisplayList,
+ XawRDisplayList,
+ sizeof(XawDisplayList*),
+ offset(display_list),
+ XtRImmediate,
+ NULL
+ },
+#endif
+};
+#undef offset
+
+static char defaultTranslations[] =
+"<Enter>:" "highlight()\n"
+"<Leave>:" "unhighlight()\n"
+"<BtnMotion>:" "highlight()\n"
+#ifndef OLDXAW
+"<BtnUp>:" "popdown() notify() unhighlight()\n"
+#else
+"<BtnUp>:" "MenuPopdown() notify() unhighlight()\n"
+#endif
+;
+
+static XtActionsRec actionsList[] =
+{
+ {"notify", Notify},
+ {"highlight", Highlight},
+ {"unhighlight", Unhighlight},
+#ifndef OLDXAW
+ {"popdown", Popdown},
+ {"set-values", XawSetValuesAction},
+ {"get-values", XawGetValuesAction},
+ {"declare", XawDeclareAction},
+ {"call-proc", XawCallProcAction},
+#endif
+};
+
+static CompositeClassExtensionRec extension_rec = {
+ NULL, /* next_extension */
+ NULLQUARK, /* record_type */
+ XtCompositeExtensionVersion, /* version */
+ sizeof(CompositeClassExtensionRec), /* record_size */
+ True, /* accepts_objects */
+};
+
+#define Superclass (&overrideShellClassRec)
+SimpleMenuClassRec simpleMenuClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "SimpleMenu", /* class_name */
+ sizeof(SimpleMenuRec), /* size */
+ XawSimpleMenuClassInitialize, /* class_initialize */
+ XawSimpleMenuClassPartInitialize, /* class_part_initialize */
+ False, /* class_inited */
+ XawSimpleMenuInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawSimpleMenuRealize, /* realize */
+ actionsList, /* actions */
+ XtNumber(actionsList), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XawSimpleMenuResize, /* resize */
+ XawSimpleMenuRedisplay, /* expose */
+ XawSimpleMenuSetValues, /* set_values */
+ XawSimpleMenuSetValuesHook, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* intrinsics version */
+ NULL, /* callback offsets */
+ defaultTranslations, /* tm_table */
+ NULL, /* query_geometry */
+ NULL, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* composite */
+ {
+ XawSimpleMenuGeometryManager, /* geometry_manager */
+ XawSimpleMenuChangeManaged, /* change_managed */
+ XtInheritInsertChild, /* insert_child */
+ XtInheritDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ /* shell */
+ {
+ NULL, /* extension */
+ },
+ /* override */
+ {
+ NULL, /* extension */
+ },
+ /* simple_menu */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass simpleMenuWidgetClass = (WidgetClass)&simpleMenuClassRec;
+
+/*
+ * Implementation
+ */
+/*
+ * Function:
+ * XawSimpleMenuClassInitialize
+ *
+ * Description:
+ * Class Initialize routine, called only once.
+ */
+static void
+XawSimpleMenuClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtAddConverter(XtRString, XtRBackingStore, XmuCvtStringToBackingStore,
+ NULL, 0);
+ XtSetTypeConverter(XtRBackingStore, XtRString, XmuCvtBackingStoreToString,
+ NULL, 0, XtCacheNone, NULL);
+ XmuAddInitializer(AddPositionAction, NULL);
+}
+
+/*
+ * Function:
+ * XawSimpleMenuClassPartInitialize
+ * Arguments: wc - the widget class of the subclass.
+ *
+ * Description:
+ * Class Part Initialize routine, called for every subclass. Makes
+ * sure that the subclasses pick up the extension record.
+ */
+static void
+XawSimpleMenuClassPartInitialize(WidgetClass wc)
+{
+ SimpleMenuWidgetClass smwc = (SimpleMenuWidgetClass)wc;
+
+ /*
+ * Make sure that our subclass gets the extension rec too
+ */
+ extension_rec.next_extension = smwc->composite_class.extension;
+ smwc->composite_class.extension = (XtPointer) &extension_rec;
+}
+
+/*
+ * Function:
+ * XawSimpleMenuInitialize
+ *
+ * Parameters:
+ * request - widget requested by the argument list
+ * cnew - new widget with both resource and non resource values
+ *
+ * Description:
+ * Initializes the simple menu widget.
+ */
+/*ARGSUSED*/
+static void
+XawSimpleMenuInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)cnew;
+ Dimension width, height;
+
+ XmuCallInitializers(XtWidgetToApplicationContext(cnew));
+
+ if (smw->simple_menu.label_class == NULL)
+ smw->simple_menu.label_class = smeBSBObjectClass;
+
+ smw->simple_menu.label = NULL;
+ smw->simple_menu.entry_set = NULL;
+ smw->simple_menu.recursive_set_values = False;
+#ifndef OLDXAW
+ smw->simple_menu.sub_menu = NULL;
+ smw->simple_menu.state = 0;
+
+ XtAddCallback(cnew, XtNpopupCallback, PopupCB, NULL);
+#endif
+
+ if (smw->simple_menu.label_string != NULL)
+ CreateLabel(cnew);
+
+ width = height = 0;
+ CalculateNewSize(cnew, &width, &height);
+
+ smw->simple_menu.menu_width = True;
+
+ if (XtWidth(smw) == 0) {
+ smw->simple_menu.menu_width = False;
+ XtWidth(smw) = width;
+ }
+
+ smw->simple_menu.menu_height = True;
+
+ if (XtHeight(smw) == 0) {
+ smw->simple_menu.menu_height = False;
+ XtHeight(smw) = height;
+ }
+
+ /*
+ * Add a popup_callback routine for changing the cursor
+ */
+ XtAddCallback(cnew, XtNpopupCallback, ChangeCursorOnGrab, NULL);
+}
+
+/*
+ * Function:
+ * XawSimpleMenuRedisplay
+ *
+ * Parameters:
+ * w - simple menu widget
+ * event - X event that caused this redisplay
+ * region - region the needs to be repainted
+ *
+ * Description:
+ * Redisplays the contents of the widget.
+ */
+/*ARGSUSED*/
+static void
+XawSimpleMenuRedisplay(Widget w, XEvent *event, Region region)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+ SmeObject *entry;
+ SmeObjectClass cclass;
+
+ if (region == NULL)
+ XClearWindow(XtDisplay(w), XtWindow(w));
+
+#ifndef OLDXAW
+ if (smw->simple_menu.display_list)
+ XawRunDisplayList(w, smw->simple_menu.display_list, event, region);
+#endif
+
+ /*
+ * Check and Paint each of the entries - including the label
+ */
+ ForAllChildren(smw, entry) {
+ if (!XtIsManaged((Widget)*entry))
+ continue;
+
+ if (region != NULL)
+ switch(XRectInRegion(region, XtX(*entry),XtY(*entry),
+ XtWidth(*entry), XtHeight(*entry))) {
+ case RectangleIn:
+ case RectanglePart:
+ break;
+ default:
+ continue;
+ }
+
+ cclass = (SmeObjectClass)(*entry)->object.widget_class;
+
+ if (cclass->rect_class.expose != NULL)
+ (cclass->rect_class.expose)((Widget)*entry, NULL, NULL);
+ }
+}
+
+/*
+ * Function:
+ * XawSimpleMenuRealize
+ *
+ * Parameters:
+ * w - simple menu widget
+ * mask - value mask for the window to create
+ * attrs - attributes for the window to create
+ *
+ * Description:
+ * Realizes the widget.
+ */
+static void
+XawSimpleMenuRealize(Widget w, XtValueMask *mask, XSetWindowAttributes *attrs)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+#ifndef OLDXAW
+ XawPixmap *pixmap;
+#endif
+
+ attrs->cursor = smw->simple_menu.cursor;
+ *mask |= CWCursor;
+ if (smw->simple_menu.backing_store == Always ||
+ smw->simple_menu.backing_store == NotUseful ||
+ smw->simple_menu.backing_store == WhenMapped) {
+ *mask |= CWBackingStore;
+ attrs->backing_store = smw->simple_menu.backing_store;
+ }
+ else
+ *mask &= ~CWBackingStore;
+
+ (*Superclass->core_class.realize)(w, mask, attrs);
+
+#ifndef OLDXAW
+ if (w->core.background_pixmap > XtUnspecifiedPixmap) {
+ pixmap = XawPixmapFromXPixmap(w->core.background_pixmap, XtScreen(w),
+ w->core.colormap, w->core.depth);
+ if (pixmap && pixmap->mask)
+ XawReshapeWidget(w, pixmap);
+ }
+#endif
+}
+
+/*
+ * Function:
+ * XawSimpleMenuResize
+ *
+ * Parameters:
+ * w - simple menu widget
+ *
+ * Description:
+ * Handle the menu being resized.
+ */
+static void
+XawSimpleMenuResize(Widget w)
+{
+ if (!XtIsRealized(w))
+ return;
+
+ Layout(w, NULL, NULL);
+
+ XawSimpleMenuRedisplay(w, NULL, NULL);
+}
+
+/*
+ * Function:
+ * XawSimpleMenuSetValues
+ *
+ * Parameters:
+ * current - current state of the widget
+ * request - what was requested
+ * cnew - what the widget will become
+ *
+ * Description:
+ * Relayout the menu when one of the resources is changed.
+ */
+/*ARGSUSED*/
+static Boolean
+XawSimpleMenuSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SimpleMenuWidget smw_old = (SimpleMenuWidget)current;
+ SimpleMenuWidget smw_new = (SimpleMenuWidget)cnew;
+ Boolean ret_val = False, layout = False;
+
+ if (!XtIsRealized(current))
+ return (False);
+
+ if (!smw_new->simple_menu.recursive_set_values) {
+ if (XtWidth(smw_new) != XtWidth(smw_old)) {
+ smw_new->simple_menu.menu_width = XtWidth(smw_new) != 0;
+ layout = True;
+ }
+ if (XtHeight(smw_new) != XtHeight(smw_old)) {
+ smw_new->simple_menu.menu_height = XtHeight(smw_new) != 0;
+ layout = True;
+ }
+ }
+
+ if (smw_old->simple_menu.cursor != smw_new->simple_menu.cursor)
+ XDefineCursor(XtDisplay(cnew), XtWindow(cnew),
+ smw_new->simple_menu.cursor);
+
+ if (smw_old->simple_menu.label_string !=smw_new->simple_menu.label_string) {
+ if (smw_new->simple_menu.label_string == NULL) /* Destroy */
+ XtDestroyWidget((Widget)smw_old->simple_menu.label);
+ else if (smw_old->simple_menu.label_string == NULL) /* Create */
+ CreateLabel(cnew);
+ else { /* Change */
+ Arg arglist[1];
+
+ XtSetArg(arglist[0], XtNlabel, smw_new->simple_menu.label_string);
+ XtSetValues((Widget)smw_new->simple_menu.label, arglist, ONE);
+ }
+ }
+
+ if (smw_old->simple_menu.label_class != smw_new->simple_menu.label_class)
+ XtAppWarning(XtWidgetToApplicationContext(cnew),
+ "No Dynamic class change of the SimpleMenu Label.");
+
+ if (smw_old->simple_menu.top_margin != smw_new->simple_menu.top_margin
+ || smw_old->simple_menu.bottom_margin
+ != smw_new->simple_menu.bottom_margin) {
+ layout = True;
+ ret_val = True;
+ }
+
+#ifndef OLDXAW
+ if (smw_old->core.background_pixmap != smw_new->core.background_pixmap) {
+ XawPixmap *opix, *npix;
+
+ opix = XawPixmapFromXPixmap(smw_old->core.background_pixmap,
+ XtScreen(smw_old), smw_old->core.colormap,
+ smw_old->core.depth);
+ npix = XawPixmapFromXPixmap(smw_new->core.background_pixmap,
+ XtScreen(smw_new), smw_new->core.colormap,
+ smw_new->core.depth);
+ if ((npix && npix->mask) || (opix && opix->mask))
+ XawReshapeWidget(cnew, npix);
+ }
+#endif
+
+ if (layout)
+ Layout(cnew, NULL, NULL);
+
+ return (ret_val);
+}
+
+/*
+ * Function:
+ * XawSimpleMenuSetValuesHook
+ *
+ * Parameters:
+ * w - menu widget
+ * arglist - argument list passed to XtSetValues
+ * num_args - number of args
+ *
+ * Description:
+ * To handle a special case, this is passed the actual arguments.
+ */
+static Boolean
+XawSimpleMenuSetValuesHook(Widget w, ArgList arglist, Cardinal *num_args)
+{
+ Cardinal i;
+ Dimension width, height;
+
+ width = XtWidth(w);
+ height = XtHeight(w);
+
+ for (i = 0 ; i < *num_args ; i++) {
+ if (streq(arglist[i].name, XtNwidth))
+ width = (Dimension)arglist[i].value;
+ if (streq(arglist[i].name, XtNheight))
+ height = (Dimension) arglist[i].value;
+ }
+
+ if (width != XtWidth(w) || height != XtHeight(w))
+ MakeSetValuesRequest(w, width, height);
+
+ return (False);
+}
+
+/*
+ * Geometry Management routines
+ */
+/*
+ * Function:
+ * XawSimpleMenuGeometryManager
+ *
+ * Parameters:
+ * w - Menu Entry making the request
+ * request - requested new geometry
+ * reply - the allowed geometry.
+ *
+ * Description:
+ * This is the SimpleMenu Widget's Geometry Manager.
+ *
+ * Returns:
+ * XtGeometry{Yes, No, Almost}
+ */
+static XtGeometryResult
+XawSimpleMenuGeometryManager(Widget w, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)XtParent(w);
+ SmeObject entry = (SmeObject)w;
+ XtGeometryMask mode = request->request_mode;
+ XtGeometryResult answer;
+ Dimension old_height, old_width;
+
+ if (!(mode & CWWidth) && !(mode & CWHeight))
+ return (XtGeometryNo);
+
+ reply->width = request->width;
+ reply->height = request->height;
+
+ old_width = XtWidth(entry);
+ old_height = XtHeight(entry);
+
+ Layout(w, &reply->width, &reply->height);
+
+ /*
+ * Since we are an override shell and have no parent there is no one to
+ * ask to see if this geom change is okay, so I am just going to assume
+ * we can do whatever we want. If you subclass be very careful with this
+ * assumption, it could bite you.
+ *
+ * Chris D. Peterson - Sept. 1989.
+ */
+ if ((!(mode & CWWidth) || reply->width == request->width)
+ && (!(mode & CWHeight) || reply->height == request->height)) {
+ if (mode & XtCWQueryOnly) { /* Actually perform the layout */
+ XtWidth(entry) = old_width;
+ XtHeight(entry) = old_height;
+ }
+ else
+ Layout((Widget)smw, NULL, NULL);
+ answer = XtGeometryDone;
+ }
+ else {
+ XtWidth(entry) = old_width;
+ XtHeight(entry) = old_height;
+
+ if ((reply->width == request->width && !(mode & CWHeight))
+ || (reply->height == request->height && !(mode & CWWidth))
+ || (reply->width == request->width
+ && reply->height == request->height))
+ answer = XtGeometryNo;
+ else {
+ answer = XtGeometryAlmost;
+ reply->request_mode = 0;
+ if (reply->width != request->width)
+ reply->request_mode |= CWWidth;
+ if (reply->height != request->height)
+ reply->request_mode |= CWHeight;
+ }
+ }
+
+ return (answer);
+}
+
+/*
+ * Function:
+ * XawSimpleMenuChangeManaged
+ *
+ * Parameters:
+ * w - simple menu widget
+ *
+ * Description:
+ * Called whenever a new child is managed.
+ */
+static void
+XawSimpleMenuChangeManaged(Widget w)
+{
+ Layout(w, NULL, NULL);
+}
+
+/*
+ * Global Action Routines
+ *
+ * These actions routines will be added to the application's
+ * global action list
+ */
+/*
+ * Function:
+ * PositionMenuAction
+ *
+ * Parameters:
+ * w - a widget (no the simple menu widget)
+ * event - the event that caused this action
+ * params - parameters passed to the routine.
+ * we expect the name of the menu here.
+ * num_params - ""
+ *
+ * Description:
+ * Positions the simple menu widget.
+ */
+/*ARGSUSED*/
+static void
+PositionMenuAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ Widget menu;
+ XPoint loc;
+
+ if (*num_params != 1) {
+ XtAppWarning(XtWidgetToApplicationContext(w),
+ "SimpleMenuWidget: position menu action expects "
+ "only one parameter which is the name of the menu.");
+ return;
+ }
+
+ if ((menu = FindMenu(w, params[0])) == NULL) {
+ char error_buf[BUFSIZ];
+
+ (void)XmuSnprintf(error_buf, sizeof(error_buf),
+ "SimpleMenuWidget: could not find menu named %s.",
+ params[0]);
+ XtAppWarning(XtWidgetToApplicationContext(w), error_buf);
+ return;
+ }
+
+ switch (event->type) {
+ case ButtonPress:
+ case ButtonRelease:
+ loc.x = event->xbutton.x_root;
+ loc.y = event->xbutton.y_root;
+ PositionMenu(menu, &loc);
+ break;
+ case EnterNotify:
+ case LeaveNotify:
+ loc.x = event->xcrossing.x_root;
+ loc.y = event->xcrossing.y_root;
+ PositionMenu(menu, &loc);
+ break;
+ case MotionNotify:
+ loc.x = event->xmotion.x_root;
+ loc.y = event->xmotion.y_root;
+ PositionMenu(menu, &loc);
+ break;
+ default:
+ PositionMenu(menu, NULL);
+ break;
+ }
+}
+
+/*
+ * Widget Action Routines
+ */
+/*
+ * Function:
+ * Unhighlight
+ *
+ * Parameters:
+ * w - simple menu widget
+ * event - event that caused this action
+ * params - not used
+ * num_params - ""
+ *
+ * Description:
+ * Unhighlights current entry.
+ */
+/*ARGSUSED*/
+static void
+Unhighlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+ SmeObject entry = smw->simple_menu.entry_set;
+
+ if (entry == NULL)
+ return;
+
+#ifndef OLDXAW
+ if (!smw->simple_menu.sub_menu)
+#endif
+ {
+ SmeObjectClass cclass;
+
+ smw->simple_menu.entry_set = NULL;
+ cclass = (SmeObjectClass)entry->object.widget_class;
+ (cclass->sme_class.unhighlight)((Widget)entry);
+ }
+}
+
+/*
+ * Function:
+ * Highlight
+ *
+ * Parameters:
+ * w - simple menu widget
+ * event - event that caused this action
+ * params - not used
+ * num_params - ""
+ *
+ * Description:
+ * Highlights current entry.
+ */
+/*ARGSUSED*/
+static void
+Highlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+ SmeObject entry;
+
+ if (!XtIsSensitive(w))
+ return;
+
+ entry = GetEventEntry(w, event);
+
+ if (entry == smw->simple_menu.entry_set)
+ return;
+
+#ifndef OLDXAW
+ if (!smw->simple_menu.sub_menu)
+#endif
+ Unhighlight(w, event, params, num_params);
+
+ if (entry == NULL)
+ return;
+
+ if (!XtIsSensitive((Widget)entry))
+ return;
+
+#ifndef OLDXAW
+ if (smw->simple_menu.sub_menu)
+ PopdownSubMenu(smw);
+#endif
+
+ Unhighlight(w, event, params, num_params);
+
+#ifndef OLDXAW
+ if (!(smw->simple_menu.state & SMW_UNMAPPING))
+#endif
+ {
+ SmeObjectClass cclass;
+
+ smw->simple_menu.entry_set = entry;
+ cclass = (SmeObjectClass)entry->object.widget_class;
+
+ (cclass->sme_class.highlight)((Widget)entry);
+
+#ifndef OLDXAW
+ if (XtIsSubclass((Widget)entry, smeBSBObjectClass))
+ PopupSubMenu(smw);
+#endif
+ }
+}
+
+/*
+ * Function:
+ * Notify
+ *
+ * Parameters:
+ * w - simple menu widget
+ * event - event that caused this action
+ * params - not used
+ * num_params - ""
+ *
+ * Description:
+ * Notify user of current entry.
+ */
+/*ARGSUSED*/
+static void
+Notify(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ SmeObject entry;
+ SmeObjectClass cclass;
+
+ /* may be a propagated event from a sub menu, need to check it */
+ if (XtWindow(w) != event->xany.window)
+ return;
+ entry = GetEventEntry(w, event);
+ if (entry == NULL || !XtIsSensitive((Widget)entry))
+ return;
+
+ cclass = (SmeObjectClass) entry->object.widget_class;
+ (cclass->sme_class.notify)((Widget)entry);
+}
+
+/*
+ * Public Functions
+ */
+/*
+ * Function:
+ * XawSimpleMenuAddGlobalActions
+ *
+ * Arguments:
+ * app_con - appcontext
+ *
+ * Description:
+ * Adds the global actions to the simple menu widget.
+ */
+void
+XawSimpleMenuAddGlobalActions(XtAppContext app_con)
+{
+ XtInitializeWidgetClass(simpleMenuWidgetClass);
+ XmuCallInitializers(app_con);
+}
+
+/*
+ * Function:
+ * XawSimpleMenuGetActiveEntry
+ *
+ * Parameters:
+ * w - smw widget
+ *
+ * Description:
+ * Gets the currently active (set) entry.
+ *
+ * Returns:
+ * The currently set entry or NULL if none is set
+ */
+Widget
+XawSimpleMenuGetActiveEntry(Widget w)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+
+ return ((Widget)smw->simple_menu.entry_set);
+}
+
+/*
+ * Function:
+ * XawSimpleMenuClearActiveEntry
+ *
+ * Parameters:
+ * w - smw widget
+ *
+ * Description:
+ * Unsets the currently active (set) entry.
+ */
+void
+XawSimpleMenuClearActiveEntry(Widget w)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+
+ smw->simple_menu.entry_set = NULL;
+}
+
+/*
+ * Private Functions
+ */
+/*
+ * Function:
+ * CreateLabel
+ *
+ * Parameters:
+ * w - smw widget
+ *
+ * Description:
+ * Creates the label object and makes sure it is the first child in
+ * in the list.
+ */
+static void
+CreateLabel(Widget w)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+ Widget *child, *next_child;
+ int i;
+ Arg args[2];
+
+ if (smw->simple_menu.label_string == NULL ||
+ smw->simple_menu.label != NULL) {
+ XtAppWarning(XtWidgetToApplicationContext(w),
+ "Xaw Simple Menu Widget: label string is NULL or "
+ "label already exists, no label is being created.");
+ return;
+ }
+
+ XtSetArg(args[0], XtNlabel, smw->simple_menu.label_string);
+ XtSetArg(args[1], XtNjustify, XtJustifyCenter);
+ smw->simple_menu.label = (SmeObject)
+ XtCreateManagedWidget("menuLabel",
+ smw->simple_menu.label_class, w, args, TWO);
+
+ next_child = NULL;
+ for (child = smw->composite.children + smw->composite.num_children,
+ i = smw->composite.num_children; i > 0; i--, child--) {
+ if (next_child != NULL)
+ *next_child = *child;
+ next_child = child;
+ }
+ *child = (Widget)smw->simple_menu.label;
+}
+
+/*
+ * Function:
+ * Layout
+ *
+ * Arguments:
+ * w - See below
+ * width_ret - returned width
+ * height_ret - returned height
+ *
+ * Note:
+ * if width == NULL || height == NULL then it assumes the you do not care
+ * about the return values, and just want a relayout.
+ *
+ * if this is not the case then it will set width_ret and height_ret
+ * to be width and height that the child would get if it were layed out
+ * at this time.
+ *
+ * "w" can be the simple menu widget or any of its object children.
+ */
+static void
+Layout(Widget w, Dimension *width_ret, Dimension *height_ret)
+{
+ SmeObject current_entry;
+ SimpleMenuWidget smw;
+ Dimension width, height;
+ Boolean allow_change_size;
+ Widget kid;
+ Cardinal i, count, n;
+ int width_kid, height_kid, tmp_w, tmp_h;
+ short vadd, hadd, x_ins, y_ins;
+ Dimension *widths;
+
+ height = 0;
+
+ if (XtIsSubclass(w, simpleMenuWidgetClass)) {
+ smw = (SimpleMenuWidget)w;
+ current_entry = NULL;
+ }
+ else {
+ smw = (SimpleMenuWidget)XtParent(w);
+ current_entry = (SmeObject)w;
+ }
+
+ allow_change_size = (!XtIsRealized((Widget)smw)
+ || smw->shell.allow_shell_resize);
+
+ for (i = smw->simple_menu.label ? 1 : 0;
+ i < smw->composite.num_children;
+ i++) {
+ XtWidgetGeometry preferred;
+
+ kid = smw->composite.children[i];
+ if (!XtIsManaged(kid))
+ continue;
+ if (smw->simple_menu.row_height != 0)
+ XtHeight(kid) = smw->simple_menu.row_height;
+ XtQueryGeometry(kid, NULL, &preferred);
+ if (preferred.request_mode & CWWidth)
+ XtWidth(kid) = preferred.width;
+ }
+
+ if (smw->simple_menu.label
+ && XtIsManaged((Widget)smw->simple_menu.label)) {
+ XtWidgetGeometry preferred;
+
+ kid = (Widget)smw->simple_menu.label;
+ XtQueryGeometry(kid, NULL, &preferred);
+ if (preferred.request_mode & CWWidth)
+ XtWidth(kid) = preferred.width;
+ if (preferred.request_mode & CWHeight)
+ XtHeight(kid) = preferred.height;
+ }
+
+ /* reset */
+ if (!smw->simple_menu.menu_width)
+ XtWidth(smw) = 0;
+ if (!smw->simple_menu.menu_height)
+ XtHeight(smw) = 0;
+ if (!XtWidth(smw) || !XtHeight(smw))
+ MakeResizeRequest((Widget)smw);
+
+ widths = (Dimension *)XtMalloc(sizeof(Dimension));
+#ifndef OLDXAW
+ hadd = smw->simple_menu.left_margin;
+#else
+ hadd = 0;
+#endif
+ vadd = smw->simple_menu.top_margin;
+ if (smw->simple_menu.label)
+ vadd += XtHeight(smw->simple_menu.label);
+
+ count = 1;
+ width = tmp_w = tmp_h = n = 0;
+ height = vadd;
+
+ for (i = smw->simple_menu.label ? 1 : 0;
+ i < smw->composite.num_children;
+ i++) {
+ kid = smw->composite.children[i];
+ if (!XtIsManaged(kid))
+ continue;
+ width_kid = XtWidth(kid);
+ height_kid = XtHeight(kid);
+
+ if (n && (height + height_kid + smw->simple_menu.bottom_margin
+ > XtHeight(smw))) {
+ ++count;
+ widths = (Dimension *)XtRealloc((char *)widths,
+ sizeof(Dimension) * count);
+ widths[count - 1] = width_kid;
+ width += tmp_w;
+ tmp_w = width_kid;
+ height = height_kid + vadd;
+ }
+ else
+ height += height_kid;
+ if (height > tmp_h)
+ tmp_h = height;
+ if (width_kid > tmp_w)
+ widths[count - 1] = tmp_w = width_kid;
+ ++n;
+ }
+
+ height = tmp_h + smw->simple_menu.bottom_margin;
+ width += tmp_w;
+
+ if (smw->simple_menu.label && width < XtWidth(smw->simple_menu.label)) {
+ float inc;
+
+ inc = (XtWidth(smw->simple_menu.label) - width) / (float)count;
+ width = XtWidth(smw->simple_menu.label);
+ for (n = 0; n < count; n++)
+ widths[n] += inc;
+ }
+
+#ifndef OLDXAW
+ width += hadd + smw->simple_menu.right_margin;
+#endif
+
+ x_ins = n = count = 0;
+ tmp_w = widths[0];
+ tmp_h = vadd;
+
+ for (i = smw->simple_menu.label ? 1 : 0;
+ i < smw->composite.num_children;
+ i++) {
+ kid = smw->composite.children[i];
+ if (!XtIsManaged(kid))
+ continue;
+
+ height_kid = XtHeight(kid);
+
+ if (n && (tmp_h + height_kid + smw->simple_menu.bottom_margin
+ > XtHeight(smw))) {
+ x_ins = tmp_w;
+ y_ins = vadd;
+ ++count;
+ tmp_w += widths[count];
+ tmp_h = height_kid + vadd;
+ }
+ else {
+ y_ins = tmp_h;
+ tmp_h += height_kid;
+ }
+ ++n;
+
+ XtX(kid) = x_ins + hadd;
+ XtY(kid) = y_ins;
+ XtWidth(kid) = widths[count];
+ }
+
+ XtFree((char *)widths);
+
+ if (allow_change_size)
+ MakeSetValuesRequest((Widget) smw, width, height);
+
+ if (smw->simple_menu.label) {
+ XtX(smw->simple_menu.label) = 0;
+ XtY(smw->simple_menu.label) = smw->simple_menu.top_margin;
+ XtWidth(smw->simple_menu.label) = XtWidth(smw)
+#ifndef OLDXAW
+ - (smw->simple_menu.left_margin + smw->simple_menu.right_margin)
+#endif
+ ;
+ }
+ if (current_entry) {
+ if (width_ret)
+ *width_ret = XtWidth(current_entry);
+ if (height_ret)
+ *height_ret = XtHeight(current_entry);
+ }
+}
+
+/*
+ * Function:
+ * AddPositionAction
+ *
+ * Parameters:
+ * app_con - application context
+ * data - (not used)
+ *
+ * Description:
+ * Adds the XawPositionSimpleMenu action to the global
+ * action list for this appcon.
+ */
+/*ARGSUSED*/
+static void
+AddPositionAction(XtAppContext app_con, XPointer data)
+{
+ static XtActionsRec pos_action[] = {
+ {"XawPositionSimpleMenu", PositionMenuAction},
+ };
+
+ XtAppAddActions(app_con, pos_action, XtNumber(pos_action));
+}
+
+/*
+ * Function:
+ * FindMenu
+ *
+ * Parameters:
+ * widget - reference widget
+ * name - menu widget's name
+ *
+ * Description:
+ * Find the menu give a name and reference widget
+ *
+ * Returns:
+ * The menu widget or NULL.
+ */
+static Widget
+FindMenu(Widget widget, String name)
+{
+ Widget w, menu;
+
+ for (w = widget; w != NULL; w = XtParent(w))
+ if ((menu = XtNameToWidget(w, name)) != NULL)
+ return (menu);
+
+ return (NULL);
+}
+
+/*
+ * Function:
+ * PositionMenu
+ *
+ * Parameters:
+ * w - simple menu widget
+ * location - pointer the the position or NULL
+ *
+ * Description:
+ * Places the menu
+ */
+static void
+PositionMenu(Widget w, XPoint *location)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+ SmeObject entry;
+ XPoint t_point;
+
+ if (location == NULL) {
+ Window temp1, temp2;
+ int root_x, root_y, tempX, tempY;
+ unsigned int tempM;
+
+ location = &t_point;
+ if (XQueryPointer(XtDisplay(w), XtWindow(w), &temp1, &temp2,
+ &root_x, &root_y, &tempX, &tempY, &tempM) == False) {
+ XtAppWarning(XtWidgetToApplicationContext(w),
+ "Xaw Simple Menu Widget: "
+ "Could not find location of mouse pointer");
+ return;
+ }
+ location->x = (short) root_x;
+ location->y = (short) root_y;
+ }
+
+ /*
+ * The width will not be correct unless it is realized
+ */
+ XtRealizeWidget(w);
+
+ location->x -= XtWidth(w) >> 1;
+
+ if (smw->simple_menu.popup_entry == NULL)
+ entry = smw->simple_menu.label;
+ else
+ entry = smw->simple_menu.popup_entry;
+
+ if (entry != NULL)
+ location->y -= XtY(entry) + (XtHeight(entry) >> 1);
+
+ MoveMenu(w, location->x, location->y);
+}
+
+/*
+ * Function:
+ * MoveMenu
+ *
+ * Parameters:
+ * w - simple menu widget
+ * x - current location of the widget
+ * y - ""
+ *
+ * Description:
+ * Actually moves the menu, may force it to
+ * to be fully visable if menu_on_screen is True.
+ */
+static void
+MoveMenu(Widget w, int x, int y)
+{
+ Arg arglist[2];
+ Cardinal num_args = 0;
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+
+ if (smw->simple_menu.menu_on_screen) {
+ int width = XtWidth(w) + (XtBorderWidth(w) << 1);
+ int height = XtHeight(w) + (XtBorderWidth(w) << 1);
+
+ if (x >= 0) {
+ int scr_width = WidthOfScreen(XtScreen(w));
+
+ if (x + width > scr_width)
+ x = scr_width - width;
+ }
+ if (x < 0)
+ x = 0;
+
+ if (y >= 0) {
+ int scr_height = HeightOfScreen(XtScreen(w));
+
+ if (y + height > scr_height)
+ y = scr_height - height;
+ }
+ if (y < 0)
+ y = 0;
+ }
+
+ XtSetArg(arglist[num_args], XtNx, x); num_args++;
+ XtSetArg(arglist[num_args], XtNy, y); num_args++;
+ XtSetValues(w, arglist, num_args);
+}
+
+/*
+ * Function:
+ * ChangeCursorOnGrab
+ *
+ * Parameters:
+ * w - menu widget
+ * temp1 - not used
+ * temp2 - ""
+ *
+ * Description:
+ * Changes the cursor on the active grab to the one
+ * specified in out resource list.
+ */
+/*ARGSUSED*/
+static void
+ChangeCursorOnGrab(Widget w, XtPointer temp1, XtPointer temp2)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+
+ /*
+ * The event mask here is what is currently in the MIT implementation.
+ * There really needs to be a way to get the value of the mask out
+ * of the toolkit (CDP 5/26/89).
+ */
+ XChangeActivePointerGrab(XtDisplay(w), ButtonPressMask | ButtonReleaseMask,
+ smw->simple_menu.cursor,
+ XtLastTimestampProcessed(XtDisplay(w)));
+}
+
+/*
+ * Function:
+ * MakeSetValuesRequest
+ *
+ * Parameters:
+ * w - simple menu widget
+ * width - size requested
+ * height - ""
+ */
+static void
+MakeSetValuesRequest(Widget w, unsigned int width, unsigned int height)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+ Arg arglist[2];
+ Cardinal num_args = 0;
+
+ if (!smw->simple_menu.recursive_set_values) {
+ if (XtWidth(smw) != width || XtHeight(smw) != height) {
+ smw->simple_menu.recursive_set_values = True;
+ XtSetArg(arglist[num_args], XtNwidth, width); num_args++;
+ XtSetArg(arglist[num_args], XtNheight, height); num_args++;
+ XtSetValues(w, arglist, num_args);
+ }
+ else if (XtIsRealized((Widget)smw))
+ XawSimpleMenuRedisplay((Widget)smw, NULL, NULL);
+ }
+ smw->simple_menu.recursive_set_values = False;
+}
+
+static SmeObject
+DoGetEventEntry(Widget w, int x_loc, int y_loc)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+ SmeObject *entry;
+
+ ForAllChildren(smw, entry) {
+ if (!XtIsManaged((Widget)*entry))
+ continue;
+
+ if (x_loc > XtX(*entry)
+ && x_loc <= XtX(*entry) + XtWidth(*entry)
+ && y_loc > XtY(*entry)
+ && y_loc <= XtY(*entry) + XtHeight(*entry)) {
+ if (*entry == smw->simple_menu.label)
+ return (NULL); /* cannot select the label */
+ else
+ return (*entry);
+ }
+ }
+
+ return (NULL);
+}
+
+/*
+ * Function:
+ * GetEventEntry
+ *
+ * Parameters:
+ * w - simple menu widget
+ * event - X event
+ *
+ * Description:
+ * Gets an entry given an event that has X and Y coords.
+ *
+ * Returns:
+ * The entry that this point is in
+ */
+static SmeObject
+GetEventEntry(Widget w, XEvent *event)
+{
+ int x_loc, y_loc, x_root;
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+ SmeObject entry;
+ int warp, move;
+
+ switch (event->type) {
+ case MotionNotify:
+ x_loc = event->xmotion.x;
+ y_loc = event->xmotion.y;
+ x_root = event->xmotion.x_root;
+ break;
+ case EnterNotify:
+ case LeaveNotify:
+ x_loc = event->xcrossing.x;
+ y_loc = event->xcrossing.y;
+ x_root = event->xcrossing.x_root;
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ x_loc = event->xbutton.x;
+ y_loc = event->xbutton.y;
+ x_root = event->xbutton.x_root;
+ break;
+ default:
+ XtAppError(XtWidgetToApplicationContext(w),
+ "Unknown event type in GetEventEntry().");
+ return (NULL);
+ }
+
+ if (x_loc < 0 || x_loc >= XtWidth(smw) ||
+ y_loc < 0 || y_loc >= XtHeight(smw))
+ return (NULL);
+
+ /* Move the menu if it's outside the screen, does not check
+ * smw->simple_menu.menu_on_screen because menus is bigger than screen
+ */
+ if (x_root == WidthOfScreen(XtScreen(w)) - 1 &&
+ XtX(w) + XtWidth(w) + (XtBorderWidth(w)) > x_root) {
+ warp = -8;
+ if (smw->simple_menu.entry_set) {
+ entry = DoGetEventEntry(w,
+ XtX(smw->simple_menu.entry_set)
+ + XtWidth(smw->simple_menu.entry_set) + 1,
+ y_loc);
+ Unhighlight(w, event, NULL, NULL);
+ if (entry) {
+ warp = -(int)XtWidth(entry) >> 1;
+ move = x_loc - XtWidth(entry) - XtX(entry) + XtBorderWidth(w);
+ }
+ else {
+ warp = 0;
+ move = WidthOfScreen(XtScreen(w)) -
+ (XtX(w) + XtWidth(w) + (XtBorderWidth(w) << 1));
+ }
+ }
+ else {
+ warp = 0;
+ move = WidthOfScreen(XtScreen(w)) -
+ (XtX(w) + XtWidth(w) + (XtBorderWidth(w) << 1));
+ }
+ }
+ else if (x_root == 0 && XtX(w) < 0) {
+ warp = 8;
+ if (smw->simple_menu.entry_set) {
+ entry = DoGetEventEntry(w, XtX(smw->simple_menu.entry_set) - 1,
+ y_loc);
+ Unhighlight(w, event, NULL, NULL);
+ if (entry) {
+ warp = XtWidth(entry) >> 1;
+ move = x_loc - XtX(entry);
+ }
+ else
+ move = x_loc + XtBorderWidth(w);
+ }
+ else
+ move = x_loc + XtBorderWidth(w);
+ }
+ else
+ move = warp = 0;
+
+ if (move)
+ XtMoveWidget(w, XtX(w) + move, XtY(w));
+ if (warp)
+ XWarpPointer(XtDisplay(w), None, None, 0, 0, 0, 0, warp, 0);
+
+ return (DoGetEventEntry(w, x_loc, y_loc));
+}
+
+static void
+CalculateNewSize(Widget w, Dimension *width_return, Dimension *height_return)
+{
+ SimpleMenuWidget xaw = (SimpleMenuWidget)w;
+ Widget kid;
+ Cardinal i;
+ int width_kid, height_kid;
+ int width, height, tmp_w, tmp_h, max_dim;
+ short vadd, hadd;
+ int n, columns, test_h, num_children = 0;
+ Boolean try_layout = False;
+
+#ifndef OLDXAW
+ hadd = xaw->simple_menu.left_margin + xaw->simple_menu.right_margin;
+#else
+ hadd = 0;
+#endif
+ vadd = xaw->simple_menu.top_margin + xaw->simple_menu.bottom_margin;
+ if (xaw->simple_menu.label)
+ vadd += XtHeight(xaw->simple_menu.label);
+
+ if (*height_return)
+ max_dim = *height_return;
+ else if (!XtHeight(w)) {
+ max_dim = HeightOfScreen(XtScreen(w));
+ try_layout = True;
+ }
+ else
+ max_dim = XtHeight(w);
+ max_dim -= vadd;
+
+ width = height = tmp_w = tmp_h = n = test_h = 0;
+ columns = 1;
+ for (i = xaw->simple_menu.label ? 1 : 0;
+ i < xaw->composite.num_children;
+ i++) {
+ kid = xaw->composite.children[i];
+ if (!XtIsManaged(kid))
+ continue;
+ ++num_children;
+ width_kid = XtWidth(kid);
+ height_kid = XtHeight(kid);
+
+ if (try_layout) {
+ if (!test_h)
+ test_h = height_kid;
+ else if (test_h != height_kid)
+ try_layout = False;
+ }
+
+ if (n && (height + height_kid > max_dim)) {
+ ++columns;
+ width += tmp_w;
+ tmp_w = width_kid;
+ height = height_kid;
+ }
+ else
+ height += height_kid;
+ if (height > tmp_h)
+ tmp_h = height;
+ if (width_kid > tmp_w)
+ tmp_w = width_kid;
+ ++n;
+ }
+
+ height = tmp_h + vadd;
+ width += tmp_w + hadd;
+
+ if (xaw->simple_menu.label)
+ width = XawMax(width, XtWidth(xaw->simple_menu.label) + hadd);
+
+ *width_return = width;
+ *height_return = height;
+
+ if (try_layout && columns > 1 && num_children > 2) {
+ int space;
+
+ height = test_h * (xaw->simple_menu.label ?
+ num_children - 1 :
+ num_children);
+
+ max_dim -= max_dim % test_h;
+ space = max_dim - (height % max_dim);
+ if (space >= test_h * columns) {
+ height = max_dim - space / columns;
+ if (height % test_h)
+ height += test_h - (height % test_h);
+ *height_return = height + vadd;
+ CalculateNewSize(w, width_return, height_return);
+ }
+ }
+}
+
+static void
+MakeResizeRequest(Widget w)
+{
+ int tries;
+ Dimension width, height;
+
+ width = XtWidth(w);
+ height = XtHeight(w);
+
+ for (tries = 0; tries < 100; tries++) {
+ CalculateNewSize(w, &width, &height);
+ if (width == XtWidth(w) && height == XtHeight(w))
+ break;
+ if (XtMakeResizeRequest(w, width, height, &width, &height) ==
+ XtGeometryNo)
+ break;
+ }
+}
+
+#ifndef OLDXAW
+static void
+Popdown(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+
+ while (XtParent(w) &&
+ XtIsSubclass(XtParent(w), simpleMenuWidgetClass)) {
+ if (((SimpleMenuWidget)XtParent(w))->simple_menu.sub_menu == (Widget)w) {
+ w = XtParent(w);
+ smw = (SimpleMenuWidget)w;
+ smw->simple_menu.entry_set = NULL;
+ }
+ else
+ break;
+ }
+
+ smw->simple_menu.state |= SMW_UNMAPPING;
+ if (smw->simple_menu.sub_menu)
+ PopdownSubMenu(smw);
+ XtCallActionProc(w, "XtMenuPopdown", event, params, *num_params);
+}
+
+static void
+PopupSubMenu(SimpleMenuWidget smw)
+{
+ Arg args[2];
+ Cardinal num_args;
+ Widget menu;
+ SmeBSBObject entry = (SmeBSBObject)smw->simple_menu.entry_set;
+ Position menu_x, menu_y;
+ Bool popleft;
+
+ if (entry->sme_bsb.menu_name == NULL)
+ return;
+
+ if ((menu = FindMenu((Widget)smw, entry->sme_bsb.menu_name)) == NULL)
+ return;
+
+ smw->simple_menu.sub_menu = menu;
+
+ if (!XtIsRealized(menu))
+ XtRealizeWidget(menu);
+
+ popleft = (smw->simple_menu.state & SMW_POPLEFT) != 0;
+
+ if (popleft)
+ XtTranslateCoords((Widget)smw, -(int)XtWidth(menu),
+ XtY(entry) - XtBorderWidth(menu), &menu_x, &menu_y);
+ else
+ XtTranslateCoords((Widget)smw, XtWidth(smw), XtY(entry)
+ - XtBorderWidth(menu), &menu_x, &menu_y);
+
+ if (!popleft && menu_x >= 0) {
+ int scr_width = WidthOfScreen(XtScreen(menu));
+
+ if (menu_x + XtWidth(menu) > scr_width) {
+ menu_x -= XtWidth(menu) + XtWidth(smw);
+ popleft = True;
+ }
+ }
+ else if (popleft && menu_x < 0) {
+ menu_x = 0;
+ popleft = False;
+ }
+ if (menu_y >= 0) {
+ int scr_height = HeightOfScreen(XtScreen(menu));
+
+ if (menu_y + XtHeight(menu) > scr_height)
+ menu_y = scr_height - XtHeight(menu) - XtBorderWidth(menu);
+ }
+ if (menu_y < 0)
+ menu_y = 0;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNx, menu_x); num_args++;
+ XtSetArg(args[num_args], XtNy, menu_y); num_args++;
+ XtSetValues(menu, args, num_args);
+
+ if (popleft)
+ ((SimpleMenuWidget)menu)->simple_menu.state |= SMW_POPLEFT;
+ else
+ ((SimpleMenuWidget)menu)->simple_menu.state &= ~SMW_POPLEFT;
+
+ XtPopup(menu, XtGrabNone);
+}
+
+static void
+PopdownSubMenu(SimpleMenuWidget smw)
+{
+ SimpleMenuWidget menu = (SimpleMenuWidget)smw->simple_menu.sub_menu;
+
+ if (!menu)
+ return;
+
+ menu->simple_menu.state |= SMW_UNMAPPING;
+ PopdownSubMenu(menu);
+
+ XtPopdown((Widget)menu);
+
+ smw->simple_menu.sub_menu = NULL;
+}
+
+/*ARGSUSED*/
+static void
+PopupCB(Widget w, XtPointer client_data, XtPointer call_data)
+{
+ SimpleMenuWidget smw = (SimpleMenuWidget)w;
+
+ smw->simple_menu.state &= ~(SMW_UNMAPPING | SMW_POPLEFT);
+}
+#endif /* OLDXAW */
diff --git a/libXaw/src/Sme.c b/libXaw/src/Sme.c
index a4af577d8..462353b56 100644
--- a/libXaw/src/Sme.c
+++ b/libXaw/src/Sme.c
@@ -1,272 +1,269 @@
-/* $Xorg: Sme.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/*
-Copyright 1989, 1994, 1998 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.
- */
-/* $XFree86: xc/lib/Xaw/Sme.c,v 1.6 2001/01/17 19:42:31 dawes Exp $ */
-
-/*
- * Date: September 26, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/SmeP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Class Methods
- */
-static void Highlight(Widget);
-static void Notify(Widget);
-static void Unhighlight(Widget);
-static void XawSmeClassPartInitialize(WidgetClass);
-static void XawSmeInitialize(Widget, Widget, ArgList, Cardinal*);
-static XtGeometryResult XawSmeQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(SmeRec, sme.field)
-static XtResource resources[] = {
- {
- XtNcallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(callbacks),
- XtRCallback,
- NULL
- },
- {
- XtNinternational,
- XtCInternational,
- XtRBoolean,
- sizeof(Boolean),
- offset(international),
- XtRImmediate,
- (XtPointer)False
- },
-};
-#undef offset
-
-#define Superclass (&rectObjClassRec)
-SmeClassRec smeClassRec = {
- /* rectangle */
- {
- (WidgetClass)Superclass, /* superclass */
- "Sme", /* class_name */
- sizeof(SmeRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- XawSmeClassPartInitialize, /* class_part_initialize */
- False, /* class_initialized */
- XawSmeInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* compress_motion */
- False, /* compress_exposure */
- False, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- NULL, /* resize */
- NULL, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* intrinsics_version */
- NULL, /* callback offsets */
- NULL, /* tm_table */
- XawSmeQueryGeometry, /* query_geometry */
- NULL, /* display_accelerator */
- NULL, /* extension */
- },
- /* sme */
- {
- Highlight, /* highlight */
- Unhighlight, /* unhighlight */
- Notify, /* notify */
- NULL, /* extension */
- }
-};
-
-WidgetClass smeObjectClass = (WidgetClass)&smeClassRec;
-
-/*
- * Implementation
- */
-/*
- * Function:
- * XawSmeClassPartInitialize
- *
- * Parameters:
- * cclass - widget classs of this widget
- *
- * Description:
- * Handles inheritance of class functions.
- */
-static void
-XawSmeClassPartInitialize(WidgetClass cclass)
-{
- SmeObjectClass m_ent, superC;
-
- m_ent = (SmeObjectClass)cclass;
- superC = (SmeObjectClass)m_ent->rect_class.superclass;
-
- if (m_ent->sme_class.highlight == XtInheritHighlight)
- m_ent->sme_class.highlight = superC->sme_class.highlight;
-
- if (m_ent->sme_class.unhighlight == XtInheritUnhighlight)
- m_ent->sme_class.unhighlight = superC->sme_class.unhighlight;
-
- if (m_ent->sme_class.notify == XtInheritNotify)
- m_ent->sme_class.notify = superC->sme_class.notify;
-}
-
-/*
- * Function:
- * XawSmeInitialize
- *
- * Parameters:
- * request - widget requested by the argument list
- * cnew - new widget with both resource and non resource values
- *
- * Description:
- * Initializes the simple menu widget entry
- */
-/*ARGSUSED*/
-static void
-XawSmeInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SmeObject entry = (SmeObject)cnew;
-
- entry->rectangle.border_width = 0;
-}
-
-/*
- * Function:
- * Highlight
- *
- * Parameters:
- * w - menu entry
- *
- * Description:
- * Default highlight proceedure for menu entries.
- */
-/*ARGSUSED*/
-static void
-Highlight(Widget w)
-{
-}
-
-/*
- * Function:
- * Unhighlight
- *
- * Parameters:
- * w - menu entry
- *
- * Description:
- * Default unhighlight proceedure for menu entries.
- */
-/*ARGSUSED*/
-static void
-Unhighlight(Widget w)
-{
-}
-
-/*
- * Function:
- * Notify
- *
- * Parameters:
- * w - menu entry
- *
- * Description:
- * Calls the callback proceedures for this entry.
- */
-static void
-Notify(Widget w)
-{
- XtCallCallbacks(w, XtNcallback, NULL);
-}
-
-/*
- * Function:
- * QueryGeometry
- *
- * Parameeters:
- * w - menu entry object
- * itended - intended and return geometry info
- * return_val -
- *
- * Description:
- * Returns the preferred geometry for this widget.
- *
- * Returns:
- * Geometry Result
- *
- * Note:
- * See the Intrinsics manual for details on what this function is for.
- */
-static XtGeometryResult
-XawSmeQueryGeometry(Widget w, XtWidgetGeometry *intended,
- XtWidgetGeometry *return_val)
-{
- SmeObject entry = (SmeObject)w;
- Dimension width;
- XtGeometryResult ret_val = XtGeometryYes;
- XtGeometryMask mode = intended->request_mode;
-
- width = 1;
-
- if (((mode & CWWidth) && intended->width != width) || !(mode & CWWidth)) {
- return_val->request_mode |= CWWidth;
- return_val->width = width;
- mode = return_val->request_mode;
-
- if ((mode & CWWidth) && width == XtWidth(entry))
- return (XtGeometryNo);
- return (XtGeometryAlmost);
- }
-
- return (ret_val);
-}
+/*
+Copyright 1989, 1994, 1998 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.
+ */
+
+/*
+ * Date: September 26, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/SmeP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Class Methods
+ */
+static void Highlight(Widget);
+static void Notify(Widget);
+static void Unhighlight(Widget);
+static void XawSmeClassPartInitialize(WidgetClass);
+static void XawSmeInitialize(Widget, Widget, ArgList, Cardinal*);
+static XtGeometryResult XawSmeQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(SmeRec, sme.field)
+static XtResource resources[] = {
+ {
+ XtNcallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(callbacks),
+ XtRCallback,
+ NULL
+ },
+ {
+ XtNinternational,
+ XtCInternational,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(international),
+ XtRImmediate,
+ (XtPointer)False
+ },
+};
+#undef offset
+
+#define Superclass (&rectObjClassRec)
+SmeClassRec smeClassRec = {
+ /* rectangle */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Sme", /* class_name */
+ sizeof(SmeRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ XawSmeClassPartInitialize, /* class_part_initialize */
+ False, /* class_initialized */
+ XawSmeInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* compress_motion */
+ False, /* compress_exposure */
+ False, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ NULL, /* resize */
+ NULL, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* intrinsics_version */
+ NULL, /* callback offsets */
+ NULL, /* tm_table */
+ XawSmeQueryGeometry, /* query_geometry */
+ NULL, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* sme */
+ {
+ Highlight, /* highlight */
+ Unhighlight, /* unhighlight */
+ Notify, /* notify */
+ NULL, /* extension */
+ }
+};
+
+WidgetClass smeObjectClass = (WidgetClass)&smeClassRec;
+
+/*
+ * Implementation
+ */
+/*
+ * Function:
+ * XawSmeClassPartInitialize
+ *
+ * Parameters:
+ * cclass - widget classs of this widget
+ *
+ * Description:
+ * Handles inheritance of class functions.
+ */
+static void
+XawSmeClassPartInitialize(WidgetClass cclass)
+{
+ SmeObjectClass m_ent, superC;
+
+ m_ent = (SmeObjectClass)cclass;
+ superC = (SmeObjectClass)m_ent->rect_class.superclass;
+
+ if (m_ent->sme_class.highlight == XtInheritHighlight)
+ m_ent->sme_class.highlight = superC->sme_class.highlight;
+
+ if (m_ent->sme_class.unhighlight == XtInheritUnhighlight)
+ m_ent->sme_class.unhighlight = superC->sme_class.unhighlight;
+
+ if (m_ent->sme_class.notify == XtInheritNotify)
+ m_ent->sme_class.notify = superC->sme_class.notify;
+}
+
+/*
+ * Function:
+ * XawSmeInitialize
+ *
+ * Parameters:
+ * request - widget requested by the argument list
+ * cnew - new widget with both resource and non resource values
+ *
+ * Description:
+ * Initializes the simple menu widget entry
+ */
+/*ARGSUSED*/
+static void
+XawSmeInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SmeObject entry = (SmeObject)cnew;
+
+ entry->rectangle.border_width = 0;
+}
+
+/*
+ * Function:
+ * Highlight
+ *
+ * Parameters:
+ * w - menu entry
+ *
+ * Description:
+ * Default highlight proceedure for menu entries.
+ */
+/*ARGSUSED*/
+static void
+Highlight(Widget w)
+{
+}
+
+/*
+ * Function:
+ * Unhighlight
+ *
+ * Parameters:
+ * w - menu entry
+ *
+ * Description:
+ * Default unhighlight proceedure for menu entries.
+ */
+/*ARGSUSED*/
+static void
+Unhighlight(Widget w)
+{
+}
+
+/*
+ * Function:
+ * Notify
+ *
+ * Parameters:
+ * w - menu entry
+ *
+ * Description:
+ * Calls the callback proceedures for this entry.
+ */
+static void
+Notify(Widget w)
+{
+ XtCallCallbacks(w, XtNcallback, NULL);
+}
+
+/*
+ * Function:
+ * QueryGeometry
+ *
+ * Parameeters:
+ * w - menu entry object
+ * itended - intended and return geometry info
+ * return_val -
+ *
+ * Description:
+ * Returns the preferred geometry for this widget.
+ *
+ * Returns:
+ * Geometry Result
+ *
+ * Note:
+ * See the Intrinsics manual for details on what this function is for.
+ */
+static XtGeometryResult
+XawSmeQueryGeometry(Widget w, XtWidgetGeometry *intended,
+ XtWidgetGeometry *return_val)
+{
+ SmeObject entry = (SmeObject)w;
+ Dimension width;
+ XtGeometryResult ret_val = XtGeometryYes;
+ XtGeometryMask mode = intended->request_mode;
+
+ width = 1;
+
+ if (((mode & CWWidth) && intended->width != width) || !(mode & CWWidth)) {
+ return_val->request_mode |= CWWidth;
+ return_val->width = width;
+ mode = return_val->request_mode;
+
+ if ((mode & CWWidth) && width == XtWidth(entry))
+ return (XtGeometryNo);
+ return (XtGeometryAlmost);
+ }
+
+ return (ret_val);
+}
diff --git a/libXaw/src/SmeBSB.c b/libXaw/src/SmeBSB.c
index 0d77278ab..1941edff1 100644
--- a/libXaw/src/SmeBSB.c
+++ b/libXaw/src/SmeBSB.c
@@ -1,774 +1,770 @@
-/* $Xorg: SmeBSB.c,v 1.5 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/*
-Copyright 1989, 1994, 1998 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.
- */
-
-/* $XFree86: xc/lib/Xaw/SmeBSB.c,v 1.11 2001/01/17 19:42:31 dawes Exp $ */
-
-/*
- * SmeBSB.c - Source code file for BSB Menu Entry object.
- *
- * Date: September 26, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xos.h>
-#include <X11/Xmu/Drawing.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/SimpleMenu.h>
-#include <X11/Xaw/SmeBSBP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#define ONE_HUNDRED 100
-
-/*
- * Class Methods
- */
-static void FlipColors(Widget);
-static void XawSmeBSBClassInitialize(void);
-static void XawSmeBSBInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawSmeBSBDestroy(Widget);
-static XtGeometryResult XawSmeBSBQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawSmeBSBRedisplay(Widget, XEvent*, Region);
-static Boolean XawSmeBSBSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void CreateGCs(Widget);
-static void GetBitmapInfo(Widget, Bool);
-static void GetDefaultSize(Widget, Dimension*, Dimension*);
-static void DestroyGCs(Widget);
-static void DrawBitmaps(Widget, GC);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(SmeBSBRec, sme_bsb.field)
-static XtResource resources[] = {
- {
- XtNlabel,
- XtCLabel,
- XtRString,
- sizeof(String),
- offset(label),
- XtRString,
- NULL
- },
- {
- XtNvertSpace,
- XtCVertSpace,
- XtRInt,
- sizeof(int),
- offset(vert_space),
- XtRImmediate,
- (XtPointer)25
- },
- {
- XtNleftBitmap,
- XtCLeftBitmap,
- XtRBitmap,
- sizeof(Pixmap),
- offset(left_bitmap),
- XtRImmediate,
- (XtPointer)None
- },
- {
- XtNjustify,
- XtCJustify,
- XtRJustify,
- sizeof(XtJustify),
- offset(justify),
- XtRImmediate,
- (XtPointer)XtJustifyLeft
- },
- {
- XtNrightBitmap,
- XtCRightBitmap,
- XtRBitmap,
- sizeof(Pixmap),
- offset(right_bitmap),
- XtRImmediate,
- (XtPointer)None
- },
- {
- XtNleftMargin,
- XtCHorizontalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(left_margin),
- XtRImmediate,
- (XtPointer)4
- },
- {
- XtNrightMargin,
- XtCHorizontalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(right_margin),
- XtRImmediate,
- (XtPointer)4
- },
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(foreground),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNfont,
- XtCFont,
- XtRFontStruct,
- sizeof(XFontStruct*),
- offset(font),
- XtRString,
- XtDefaultFont
- },
- {
- XtNfontSet,
- XtCFontSet,
- XtRFontSet,
- sizeof(XFontSet),
- offset(fontset),
- XtRString,
- XtDefaultFontSet
- },
-#ifndef OLDXAW
- {
- XtNmenuName,
- XtCMenuName,
- XtRString,
- sizeof(String),
- offset(menu_name),
- XtRImmediate,
- (XtPointer)NULL
- },
-#endif
-};
-#undef offset
-
-#define superclass (&smeClassRec)
-SmeBSBClassRec smeBSBClassRec = {
- /* rectangle */
- {
- (WidgetClass)superclass, /* superclass */
- "SmeBSB", /* class_name */
- sizeof(SmeBSBRec), /* size */
- XawSmeBSBClassInitialize, /* class_init */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawSmeBSBInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* compress_motion */
- False, /* compress_exposure */
- False, /* compress_enterleave */
- False, /* visible_interest */
- XawSmeBSBDestroy, /* destroy */
- NULL, /* resize */
- XawSmeBSBRedisplay, /* expose */
- XawSmeBSBSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* intrinsics version */
- NULL, /* callback offsets */
- NULL, /* tm_table */
- XawSmeBSBQueryGeometry, /* query_geometry */
- NULL, /* display_accelerator */
- NULL, /* extension */
- },
- /* sme */
- {
- FlipColors, /* highlight */
- FlipColors, /* unhighlight */
- XtInheritNotify, /* notify */
- NULL, /* extension */
- },
- /* sme_bsb */
- {
- NULL, /* extension */
- },
-};
-WidgetClass smeBSBObjectClass = (WidgetClass)&smeBSBClassRec;
-
-/*
- * Function:
- * XawSmeBSBClassInitialize
- *
- * Description:
- * Initializes the SmeBSBObject.
- */
-static void
-XawSmeBSBClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtAddConverter(XtRString, XtRJustify, XmuCvtStringToJustify, NULL, 0);
- XtSetTypeConverter(XtRJustify, XtRString, XmuCvtJustifyToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-/*
- * Function:
- * XawSmeBSBInitialize
- *
- * Parameters:
- * request - widget requested by the argument list
- * cnew - new widget with both resource and non resource values
- *
- * Description:
- * Initializes the simple menu widget entry.
- */
-/*ARGSUSED*/
-static void
-XawSmeBSBInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SmeBSBObject entry = (SmeBSBObject)cnew;
-
- if (!entry->sme_bsb.font) XtError("Aborting: no font found\n");
-
- if (entry->sme_bsb.label == NULL)
- entry->sme_bsb.label = XtName(cnew);
- else
- entry->sme_bsb.label = XtNewString(entry->sme_bsb.label);
-
- GetDefaultSize(cnew, &entry->rectangle.width, &entry->rectangle.height);
- CreateGCs(cnew);
-
- entry->sme_bsb.left_bitmap_width = entry->sme_bsb.left_bitmap_height = 0;
- entry->sme_bsb.right_bitmap_width = entry->sme_bsb.right_bitmap_height = 0;
-
- GetBitmapInfo(cnew, True); /* Left Bitmap Info */
- GetBitmapInfo(cnew, False); /* Right Bitmap Info */
-}
-
-/*
- * Function:
- * XawSmeBSBDestroy
- *
- * Parameters:
- * w - simple menu widget entry
- */
-static void
-XawSmeBSBDestroy(Widget w)
-{
- SmeBSBObject entry = (SmeBSBObject)w;
-
- DestroyGCs(w);
- if (entry->sme_bsb.label != XtName(w))
- XtFree(entry->sme_bsb.label);
-}
-
-/*
- * Function:
- * XawSmeBSBRedisplay
- *
- * Parameters:
- * w - simple menu widget entry
- * event - X event that caused this redisplay
- * region - region the needs to be repainted
- *
- * Description:
- * Redisplays the contents of the widget.
- */
-/* ARGSUSED */
-static void
-XawSmeBSBRedisplay(Widget w, XEvent *event, Region region)
-{
- GC gc;
- SmeBSBObject entry = (SmeBSBObject)w;
- int font_ascent, font_descent, y_loc;
- int fontset_ascent, fontset_descent;
- XFontSetExtents *ext = XExtentsOfFontSet(entry->sme_bsb.fontset);
-
- font_ascent = font_descent = fontset_ascent = fontset_descent = 0;
- entry->sme_bsb.set_values_area_cleared = False;
-
- if (entry->sme.international == True) {
- fontset_ascent = XawAbs(ext->max_ink_extent.y);
- fontset_descent = ext->max_ink_extent.height - fontset_ascent;
- }
- else {
- font_ascent = entry->sme_bsb.font->max_bounds.ascent;
- font_descent = entry->sme_bsb.font->max_bounds.descent;
- }
- y_loc = XtY(entry);
-
- if (XtIsSensitive(w) && XtIsSensitive(XtParent(w))) {
- if (w == XawSimpleMenuGetActiveEntry(XtParent(w))) {
- XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
- entry->sme_bsb.norm_gc, XtX(w), y_loc,
- XtWidth(entry), XtHeight(entry));
- gc = entry->sme_bsb.rev_gc;
- }
- else
- gc = entry->sme_bsb.norm_gc;
- }
- else
- gc = entry->sme_bsb.norm_gray_gc;
-
- if (entry->sme_bsb.label != NULL) {
- int x_loc = entry->sme_bsb.left_margin;
- int len = strlen(entry->sme_bsb.label);
- char *label = entry->sme_bsb.label;
- int width, t_width;
-
- switch(entry->sme_bsb.justify) {
- case XtJustifyCenter:
- if (entry->sme.international == True) {
- t_width = XmbTextEscapement(entry->sme_bsb.fontset,label,
- len);
- width = XtWidth(entry) - (entry->sme_bsb.left_margin +
- entry->sme_bsb.right_margin);
- }
- else {
- t_width = XTextWidth(entry->sme_bsb.font, label, len);
- width = XtWidth(entry) - (entry->sme_bsb.left_margin +
- entry->sme_bsb.right_margin);
- }
- x_loc += (width - t_width) >> 1;
- break;
- case XtJustifyRight:
- if (entry->sme.international == True) {
- t_width = XmbTextEscapement(entry->sme_bsb.fontset,label,
- len);
- x_loc = XtWidth(entry) - (entry->sme_bsb.right_margin +
- t_width);
- }
- else {
- t_width = XTextWidth(entry->sme_bsb.font, label, len);
- x_loc = XtWidth(entry) - (entry->sme_bsb.right_margin +
- t_width);
- }
- break;
- case XtJustifyLeft:
- /*FALLTHROUGH*/
- default:
- break;
- }
-
- /* this will center the text in the gadget top-to-bottom */
- if (entry->sme.international == True) {
- y_loc += ((XtHeight(entry) -
- (fontset_ascent + fontset_descent)) >> 1) +
- fontset_ascent;
-
- XmbDrawString(XtDisplayOfObject(w), XtWindowOfObject(w),
- entry->sme_bsb.fontset, gc,
- XtX(w) + x_loc, y_loc, label, len);
- }
- else {
- y_loc += ((XtHeight(entry) -
- (font_ascent + font_descent)) >> 1) + font_ascent;
-
- XDrawString(XtDisplayOfObject(w), XtWindowOfObject(w), gc,
- XtX(w) + x_loc, y_loc, label, len);
- }
- }
-
- DrawBitmaps(w, gc);
-}
-
-
-/*
- * Function:
- * XawSmeBSBSetValues
- *
- * Parameters:
- * current - current state of the widget
- * request - what was requested
- * cnew - what the widget will become
- *
- * Description:
- * Relayout the menu when one of the resources is changed.
- */
-
-/*ARGSUSED*/
-static Boolean
-XawSmeBSBSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SmeBSBObject entry = (SmeBSBObject)cnew;
- SmeBSBObject old_entry = (SmeBSBObject)current;
- Boolean ret_val = False;
-
- if (old_entry->sme_bsb.label != entry->sme_bsb.label) {
- if (old_entry->sme_bsb.label != XtName(cnew))
- XtFree((char *)old_entry->sme_bsb.label);
-
- if (entry->sme_bsb.label != XtName(cnew))
- entry->sme_bsb.label = XtNewString(entry->sme_bsb.label);
-
- ret_val = True;
- }
-
- if (entry->rectangle.sensitive != old_entry->rectangle.sensitive)
- ret_val = True;
-
- if (entry->sme_bsb.left_bitmap != old_entry->sme_bsb.left_bitmap) {
- GetBitmapInfo(cnew, True);
- ret_val = True;
- }
-
- if (entry->sme_bsb.right_bitmap != old_entry->sme_bsb.right_bitmap) {
- GetBitmapInfo(cnew, False);
- ret_val = True;
- }
-
- if ((old_entry->sme_bsb.font != entry->sme_bsb.font
- && old_entry->sme.international == False)
- || old_entry->sme_bsb.foreground != entry->sme_bsb.foreground) {
- DestroyGCs(current);
- CreateGCs(cnew);
- ret_val = True;
- }
-
- if (old_entry->sme_bsb.fontset != entry->sme_bsb.fontset &&
- old_entry->sme.international == True)
- /* DONT changes the GCs, because the fontset is not in them */
- ret_val = True;
-
- if (ret_val) {
- Dimension width, height;
-
- GetDefaultSize(cnew, &width, &height);
- entry->sme_bsb.set_values_area_cleared = True;
- XtMakeResizeRequest(cnew, width, height, NULL, NULL);
- }
-
- return (ret_val);
-}
-
-/*
- * Function:
- * XawSmeBSBQueryGeometry
- *
- * Parameters:
- * w - menu entry object
- * itended - intended and return geometry info
- * return_val - ""
- *
- * Returns:
- * Geometry Result
- *
- * Description:
- * Returns the preferred geometry for this widget.
- * See the Intrinsics manual for details on what this function is for.
- */
-static XtGeometryResult
-XawSmeBSBQueryGeometry(Widget w, XtWidgetGeometry *intended,
- XtWidgetGeometry *return_val)
-{
- SmeBSBObject entry = (SmeBSBObject)w;
- Dimension width, height;
- XtGeometryResult ret_val = XtGeometryYes;
- XtGeometryMask mode = intended->request_mode;
-
- GetDefaultSize(w, &width, &height);
-
- if (((mode & CWWidth) && intended->width != width) || !(mode & CWWidth)) {
- return_val->request_mode |= CWWidth;
- return_val->width = width;
- ret_val = XtGeometryAlmost;
- }
-
- if (((mode & CWHeight) && intended->height != height) || !(mode & CWHeight)) {
- return_val->request_mode |= CWHeight;
- return_val->height = height;
- ret_val = XtGeometryAlmost;
- }
-
- if (ret_val == XtGeometryAlmost) {
- mode = return_val->request_mode;
- if (((mode & CWWidth) && width == XtWidth(entry)) &&
- ((mode & CWHeight) && height == XtHeight(entry)))
- return (XtGeometryNo);
- }
-
- return (ret_val);
-}
-
-/*
- * Function:
- * FlipColors
- *
- * Parameters:
- * w - bsb menu entry widget
- *
- * Description:
- * Invert the colors of the current entry.
- */
-static void
-FlipColors(Widget w)
-{
- SmeBSBObject entry = (SmeBSBObject)w;
-
- if (entry->sme_bsb.set_values_area_cleared)
- return;
-
- XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
- entry->sme_bsb.invert_gc,
- XtX(w), XtY(entry), XtWidth(entry), XtHeight(entry));
-}
-
-/*
- * Function:
- * GetDefaultSize
- *
- * Parameters:
- * w - menu entry widget.
- * width - default width (return)
- * height - default height (return)
- *
- * Description:
- * Calculates the Default (preferred) size of this menu entry.
- */
-static void
-GetDefaultSize(Widget w, Dimension *width, Dimension *height)
-{
- SmeBSBObject entry = (SmeBSBObject)w;
-
- if (entry->sme.international == True) {
- XFontSetExtents *ext = XExtentsOfFontSet(entry->sme_bsb.fontset);
-
- if (entry->sme_bsb.label == NULL)
- *width = 0;
- else
- *width = XmbTextEscapement(entry->sme_bsb.fontset,
- entry->sme_bsb.label,
- strlen(entry->sme_bsb.label));
- *width += entry->sme_bsb.left_margin + entry->sme_bsb.right_margin;
- *height = ext->max_ink_extent.height;
- *height = ((int)*height * (ONE_HUNDRED +
- entry->sme_bsb.vert_space)) / ONE_HUNDRED;
- }
- else {
- if (entry->sme_bsb.label == NULL)
- *width = 0;
- else
- *width = XTextWidth(entry->sme_bsb.font, entry->sme_bsb.label,
- strlen(entry->sme_bsb.label));
-
- *width += entry->sme_bsb.left_margin + entry->sme_bsb.right_margin;
-
- *height = entry->sme_bsb.font->max_bounds.ascent +
- entry->sme_bsb.font->max_bounds.descent;
-
- *height = ((int)*height * (ONE_HUNDRED +
- entry->sme_bsb.vert_space)) / ONE_HUNDRED;
- }
-}
-
-/*
- * Function:
- * DrawBitmaps
- *
- * Parameters:
- * w - simple menu widget entry
- * gc - graphics context to use for drawing
- *
- * Description:
- * Draws left and right bitmaps.
- */
-static void
-DrawBitmaps(Widget w, GC gc)
-{
- int x_loc, y_loc;
- SmeBSBObject entry = (SmeBSBObject)w;
-
- if (entry->sme_bsb.left_bitmap == None &&
- entry->sme_bsb.right_bitmap == None)
- return;
-
- /*
- * Draw Left Bitmap
- */
- if (entry->sme_bsb.left_bitmap != None) {
- x_loc = ((entry->sme_bsb.left_margin -
- entry->sme_bsb.left_bitmap_width) >> 1) + XtX(w);
-
- y_loc = XtY(entry) + ((XtHeight(entry) -
- entry->sme_bsb.left_bitmap_height) >> 1);
-
- XCopyPlane(XtDisplayOfObject(w), entry->sme_bsb.left_bitmap,
- XtWindowOfObject(w), gc, 0, 0,
- entry->sme_bsb.left_bitmap_width,
- entry->sme_bsb.left_bitmap_height, x_loc, y_loc, 1);
- }
-
- /*
- * Draw Right Bitmap
- */
- if (entry->sme_bsb.right_bitmap != None) {
- x_loc = XtWidth(entry) - ((entry->sme_bsb.right_margin +
- entry->sme_bsb.right_bitmap_width) >> 1) +
- XtX(w);
- y_loc = XtY(entry) + ((XtHeight(entry) -
- entry->sme_bsb.right_bitmap_height) >> 1);
-
- XCopyPlane(XtDisplayOfObject(w), entry->sme_bsb.right_bitmap,
- XtWindowOfObject(w), gc, 0, 0,
- entry->sme_bsb.right_bitmap_width,
- entry->sme_bsb.right_bitmap_height, x_loc, y_loc, 1);
- }
-}
-
-/*
- * Function:
- * GetBitmapInfo
- *
- * Parameters:
- * w - bsb menu entry object
- * is_left - True: if we are testing left bitmap
- * False: if we are testing the right bitmap
- *
- * Description:
- * Gets the bitmap information from either of the bitmaps.
- */
-static void
-GetBitmapInfo(Widget w, Bool is_left)
-{
- SmeBSBObject entry = (SmeBSBObject)w;
- unsigned int depth, bw;
- Window root;
- int x, y;
- unsigned int width, height;
-
- if (is_left) {
- if (entry->sme_bsb.left_bitmap != None &&
- XGetGeometry(XtDisplayOfObject(w),
- entry->sme_bsb.left_bitmap, &root,
- &x, &y, &width, &height, &bw, &depth)) {
- entry->sme_bsb.left_bitmap_width = width;
- entry->sme_bsb.left_bitmap_height = height;
- }
- }
- else if (entry->sme_bsb.right_bitmap != None &&
- XGetGeometry(XtDisplayOfObject(w),
- entry->sme_bsb.right_bitmap, &root,
- &x, &y, &width, &height, &bw, &depth)) {
- entry->sme_bsb.right_bitmap_width = width;
- entry->sme_bsb.right_bitmap_height = height;
- }
-}
-
-/*
- * Function:
- * CreateGCs
- *
- * Parameters:
- * w - simple menu widget entry
- *
- * Description:
- * Creates all gc's for the simple menu widget.
- */
-static void
-CreateGCs(Widget w)
-{
- SmeBSBObject entry = (SmeBSBObject)w;
- XGCValues values;
- XtGCMask mask, mask_i18n;
-
- values.foreground = XtParent(w)->core.background_pixel;
- values.background = entry->sme_bsb.foreground;
- values.font = entry->sme_bsb.font->fid;
- values.graphics_exposures = False;
- mask = GCForeground | GCBackground | GCGraphicsExposures | GCFont;
- mask_i18n = GCForeground | GCBackground | GCGraphicsExposures;
- if (entry->sme.international == True)
- entry->sme_bsb.rev_gc = XtAllocateGC(w, 0, mask_i18n, &values, GCFont, 0);
- else
- entry->sme_bsb.rev_gc = XtGetGC(w, mask, &values);
-
- values.foreground = entry->sme_bsb.foreground;
- values.background = XtParent(w)->core.background_pixel;
- if (entry->sme.international == True)
- entry->sme_bsb.norm_gc = XtAllocateGC(w, 0, mask_i18n, &values, GCFont, 0);
- else
- entry->sme_bsb.norm_gc = XtGetGC(w, mask, &values);
-
- values.fill_style = FillTiled;
- values.tile = XmuCreateStippledPixmap(XtScreenOfObject(w),
- entry->sme_bsb.foreground,
- XtParent(w)->core.background_pixel,
- XtParent(w)->core.depth);
- values.graphics_exposures = False;
- mask |= GCTile | GCFillStyle;
- mask_i18n |= GCTile | GCFillStyle;
- if (entry->sme.international == True)
- entry->sme_bsb.norm_gray_gc = XtAllocateGC(w, 0, mask_i18n, &values,
- GCFont, 0);
- else
- entry->sme_bsb.norm_gray_gc = XtGetGC(w, mask, &values);
-
- values.foreground ^= values.background;
- values.background = 0;
- values.function = GXxor;
- mask = GCForeground | GCBackground | GCGraphicsExposures | GCFunction;
- entry->sme_bsb.invert_gc = XtGetGC(w, mask, &values);
-}
-
-/*
- * Function:
- * DestroyGCs
- *
- * Parameters:
- * w - simple menu widget entry
- *
- * Description:
- * Removes all gc's for the simple menu widget.
- */
-static void
-DestroyGCs(Widget w)
-{
- SmeBSBObject entry = (SmeBSBObject)w;
-
- XtReleaseGC(w, entry->sme_bsb.norm_gc);
- XtReleaseGC(w, entry->sme_bsb.norm_gray_gc);
- XtReleaseGC(w, entry->sme_bsb.rev_gc);
- XtReleaseGC(w, entry->sme_bsb.invert_gc);
-}
+/*
+Copyright 1989, 1994, 1998 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.
+ */
+
+/*
+ * SmeBSB.c - Source code file for BSB Menu Entry object.
+ *
+ * Date: September 26, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xmu/Drawing.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSBP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#define ONE_HUNDRED 100
+
+/*
+ * Class Methods
+ */
+static void FlipColors(Widget);
+static void XawSmeBSBClassInitialize(void);
+static void XawSmeBSBInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawSmeBSBDestroy(Widget);
+static XtGeometryResult XawSmeBSBQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawSmeBSBRedisplay(Widget, XEvent*, Region);
+static Boolean XawSmeBSBSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void CreateGCs(Widget);
+static void GetBitmapInfo(Widget, Bool);
+static void GetDefaultSize(Widget, Dimension*, Dimension*);
+static void DestroyGCs(Widget);
+static void DrawBitmaps(Widget, GC);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(SmeBSBRec, sme_bsb.field)
+static XtResource resources[] = {
+ {
+ XtNlabel,
+ XtCLabel,
+ XtRString,
+ sizeof(String),
+ offset(label),
+ XtRString,
+ NULL
+ },
+ {
+ XtNvertSpace,
+ XtCVertSpace,
+ XtRInt,
+ sizeof(int),
+ offset(vert_space),
+ XtRImmediate,
+ (XtPointer)25
+ },
+ {
+ XtNleftBitmap,
+ XtCLeftBitmap,
+ XtRBitmap,
+ sizeof(Pixmap),
+ offset(left_bitmap),
+ XtRImmediate,
+ (XtPointer)None
+ },
+ {
+ XtNjustify,
+ XtCJustify,
+ XtRJustify,
+ sizeof(XtJustify),
+ offset(justify),
+ XtRImmediate,
+ (XtPointer)XtJustifyLeft
+ },
+ {
+ XtNrightBitmap,
+ XtCRightBitmap,
+ XtRBitmap,
+ sizeof(Pixmap),
+ offset(right_bitmap),
+ XtRImmediate,
+ (XtPointer)None
+ },
+ {
+ XtNleftMargin,
+ XtCHorizontalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(left_margin),
+ XtRImmediate,
+ (XtPointer)4
+ },
+ {
+ XtNrightMargin,
+ XtCHorizontalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(right_margin),
+ XtRImmediate,
+ (XtPointer)4
+ },
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(foreground),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNfont,
+ XtCFont,
+ XtRFontStruct,
+ sizeof(XFontStruct*),
+ offset(font),
+ XtRString,
+ XtDefaultFont
+ },
+ {
+ XtNfontSet,
+ XtCFontSet,
+ XtRFontSet,
+ sizeof(XFontSet),
+ offset(fontset),
+ XtRString,
+ XtDefaultFontSet
+ },
+#ifndef OLDXAW
+ {
+ XtNmenuName,
+ XtCMenuName,
+ XtRString,
+ sizeof(String),
+ offset(menu_name),
+ XtRImmediate,
+ (XtPointer)NULL
+ },
+#endif
+};
+#undef offset
+
+#define superclass (&smeClassRec)
+SmeBSBClassRec smeBSBClassRec = {
+ /* rectangle */
+ {
+ (WidgetClass)superclass, /* superclass */
+ "SmeBSB", /* class_name */
+ sizeof(SmeBSBRec), /* size */
+ XawSmeBSBClassInitialize, /* class_init */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawSmeBSBInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* compress_motion */
+ False, /* compress_exposure */
+ False, /* compress_enterleave */
+ False, /* visible_interest */
+ XawSmeBSBDestroy, /* destroy */
+ NULL, /* resize */
+ XawSmeBSBRedisplay, /* expose */
+ XawSmeBSBSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* intrinsics version */
+ NULL, /* callback offsets */
+ NULL, /* tm_table */
+ XawSmeBSBQueryGeometry, /* query_geometry */
+ NULL, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* sme */
+ {
+ FlipColors, /* highlight */
+ FlipColors, /* unhighlight */
+ XtInheritNotify, /* notify */
+ NULL, /* extension */
+ },
+ /* sme_bsb */
+ {
+ NULL, /* extension */
+ },
+};
+WidgetClass smeBSBObjectClass = (WidgetClass)&smeBSBClassRec;
+
+/*
+ * Function:
+ * XawSmeBSBClassInitialize
+ *
+ * Description:
+ * Initializes the SmeBSBObject.
+ */
+static void
+XawSmeBSBClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtAddConverter(XtRString, XtRJustify, XmuCvtStringToJustify, NULL, 0);
+ XtSetTypeConverter(XtRJustify, XtRString, XmuCvtJustifyToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+/*
+ * Function:
+ * XawSmeBSBInitialize
+ *
+ * Parameters:
+ * request - widget requested by the argument list
+ * cnew - new widget with both resource and non resource values
+ *
+ * Description:
+ * Initializes the simple menu widget entry.
+ */
+/*ARGSUSED*/
+static void
+XawSmeBSBInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SmeBSBObject entry = (SmeBSBObject)cnew;
+
+ if (!entry->sme_bsb.font) XtError("Aborting: no font found\n");
+
+ if (entry->sme_bsb.label == NULL)
+ entry->sme_bsb.label = XtName(cnew);
+ else
+ entry->sme_bsb.label = XtNewString(entry->sme_bsb.label);
+
+ GetDefaultSize(cnew, &entry->rectangle.width, &entry->rectangle.height);
+ CreateGCs(cnew);
+
+ entry->sme_bsb.left_bitmap_width = entry->sme_bsb.left_bitmap_height = 0;
+ entry->sme_bsb.right_bitmap_width = entry->sme_bsb.right_bitmap_height = 0;
+
+ GetBitmapInfo(cnew, True); /* Left Bitmap Info */
+ GetBitmapInfo(cnew, False); /* Right Bitmap Info */
+}
+
+/*
+ * Function:
+ * XawSmeBSBDestroy
+ *
+ * Parameters:
+ * w - simple menu widget entry
+ */
+static void
+XawSmeBSBDestroy(Widget w)
+{
+ SmeBSBObject entry = (SmeBSBObject)w;
+
+ DestroyGCs(w);
+ if (entry->sme_bsb.label != XtName(w))
+ XtFree(entry->sme_bsb.label);
+}
+
+/*
+ * Function:
+ * XawSmeBSBRedisplay
+ *
+ * Parameters:
+ * w - simple menu widget entry
+ * event - X event that caused this redisplay
+ * region - region the needs to be repainted
+ *
+ * Description:
+ * Redisplays the contents of the widget.
+ */
+/* ARGSUSED */
+static void
+XawSmeBSBRedisplay(Widget w, XEvent *event, Region region)
+{
+ GC gc;
+ SmeBSBObject entry = (SmeBSBObject)w;
+ int font_ascent, font_descent, y_loc;
+ int fontset_ascent, fontset_descent;
+ XFontSetExtents *ext = XExtentsOfFontSet(entry->sme_bsb.fontset);
+
+ font_ascent = font_descent = fontset_ascent = fontset_descent = 0;
+ entry->sme_bsb.set_values_area_cleared = False;
+
+ if (entry->sme.international == True) {
+ fontset_ascent = XawAbs(ext->max_ink_extent.y);
+ fontset_descent = ext->max_ink_extent.height - fontset_ascent;
+ }
+ else {
+ font_ascent = entry->sme_bsb.font->max_bounds.ascent;
+ font_descent = entry->sme_bsb.font->max_bounds.descent;
+ }
+ y_loc = XtY(entry);
+
+ if (XtIsSensitive(w) && XtIsSensitive(XtParent(w))) {
+ if (w == XawSimpleMenuGetActiveEntry(XtParent(w))) {
+ XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
+ entry->sme_bsb.norm_gc, XtX(w), y_loc,
+ XtWidth(entry), XtHeight(entry));
+ gc = entry->sme_bsb.rev_gc;
+ }
+ else
+ gc = entry->sme_bsb.norm_gc;
+ }
+ else
+ gc = entry->sme_bsb.norm_gray_gc;
+
+ if (entry->sme_bsb.label != NULL) {
+ int x_loc = entry->sme_bsb.left_margin;
+ int len = strlen(entry->sme_bsb.label);
+ char *label = entry->sme_bsb.label;
+ int width, t_width;
+
+ switch(entry->sme_bsb.justify) {
+ case XtJustifyCenter:
+ if (entry->sme.international == True) {
+ t_width = XmbTextEscapement(entry->sme_bsb.fontset,label,
+ len);
+ width = XtWidth(entry) - (entry->sme_bsb.left_margin +
+ entry->sme_bsb.right_margin);
+ }
+ else {
+ t_width = XTextWidth(entry->sme_bsb.font, label, len);
+ width = XtWidth(entry) - (entry->sme_bsb.left_margin +
+ entry->sme_bsb.right_margin);
+ }
+ x_loc += (width - t_width) >> 1;
+ break;
+ case XtJustifyRight:
+ if (entry->sme.international == True) {
+ t_width = XmbTextEscapement(entry->sme_bsb.fontset,label,
+ len);
+ x_loc = XtWidth(entry) - (entry->sme_bsb.right_margin +
+ t_width);
+ }
+ else {
+ t_width = XTextWidth(entry->sme_bsb.font, label, len);
+ x_loc = XtWidth(entry) - (entry->sme_bsb.right_margin +
+ t_width);
+ }
+ break;
+ case XtJustifyLeft:
+ /*FALLTHROUGH*/
+ default:
+ break;
+ }
+
+ /* this will center the text in the gadget top-to-bottom */
+ if (entry->sme.international == True) {
+ y_loc += ((XtHeight(entry) -
+ (fontset_ascent + fontset_descent)) >> 1) +
+ fontset_ascent;
+
+ XmbDrawString(XtDisplayOfObject(w), XtWindowOfObject(w),
+ entry->sme_bsb.fontset, gc,
+ XtX(w) + x_loc, y_loc, label, len);
+ }
+ else {
+ y_loc += ((XtHeight(entry) -
+ (font_ascent + font_descent)) >> 1) + font_ascent;
+
+ XDrawString(XtDisplayOfObject(w), XtWindowOfObject(w), gc,
+ XtX(w) + x_loc, y_loc, label, len);
+ }
+ }
+
+ DrawBitmaps(w, gc);
+}
+
+
+/*
+ * Function:
+ * XawSmeBSBSetValues
+ *
+ * Parameters:
+ * current - current state of the widget
+ * request - what was requested
+ * cnew - what the widget will become
+ *
+ * Description:
+ * Relayout the menu when one of the resources is changed.
+ */
+
+/*ARGSUSED*/
+static Boolean
+XawSmeBSBSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SmeBSBObject entry = (SmeBSBObject)cnew;
+ SmeBSBObject old_entry = (SmeBSBObject)current;
+ Boolean ret_val = False;
+
+ if (old_entry->sme_bsb.label != entry->sme_bsb.label) {
+ if (old_entry->sme_bsb.label != XtName(cnew))
+ XtFree((char *)old_entry->sme_bsb.label);
+
+ if (entry->sme_bsb.label != XtName(cnew))
+ entry->sme_bsb.label = XtNewString(entry->sme_bsb.label);
+
+ ret_val = True;
+ }
+
+ if (entry->rectangle.sensitive != old_entry->rectangle.sensitive)
+ ret_val = True;
+
+ if (entry->sme_bsb.left_bitmap != old_entry->sme_bsb.left_bitmap) {
+ GetBitmapInfo(cnew, True);
+ ret_val = True;
+ }
+
+ if (entry->sme_bsb.right_bitmap != old_entry->sme_bsb.right_bitmap) {
+ GetBitmapInfo(cnew, False);
+ ret_val = True;
+ }
+
+ if ((old_entry->sme_bsb.font != entry->sme_bsb.font
+ && old_entry->sme.international == False)
+ || old_entry->sme_bsb.foreground != entry->sme_bsb.foreground) {
+ DestroyGCs(current);
+ CreateGCs(cnew);
+ ret_val = True;
+ }
+
+ if (old_entry->sme_bsb.fontset != entry->sme_bsb.fontset &&
+ old_entry->sme.international == True)
+ /* DONT changes the GCs, because the fontset is not in them */
+ ret_val = True;
+
+ if (ret_val) {
+ Dimension width, height;
+
+ GetDefaultSize(cnew, &width, &height);
+ entry->sme_bsb.set_values_area_cleared = True;
+ XtMakeResizeRequest(cnew, width, height, NULL, NULL);
+ }
+
+ return (ret_val);
+}
+
+/*
+ * Function:
+ * XawSmeBSBQueryGeometry
+ *
+ * Parameters:
+ * w - menu entry object
+ * itended - intended and return geometry info
+ * return_val - ""
+ *
+ * Returns:
+ * Geometry Result
+ *
+ * Description:
+ * Returns the preferred geometry for this widget.
+ * See the Intrinsics manual for details on what this function is for.
+ */
+static XtGeometryResult
+XawSmeBSBQueryGeometry(Widget w, XtWidgetGeometry *intended,
+ XtWidgetGeometry *return_val)
+{
+ SmeBSBObject entry = (SmeBSBObject)w;
+ Dimension width, height;
+ XtGeometryResult ret_val = XtGeometryYes;
+ XtGeometryMask mode = intended->request_mode;
+
+ GetDefaultSize(w, &width, &height);
+
+ if (((mode & CWWidth) && intended->width != width) || !(mode & CWWidth)) {
+ return_val->request_mode |= CWWidth;
+ return_val->width = width;
+ ret_val = XtGeometryAlmost;
+ }
+
+ if (((mode & CWHeight) && intended->height != height) || !(mode & CWHeight)) {
+ return_val->request_mode |= CWHeight;
+ return_val->height = height;
+ ret_val = XtGeometryAlmost;
+ }
+
+ if (ret_val == XtGeometryAlmost) {
+ mode = return_val->request_mode;
+ if (((mode & CWWidth) && width == XtWidth(entry)) &&
+ ((mode & CWHeight) && height == XtHeight(entry)))
+ return (XtGeometryNo);
+ }
+
+ return (ret_val);
+}
+
+/*
+ * Function:
+ * FlipColors
+ *
+ * Parameters:
+ * w - bsb menu entry widget
+ *
+ * Description:
+ * Invert the colors of the current entry.
+ */
+static void
+FlipColors(Widget w)
+{
+ SmeBSBObject entry = (SmeBSBObject)w;
+
+ if (entry->sme_bsb.set_values_area_cleared)
+ return;
+
+ XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
+ entry->sme_bsb.invert_gc,
+ XtX(w), XtY(entry), XtWidth(entry), XtHeight(entry));
+}
+
+/*
+ * Function:
+ * GetDefaultSize
+ *
+ * Parameters:
+ * w - menu entry widget.
+ * width - default width (return)
+ * height - default height (return)
+ *
+ * Description:
+ * Calculates the Default (preferred) size of this menu entry.
+ */
+static void
+GetDefaultSize(Widget w, Dimension *width, Dimension *height)
+{
+ SmeBSBObject entry = (SmeBSBObject)w;
+
+ if (entry->sme.international == True) {
+ XFontSetExtents *ext = XExtentsOfFontSet(entry->sme_bsb.fontset);
+
+ if (entry->sme_bsb.label == NULL)
+ *width = 0;
+ else
+ *width = XmbTextEscapement(entry->sme_bsb.fontset,
+ entry->sme_bsb.label,
+ strlen(entry->sme_bsb.label));
+ *width += entry->sme_bsb.left_margin + entry->sme_bsb.right_margin;
+ *height = ext->max_ink_extent.height;
+ *height = ((int)*height * (ONE_HUNDRED +
+ entry->sme_bsb.vert_space)) / ONE_HUNDRED;
+ }
+ else {
+ if (entry->sme_bsb.label == NULL)
+ *width = 0;
+ else
+ *width = XTextWidth(entry->sme_bsb.font, entry->sme_bsb.label,
+ strlen(entry->sme_bsb.label));
+
+ *width += entry->sme_bsb.left_margin + entry->sme_bsb.right_margin;
+
+ *height = entry->sme_bsb.font->max_bounds.ascent +
+ entry->sme_bsb.font->max_bounds.descent;
+
+ *height = ((int)*height * (ONE_HUNDRED +
+ entry->sme_bsb.vert_space)) / ONE_HUNDRED;
+ }
+}
+
+/*
+ * Function:
+ * DrawBitmaps
+ *
+ * Parameters:
+ * w - simple menu widget entry
+ * gc - graphics context to use for drawing
+ *
+ * Description:
+ * Draws left and right bitmaps.
+ */
+static void
+DrawBitmaps(Widget w, GC gc)
+{
+ int x_loc, y_loc;
+ SmeBSBObject entry = (SmeBSBObject)w;
+
+ if (entry->sme_bsb.left_bitmap == None &&
+ entry->sme_bsb.right_bitmap == None)
+ return;
+
+ /*
+ * Draw Left Bitmap
+ */
+ if (entry->sme_bsb.left_bitmap != None) {
+ x_loc = ((entry->sme_bsb.left_margin -
+ entry->sme_bsb.left_bitmap_width) >> 1) + XtX(w);
+
+ y_loc = XtY(entry) + ((XtHeight(entry) -
+ entry->sme_bsb.left_bitmap_height) >> 1);
+
+ XCopyPlane(XtDisplayOfObject(w), entry->sme_bsb.left_bitmap,
+ XtWindowOfObject(w), gc, 0, 0,
+ entry->sme_bsb.left_bitmap_width,
+ entry->sme_bsb.left_bitmap_height, x_loc, y_loc, 1);
+ }
+
+ /*
+ * Draw Right Bitmap
+ */
+ if (entry->sme_bsb.right_bitmap != None) {
+ x_loc = XtWidth(entry) - ((entry->sme_bsb.right_margin +
+ entry->sme_bsb.right_bitmap_width) >> 1) +
+ XtX(w);
+ y_loc = XtY(entry) + ((XtHeight(entry) -
+ entry->sme_bsb.right_bitmap_height) >> 1);
+
+ XCopyPlane(XtDisplayOfObject(w), entry->sme_bsb.right_bitmap,
+ XtWindowOfObject(w), gc, 0, 0,
+ entry->sme_bsb.right_bitmap_width,
+ entry->sme_bsb.right_bitmap_height, x_loc, y_loc, 1);
+ }
+}
+
+/*
+ * Function:
+ * GetBitmapInfo
+ *
+ * Parameters:
+ * w - bsb menu entry object
+ * is_left - True: if we are testing left bitmap
+ * False: if we are testing the right bitmap
+ *
+ * Description:
+ * Gets the bitmap information from either of the bitmaps.
+ */
+static void
+GetBitmapInfo(Widget w, Bool is_left)
+{
+ SmeBSBObject entry = (SmeBSBObject)w;
+ unsigned int depth, bw;
+ Window root;
+ int x, y;
+ unsigned int width, height;
+
+ if (is_left) {
+ if (entry->sme_bsb.left_bitmap != None &&
+ XGetGeometry(XtDisplayOfObject(w),
+ entry->sme_bsb.left_bitmap, &root,
+ &x, &y, &width, &height, &bw, &depth)) {
+ entry->sme_bsb.left_bitmap_width = width;
+ entry->sme_bsb.left_bitmap_height = height;
+ }
+ }
+ else if (entry->sme_bsb.right_bitmap != None &&
+ XGetGeometry(XtDisplayOfObject(w),
+ entry->sme_bsb.right_bitmap, &root,
+ &x, &y, &width, &height, &bw, &depth)) {
+ entry->sme_bsb.right_bitmap_width = width;
+ entry->sme_bsb.right_bitmap_height = height;
+ }
+}
+
+/*
+ * Function:
+ * CreateGCs
+ *
+ * Parameters:
+ * w - simple menu widget entry
+ *
+ * Description:
+ * Creates all gc's for the simple menu widget.
+ */
+static void
+CreateGCs(Widget w)
+{
+ SmeBSBObject entry = (SmeBSBObject)w;
+ XGCValues values;
+ XtGCMask mask, mask_i18n;
+
+ values.foreground = XtParent(w)->core.background_pixel;
+ values.background = entry->sme_bsb.foreground;
+ values.font = entry->sme_bsb.font->fid;
+ values.graphics_exposures = False;
+ mask = GCForeground | GCBackground | GCGraphicsExposures | GCFont;
+ mask_i18n = GCForeground | GCBackground | GCGraphicsExposures;
+ if (entry->sme.international == True)
+ entry->sme_bsb.rev_gc = XtAllocateGC(w, 0, mask_i18n, &values, GCFont, 0);
+ else
+ entry->sme_bsb.rev_gc = XtGetGC(w, mask, &values);
+
+ values.foreground = entry->sme_bsb.foreground;
+ values.background = XtParent(w)->core.background_pixel;
+ if (entry->sme.international == True)
+ entry->sme_bsb.norm_gc = XtAllocateGC(w, 0, mask_i18n, &values, GCFont, 0);
+ else
+ entry->sme_bsb.norm_gc = XtGetGC(w, mask, &values);
+
+ values.fill_style = FillTiled;
+ values.tile = XmuCreateStippledPixmap(XtScreenOfObject(w),
+ entry->sme_bsb.foreground,
+ XtParent(w)->core.background_pixel,
+ XtParent(w)->core.depth);
+ values.graphics_exposures = False;
+ mask |= GCTile | GCFillStyle;
+ mask_i18n |= GCTile | GCFillStyle;
+ if (entry->sme.international == True)
+ entry->sme_bsb.norm_gray_gc = XtAllocateGC(w, 0, mask_i18n, &values,
+ GCFont, 0);
+ else
+ entry->sme_bsb.norm_gray_gc = XtGetGC(w, mask, &values);
+
+ values.foreground ^= values.background;
+ values.background = 0;
+ values.function = GXxor;
+ mask = GCForeground | GCBackground | GCGraphicsExposures | GCFunction;
+ entry->sme_bsb.invert_gc = XtGetGC(w, mask, &values);
+}
+
+/*
+ * Function:
+ * DestroyGCs
+ *
+ * Parameters:
+ * w - simple menu widget entry
+ *
+ * Description:
+ * Removes all gc's for the simple menu widget.
+ */
+static void
+DestroyGCs(Widget w)
+{
+ SmeBSBObject entry = (SmeBSBObject)w;
+
+ XtReleaseGC(w, entry->sme_bsb.norm_gc);
+ XtReleaseGC(w, entry->sme_bsb.norm_gray_gc);
+ XtReleaseGC(w, entry->sme_bsb.rev_gc);
+ XtReleaseGC(w, entry->sme_bsb.invert_gc);
+}
diff --git a/libXaw/src/SmeLine.c b/libXaw/src/SmeLine.c
index 88a6e9ce5..f735a3c9f 100644
--- a/libXaw/src/SmeLine.c
+++ b/libXaw/src/SmeLine.c
@@ -1,267 +1,264 @@
-/* $Xorg: SmeLine.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $ */
-
-/*
-Copyright 1989, 1998 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.
- *
- * Author: Chris D. Peterson, MIT X Consortium
- */
-/* $XFree86: xc/lib/Xaw/SmeLine.c,v 1.7 2001/01/17 19:42:31 dawes Exp $ */
-
-/*
- * Sme.c - Source code for the generic menu entry
- *
- * Date: September 26, 1989
- *
- * By: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/SmeLineP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Class Methods
- */
-static void XawSmeLineDestroy(Widget);
-static void XawSmeLineInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawSmeLineRedisplay(Widget, XEvent*, Region);
-static Boolean XawSmeLineSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void CreateGC(Widget);
-static void DestroyGC(Widget);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(SmeLineRec, sme_line.field)
-static XtResource resources[] = {
- {
- XtNlineWidth,
- XtCLineWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(line_width),
- XtRImmediate,
- (XtPointer)1
- },
- {
- XtNstipple,
- XtCStipple,
- XtRBitmap,
- sizeof(Pixmap),
- offset(stipple),
- XtRImmediate,
- (XtPointer)XtUnspecifiedPixmap
- },
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(foreground),
- XtRString,
- XtDefaultForeground
- },
-};
-#undef offset
-
-#define Superclass (&smeClassRec)
-SmeLineClassRec smeLineClassRec = {
- /* rectangle */
- {
- (WidgetClass)Superclass, /* superclass */
- "SmeLine", /* class_name */
- sizeof(SmeLineRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class inited */
- XawSmeLineInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* compress_motion */
- False, /* compress_exposure */
- False, /* compress_enterleave */
- False, /* visible_interest */
- XawSmeLineDestroy, /* destroy */
- NULL, /* resize */
- XawSmeLineRedisplay, /* expose */
- XawSmeLineSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* intrinsics version */
- NULL, /* callback offsets */
- NULL, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- NULL, /* display_accelerator */
- NULL, /* extension */
- },
- /* sme */
- {
- XtInheritHighlight, /* highlight */
- XtInheritUnhighlight, /* unhighlight */
- XtInheritNotify, /* notify */
- NULL, /* extension */
- },
- /* sme_line */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass smeLineObjectClass = (WidgetClass)&smeLineClassRec;
-
-/*
- * Implementation
- */
-/*ARGSUSED*/
-static void
-XawSmeLineInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SmeLineObject entry = (SmeLineObject)cnew;
-
- if (XtHeight(entry) == 0)
- XtHeight(entry) = entry->sme_line.line_width;
-
- CreateGC(cnew);
-}
-
-/*
- * Function:
- * CreateGC
- *
- * Parameters:
- * w - Line entry widget
- *
- * Description:
- * Creates the GC for the line entry widget.
- *
- * Note:
- * We can only share the GC if there is no stipple, because
- * we need to change the stipple origin when drawing
- */
-static void
-CreateGC(Widget w)
-{
- SmeLineObject entry = (SmeLineObject)w;
- XGCValues values;
- XtGCMask mask = GCForeground | GCGraphicsExposures | GCLineWidth;
-
- values.foreground = entry->sme_line.foreground;
- values.graphics_exposures = False;
- values.line_width = entry->sme_line.line_width;
-
- if (entry->sme_line.stipple != XtUnspecifiedPixmap) {
- values.stipple = entry->sme_line.stipple;
- values.fill_style = FillStippled;
- mask |= GCStipple | GCFillStyle;
-
- entry->sme_line.gc = XCreateGC(XtDisplayOfObject(w),
- RootWindowOfScreen(XtScreenOfObject(w)),
- mask, &values);
- }
- else
- entry->sme_line.gc = XtGetGC(w, mask, &values);
-}
-
-static void
-XawSmeLineDestroy(Widget w)
-{
- DestroyGC(w);
-}
-
-static void
-DestroyGC(Widget w)
-{
- SmeLineObject entry = (SmeLineObject)w;
-
- if (entry->sme_line.stipple != XtUnspecifiedPixmap)
- XFreeGC(XtDisplayOfObject(w), entry->sme_line.gc);
- else
- XtReleaseGC(w, entry->sme_line.gc);
-}
-
-/*ARGSUSED*/
-static void
-XawSmeLineRedisplay(Widget w, XEvent *event, Region region)
-{
- SmeLineObject entry = (SmeLineObject)w;
- int y = XtY(w) + (((int)XtHeight(w) - entry->sme_line.line_width) >> 1);
-
- if (entry->sme_line.stipple != XtUnspecifiedPixmap)
- XSetTSOrigin(XtDisplayOfObject(w), entry->sme_line.gc, 0, y);
-
- XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
- entry->sme_line.gc, XtX(w), y,
- XtWidth(w), entry->sme_line.line_width);
-}
-
-/*
- * Function:
- * XawSmeLineSetValues
- *
- * Parameters:
- * current - current state of the widget
- * request - what was requested
- * cnew - what the widget will become
- *
- * Description:
- * Relayout the menu when one of the resources is changed.
- */
-/*ARGSUSED*/
-static Boolean
-XawSmeLineSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- SmeLineObject entry = (SmeLineObject)cnew;
- SmeLineObject old_entry = (SmeLineObject)current;
-
- if (entry->sme_line.line_width != old_entry->sme_line.line_width &&
- entry->sme_line.stipple != old_entry->sme_line.stipple) {
- DestroyGC(current);
- CreateGC(cnew);
- return (True);
- }
-
- return (False);
-}
+/*
+Copyright 1989, 1998 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.
+ *
+ * Author: Chris D. Peterson, MIT X Consortium
+ */
+
+/*
+ * Sme.c - Source code for the generic menu entry
+ *
+ * Date: September 26, 1989
+ *
+ * By: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/SmeLineP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Class Methods
+ */
+static void XawSmeLineDestroy(Widget);
+static void XawSmeLineInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawSmeLineRedisplay(Widget, XEvent*, Region);
+static Boolean XawSmeLineSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void CreateGC(Widget);
+static void DestroyGC(Widget);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(SmeLineRec, sme_line.field)
+static XtResource resources[] = {
+ {
+ XtNlineWidth,
+ XtCLineWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(line_width),
+ XtRImmediate,
+ (XtPointer)1
+ },
+ {
+ XtNstipple,
+ XtCStipple,
+ XtRBitmap,
+ sizeof(Pixmap),
+ offset(stipple),
+ XtRImmediate,
+ (XtPointer)XtUnspecifiedPixmap
+ },
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(foreground),
+ XtRString,
+ XtDefaultForeground
+ },
+};
+#undef offset
+
+#define Superclass (&smeClassRec)
+SmeLineClassRec smeLineClassRec = {
+ /* rectangle */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "SmeLine", /* class_name */
+ sizeof(SmeLineRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class inited */
+ XawSmeLineInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* compress_motion */
+ False, /* compress_exposure */
+ False, /* compress_enterleave */
+ False, /* visible_interest */
+ XawSmeLineDestroy, /* destroy */
+ NULL, /* resize */
+ XawSmeLineRedisplay, /* expose */
+ XawSmeLineSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* intrinsics version */
+ NULL, /* callback offsets */
+ NULL, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ NULL, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* sme */
+ {
+ XtInheritHighlight, /* highlight */
+ XtInheritUnhighlight, /* unhighlight */
+ XtInheritNotify, /* notify */
+ NULL, /* extension */
+ },
+ /* sme_line */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass smeLineObjectClass = (WidgetClass)&smeLineClassRec;
+
+/*
+ * Implementation
+ */
+/*ARGSUSED*/
+static void
+XawSmeLineInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SmeLineObject entry = (SmeLineObject)cnew;
+
+ if (XtHeight(entry) == 0)
+ XtHeight(entry) = entry->sme_line.line_width;
+
+ CreateGC(cnew);
+}
+
+/*
+ * Function:
+ * CreateGC
+ *
+ * Parameters:
+ * w - Line entry widget
+ *
+ * Description:
+ * Creates the GC for the line entry widget.
+ *
+ * Note:
+ * We can only share the GC if there is no stipple, because
+ * we need to change the stipple origin when drawing
+ */
+static void
+CreateGC(Widget w)
+{
+ SmeLineObject entry = (SmeLineObject)w;
+ XGCValues values;
+ XtGCMask mask = GCForeground | GCGraphicsExposures | GCLineWidth;
+
+ values.foreground = entry->sme_line.foreground;
+ values.graphics_exposures = False;
+ values.line_width = entry->sme_line.line_width;
+
+ if (entry->sme_line.stipple != XtUnspecifiedPixmap) {
+ values.stipple = entry->sme_line.stipple;
+ values.fill_style = FillStippled;
+ mask |= GCStipple | GCFillStyle;
+
+ entry->sme_line.gc = XCreateGC(XtDisplayOfObject(w),
+ RootWindowOfScreen(XtScreenOfObject(w)),
+ mask, &values);
+ }
+ else
+ entry->sme_line.gc = XtGetGC(w, mask, &values);
+}
+
+static void
+XawSmeLineDestroy(Widget w)
+{
+ DestroyGC(w);
+}
+
+static void
+DestroyGC(Widget w)
+{
+ SmeLineObject entry = (SmeLineObject)w;
+
+ if (entry->sme_line.stipple != XtUnspecifiedPixmap)
+ XFreeGC(XtDisplayOfObject(w), entry->sme_line.gc);
+ else
+ XtReleaseGC(w, entry->sme_line.gc);
+}
+
+/*ARGSUSED*/
+static void
+XawSmeLineRedisplay(Widget w, XEvent *event, Region region)
+{
+ SmeLineObject entry = (SmeLineObject)w;
+ int y = XtY(w) + (((int)XtHeight(w) - entry->sme_line.line_width) >> 1);
+
+ if (entry->sme_line.stipple != XtUnspecifiedPixmap)
+ XSetTSOrigin(XtDisplayOfObject(w), entry->sme_line.gc, 0, y);
+
+ XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),
+ entry->sme_line.gc, XtX(w), y,
+ XtWidth(w), entry->sme_line.line_width);
+}
+
+/*
+ * Function:
+ * XawSmeLineSetValues
+ *
+ * Parameters:
+ * current - current state of the widget
+ * request - what was requested
+ * cnew - what the widget will become
+ *
+ * Description:
+ * Relayout the menu when one of the resources is changed.
+ */
+/*ARGSUSED*/
+static Boolean
+XawSmeLineSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ SmeLineObject entry = (SmeLineObject)cnew;
+ SmeLineObject old_entry = (SmeLineObject)current;
+
+ if (entry->sme_line.line_width != old_entry->sme_line.line_width &&
+ entry->sme_line.stipple != old_entry->sme_line.stipple) {
+ DestroyGC(current);
+ CreateGC(cnew);
+ return (True);
+ }
+
+ return (False);
+}
diff --git a/libXaw/src/StripChart.c b/libXaw/src/StripChart.c
index ada85f172..85e3e3914 100644
--- a/libXaw/src/StripChart.c
+++ b/libXaw/src/StripChart.c
@@ -1,579 +1,576 @@
-/* $Xorg: StripChart.c,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/StripChart.c,v 1.7 2001/01/17 19:42:32 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xfuncs.h>
-#include <X11/Xaw/StripCharP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-#define MS_PER_SEC 1000
-
-/*
- * Class Methods
- */
-static void XawStripChartInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawStripChartDestroy(Widget);
-static void XawStripChartRedisplay(Widget, XEvent*, Region);
-static void XawStripChartResize(Widget);
-static Boolean XawStripChartSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void CreateGC(StripChartWidget, unsigned int);
-static void DestroyGC(StripChartWidget, unsigned int);
-static void draw_it(XtPointer, XtIntervalId*);
-static void MoveChart(StripChartWidget, Bool);
-static int repaint_window(StripChartWidget, int, int);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(StripChartRec, field)
-static XtResource resources[] = {
- {
- XtNwidth,
- XtCWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(core.width),
- XtRImmediate,
- (XtPointer)
- 120
- },
- {
- XtNheight,
- XtCHeight,
- XtRDimension,
- sizeof(Dimension),
- offset(core.height),
- XtRImmediate,
- (XtPointer)120
- },
- {
- XtNupdate,
- XtCInterval,
- XtRInt,
- sizeof(int),
- offset(strip_chart.update),
- XtRImmediate,
- (XtPointer)10
- },
- {
- XtNminScale,
- XtCScale,
- XtRInt,
- sizeof(int),
- offset(strip_chart.min_scale),
- XtRImmediate,
- (XtPointer)1
- },
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(strip_chart.fgpixel),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNhighlight,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(strip_chart.hipixel),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNgetValue,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(strip_chart.get_value),
- XtRImmediate,
- NULL
- },
- {
- XtNjumpScroll,
- XtCJumpScroll,
- XtRInt,
- sizeof(int),
- offset(strip_chart.jump_val),
- XtRImmediate,
- (XtPointer)DEFAULT_JUMP
- },
-};
-#undef offset
-
-StripChartClassRec stripChartClassRec = {
- /* core */
- {
- (WidgetClass)&simpleClassRec, /* superclass */
- "StripChart", /* class_name */
- sizeof(StripChartRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawStripChartInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- XtExposeCompressMultiple /* compress_exposure */
- | XtExposeGraphicsExposeMerged,
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawStripChartDestroy, /* destroy */
- XawStripChartResize, /* resize */
- XawStripChartRedisplay, /* expose */
- XawStripChartSetValues, /* set_values */
- NULL, /* set_values_hook */
- NULL, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- }
-};
-
-WidgetClass stripChartWidgetClass = (WidgetClass)&stripChartClassRec;
-
-/*
- * Implementation
- */
-/*
- * Function:
- * CreateGC
- *
- * Parameters:
- * w - strip chart widget
- * which - GC's to create
- *
- * Description:
- * Creates the GC's
- */
-static void
-CreateGC(StripChartWidget w, unsigned int which)
-{
- XGCValues myXGCV;
-
- if (which & FOREGROUND) {
- myXGCV.foreground = w->strip_chart.fgpixel;
- w->strip_chart.fgGC = XtGetGC((Widget)w, GCForeground, &myXGCV);
- }
-
- if (which & HIGHLIGHT) {
- myXGCV.foreground = w->strip_chart.hipixel;
- w->strip_chart.hiGC = XtGetGC((Widget)w, GCForeground, &myXGCV);
- }
-}
-
-/*
- * Function:
- * DestroyGC
- *
- * Arguments:
- * w - strip chart widget
- * which - which GC's to destroy
- *
- * Description:
- * Destroys the GC's
- */
-static void
-DestroyGC(StripChartWidget w, unsigned int which)
-{
- if (which & FOREGROUND)
- XtReleaseGC((Widget)w, w->strip_chart.fgGC);
-
- if (which & HIGHLIGHT)
- XtReleaseGC((Widget)w, w->strip_chart.hiGC);
-}
-
-/*ARGSUSED*/
-static void
-XawStripChartInitialize(Widget greq, Widget gnew,
- ArgList args, Cardinal *num_args)
-{
- StripChartWidget w = (StripChartWidget)gnew;
-
- if (w->strip_chart.update > 0)
- w->strip_chart.interval_id =
- XtAppAddTimeOut(XtWidgetToApplicationContext(gnew),
- w->strip_chart.update * MS_PER_SEC,
- draw_it, (XtPointer)gnew);
- CreateGC(w, ALL_GCS);
-
- w->strip_chart.scale = w->strip_chart.min_scale;
- w->strip_chart.interval = 0;
- w->strip_chart.max_value = 0.0;
- w->strip_chart.points = NULL;
- XawStripChartResize(gnew);
-}
-
-static void
-XawStripChartDestroy(Widget gw)
-{
- StripChartWidget w = (StripChartWidget)gw;
-
- if (w->strip_chart.update > 0)
- XtRemoveTimeOut(w->strip_chart.interval_id);
- if (w->strip_chart.points)
- XtFree((char *)w->strip_chart.points);
- DestroyGC(w, ALL_GCS);
-}
-
-/*
- * NOTE: This function really needs to recieve graphics exposure
- * events, but since this is not easily supported until R4 I am
- * going to hold off until then.
- */
-/*ARGSUSED*/
-static void
-XawStripChartRedisplay(Widget w, XEvent *event, Region region)
-{
- if (event->type == GraphicsExpose)
- (void)repaint_window((StripChartWidget)w, event->xgraphicsexpose.x,
- event->xgraphicsexpose.width);
- else
- (void)repaint_window((StripChartWidget)w, event->xexpose.x,
- event->xexpose.width);
-}
-
-/*ARGSUSED*/
-static void
-draw_it(XtPointer client_data, XtIntervalId *id)
-{
- StripChartWidget w = (StripChartWidget)client_data;
- double value;
-
- if (w->strip_chart.update > 0)
- w->strip_chart.interval_id =
- XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)w),
- w->strip_chart.update * MS_PER_SEC,draw_it,
- client_data);
-
- if (w->strip_chart.interval >= XtWidth(w))
- MoveChart((StripChartWidget)w, True);
-
- /* Get the value, stash the point and draw corresponding line */
- if (w->strip_chart.get_value == NULL)
- return;
-
- XtCallCallbacks((Widget)w, XtNgetValue, (XtPointer)&value);
-
- /*
- * Keep w->strip_chart.max_value up to date, and if this data
- * point is off the graph, change the scale to make it fit
- */
- if (value > w->strip_chart.max_value) {
- w->strip_chart.max_value = value;
- if (XtIsRealized((Widget)w) &&
- w->strip_chart.max_value > w->strip_chart.scale) {
- XClearWindow(XtDisplay(w), XtWindow(w));
- w->strip_chart.interval = repaint_window(w, 0, XtWidth(w));
- }
- }
-
- w->strip_chart.valuedata[w->strip_chart.interval] = value;
- if (XtIsRealized((Widget)w)) {
- int y = (int)(XtHeight(w) - XtHeight(w) * value
- / w->strip_chart.scale);
-
- XFillRectangle(XtDisplay(w), XtWindow(w), w->strip_chart.fgGC,
- w->strip_chart.interval, y,
- 1, XtHeight(w) - y);
-
- /*
- * Fill in the graph lines we just painted over
- */
- if (w->strip_chart.points != NULL) {
- w->strip_chart.points[0].x = w->strip_chart.interval;
- XDrawPoints(XtDisplay(w), XtWindow(w), w->strip_chart.hiGC,
- w->strip_chart.points, w->strip_chart.scale - 1,
- CoordModePrevious);
- }
-
- XFlush(XtDisplay(w)); /* Flush output buffers */
- }
- w->strip_chart.interval++; /* Next point */
-}
-
-/* Blts data according to current size, then redraws the stripChart window
- * Next represents the number of valid points in data. Returns the (possibly)
- * adjusted value of next. If next is 0, this routine draws an empty window
- * (scale - 1 lines for graph). If next is less than the current window width,
- * the returned value is identical to the initial value of next and data is
- * unchanged. Otherwise keeps half a window's worth of data. If data is
- * changed, then w->strip_chart.max_value is updated to reflect the
- * largest data point
- */
-static int
-repaint_window(StripChartWidget w, int left, int width)
-{
- int i, j;
- int next = w->strip_chart.interval;
- int scale = w->strip_chart.scale;
- int scalewidth = 0;
-
- /* Compute the minimum scale required to graph the data, but don't go
- lower than min_scale */
- if (w->strip_chart.interval != 0 || scale <= w->strip_chart.max_value)
- scale = w->strip_chart.max_value + 1;
- if (scale < w->strip_chart.min_scale)
- scale = w->strip_chart.min_scale;
-
- if (scale != w->strip_chart.scale) {
- w->strip_chart.scale = scale;
- left = 0;
- width = next;
- scalewidth = XtWidth(w);
-
- XawStripChartResize((Widget)w);
-
- if (XtIsRealized((Widget)w))
- XClearWindow(XtDisplay(w), XtWindow(w));
- }
-
- if (XtIsRealized((Widget)w)) {
- Display *dpy = XtDisplay(w);
- Window win = XtWindow(w);
-
- width += left - 1;
- if (!scalewidth)
- scalewidth = width;
-
- if (next < ++width)
- width = next;
-
- /* Draw data point lines */
- for (i = left; i < width; i++) {
- int y = XtHeight(w) - (XtHeight(w) * w->strip_chart.valuedata[i])
- / w->strip_chart.scale;
-
- XFillRectangle(dpy, win, w->strip_chart.fgGC,
- i, y, 1, XtHeight(w) - y);
- }
-
- /* Draw graph reference lines */
- for (i = 1; i < w->strip_chart.scale; i++) {
- j = i * ((int)XtHeight(w) / w->strip_chart.scale);
- XDrawLine(dpy, win, w->strip_chart.hiGC, left, j, scalewidth, j);
- }
- }
- return (next);
-}
-
-/*
- * Function:
- * MoveChart
- *
- * Parameters:
- * w - chart widget
- * blit - blit the bits?
- *
- * Description:
- * Moves the chart over when it would run off the end.
- */
-static void
-MoveChart(StripChartWidget w, Bool blit)
-{
- double old_max;
- int left, i, j;
- int next = w->strip_chart.interval;
-
- if (!XtIsRealized((Widget)w))
- return;
-
- if (w->strip_chart.jump_val < 0)
- w->strip_chart.jump_val = DEFAULT_JUMP;
- if (w->strip_chart.jump_val == DEFAULT_JUMP)
- j = XtWidth(w) >> 1;
- else {
- j = (int)XtWidth(w) - w->strip_chart.jump_val;
- if (j < 0)
- j = 0;
- }
-
- (void)memmove((char *)w->strip_chart.valuedata,
- (char *)(w->strip_chart.valuedata + next - j),
- j * sizeof(double));
- next = w->strip_chart.interval = j;
-
- /*
- * Since we just lost some data, recompute the
- * w->strip_chart.max_value
- */
- old_max = w->strip_chart.max_value;
- w->strip_chart.max_value = 0.0;
- for (i = 0; i < next; i++) {
- if (w->strip_chart.valuedata[i] > w->strip_chart.max_value)
- w->strip_chart.max_value = w->strip_chart.valuedata[i];
- }
-
- if (!blit)
- return;
-
- if (old_max != w->strip_chart.max_value) {
- XClearWindow(XtDisplay(w), XtWindow(w));
- repaint_window(w, 0, XtWidth(w));
- return;
- }
-
- XCopyArea(XtDisplay((Widget)w), XtWindow((Widget)w), XtWindow((Widget)w),
- w->strip_chart.hiGC, (int)XtWidth(w) - j, 0, j, XtHeight(w), 0, 0);
-
- XClearArea(XtDisplay((Widget)w), XtWindow((Widget)w),
- j, 0, XtWidth(w) - j, XtHeight(w), False);
-
- /* Draw graph reference lines */
- left = j;
- for (i = 1; i < w->strip_chart.scale; i++) {
- j = i * (XtHeight(w) / w->strip_chart.scale);
- XDrawLine(XtDisplay((Widget)w), XtWindow((Widget)w),
- w->strip_chart.hiGC, left, j, XtWidth(w), j);
- }
-}
-
-/*ARGSUSED*/
-static Boolean
-XawStripChartSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- StripChartWidget old = (StripChartWidget)current;
- StripChartWidget w = (StripChartWidget)cnew;
- Bool ret_val = False;
- unsigned int new_gc = NO_GCS;
-
- if (w->strip_chart.update != old->strip_chart.update) {
- if (old->strip_chart.update > 0)
- XtRemoveTimeOut(old->strip_chart.interval_id);
- if (w->strip_chart.update > 0)
- w->strip_chart.interval_id =
- XtAppAddTimeOut(XtWidgetToApplicationContext(cnew),
- w->strip_chart.update * MS_PER_SEC,
- draw_it, (XtPointer)w);
- }
-
- if (w->strip_chart.min_scale > w->strip_chart.max_value + 1)
- ret_val = True;
-
- if (w->strip_chart.fgpixel != old->strip_chart.fgpixel) {
- new_gc |= FOREGROUND;
- ret_val = True;
- }
-
- if (w->strip_chart.hipixel != old->strip_chart.hipixel) {
- new_gc |= HIGHLIGHT;
- ret_val = True;
- }
-
- DestroyGC(old, new_gc);
- CreateGC(w, new_gc);
-
- return (ret_val);
-}
-
-/*
- * Function:
- * XawStripChartResize
- *
- * Parameters:
- * w - StripChart widget
- *
- * Description:
- * Sets up the polypoint that will be used to draw in the graph lines.
- */
-static void
-XawStripChartResize(Widget widget)
-{
- StripChartWidget w = (StripChartWidget)widget;
- XPoint *points;
- Cardinal size;
- int i;
-
- if (w->strip_chart.scale <= 1) {
- XtFree((char *)w->strip_chart.points);
- w->strip_chart.points = NULL;
- return;
- }
-
- size = sizeof(XPoint) * (w->strip_chart.scale - 1);
-
- points = (XPoint *)XtRealloc((XtPointer)w->strip_chart.points, size);
- w->strip_chart.points = points;
-
- /* Draw graph reference lines into clip mask */
-
- for (i = 1; i < w->strip_chart.scale; i++) {
- points[i - 1].x = 0;
- points[i - 1].y = XtHeight(w) / w->strip_chart.scale;
- }
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xfuncs.h>
+#include <X11/Xaw/StripCharP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+#define MS_PER_SEC 1000
+
+/*
+ * Class Methods
+ */
+static void XawStripChartInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawStripChartDestroy(Widget);
+static void XawStripChartRedisplay(Widget, XEvent*, Region);
+static void XawStripChartResize(Widget);
+static Boolean XawStripChartSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void CreateGC(StripChartWidget, unsigned int);
+static void DestroyGC(StripChartWidget, unsigned int);
+static void draw_it(XtPointer, XtIntervalId*);
+static void MoveChart(StripChartWidget, Bool);
+static int repaint_window(StripChartWidget, int, int);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(StripChartRec, field)
+static XtResource resources[] = {
+ {
+ XtNwidth,
+ XtCWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(core.width),
+ XtRImmediate,
+ (XtPointer)
+ 120
+ },
+ {
+ XtNheight,
+ XtCHeight,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(core.height),
+ XtRImmediate,
+ (XtPointer)120
+ },
+ {
+ XtNupdate,
+ XtCInterval,
+ XtRInt,
+ sizeof(int),
+ offset(strip_chart.update),
+ XtRImmediate,
+ (XtPointer)10
+ },
+ {
+ XtNminScale,
+ XtCScale,
+ XtRInt,
+ sizeof(int),
+ offset(strip_chart.min_scale),
+ XtRImmediate,
+ (XtPointer)1
+ },
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(strip_chart.fgpixel),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNhighlight,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(strip_chart.hipixel),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNgetValue,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(strip_chart.get_value),
+ XtRImmediate,
+ NULL
+ },
+ {
+ XtNjumpScroll,
+ XtCJumpScroll,
+ XtRInt,
+ sizeof(int),
+ offset(strip_chart.jump_val),
+ XtRImmediate,
+ (XtPointer)DEFAULT_JUMP
+ },
+};
+#undef offset
+
+StripChartClassRec stripChartClassRec = {
+ /* core */
+ {
+ (WidgetClass)&simpleClassRec, /* superclass */
+ "StripChart", /* class_name */
+ sizeof(StripChartRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawStripChartInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ XtExposeCompressMultiple /* compress_exposure */
+ | XtExposeGraphicsExposeMerged,
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawStripChartDestroy, /* destroy */
+ XawStripChartResize, /* resize */
+ XawStripChartRedisplay, /* expose */
+ XawStripChartSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ NULL, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ }
+};
+
+WidgetClass stripChartWidgetClass = (WidgetClass)&stripChartClassRec;
+
+/*
+ * Implementation
+ */
+/*
+ * Function:
+ * CreateGC
+ *
+ * Parameters:
+ * w - strip chart widget
+ * which - GC's to create
+ *
+ * Description:
+ * Creates the GC's
+ */
+static void
+CreateGC(StripChartWidget w, unsigned int which)
+{
+ XGCValues myXGCV;
+
+ if (which & FOREGROUND) {
+ myXGCV.foreground = w->strip_chart.fgpixel;
+ w->strip_chart.fgGC = XtGetGC((Widget)w, GCForeground, &myXGCV);
+ }
+
+ if (which & HIGHLIGHT) {
+ myXGCV.foreground = w->strip_chart.hipixel;
+ w->strip_chart.hiGC = XtGetGC((Widget)w, GCForeground, &myXGCV);
+ }
+}
+
+/*
+ * Function:
+ * DestroyGC
+ *
+ * Arguments:
+ * w - strip chart widget
+ * which - which GC's to destroy
+ *
+ * Description:
+ * Destroys the GC's
+ */
+static void
+DestroyGC(StripChartWidget w, unsigned int which)
+{
+ if (which & FOREGROUND)
+ XtReleaseGC((Widget)w, w->strip_chart.fgGC);
+
+ if (which & HIGHLIGHT)
+ XtReleaseGC((Widget)w, w->strip_chart.hiGC);
+}
+
+/*ARGSUSED*/
+static void
+XawStripChartInitialize(Widget greq, Widget gnew,
+ ArgList args, Cardinal *num_args)
+{
+ StripChartWidget w = (StripChartWidget)gnew;
+
+ if (w->strip_chart.update > 0)
+ w->strip_chart.interval_id =
+ XtAppAddTimeOut(XtWidgetToApplicationContext(gnew),
+ w->strip_chart.update * MS_PER_SEC,
+ draw_it, (XtPointer)gnew);
+ CreateGC(w, ALL_GCS);
+
+ w->strip_chart.scale = w->strip_chart.min_scale;
+ w->strip_chart.interval = 0;
+ w->strip_chart.max_value = 0.0;
+ w->strip_chart.points = NULL;
+ XawStripChartResize(gnew);
+}
+
+static void
+XawStripChartDestroy(Widget gw)
+{
+ StripChartWidget w = (StripChartWidget)gw;
+
+ if (w->strip_chart.update > 0)
+ XtRemoveTimeOut(w->strip_chart.interval_id);
+ if (w->strip_chart.points)
+ XtFree((char *)w->strip_chart.points);
+ DestroyGC(w, ALL_GCS);
+}
+
+/*
+ * NOTE: This function really needs to recieve graphics exposure
+ * events, but since this is not easily supported until R4 I am
+ * going to hold off until then.
+ */
+/*ARGSUSED*/
+static void
+XawStripChartRedisplay(Widget w, XEvent *event, Region region)
+{
+ if (event->type == GraphicsExpose)
+ (void)repaint_window((StripChartWidget)w, event->xgraphicsexpose.x,
+ event->xgraphicsexpose.width);
+ else
+ (void)repaint_window((StripChartWidget)w, event->xexpose.x,
+ event->xexpose.width);
+}
+
+/*ARGSUSED*/
+static void
+draw_it(XtPointer client_data, XtIntervalId *id)
+{
+ StripChartWidget w = (StripChartWidget)client_data;
+ double value;
+
+ if (w->strip_chart.update > 0)
+ w->strip_chart.interval_id =
+ XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)w),
+ w->strip_chart.update * MS_PER_SEC,draw_it,
+ client_data);
+
+ if (w->strip_chart.interval >= XtWidth(w))
+ MoveChart((StripChartWidget)w, True);
+
+ /* Get the value, stash the point and draw corresponding line */
+ if (w->strip_chart.get_value == NULL)
+ return;
+
+ XtCallCallbacks((Widget)w, XtNgetValue, (XtPointer)&value);
+
+ /*
+ * Keep w->strip_chart.max_value up to date, and if this data
+ * point is off the graph, change the scale to make it fit
+ */
+ if (value > w->strip_chart.max_value) {
+ w->strip_chart.max_value = value;
+ if (XtIsRealized((Widget)w) &&
+ w->strip_chart.max_value > w->strip_chart.scale) {
+ XClearWindow(XtDisplay(w), XtWindow(w));
+ w->strip_chart.interval = repaint_window(w, 0, XtWidth(w));
+ }
+ }
+
+ w->strip_chart.valuedata[w->strip_chart.interval] = value;
+ if (XtIsRealized((Widget)w)) {
+ int y = (int)(XtHeight(w) - XtHeight(w) * value
+ / w->strip_chart.scale);
+
+ XFillRectangle(XtDisplay(w), XtWindow(w), w->strip_chart.fgGC,
+ w->strip_chart.interval, y,
+ 1, XtHeight(w) - y);
+
+ /*
+ * Fill in the graph lines we just painted over
+ */
+ if (w->strip_chart.points != NULL) {
+ w->strip_chart.points[0].x = w->strip_chart.interval;
+ XDrawPoints(XtDisplay(w), XtWindow(w), w->strip_chart.hiGC,
+ w->strip_chart.points, w->strip_chart.scale - 1,
+ CoordModePrevious);
+ }
+
+ XFlush(XtDisplay(w)); /* Flush output buffers */
+ }
+ w->strip_chart.interval++; /* Next point */
+}
+
+/* Blts data according to current size, then redraws the stripChart window
+ * Next represents the number of valid points in data. Returns the (possibly)
+ * adjusted value of next. If next is 0, this routine draws an empty window
+ * (scale - 1 lines for graph). If next is less than the current window width,
+ * the returned value is identical to the initial value of next and data is
+ * unchanged. Otherwise keeps half a window's worth of data. If data is
+ * changed, then w->strip_chart.max_value is updated to reflect the
+ * largest data point
+ */
+static int
+repaint_window(StripChartWidget w, int left, int width)
+{
+ int i, j;
+ int next = w->strip_chart.interval;
+ int scale = w->strip_chart.scale;
+ int scalewidth = 0;
+
+ /* Compute the minimum scale required to graph the data, but don't go
+ lower than min_scale */
+ if (w->strip_chart.interval != 0 || scale <= w->strip_chart.max_value)
+ scale = w->strip_chart.max_value + 1;
+ if (scale < w->strip_chart.min_scale)
+ scale = w->strip_chart.min_scale;
+
+ if (scale != w->strip_chart.scale) {
+ w->strip_chart.scale = scale;
+ left = 0;
+ width = next;
+ scalewidth = XtWidth(w);
+
+ XawStripChartResize((Widget)w);
+
+ if (XtIsRealized((Widget)w))
+ XClearWindow(XtDisplay(w), XtWindow(w));
+ }
+
+ if (XtIsRealized((Widget)w)) {
+ Display *dpy = XtDisplay(w);
+ Window win = XtWindow(w);
+
+ width += left - 1;
+ if (!scalewidth)
+ scalewidth = width;
+
+ if (next < ++width)
+ width = next;
+
+ /* Draw data point lines */
+ for (i = left; i < width; i++) {
+ int y = XtHeight(w) - (XtHeight(w) * w->strip_chart.valuedata[i])
+ / w->strip_chart.scale;
+
+ XFillRectangle(dpy, win, w->strip_chart.fgGC,
+ i, y, 1, XtHeight(w) - y);
+ }
+
+ /* Draw graph reference lines */
+ for (i = 1; i < w->strip_chart.scale; i++) {
+ j = i * ((int)XtHeight(w) / w->strip_chart.scale);
+ XDrawLine(dpy, win, w->strip_chart.hiGC, left, j, scalewidth, j);
+ }
+ }
+ return (next);
+}
+
+/*
+ * Function:
+ * MoveChart
+ *
+ * Parameters:
+ * w - chart widget
+ * blit - blit the bits?
+ *
+ * Description:
+ * Moves the chart over when it would run off the end.
+ */
+static void
+MoveChart(StripChartWidget w, Bool blit)
+{
+ double old_max;
+ int left, i, j;
+ int next = w->strip_chart.interval;
+
+ if (!XtIsRealized((Widget)w))
+ return;
+
+ if (w->strip_chart.jump_val < 0)
+ w->strip_chart.jump_val = DEFAULT_JUMP;
+ if (w->strip_chart.jump_val == DEFAULT_JUMP)
+ j = XtWidth(w) >> 1;
+ else {
+ j = (int)XtWidth(w) - w->strip_chart.jump_val;
+ if (j < 0)
+ j = 0;
+ }
+
+ (void)memmove((char *)w->strip_chart.valuedata,
+ (char *)(w->strip_chart.valuedata + next - j),
+ j * sizeof(double));
+ next = w->strip_chart.interval = j;
+
+ /*
+ * Since we just lost some data, recompute the
+ * w->strip_chart.max_value
+ */
+ old_max = w->strip_chart.max_value;
+ w->strip_chart.max_value = 0.0;
+ for (i = 0; i < next; i++) {
+ if (w->strip_chart.valuedata[i] > w->strip_chart.max_value)
+ w->strip_chart.max_value = w->strip_chart.valuedata[i];
+ }
+
+ if (!blit)
+ return;
+
+ if (old_max != w->strip_chart.max_value) {
+ XClearWindow(XtDisplay(w), XtWindow(w));
+ repaint_window(w, 0, XtWidth(w));
+ return;
+ }
+
+ XCopyArea(XtDisplay((Widget)w), XtWindow((Widget)w), XtWindow((Widget)w),
+ w->strip_chart.hiGC, (int)XtWidth(w) - j, 0, j, XtHeight(w), 0, 0);
+
+ XClearArea(XtDisplay((Widget)w), XtWindow((Widget)w),
+ j, 0, XtWidth(w) - j, XtHeight(w), False);
+
+ /* Draw graph reference lines */
+ left = j;
+ for (i = 1; i < w->strip_chart.scale; i++) {
+ j = i * (XtHeight(w) / w->strip_chart.scale);
+ XDrawLine(XtDisplay((Widget)w), XtWindow((Widget)w),
+ w->strip_chart.hiGC, left, j, XtWidth(w), j);
+ }
+}
+
+/*ARGSUSED*/
+static Boolean
+XawStripChartSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ StripChartWidget old = (StripChartWidget)current;
+ StripChartWidget w = (StripChartWidget)cnew;
+ Bool ret_val = False;
+ unsigned int new_gc = NO_GCS;
+
+ if (w->strip_chart.update != old->strip_chart.update) {
+ if (old->strip_chart.update > 0)
+ XtRemoveTimeOut(old->strip_chart.interval_id);
+ if (w->strip_chart.update > 0)
+ w->strip_chart.interval_id =
+ XtAppAddTimeOut(XtWidgetToApplicationContext(cnew),
+ w->strip_chart.update * MS_PER_SEC,
+ draw_it, (XtPointer)w);
+ }
+
+ if (w->strip_chart.min_scale > w->strip_chart.max_value + 1)
+ ret_val = True;
+
+ if (w->strip_chart.fgpixel != old->strip_chart.fgpixel) {
+ new_gc |= FOREGROUND;
+ ret_val = True;
+ }
+
+ if (w->strip_chart.hipixel != old->strip_chart.hipixel) {
+ new_gc |= HIGHLIGHT;
+ ret_val = True;
+ }
+
+ DestroyGC(old, new_gc);
+ CreateGC(w, new_gc);
+
+ return (ret_val);
+}
+
+/*
+ * Function:
+ * XawStripChartResize
+ *
+ * Parameters:
+ * w - StripChart widget
+ *
+ * Description:
+ * Sets up the polypoint that will be used to draw in the graph lines.
+ */
+static void
+XawStripChartResize(Widget widget)
+{
+ StripChartWidget w = (StripChartWidget)widget;
+ XPoint *points;
+ Cardinal size;
+ int i;
+
+ if (w->strip_chart.scale <= 1) {
+ XtFree((char *)w->strip_chart.points);
+ w->strip_chart.points = NULL;
+ return;
+ }
+
+ size = sizeof(XPoint) * (w->strip_chart.scale - 1);
+
+ points = (XPoint *)XtRealloc((XtPointer)w->strip_chart.points, size);
+ w->strip_chart.points = points;
+
+ /* Draw graph reference lines into clip mask */
+
+ for (i = 1; i < w->strip_chart.scale; i++) {
+ points[i - 1].x = 0;
+ points[i - 1].y = XtHeight(w) / w->strip_chart.scale;
+ }
+}
diff --git a/libXaw/src/Text.c b/libXaw/src/Text.c
index 2fd9d3fb6..b95231c56 100644
--- a/libXaw/src/Text.c
+++ b/libXaw/src/Text.c
@@ -1,4162 +1,4158 @@
-/* $Xorg: Text.c,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-
-/*
- * Copyright (c) 1998 by The XFree86 Project, 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 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.
- */
-
-/* $XFree86: xc/lib/Xaw/Text.c,v 3.53tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Shell.h>
-#include <X11/Xatom.h>
-#include <X11/Xfuncs.h>
-#include <X11/Xutil.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xmu/Xmu.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/MultiSinkP.h>
-#include <X11/Xaw/TextP.h>
-#include <X11/Xaw/TextSrcP.h>
-#include <X11/Xaw/TextSinkP.h>
-#include <X11/Xaw/Scrollbar.h>
-#include <X11/Xaw/XawImP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-#include "XawI18n.h"
-
-#ifndef MAX_LEN_CT
-#define MAX_LEN_CT 6 /* for sequence: ESC $ ( A \xx \xx */
-#endif
-
-unsigned long FMT8BIT = 0L;
-unsigned long XawFmt8Bit = 0L;
-unsigned long XawFmtWide = 0L;
-
-#define SinkClearToBG _XawTextSinkClearToBackground
-
-#define SrcScan XawTextSourceScan
-#define SrcRead XawTextSourceRead
-#define SrcReplace XawTextSourceReplace
-#define SrcSearch XawTextSourceSearch
-#define SrcCvtSel XawTextSourceConvertSelection
-#define SrcSetSelection XawTextSourceSetSelection
-
-#define MULTI_CLICK_TIME 500L
-
-#define SRC_CHANGE_NONE 0
-#define SRC_CHANGE_AFTER 1
-#define SRC_CHANGE_BEFORE 2
-#define SRC_CHANGE_OVERLAP 3
-
-#define Superclass (&simpleClassRec)
-
-/*
- * Compute a the maximum length of a cut buffer that we can pass at any
- * time. The 64 allows for the overhead of the Change Property request.
- */
-#define MAX_CUT_LEN(dpy) (XMaxRequestSize(dpy) - 64)
-
-#define ClearWindow(ctx) \
- _XawTextNeedsUpdating((ctx), \
- (ctx)->text.lt.top, \
- (ctx)->text.lt.info[ctx->text.lt.lines].position)
-
-/*
- * Class Methods
- */
-static void XawTextClassInitialize(void);
-static void XawTextInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawTextRealize(Widget, XtValueMask*, XSetWindowAttributes*);
-static void XawTextDestroy(Widget);
-static void XawTextResize(Widget);
-static void XawTextExpose(Widget, XEvent*, Region);
-static Boolean XawTextSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-static void XawTextGetValuesHook(Widget, ArgList, Cardinal*);
-static Bool XawTextChangeSensitive(Widget);
-
-/*
- * Prototypes
- */
-static XawTextPosition _BuildLineTable(TextWidget, XawTextPosition, int);
-static void _CreateCutBuffers(Display*);
-static Boolean TextConvertSelection(Widget, Atom*, Atom*, Atom*, XtPointer*,
- unsigned long*, int*);
-static int CountLines(TextWidget, XawTextPosition, XawTextPosition);
-static void CreateHScrollBar(TextWidget);
-static void CreateVScrollBar(TextWidget);
-static void CvtStringToScrollMode(XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr);
-static Boolean CvtScrollModeToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static void CvtStringToWrapMode(XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr);
-static Boolean CvtWrapModeToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean CvtStringToJustifyMode(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean CvtJustifyModeToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static void DestroyHScrollBar(TextWidget);
-static void DestroyVScrollBar(TextWidget);
-#ifndef OLDXAW
-static void DisplayText(Widget, XawTextPosition, XawTextPosition);
-#endif
-static void OldDisplayText(Widget, XawTextPosition, XawTextPosition);
-static void DisplayTextWindow(Widget);
-static void DoCopyArea(TextWidget, int, int, unsigned int, unsigned int,
- int, int);
-static void DoSelection(TextWidget, XawTextPosition, Time, Bool);
-static void ExtendSelection(TextWidget, XawTextPosition, Bool);
-static XawTextPosition FindGoodPosition(TextWidget, XawTextPosition);
-static void FlushUpdate(TextWidget);
-static int GetCutBufferNumber(Atom);
-static int GetMaxTextWidth(TextWidget);
-static unsigned int GetWidestLine(TextWidget);
-static void HScroll(Widget, XtPointer, XtPointer);
-static void HJump(Widget, XtPointer, XtPointer);
-static void InsertCursor(Widget, XawTextInsertState);
-static Bool LineAndXYForPosition(TextWidget, XawTextPosition, int*,
- int*, int*);
-static int LineForPosition(TextWidget, XawTextPosition);
-static void TextLoseSelection(Widget, Atom*);
-static Bool MatchSelection(Atom, XawTextSelection*);
-static void ModifySelection(TextWidget, XawTextPosition, XawTextPosition);
-static XawTextPosition PositionForXY(TextWidget, int, int);
-static void PositionHScrollBar(TextWidget);
-static void PositionVScrollBar(TextWidget);
-#ifndef OLDXAW
-static int ResolveColumnNumber(TextWidget);
-static int ResolveLineNumber(TextWidget);
-#endif
-static void _SetSelection(TextWidget, XawTextPosition, XawTextPosition,
- Atom*, Cardinal);
-static void TextSinkResize(Widget);
-static void UpdateTextInRectangle(TextWidget, XRectangle*);
-static void UpdateTextInLine(TextWidget, int, int, int);
-static void VScroll(Widget, XtPointer, XtPointer);
-static void VJump(Widget, XtPointer, XtPointer);
-
-/*
- * External
- */
-void _XawTextAlterSelection(TextWidget,
- XawTextSelectionMode, XawTextSelectionAction,
- String*, Cardinal*);
-void _XawTextCheckResize(TextWidget);
-void _XawTextClearAndCenterDisplay(TextWidget);
-void _XawTextExecuteUpdate(TextWidget);
-char *_XawTextGetText(TextWidget, XawTextPosition, XawTextPosition);
-void _XawTextPrepareToUpdate(TextWidget);
-int _XawTextReplace(TextWidget, XawTextPosition, XawTextPosition,
- XawTextBlock*);
-Atom *_XawTextSelectionList(TextWidget, String*, Cardinal);
-void _XawTextSetScrollBars(TextWidget);
-void _XawTextSetSelection(TextWidget, XawTextPosition, XawTextPosition,
- String*, Cardinal);
-void _XawTextVScroll(TextWidget, int);
-void XawTextScroll(TextWidget, int, int);
-void _XawTextSetSource(Widget, Widget, XawTextPosition, XawTextPosition);
-#ifndef OLDXAW
-void _XawTextSetLineAndColumnNumber(TextWidget, Bool);
-#endif
-void _XawTextSourceChanged(Widget, XawTextPosition, XawTextPosition,
- XawTextBlock*, int);
-
-/* Not used by other modules, but were extern on previous versions
- * of the library
- */
-void _XawTextShowPosition(TextWidget);
-
-/*
- * From TextAction.c
- */
-extern void _XawTextZapSelection(TextWidget, XEvent*, Bool);
-
-/*
- * From TextSrc.c
- */
-void _XawSourceAddText(Widget, Widget);
-void _XawSourceRemoveText(Widget, Widget, Bool);
-Bool _XawTextSourceNewLineAtEOF(Widget);
-
-/*
- * From TextSink.c
- */
-void _XawTextSinkClearToBackground(Widget, int, int, unsigned, unsigned);
-void _XawTextSinkDisplayText(Widget, int, int, XawTextPosition, XawTextPosition,
- Bool);
-
-/****************************************************************
- *
- * Full class record constant
- *
- ****************************************************************/
-/*
- * From TextTr.c
- */
-static XawTextSelectType defaultSelectTypes[] = {
- XawselectPosition, XawselectAlphaNumeric, XawselectWord, XawselectLine,
- XawselectParagraph, XawselectAll, XawselectNull,
-};
-
-static XPointer defaultSelectTypesPtr = (XPointer)defaultSelectTypes;
-static Dimension defWidth = 100;
-static Dimension defHeight = DEFAULT_TEXT_HEIGHT;
-
-#define offset(field) XtOffsetOf(TextRec, field)
-static XtResource resources[] = {
- {
- XtNwidth,
- XtCWidth,
- XtRDimension,
- sizeof(Dimension),
- offset(core.width),
- XtRDimension,
- (XtPointer)&defWidth
- },
- {
- XtNcursor,
- XtCCursor,
- XtRCursor,
- sizeof(Cursor),
- offset(simple.cursor),
- XtRString,
- "xterm"
- },
- {
- XtNheight,
- XtCHeight,
- XtRDimension,
- sizeof(Dimension),
- offset(core.height),
- XtRDimension,
- (XtPointer)&defHeight
- },
- {
- XtNdisplayPosition,
- XtCTextPosition,
- XtRInt,
- sizeof(XawTextPosition),
- offset(text.lt.top),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNinsertPosition,
- XtCTextPosition,
- XtRInt,
- sizeof(XawTextPosition),
- offset(text.insertPos),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNleftMargin,
- XtCMargin,
- XtRPosition,
- sizeof(Position),
- offset(text.r_margin.left),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNrightMargin,
- XtCMargin,
- XtRPosition,
- sizeof(Position),
- offset(text.r_margin.right),
- XtRImmediate,
- (XtPointer)4
- },
- {
- XtNtopMargin,
- XtCMargin,
- XtRPosition,
- sizeof(Position),
- offset(text.r_margin.top),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNbottomMargin,
- XtCMargin,
- XtRPosition,
- sizeof(Position),
- offset(text.r_margin.bottom),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNselectTypes,
- XtCSelectTypes,
- XtRPointer,
- sizeof(XawTextSelectType*),
- offset(text.sarray),
- XtRPointer,
- (XtPointer)&defaultSelectTypesPtr
- },
- {
- XtNtextSource,
- XtCTextSource,
- XtRWidget,
- sizeof(Widget),
- offset(text.source),
- XtRImmediate,
- NULL
- },
- {
- XtNtextSink,
- XtCTextSink,
- XtRWidget,
- sizeof(Widget),
- offset(text.sink),
- XtRImmediate,
- NULL
- },
- {
- XtNdisplayCaret,
- XtCOutput,
- XtRBoolean,
- sizeof(Boolean),
- offset(text.display_caret),
- XtRImmediate,
- (XtPointer)True
- },
- {
- XtNscrollVertical,
- XtCScroll,
- XtRScrollMode,
- sizeof(XawTextScrollMode),
- offset(text.scroll_vert),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNscrollHorizontal,
- XtCScroll,
- XtRScrollMode,
- sizeof(XawTextScrollMode),
- offset(text.scroll_horiz),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNwrap,
- XtCWrap,
- XtRWrapMode,
- sizeof(XawTextWrapMode),
- offset(text.wrap),
- XtRImmediate,
- (XtPointer)XawtextWrapNever
- },
- {
- XtNautoFill,
- XtCAutoFill,
- XtRBoolean,
- sizeof(Boolean),
- offset(text.auto_fill),
- XtRImmediate,
- (XtPointer)False
- },
-#ifndef OLDXAW
- {
- XtNpositionCallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(text.position_callbacks),
- XtRCallback,
- NULL
- },
- {
- XtNleftColumn,
- XtCColumn,
- XtRShort,
- sizeof(short),
- offset(text.left_column),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNrightColumn,
- XtCColumn,
- XtRShort,
- sizeof(short),
- offset(text.right_column),
- XtRImmediate,
- (XtPointer)0
- },
- {
- XtNjustifyMode,
- XtCJustifyMode,
- XtRJustifyMode,
- sizeof(XawTextJustifyMode),
- offset(text.justify),
- XtRImmediate,
- (XtPointer)XawjustifyLeft
- },
-#endif /* OLDXAW */
-};
-#undef offset
-
-#define done(address, type) \
- { toVal->size = sizeof(type); toVal->addr = (XPointer)address; }
-
-static XrmQuark QWrapNever, QWrapLine, QWrapWord;
-#ifndef notdef
-static XrmQuark QScrollNever, QScrollWhenNeeded, QScrollAlways;
-#endif
-static XrmQuark QJustifyLeft, QJustifyRight, QJustifyCenter, QJustifyFull;
-
-/*ARGSUSED*/
-static void
-CvtStringToScrollMode(XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal)
-{
- static XawTextScrollMode scrollMode = XawtextScrollNever;
- XrmQuark q;
- char name[32];
-
- XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
- q = XrmStringToQuark(name);
-
- if (q == QScrollNever || q == QScrollWhenNeeded)
- scrollMode = XawtextScrollNever;
- else if (q == QScrollAlways)
- scrollMode = XawtextScrollAlways;
- else if (strcmp(name, "true") == 0 || strcmp(name, "1") == 0)
- scrollMode = XawtextScrollAlways;
- else if (strcmp(name, "false") == 0 || strcmp(name, "0") == 0)
- scrollMode = XawtextScrollNever;
- else
- XtStringConversionWarning((char *)fromVal->addr, XtRScrollMode);
-
- done(&scrollMode, XawTextScrollMode);
-}
-
-/*ARGSUSED*/
-static Boolean
-CvtScrollModeToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
-{
- static char *buffer;
- Cardinal size;
-
- switch (*(XawTextScrollMode *)fromVal->addr) {
- case XawtextScrollNever:
- case XawtextScrollWhenNeeded:
- buffer = XtEtextScrollNever;
- break;
- case XawtextScrollAlways:
- buffer = XtEtextScrollAlways;
- break;
- default:
- XawTypeToStringWarning(dpy, XtRScrollMode);
- toVal->addr = NULL;
- toVal->size = 0;
- return (False);
- }
- size = strlen(buffer) + 1;
- if (toVal->addr != NULL) {
- if (toVal->size < size) {
- toVal->size = size;
- return (False);
- }
- strcpy((char *)toVal->addr, buffer);
- }
- else
- toVal->addr = (XPointer)buffer;
- toVal->size = sizeof(String);
-
- return (True);
-}
-
-/*ARGSUSED*/
-static void
-CvtStringToWrapMode(XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal)
-{
- static XawTextWrapMode wrapMode = XawtextWrapNever;
- XrmQuark q;
- char lowerName[6];
-
- XmuNCopyISOLatin1Lowered(lowerName, (char *)fromVal->addr,
- sizeof(lowerName));
- q = XrmStringToQuark(lowerName);
-
- if (q == QWrapNever)
- wrapMode = XawtextWrapNever;
- else if (q == QWrapLine)
- wrapMode = XawtextWrapLine;
- else if (q == QWrapWord)
- wrapMode = XawtextWrapWord;
- else
- XtStringConversionWarning((char *)fromVal->addr, XtRWrapMode);
-
- done(&wrapMode, XawTextWrapMode);
-}
-
-/*ARGSUSED*/
-static Boolean
-CvtWrapModeToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
-{
- static char *buffer;
- Cardinal size;
-
- switch (*(XawTextWrapMode *)fromVal->addr) {
- case XawtextWrapNever:
- buffer = XtEtextWrapNever;
- break;
- case XawtextWrapLine:
- buffer = XtEtextWrapLine;
- break;
- case XawtextWrapWord:
- buffer = XtEtextWrapWord;
- break;
- default:
- XawTypeToStringWarning(dpy, XtRWrapMode);
- toVal->addr = NULL;
- toVal->size = 0;
- return (False);
- }
- size = strlen(buffer) + 1;
- if (toVal->addr != NULL) {
- if (toVal->size < size) {
- toVal->size = size;
- return (False);
- }
- strcpy((char *)toVal->addr, buffer);
- }
- else
- toVal->addr = (XPointer)buffer;
- toVal->size = sizeof(String);
-
- return (True);
-}
-
-/*ARGSUSED*/
-static Boolean
-CvtStringToJustifyMode(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
-{
- XawTextJustifyMode justify;
- XrmQuark q;
- char lowerName[8];
-
- XmuNCopyISOLatin1Lowered(lowerName, (char *)fromVal->addr,
- sizeof(lowerName));
- q = XrmStringToQuark(lowerName);
-
- if (q == QJustifyLeft)
- justify = XawjustifyLeft;
- else if (q == QJustifyRight)
- justify = XawjustifyRight;
- else if (q == QJustifyCenter)
- justify = XawjustifyCenter;
- else if(q == QJustifyFull)
- justify = XawjustifyFull;
- else {
- XtStringConversionWarning((char *)fromVal->addr, XtRJustifyMode);
- return (False);
- }
-
- toVal->size = sizeof(XawTextJustifyMode);
- *(XawTextJustifyMode *)(toVal->addr) = justify;
-
- return (True);
-}
-
-
-/*ARGSUSED*/
-static Boolean
-CvtJustifyModeToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
-{
- static char *buffer;
- Cardinal size;
-
- switch (*(XawTextJustifyMode *)fromVal->addr) {
- case XawjustifyLeft:
- buffer = XtEtextJustifyLeft;
- break;
- case XawjustifyRight:
- buffer = XtEtextJustifyRight;
- break;
- case XawjustifyCenter:
- buffer = XtEtextJustifyCenter;
- break;
- case XawjustifyFull:
- buffer = XtEtextJustifyFull;
- break;
- default:
- XawTypeToStringWarning(dpy, XtRJustifyMode);
- toVal->addr = NULL;
- toVal->size = 0;
- return (False);
- }
- size = strlen(buffer) + 1;
- if (toVal->addr != NULL) {
- if (toVal->size < size) {
- toVal->size = size;
- return (False);
- }
- strcpy((char *)toVal->addr, buffer);
- }
- else
- toVal->addr = (XPointer)buffer;
- toVal->size = sizeof(String);
-
- return (True);
-}
-
-#undef done
-
-static void
-XawTextClassInitialize(void)
-{
- if (!XawFmt8Bit)
- FMT8BIT = XawFmt8Bit = XrmPermStringToQuark("FMT8BIT");
- if (!XawFmtWide)
- XawFmtWide = XrmPermStringToQuark("FMTWIDE");
-
- XawInitializeWidgetSet();
-
- textClassRec.core_class.num_actions = _XawTextActionsTableCount;
-
- QWrapNever = XrmPermStringToQuark(XtEtextWrapNever);
- QWrapLine = XrmPermStringToQuark(XtEtextWrapLine);
- QWrapWord = XrmPermStringToQuark(XtEtextWrapWord);
- XtAddConverter(XtRString, XtRWrapMode, CvtStringToWrapMode, NULL, 0);
- XtSetTypeConverter(XtRWrapMode, XtRString, CvtWrapModeToString,
- NULL, 0, XtCacheNone, NULL);
- QScrollNever = XrmPermStringToQuark(XtEtextScrollNever);
- QScrollWhenNeeded = XrmPermStringToQuark(XtEtextScrollWhenNeeded);
- QScrollAlways = XrmPermStringToQuark(XtEtextScrollAlways);
- XtAddConverter(XtRString, XtRScrollMode, CvtStringToScrollMode,
- NULL, 0);
- XtSetTypeConverter(XtRScrollMode, XtRString, CvtScrollModeToString,
- NULL, 0, XtCacheNone, NULL);
- QJustifyLeft = XrmPermStringToQuark(XtEtextJustifyLeft);
- QJustifyRight = XrmPermStringToQuark(XtEtextJustifyRight);
- QJustifyCenter = XrmPermStringToQuark(XtEtextJustifyCenter);
- QJustifyFull = XrmPermStringToQuark(XtEtextJustifyFull);
- XtSetTypeConverter(XtRString, XtRJustifyMode, CvtStringToJustifyMode,
- NULL, 0, XtCacheNone, NULL);
- XtSetTypeConverter(XtRJustifyMode, XtRString, CvtJustifyModeToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-/*
- * Function:
- * PositionHScrollBar
- *
- * Parameters:
- * ctx - text widget
- *
- * Description:
- * Positions the Horizontal scrollbar.
- */
-static void
-PositionHScrollBar(TextWidget ctx)
-{
- Widget hbar = ctx->text.hbar, vbar = ctx->text.vbar;
- Position x, y;
- Dimension width, height;
-
- if (ctx->text.hbar == NULL)
- return;
-
- if (vbar != NULL)
- x = XtWidth(vbar);
- else
- x = -XtBorderWidth(hbar);
- y = XtHeight(ctx) - XtHeight(hbar) - XtBorderWidth(hbar);
- if (vbar != NULL) {
- width = XtWidth(ctx) - XtWidth(vbar) - XtBorderWidth(vbar);
- if (width > XtWidth(ctx))
- width = XtWidth(ctx);
- }
- else
- width = XtWidth(ctx);
- height = XtHeight(hbar);
-
- XtConfigureWidget(hbar, x, y, width, height, XtBorderWidth(hbar));
-}
-
-/*
- * Function:
- * PositionVScrollBar
- *
- * Parameters:
- * ctx - text widget
- *
- * Description:
- * Positions the Vertical scrollbar.
- */
-static void
-PositionVScrollBar(TextWidget ctx)
-{
- Widget vbar = ctx->text.vbar;
- Position x, y;
- Dimension width, height;
-
- if (vbar == NULL)
- return;
-
- x = y = -XtBorderWidth(vbar);
- height = XtHeight(ctx);
- width = XtWidth(vbar);
-
- XtConfigureWidget(vbar, x, y, width, height, XtBorderWidth(vbar));
-}
-
-static void
-CreateVScrollBar(TextWidget ctx)
-{
- Widget vbar;
-
- if (ctx->text.vbar != NULL)
- return;
-
- ctx->text.vbar = vbar =
- XtCreateWidget("vScrollbar", scrollbarWidgetClass, (Widget)ctx, NULL, 0);
- XtAddCallback(vbar, XtNscrollProc, VScroll, (XtPointer)ctx);
- XtAddCallback(vbar, XtNjumpProc, VJump, (XtPointer)ctx);
-
- ctx->text.r_margin.left += XtWidth(vbar) + XtBorderWidth(vbar);
- ctx->text.left_margin = ctx->text.margin.left = ctx->text.r_margin.left;
-
- PositionVScrollBar(ctx);
- PositionHScrollBar(ctx);
- TextSinkResize(ctx->text.sink);
-
- if (XtIsRealized((Widget)ctx)) {
- XtRealizeWidget(vbar);
- XtMapWidget(vbar);
- }
- XtSetKeyboardFocus(vbar, (Widget)ctx);
-}
-
-/*
- * Function:
- * DestroyVScrollBar
- *
- * Parameters:
- * ctx - parent text widget
- *
- * Description:
- * Removes vertical ScrollBar.
- */
-static void
-DestroyVScrollBar(TextWidget ctx)
-{
- Widget vbar = ctx->text.vbar;
-
- if (vbar == NULL)
- return;
-
- ctx->text.r_margin.left -= XtWidth(vbar) + XtBorderWidth(vbar);
- ctx->text.left_margin = ctx->text.margin.left = ctx->text.r_margin.left;
-
- XtDestroyWidget(vbar);
- ctx->text.vbar = NULL;
- if (!ctx->core.being_destroyed) {
- PositionHScrollBar(ctx);
- TextSinkResize(ctx->text.sink);
- }
-}
-
-static void
-CreateHScrollBar(TextWidget ctx)
-{
- Arg args[1];
- Widget hbar;
- int bottom;
-
- if (ctx->text.hbar != NULL)
- return;
-
- XtSetArg(args[0], XtNorientation, XtorientHorizontal);
- ctx->text.hbar = hbar =
- XtCreateWidget("hScrollbar", scrollbarWidgetClass, (Widget)ctx, args, 1);
- XtAddCallback(hbar, XtNscrollProc, HScroll, (XtPointer)ctx);
- XtAddCallback(hbar, XtNjumpProc, HJump, (XtPointer)ctx);
-
- bottom = ctx->text.r_margin.bottom + XtHeight(hbar) + XtBorderWidth(hbar);
-
- ctx->text.margin.bottom = ctx->text.r_margin.bottom = bottom;
-
- PositionHScrollBar(ctx);
- TextSinkResize(ctx->text.sink);
-
- if (XtIsRealized((Widget)ctx)) {
- XtRealizeWidget(hbar);
- XtMapWidget(hbar);
- }
- XtSetKeyboardFocus(hbar, (Widget)ctx);
-}
-
-/*
- * Function:
- * DestroyHScrollBar
- *
- * Parameters:
- * ctx - parent text widget
- *
- * Description:
- * Removes horizontal ScrollBar.
- */
-static void
-DestroyHScrollBar(TextWidget ctx)
-{
- Widget hbar = ctx->text.hbar;
-
- if (hbar == NULL)
- return;
-
- ctx->text.r_margin.bottom -= XtHeight(hbar) + XtBorderWidth(hbar);
- ctx->text.margin.bottom = ctx->text.r_margin.bottom;
-
- XtDestroyWidget(hbar);
- ctx->text.hbar = NULL;
- if (!ctx->core.being_destroyed)
- TextSinkResize(ctx->text.sink);
-}
-
-/*ARGSUSED*/
-static void
-XawTextInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- TextWidget ctx = (TextWidget)cnew;
-
- ctx->text.lt.lines = 0;
- ctx->text.lt.info = (XawTextLineTableEntry *)
- XtCalloc(1, sizeof(XawTextLineTableEntry));
-#ifndef OLDXAW
- ctx->text.lt.base_line = 1;
-#endif
- (void)bzero(&ctx->text.origSel, sizeof(XawTextSelection));
- (void)bzero(&ctx->text.s, sizeof(XawTextSelection));
- ctx->text.s.type = XawselectPosition;
- ctx->text.salt = NULL;
- ctx->text.hbar = ctx->text.vbar = NULL;
- ctx->text.lasttime = 0;
- ctx->text.time = 0;
- ctx->text.showposition = True;
- ctx->text.lastPos = ctx->text.source != NULL ?
- XawTextGetLastPosition(ctx) : 0;
- ctx->text.file_insert = NULL;
- ctx->text.search = NULL;
- ctx->text.update = XmuNewScanline(0, 0, 0);
- ctx->text.gc = XtGetGC(cnew, 0, 0);
- ctx->text.hasfocus = False;
- ctx->text.margin = ctx->text.r_margin; /* Strucure copy */
- ctx->text.left_margin = ctx->text.r_margin.left;
- ctx->text.update_disabled = False;
- ctx->text.clear_to_eol = True;
- ctx->text.old_insert = -1;
- ctx->text.mult = 1;
- ctx->text.salt2 = NULL;
- ctx->text.from_left = -1;
-
-#ifndef OLDXAW
- ctx->text.numeric = False;
- ctx->text.selection_state = False;
- ctx->text.kill_ring = 0;
-
- ctx->text.line_number = -1;
- ctx->text.column_number = -1;
- ctx->text.source_changed = SRC_CHANGE_NONE;
-
- ctx->text.kill_ring_ptr = NULL;
- ctx->text.overwrite = False;
-#endif
-
- if (XtHeight(ctx) == DEFAULT_TEXT_HEIGHT) {
- XtHeight(ctx) = VMargins(ctx);
- if (ctx->text.sink != NULL)
- XtHeight(ctx) += XawTextSinkMaxHeight(ctx->text.sink, 1);
- }
-
- if (ctx->text.scroll_vert == XawtextScrollAlways)
- CreateVScrollBar(ctx);
- if (ctx->text.scroll_horiz == XawtextScrollAlways)
- CreateHScrollBar(ctx);
-
-#ifndef OLDXAW
- if (ctx->text.left_column < 0)
- ctx->text.left_column = 0;
- if (ctx->text.right_column < 0)
- ctx->text.right_column = 0;
-#endif
-}
-
-static void
-XawTextRealize(Widget w, XtValueMask *mask, XSetWindowAttributes *attr)
-{
- TextWidget ctx = (TextWidget)w;
-
- (*textClassRec.core_class.superclass->core_class.realize)(w, mask, attr);
-
- if (ctx->text.hbar != NULL) {
- XtRealizeWidget(ctx->text.hbar);
- XtMapWidget(ctx->text.hbar);
- }
-
- if (ctx->text.vbar != NULL) {
- XtRealizeWidget(ctx->text.vbar);
- XtMapWidget(ctx->text.vbar);
- }
-
- _XawTextBuildLineTable(ctx, ctx->text.lt.top, True);
-
-#ifndef OLDXAW
- _XawTextSetLineAndColumnNumber(ctx, True);
-#endif
-}
-
-/* Utility routines for support of Text */
-static void
-_CreateCutBuffers(Display *d)
-{
- static struct _DisplayRec {
- struct _DisplayRec *next;
- Display *dpy;
- } *dpy_list = NULL;
- struct _DisplayRec *dpy_ptr;
-
- for (dpy_ptr = dpy_list; dpy_ptr != NULL; dpy_ptr = dpy_ptr->next)
- if (dpy_ptr->dpy == d)
- return;
-
- dpy_ptr = XtNew(struct _DisplayRec);
- dpy_ptr->next = dpy_list;
- dpy_ptr->dpy = d;
- dpy_list = dpy_ptr;
-
-#define Create(buffer) \
- XChangeProperty(d, RootWindow(d, 0), buffer, XA_STRING, 8, \
- PropModeAppend, NULL, 0);
-
- Create(XA_CUT_BUFFER0);
- Create(XA_CUT_BUFFER1);
- Create(XA_CUT_BUFFER2);
- Create(XA_CUT_BUFFER3);
- Create(XA_CUT_BUFFER4);
- Create(XA_CUT_BUFFER5);
- Create(XA_CUT_BUFFER6);
- Create(XA_CUT_BUFFER7);
-
-#undef Create
-}
-
-/*
- * Procedure to manage insert cursor visibility for editable text. It uses
- * the value of ctx->insertPos and an implicit argument. In the event that
- * position is immediately preceded by an eol graphic, then the insert cursor
- * is displayed at the beginning of the next line.
- */
-static void
-InsertCursor(Widget w, XawTextInsertState state)
-{
- TextWidget ctx = (TextWidget)w;
- int x, y;
- int line;
-
- if (ctx->text.lt.lines < 1)
- return;
-
- if (ctx->text.display_caret &&
- LineAndXYForPosition(ctx, ctx->text.insertPos, &line, &x, &y)) {
- if (line < ctx->text.lt.lines)
- y += (ctx->text.lt.info[line + 1].y - ctx->text.lt.info[line].y) + 1;
- else
- y += (ctx->text.lt.info[line].y - ctx->text.lt.info[line - 1].y) + 1;
-
- XawTextSinkInsertCursor(ctx->text.sink, x, y, state);
- }
-
- /* Keep Input Method up to speed */
- if (ctx->simple.international) {
- Arg list[1];
-
- XtSetArg(list[0], XtNinsertPosition, ctx->text.insertPos);
- _XawImSetValues(w, list, 1);
- }
-}
-
-/*
- * Procedure to register a span of text that is no longer valid on the display
- * It is used to avoid a number of small, and potentially overlapping, screen
- * updates.
-*/
-void
-_XawTextNeedsUpdating(TextWidget ctx,
- XawTextPosition left, XawTextPosition right)
-{
- XmuSegment segment;
-
- if (left >= right)
- return;
-
- segment.x1 = (int)left;
- segment.x2 = (int)right;
- (void)XmuScanlineOrSegment(ctx->text.update, &segment);
-}
-
-/*
- * Procedure to read a span of text in Ascii form. This is purely a hack and
- * we probably need to add a function to sources to provide this functionality.
- * [note: this is really a private procedure but is used in multiple modules].
- */
-char *
-_XawTextGetText(TextWidget ctx, XawTextPosition left, XawTextPosition right)
-{
- char *result, *tempResult;
- XawTextBlock text;
- int bytes;
-
- if (XawTextFormat(ctx, XawFmt8Bit))
- bytes = sizeof(unsigned char);
- else if (XawTextFormat(ctx, XawFmtWide))
- bytes = sizeof(wchar_t);
- else /* if there is another fomat, add here */
- bytes = 1;
-
- /* leave space for ZERO */
- tempResult = result = XtMalloc((unsigned)(right - left + ONE) * bytes);
-
- while (left < right) {
- left = SrcRead(ctx->text.source, left, &text, (int)(right - left));
- if (!text.length)
- break;
- memmove(tempResult, text.ptr, (unsigned)(text.length * bytes));
- tempResult += text.length * bytes;
- }
-
- if (bytes == sizeof(wchar_t))
- *((wchar_t*)tempResult) = (wchar_t)0;
- else
- *tempResult = '\0';
-
- return (result);
-}
-
-/* Like _XawTextGetText, but enforces ICCCM STRING type encoding. This
- * routine is currently used to put just the ASCII chars in the selection
- * into a cut buffer.
- */
-char *
-_XawTextGetSTRING(TextWidget ctx, XawTextPosition left, XawTextPosition right)
-{
- unsigned char *s;
- unsigned char c;
- long i, j, n;
- wchar_t *ws, wc;
-
- /* allow ESC in accordance with ICCCM */
- if (XawTextFormat(ctx, XawFmtWide)) {
- MultiSinkObject sink = (MultiSinkObject)ctx->text.sink;
- ws = (wchar_t *)_XawTextGetText(ctx, left, right);
- n = wcslen(ws);
- for (j = 0, i = 0; j < n; j++) {
- wc = ws[j];
- if (XwcTextEscapement (sink->multi_sink.fontset, &wc, 1)
- || (wc == _Xaw_atowc(XawTAB)) || (wc == _Xaw_atowc(XawLF))
- || (wc == _Xaw_atowc(XawESC)))
- ws[i++] = wc;
- }
- ws[i] = (wchar_t)0;
- return ((char *)ws);
- }
- else {
- s = (unsigned char *)_XawTextGetText(ctx, left, right);
- /* only HT and NL control chars are allowed, strip out others */
- n = strlen((char *)s);
- i = 0;
- for (j = 0; j < n; j++) {
- c = s[j];
- if (((c >= 0x20) && c <= 0x7f)
- ||(c >= 0xa0) || (c == XawTAB) || (c == XawLF)
- || (c == XawESC)) {
- s[i] = c;
- i++;
- }
- }
- s[i] = 0;
-
- return ((char *)s);
- }
-}
-
-/*
- * This routine maps an x and y position in a window that is displaying text
- * into the corresponding position in the source.
- */
-static XawTextPosition
-PositionForXY(TextWidget ctx, int x, int y)
-{
- int fromx, line, width, height;
- XawTextPosition position;
-
- if (ctx->text.lt.lines == 0)
- return (0);
-
- for (line = 0; line < ctx->text.lt.lines - 1; line++) {
- if (y <= ctx->text.lt.info[line + 1].y)
- break;
- }
- position = ctx->text.lt.info[line].position;
- if (position >= ctx->text.lastPos)
- return (ctx->text.lastPos);
- fromx = ctx->text.left_margin;
- XawTextSinkFindPosition(ctx->text.sink, position, fromx, x - fromx,
- False, &position, &width, &height);
-
- if (position > ctx->text.lastPos)
- return (ctx->text.lastPos);
-
- if (position >= ctx->text.lt.info[line + 1].position)
- position = SrcScan(ctx->text.source, ctx->text.lt.info[line + 1].position,
- XawstPositions, XawsdLeft, 1, True);
-
- return (position);
-}
-
-/*
- * This routine maps a source position in to the corresponding line number
- * of the text that is displayed in the window.
- */
-static int
-LineForPosition(TextWidget ctx, XawTextPosition position)
-{
- int line;
-
- for (line = 0; line < ctx->text.lt.lines; line++)
- if (position < ctx->text.lt.info[line + 1].position)
- break;
-
- return (line);
-}
-
-/*
- * This routine maps a source position into the corresponding line number
- * and the x, y coordinates of the text that is displayed in the window.
- */
-static Bool
-LineAndXYForPosition(TextWidget ctx, XawTextPosition pos,
- int *line, int *x, int *y)
-{
- XawTextPosition linePos, endPos;
- Boolean visible;
- int realW, realH;
-
- *line = 0;
- *x = ctx->text.left_margin;
- *y = ctx->text.margin.top + 1;
- if ((visible = IsPositionVisible(ctx, pos)) != False) {
- *line = LineForPosition(ctx, pos);
- *y = ctx->text.lt.info[*line].y;
- linePos = ctx->text.lt.info[*line].position;
- XawTextSinkFindDistance(ctx->text.sink, linePos,
- *x, pos, &realW, &endPos, &realH);
- *x += realW;
- }
-
- return (visible);
-}
-
-/*
- * This routine builds a line table. It does this by starting at the
- * specified position and measuring text to determine the staring position
- * of each line to be displayed. It also determines and saves in the
- * linetable all the required metrics for displaying a given line (e.g.
- * x offset, y offset, line length, etc.).
- */
-void
-_XawTextBuildLineTable(TextWidget ctx, XawTextPosition position,
- _XtBoolean force_rebuild)
-{
- Dimension height = 0;
- int lines = 0;
- Cardinal size;
-
- if ((int)XtHeight(ctx) > VMargins(ctx)) {
- height = XtHeight(ctx) - VMargins(ctx);
- lines = XawTextSinkMaxLines(ctx->text.sink, height);
- }
- size = sizeof(XawTextLineTableEntry) * (lines + 1);
-
- if (lines != ctx->text.lt.lines || ctx->text.lt.info == NULL) {
- ctx->text.lt.info = (XawTextLineTableEntry *)
- XtRealloc((char *)ctx->text.lt.info, size);
- ctx->text.lt.lines = lines;
- force_rebuild = True;
- }
-
- if (force_rebuild) {
- (void)bzero((char *)ctx->text.lt.info, size);
- /* force a text update in the first text line if it is visible */
- ctx->text.lt.info[0].position = (XawTextPosition)-1;
- }
- if (position != ctx->text.lt.info[0].position) {
- (void)_BuildLineTable(ctx, position, 0);
- ctx->text.clear_to_eol = True;
- }
-}
-
-/*
- * We may need to resize the line table here, since there maybe lines with
- * different fonts (that can be shorter or taller than the default one)
- */
-static XawTextPosition
-_BuildLineTable(TextWidget ctx, XawTextPosition position, int line)
-{
- XawTextLineTableEntry *lt = ctx->text.lt.info + line;
- XawTextPosition end, update_from = -1;
- Position y;
- int wwidth, width, height;
-#ifndef OLDXAW
- Widget src = ctx->text.source;
-#endif
- int max_y = (int)XtHeight(ctx) - (int)ctx->text.margin.bottom;
-
- if (ctx->text.wrap == XawtextWrapNever)
- wwidth = 0x7fffffff;
- else
- wwidth = GetMaxTextWidth(ctx);
-
- /* XXX y may change, due to font size changes. See later */
- y = line == 0 ? ctx->text.margin.top : lt->y;
-
-#ifndef OLDXAW
- if (ctx->text.lt.base_line < 0) {
- if (line == 0)
- ctx->text.lt.top = position;
- }
- else if (line == 0) {
- XawTextPosition pos = ctx->text.lt.top;
- int base_line = ctx->text.lt.base_line;
-
- if (position == 0)
- base_line = 1;
- else if (ctx->text.lt.base_line == 0 ||
- ctx->text.source_changed == SRC_CHANGE_OVERLAP) {
- pos = 0;
- base_line = 1;
-
- while (pos < position) {
- pos = SrcScan(src, pos, XawstEOL, XawsdRight, 1, True);
- if (pos <= position) {
- ++base_line;
- if (pos == ctx->text.lastPos) {
- base_line -= !_XawTextSourceNewLineAtEOF(src);
- break;
- }
- }
- }
- }
- else if (ctx->text.wrap == XawtextWrapNever
- && IsPositionVisible(ctx, position))
- base_line += LineForPosition(ctx, position);
- else if (pos < position) {
- while (pos < position) {
- pos = SrcScan(src, pos, XawstEOL, XawsdRight, 1, True);
- if (pos <= position) {
- ++base_line;
- if (pos == ctx->text.lastPos) {
- base_line -= !_XawTextSourceNewLineAtEOF(src);
- break;
- }
- }
- }
- }
- else if (pos > position) {
- while (pos > position) {
- pos = SrcScan(src, pos, XawstEOL, XawsdLeft, 1, False);
- if (--pos >= position)
- --base_line;
- }
- }
-
- ctx->text.lt.top = position;
- ctx->text.lt.base_line = base_line;
- }
-#else
- if (line == 0)
- ctx->text.lt.top = position;
-#endif
-
- /* CONSTCOND */
- while (True) {
- XawTextSinkFindPosition(ctx->text.sink, position, ctx->text.left_margin,
- wwidth, ctx->text.wrap == XawtextWrapWord,
- &end, &width, &height);
-
- if (lt->position != position) {
- _XawTextNeedsUpdating(ctx, position,
- end <= position ? position + 1 : end);
- ctx->text.clear_to_eol = True;
- lt->position = position;
- }
- if (lt->y != y) {
- if (update_from < 0)
- update_from = line == 0 ?
- ctx->text.lt.info[0].position :
- ctx->text.lt.info[line - 1].position;
- lt->y = y;
- ctx->text.clear_to_eol = True;
- }
- if (lt->textWidth != width) {
- if (lt->textWidth > width)
- ctx->text.clear_to_eol = True;
- lt->textWidth = width;
- }
- y += height;
-
- if (end > ctx->text.lastPos) {
- position = end;
- ctx->text.clear_to_eol = True;
- _XawTextNeedsUpdating(ctx, end, end + ctx->text.lt.lines - line);
- while (line++ < ctx->text.lt.lines) {
- if (line > 1 && y > max_y) {
- ctx->text.lt.lines = line - 1;
- break;
- }
- ++lt;
- if (lt->y != y) {
- if (update_from < 0)
- update_from = line < 2 ?
- ctx->text.lt.info[0].position :
- ctx->text.lt.info[line - 2].position;
- lt->y = y;
- }
- lt->position = ++position;
- lt->textWidth = 0;
- y += height;
- }
- if (update_from >= 0)
- _XawTextNeedsUpdating(ctx, update_from,
- ctx->text.lt.info[ctx->text.lt.lines].position);
- _XawTextSetScrollBars(ctx);
-
- return (ctx->text.lastPos);
- }
-
- if (line && y > max_y)
- /* will return in the next loop */
- ctx->text.lt.lines = line;
-
- if (++line > ctx->text.lt.lines && y < max_y) {
- /* grow the line table */
- ctx->text.lt.info = (XawTextLineTableEntry *)
- XtRealloc((char *)ctx->text.lt.info,
- sizeof(XawTextLineTableEntry) * (line + 1));
- lt = ctx->text.lt.info + line;
- bzero(lt, sizeof(XawTextLineTableEntry));
- ++ctx->text.lt.lines;
- }
- else
- ++lt;
- if (position == end)
- ++position;
- else
- position = end;
-
- if (line > ctx->text.lt.lines) {
- if (update_from >= 0)
- _XawTextNeedsUpdating(ctx, update_from,
- ctx->text.lt.info[ctx->text.lt.lines].position);
- _XawTextSetScrollBars(ctx);
-
- return (position);
- }
- }
- /*NOTREACHED*/
-}
-
-/*
- * Function:
- * GetWidestLine
- *
- * Parameters:
- * ctx - text widget
- *
- * Description:
- * Returns the width (in pixels) of the widest line that
- * is currently visable.
- *
- * Returns:
- * The width of the widest line
- */
-static unsigned int
-GetWidestLine(TextWidget ctx)
-{
- int i;
- unsigned int widest;
- XawTextLineTablePtr lt = &(ctx->text.lt);
-
- for (i = 0, widest = 0; i < lt->lines; i++)
- if (widest < lt->info[i].textWidth)
- widest = lt->info[i].textWidth;
-
- return (widest);
-}
-
-/*
- * This routine is used by Text to notify an associated scrollbar of the
- * correct metrics (position and shown fraction) for the text being currently
- * displayed in the window.
- */
-void
-_XawTextSetScrollBars(TextWidget ctx)
-{
- float first, last, denom, widest;
-
- if (ctx->text.scroll_vert == XawtextScrollAlways) {
- if (ctx->text.lastPos == 0)
- first = 0.0;
- else
- first = ctx->text.lt.top / (float)ctx->text.lastPos;
-
- if (ctx->text.lt.info[ctx->text.lt.lines].position < ctx->text.lastPos)
- last = ctx->text.lt.info[ctx->text.lt.lines].position /
- (float)ctx->text.lastPos;
- else
- last = 1.0;
-
- XawScrollbarSetThumb(ctx->text.vbar, first, last - first);
- }
-
- if (ctx->text.scroll_horiz == XawtextScrollAlways) {
- denom = GetWidestLine(ctx);
- if (denom <= 0)
- denom = (int)XtWidth(ctx) - RHMargins(ctx);
- if (denom <= 0)
- denom = 1;
- widest = ((int)XtWidth(ctx) - RHMargins(ctx)) / denom;
- first = ctx->text.r_margin.left - ctx->text.left_margin;
- first /= denom;
-
- XawScrollbarSetThumb(ctx->text.hbar, first, widest);
- }
-}
-
-static void
-DoCopyArea(TextWidget ctx, int src_x, int src_y,
- unsigned int width, unsigned int height, int dst_x, int dst_y)
-{
- int x1, y1, x2, y2;
-
- x1 = ctx->text.r_margin.left;
- y1 = ctx->text.r_margin.top;
- x2 = XtWidth(ctx) - ctx->text.r_margin.right;
- y2 = XtHeight(ctx) - ctx->text.r_margin.bottom;
-
- if (x1 >= x2 || y1 >= y2)
- return;
-
- src_x = XawMax(x1, XawMin(src_x, x2));
- src_y = XawMax(y1, XawMin(src_y, y2));
- dst_x = XawMax(x1, XawMin(dst_x, x2));
- dst_y = XawMax(y1, XawMin(dst_y, y2));
- width = XawMax(0, XawMin(x2 - dst_x, (int)width));
- height = XawMax(0, XawMin(y2 - dst_y, (int)height));
-
- XCopyArea(XtDisplay(ctx), XtWindow(ctx), XtWindow(ctx), ctx->text.gc,
- src_x, src_y, width, height, dst_x, dst_y);
-}
-
-/*
- * Function:
- * XawTextScroll
- *
- * Parameters:
- * ctx - text widget
- * vlines - number of lines to scroll vertically
- * hpixels - number of pixels to scroll horizontally
- *
- * Description:
- * Generic function for scrolling the text window.
- * Allows vertical and horizontal scroll at the same time.
- */
-void
-XawTextScroll(TextWidget ctx, int vlines, int hpixels)
-{
- XawTextPosition top, tmp, update_from, update_to;
- XawTextLineTable *lt;
- Arg arglist[1];
- int y0, y1, y2, count, dim, wwidth, lines = ctx->text.lt.lines;
- int vwidth, vheight; /* visible width and height */
- Bool scroll;
-
- vwidth = (int)XtWidth(ctx) - RHMargins(ctx);
- vheight = (int)XtHeight(ctx) - RVMargins(ctx);
- lt = &ctx->text.lt;
-
- if (!lt || vwidth <= 0 || vheight <= 0)
- return;
-
- if ((scroll = ctx->core.background_pixmap == XtUnspecifiedPixmap) == True) {
- dim = lt->info[1].y - lt->info[0].y;
- for (count = 1; count < lt->lines - 1; count++)
- if (lt->info[count + 1].y - lt->info[count].y != dim) {
- scroll = False;
- break;
- }
- }
-
- wwidth = GetMaxTextWidth(ctx);
-
- /*
- * Do the horizontall scrolling
- */
- if (hpixels < 0 && ctx->text.left_margin - hpixels > ctx->text.r_margin.left)
- hpixels = ctx->text.left_margin - ctx->text.r_margin.left;
- ctx->text.left_margin -= hpixels;
-
- update_from = lt->top; /* remember the old value */
- /*
- * Checks the requested number of lines and calculates the top
- * of the line table
- */
- if (vlines < 0) { /* VScroll Up */
- if (IsPositionVisible(ctx, 0))
- vlines = 0;
- else if (ctx->text.wrap != XawtextWrapNever) {
- XawTextPosition end;
- int n_lines = 0;
-
- count = -vlines;
- end = lt->top;
- while (n_lines < count) {
- top = SrcScan(ctx->text.source, end, XawstEOL,
- XawsdLeft, 2, False);
- n_lines += CountLines(ctx, top, end);
- end = top;
- }
-
- while (count++ < n_lines) {
- tmp = top;
- XawTextSinkFindPosition(ctx->text.sink, top,
- ctx->text.left_margin,
- wwidth,ctx->text.wrap == XawtextWrapWord,
- &top, &dim, &dim);
- if (tmp == top)
- ++top;
- }
- }
- else
- top = SrcScan(ctx->text.source, lt->top, XawstEOL,
- XawsdLeft, -vlines + 1, False);
- if (-vlines >= ctx->text.lt.lines)
- scroll = False;
- }
- else if (vlines > 0) { /* VScroll Down */
- if (LineForPosition(ctx, ctx->text.lastPos) == 0)
- vlines = 0;
- if (vlines < lt->lines)
- top = XawMin(lt->info[vlines].position, ctx->text.lastPos);
- else if (ctx->text.wrap == XawtextWrapNever)
- top = SrcScan(ctx->text.source,
- SrcScan(ctx->text.source, lt->top,
- XawstEOL, XawsdRight, vlines,
- True),
- XawstEOL, XawsdLeft, 1, False);
- else {
- top = lt->top;
- count = 0;
- while (count++ < vlines) {
- tmp = top;
- XawTextSinkFindPosition(ctx->text.sink, top,
- ctx->text.left_margin,
- wwidth, ctx->text.wrap == XawtextWrapWord,
- &top, &dim, &dim);
- if (tmp == top)
- ++top;
- }
- }
- if (vlines >= ctx->text.lt.lines
- || lt->info[vlines].position >= ctx->text.lastPos)
- scroll = False;
- }
-
- if (!vlines) {
- if (hpixels) {
- ClearWindow(ctx);
- ctx->text.clear_to_eol = True;
- }
- _XawTextSetScrollBars(ctx);
- return;
- }
-
- /* Flushes any pending updates. Normally, there may be a call to
- * XawTextUnsetSelection not yet updated.
- */
- if (!hpixels && scroll) {
- ctx->text.clear_to_eol = True;
- FlushUpdate(ctx);
- }
-
- /*
- * Rebuild the line table, doing the vertical scroll
- */
- (void)_BuildLineTable(ctx, top, 0);
- lt = &ctx->text.lt;
- if (scroll) {
- for (count = 0; count < lt->lines - 1; count++)
- if (lt->info[count + 1].y - lt->info[count].y != dim) {
- scroll = False;
- break;
- }
- }
-
- XtSetArg(arglist[0], XtNinsertPosition, lt->top + lt->lines);
- _XawImSetValues((Widget)ctx, arglist, 1);
-
- if (hpixels || !scroll || lines != lt->lines)
- return;
-
- /* _BuildLineTable updates everything if the top position changes.
- * It is not required here.
- */
- (void)XmuScanlineXor(ctx->text.update, ctx->text.update);
- if (vlines < 0 && IsPositionVisible(ctx, 0))
- vlines = -LineForPosition(ctx, update_from);
-
- y0 = ctx->text.r_margin.top;
- if (vlines < 0) {
- update_from = lt->top;
- update_to = lt->info[-vlines + 1].position - 1;
- y1 = lt->info[lt->lines + vlines].y;
- y2 = lt->info[-vlines].y;
- DoCopyArea(ctx, ctx->text.r_margin.left, y0, vwidth,
- y1 - y0,
- ctx->text.r_margin.left, y2);
- }
- else {
- update_from = lt->info[lt->lines - vlines].position;
- update_to = lt->info[lt->lines].position;
- y1 = lt->info[lt->lines - vlines].y;
- y2 = lt->info[vlines].y;
- DoCopyArea(ctx, ctx->text.r_margin.left, y2,
- vwidth, lt->info[lt->lines].y - y2,
- ctx->text.r_margin.left, y0);
- }
- _XawTextNeedsUpdating(ctx, update_from, update_to);
- ctx->text.clear_to_eol = True;
-}
-
-/*
- * The routine will scroll the displayed text by lines. If the arg is
- * positive, move up; otherwise, move down. [note: this is really a private
- * procedure but is used in multiple modules].
- */
-void
-_XawTextVScroll(TextWidget ctx, int n)
-{
- XawTextScroll(ctx, n, 0);
-}
-
-/*ARGSUSED*/
-static void
-HScroll(Widget w, XtPointer closure, XtPointer callData)
-{
- TextWidget ctx = (TextWidget)closure;
- long pixels = (long)callData;
-
- if (pixels > 0) {
- long max;
-
- max = (int)GetWidestLine(ctx) + ctx->text.left_margin -
- ctx->text.r_margin.left;
- max = XawMax(0, max);
- pixels = XawMin(pixels, max);
- }
-
- if (pixels) {
- _XawTextPrepareToUpdate(ctx);
- XawTextScroll(ctx, 0, pixels);
- _XawTextExecuteUpdate(ctx);
- }
-}
-
-/*ARGSUSED*/
-static void
-HJump(Widget w, XtPointer closure, XtPointer callData)
-{
- TextWidget ctx = (TextWidget)closure;
- float percent = *(float *)callData;
- long pixels;
-
- pixels = ctx->text.left_margin -
- (ctx->text.r_margin.left - (int)(percent * GetWidestLine(ctx)));
-
- HScroll(w, (XtPointer)ctx, (XtPointer)pixels);
-}
-
-/*
- * Function:
- * UpdateTextInLine
- *
- * Parameters:
- * ctx - text widget
- * line - line to update
- * x1 - left pixel
- * x2 - right pixel
- *
- * Description:
- * Updates the text in the given line and pixel interval
- */
-static void
-UpdateTextInLine(TextWidget ctx, int line, int x1, int x2)
-{
- XawTextLineTableEntry *lt = ctx->text.lt.info + line;
- XawTextPosition left, right;
- int from_x, width, height;
-
- if (lt->position >= ctx->text.lastPos
- || ctx->text.left_margin > x2
- || (int)lt->textWidth + ctx->text.left_margin < x1) {
- /* Mark line to be cleared */
- if (ctx->text.clear_to_eol)
- _XawTextNeedsUpdating(ctx, lt->position, lt->position + 1);
- return;
- }
-
- from_x = ctx->text.left_margin;
- XawTextSinkFindPosition(ctx->text.sink, lt->position,
- from_x, x1 - from_x,
- False, &left, &width, &height);
- if (line == ctx->text.lt.lines)
- right = -1;
- else if (x2 >= lt->textWidth - from_x)
- right = lt[1].position - 1;
- else {
- from_x += width;
- XawTextSinkFindPosition(ctx->text.sink, left,
- from_x, x2 - from_x,
- False, &right, &width, &height);
- }
-
- if ((right < 0) || (right + 1 <= lt[1].position))
- ++right;
-
- /* Mark text interval to be repainted */
- _XawTextNeedsUpdating(ctx, left, right);
-}
-
-/*
- * The routine will scroll the displayed text by pixels. If the calldata is
- * positive, move up; otherwise, move down.
- */
-/*ARGSUSED*/
-static void
-VScroll(Widget w, XtPointer closure, XtPointer callData)
-{
- TextWidget ctx = (TextWidget)closure;
- long height, lines = (long)callData;
-
- height = XtHeight(ctx) - VMargins(ctx);
- if (height < 1)
- height = 1;
- lines = (lines * ctx->text.lt.lines) / height;
- _XawTextPrepareToUpdate(ctx);
- XawTextScroll(ctx, lines, 0);
- _XawTextExecuteUpdate(ctx);
-}
-
-/*ARGSUSED*/
-static void
-VJump(Widget w, XtPointer closure, XtPointer callData)
-{
- float percent = *(float *)callData;
- TextWidget ctx = (TextWidget)closure;
- XawTextPosition top, last, position, tmp;
- XawTextLineTable *lt = &(ctx->text.lt);
- int dim, vlines = 0, wwidth = GetMaxTextWidth(ctx);
- Bool scroll = True;
-
- position = percent * ctx->text.lastPos;
- top = lt->top;
-
- if (!lt->lines || (position >= lt->top && position < lt->info[1].position)) {
- _XawTextSetScrollBars(ctx);
- return;
- }
-
-#ifndef OLDXAW
- ctx->text.lt.base_line = -1;
-#endif
-
- if (position > lt->top) { /* VScroll Up */
- if (position > lt->top && position < lt->info[lt->lines].position)
- vlines = LineForPosition(ctx, position);
- else {
- scroll = False;
- top = SrcScan(ctx->text.source, position, XawstEOL,
- XawsdLeft, 1, False);
- if (ctx->text.wrap != XawtextWrapNever) {
- last = top;
- while (last < position) {
- tmp = last;
- XawTextSinkFindPosition(ctx->text.sink, last,
- ctx->text.left_margin, wwidth,
- ctx->text.wrap == XawtextWrapWord,
- &last, &dim, &dim);
- if (last == tmp)
- ++last;
- if (last < position)
- top = last;
- }
- }
- }
- }
- else { /* VScroll Down */
- /*
- * Calculates the number of lines
- */
- while (top > position) {
- last = top;
- top = SrcScan(ctx->text.source, top, XawstEOL,
- XawsdLeft, 2, False);
- vlines -= CountLines(ctx, top, last);
- if (-vlines >= ctx->text.lt.lines) {
- scroll = False;
- top = SrcScan(ctx->text.source, position, XawstEOL,
- XawsdLeft, 1, False);
- break;
- }
- }
- /*
- * Normalize
- */
- if (ctx->text.wrap != XawtextWrapNever) {
- last = top;
- while (last < position) {
- tmp = last;
- XawTextSinkFindPosition(ctx->text.sink, last,
- ctx->text.left_margin,
- wwidth,
- ctx->text.wrap == XawtextWrapWord,
- &last, &dim, &dim);
- if (last == tmp)
- ++last;
- if (last < position)
- top = last;
- ++vlines;
- }
- }
- }
-
- if (vlines || !scroll) {
- _XawTextPrepareToUpdate(ctx);
- if (scroll)
- XawTextScroll(ctx, vlines, 0);
- else
- _BuildLineTable(ctx, top, 0);
- _XawTextExecuteUpdate(ctx);
- }
-}
-
-static Bool
-MatchSelection(Atom selection, XawTextSelection *s)
-{
- Atom *match;
- int count;
-
- for (count = 0, match = s->selections; count < s->atom_count;
- match++, count++)
- if (*match == selection)
- return (True);
-
- return (False);
-}
-
-static Boolean
-TextConvertSelection(Widget w, Atom *selection, Atom *target, Atom *type,
- XtPointer *value, unsigned long *length, int *format)
-{
- Display *d = XtDisplay(w);
- TextWidget ctx = (TextWidget)w;
- Widget src = ctx->text.source;
- XawTextEditType edit_mode;
- Arg args[1];
- XawTextSelectionSalt *salt = NULL;
- XawTextSelection *s;
-
- if (*target == XA_TARGETS(d)) {
- Atom *targetP, *std_targets;
- unsigned long std_length;
-
- if (SrcCvtSel(src, selection, target, type, value, length, format))
- return (True);
-
- XtSetArg(args[0], XtNeditType, &edit_mode);
- XtGetValues(src, args, ONE);
-
- XmuConvertStandardSelection(w, ctx->text.time, selection,
- target, type, (XPointer*)&std_targets,
- &std_length, format);
-
- *length = 7 + (edit_mode == XawtextEdit) + std_length;
- *value = XtMalloc((unsigned)sizeof(Atom)*(*length));
- targetP = *(Atom**)value;
- *targetP++ = XA_STRING;
- *targetP++ = XA_TEXT(d);
- *targetP++ = XA_UTF8_STRING(d);
- *targetP++ = XA_COMPOUND_TEXT(d);
- *targetP++ = XA_LENGTH(d);
- *targetP++ = XA_LIST_LENGTH(d);
- *targetP++ = XA_CHARACTER_POSITION(d);
- if (edit_mode == XawtextEdit) {
- *targetP++ = XA_DELETE(d);
- }
- (void)memmove((char*)targetP, (char*)std_targets,
- sizeof(Atom) * std_length);
- XtFree((char*)std_targets);
- *type = XA_ATOM;
- *format = 32;
- return (True);
- }
-
- if (SrcCvtSel(src, selection, target, type, value, length, format))
- return (True);
-
- if (MatchSelection(*selection, &ctx->text.s))
- s = &ctx->text.s;
- else {
- for (salt = ctx->text.salt; salt; salt = salt->next)
- if (MatchSelection(*selection, &salt->s))
- break;
- if (!salt)
- return (False);
- s = &salt->s;
- }
- if (*target == XA_STRING
- || *target == XA_TEXT(d)
- || *target == XA_UTF8_STRING(d)
- || *target == XA_COMPOUND_TEXT(d)) {
- if (*target == XA_TEXT(d)) {
- if (XawTextFormat(ctx, XawFmtWide))
- *type = XA_COMPOUND_TEXT(d);
- else
- *type = XA_STRING;
- }
- else
- *type = *target;
- /*
- * If salt is True, the salt->contents stores CT string,
- * its length is measured in bytes.
- * Refer to _XawTextSaltAwaySelection().
- *
- * by Li Yuhong, Mar. 20, 1991.
- */
- if (!salt) {
- *value = _XawTextGetSTRING(ctx, s->left, s->right);
- if (XawTextFormat(ctx, XawFmtWide)) {
- XTextProperty textprop;
- if (XwcTextListToTextProperty(d, (wchar_t **)value, 1,
- XCompoundTextStyle, &textprop)
- < Success) {
- XtFree((char *)*value);
- return (False);
- }
- XtFree((char *)*value);
- *value = (XtPointer)textprop.value;
- *length = textprop.nitems;
- }
- else
- *length = strlen((char *)*value);
- }
- else {
- *value = XtMalloc((salt->length + 1) * sizeof(unsigned char));
- strcpy ((char *)*value, salt->contents);
- *length = salt->length;
- }
- /* Got *value,*length, now in COMPOUND_TEXT format. */
- if (XawTextFormat(ctx, XawFmtWide) && *type == XA_STRING) {
- XTextProperty textprop;
- wchar_t **wlist;
- int count;
-
- textprop.encoding = XA_COMPOUND_TEXT(d);
- textprop.value = (unsigned char *)*value;
- textprop.nitems = strlen(*value);
- textprop.format = 8;
- if (XwcTextPropertyToTextList(d, &textprop, &wlist, &count)
- < Success
- || count < 1) {
- XtFree((char *)*value);
- return (False);
- }
- XtFree((char *)*value);
- if (XwcTextListToTextProperty(d, wlist, 1, XStringStyle, &textprop)
- < Success) {
- XwcFreeStringList((wchar_t**) wlist);
- return (False);
- }
- *value = (XtPointer)textprop.value;
- *length = textprop.nitems;
- XwcFreeStringList(wlist);
- } else if (*type == XA_UTF8_STRING(d)) {
- XTextProperty textprop;
- char **list;
- int count;
-
- textprop.encoding = XA_COMPOUND_TEXT(d);
- textprop.value = (unsigned char *)*value;
- textprop.nitems = strlen(*value);
- textprop.format = 8;
- if (Xutf8TextPropertyToTextList(d, &textprop, &list, &count)
- < Success
- || count < 1) {
- XtFree((char *)*value);
- return (False);
- }
- XtFree((char *)*value);
- *value = *list;
- *length = strlen(*list);
- XFree(list);
- }
- *format = 8;
- return (True);
- }
-
- if ((*target == XA_LIST_LENGTH(d)) || (*target == XA_LENGTH(d))) {
- long * temp;
-
- temp = (long *)XtMalloc((unsigned)sizeof(long));
- if (*target == XA_LIST_LENGTH(d))
- *temp = 1L;
- else /* *target == XA_LENGTH(d) */
- *temp = (long) (s->right - s->left);
-
- *value = (XPointer)temp;
- *type = XA_INTEGER;
- *length = 1L;
- *format = 32;
- return (True);
- }
-
- if (*target == XA_CHARACTER_POSITION(d)) {
- long * temp;
-
- temp = (long *)XtMalloc((unsigned)(2 * sizeof(long)));
- temp[0] = (long)(s->left + 1);
- temp[1] = s->right;
- *value = (XPointer)temp;
- *type = XA_SPAN(d);
- *length = 2L;
- *format = 32;
- return (True);
- }
-
- if (*target == XA_DELETE(d)) {
- if (!salt)
- _XawTextZapSelection(ctx, NULL, True);
- *value = NULL;
- *type = XA_NULL(d);
- *length = 0;
- *format = 32;
- return (True);
- }
-
- if (XmuConvertStandardSelection(w, ctx->text.time, selection, target, type,
- (XPointer *)value, length, format))
- return (True);
-
- /* else */
- return (False);
-}
-
-/*
- * Function:
- * GetCutBuffferNumber
- *
- * Parameters:
- * atom - atom to check
- *
- * Description:
- * Returns the number of the cut buffer.
- *
- * Returns:
- * The number of the cut buffer representing this atom or NOT_A_CUT_BUFFER
- */
-#define NOT_A_CUT_BUFFER -1
-static int
-GetCutBufferNumber(Atom atom)
-{
- if (atom == XA_CUT_BUFFER0) return (0);
- if (atom == XA_CUT_BUFFER1) return (1);
- if (atom == XA_CUT_BUFFER2) return (2);
- if (atom == XA_CUT_BUFFER3) return (3);
- if (atom == XA_CUT_BUFFER4) return (4);
- if (atom == XA_CUT_BUFFER5) return (5);
- if (atom == XA_CUT_BUFFER6) return (6);
- if (atom == XA_CUT_BUFFER7) return (7);
- return (NOT_A_CUT_BUFFER);
-}
-
-static void
-TextLoseSelection(Widget w, Atom *selection)
-{
- TextWidget ctx = (TextWidget)w;
- Atom *atomP;
- int i;
- XawTextSelectionSalt*salt, *prevSalt, *nextSalt;
-
- atomP = ctx->text.s.selections;
- for (i = 0 ; i < ctx->text.s.atom_count; i++, atomP++)
- if ((*selection == *atomP)
- || (GetCutBufferNumber(*atomP) != NOT_A_CUT_BUFFER))
- *atomP = (Atom)0;
-
- while (ctx->text.s.atom_count
- && ctx->text.s.selections[ctx->text.s.atom_count - 1] == 0)
- ctx->text.s.atom_count--;
-
- /*
- * Must walk the selection list in opposite order from UnsetSelection
- */
- atomP = ctx->text.s.selections;
- for (i = 0 ; i < ctx->text.s.atom_count; i++, atomP++)
- if (*atomP == (Atom)0) {
- *atomP = ctx->text.s.selections[--ctx->text.s.atom_count];
- while (ctx->text.s.atom_count
- && ctx->text.s.selections[ctx->text.s.atom_count-1] == 0)
- ctx->text.s.atom_count--;
- }
-
- if (ctx->text.s.atom_count == 0)
- ModifySelection(ctx, ctx->text.insertPos, ctx->text.insertPos);
-
- prevSalt = 0;
- for (salt = ctx->text.salt; salt; salt = nextSalt) {
- atomP = salt->s.selections;
- nextSalt = salt->next;
- for (i = 0 ; i < salt->s.atom_count; i++, atomP++)
- if (*selection == *atomP)
- *atomP = (Atom)0;
-
- while (salt->s.atom_count
- && salt->s.selections[salt->s.atom_count-1] == 0)
- salt->s.atom_count--;
-
- /*
- * Must walk the selection list in opposite order from UnsetSelection
- */
- atomP = salt->s.selections;
- for (i = 0 ; i < salt->s.atom_count; i++, atomP++)
- if (*atomP == (Atom)0) {
- *atomP = salt->s.selections[--salt->s.atom_count];
- while (salt->s.atom_count
- && salt->s.selections[salt->s.atom_count-1] == 0)
- salt->s.atom_count--;
- }
-
- if (salt->s.atom_count == 0) {
- XtFree ((char *) salt->s.selections);
- XtFree (salt->contents);
- if (prevSalt)
- prevSalt->next = nextSalt;
- else
- ctx->text.salt = nextSalt;
- XtFree((char *)salt);
- }
- else
- prevSalt = salt;
- }
-}
-
-void
-_XawTextSaltAwaySelection(TextWidget ctx, Atom *selections, int num_atoms)
-{
- XawTextSelectionSalt *salt;
- int i, j;
-
- for (i = 0; i < num_atoms; i++)
- TextLoseSelection((Widget)ctx, selections + i);
- if (num_atoms == 0)
- return;
- salt = (XawTextSelectionSalt *)
- XtMalloc((unsigned)sizeof(XawTextSelectionSalt));
- if (!salt)
- return;
- salt->s.selections = (Atom *)XtMalloc((unsigned)(num_atoms * sizeof(Atom)));
- if (!salt->s.selections) {
- XtFree((char *)salt);
- return;
- }
- salt->s.left = ctx->text.s.left;
- salt->s.right = ctx->text.s.right;
- salt->s.type = ctx->text.s.type;
- salt->contents = _XawTextGetSTRING(ctx, ctx->text.s.left, ctx->text.s.right);
- if (XawTextFormat(ctx, XawFmtWide)) {
- XTextProperty textprop;
- if (XwcTextListToTextProperty(XtDisplay((Widget)ctx),
- (wchar_t**)(&(salt->contents)), 1,
- XCompoundTextStyle,
- &textprop) < Success) {
- XtFree(salt->contents);
- salt->length = 0;
- return;
- }
- XtFree(salt->contents);
- salt->contents = (char *)textprop.value;
- salt->length = textprop.nitems;
- }
- else
- salt->length = strlen (salt->contents);
- salt->next = ctx->text.salt;
- ctx->text.salt = salt;
- j = 0;
- for (i = 0; i < num_atoms; i++) {
- if (GetCutBufferNumber (selections[i]) == NOT_A_CUT_BUFFER) {
- salt->s.selections[j++] = selections[i];
- XtOwnSelection((Widget)ctx, selections[i], ctx->text.time,
- TextConvertSelection, TextLoseSelection, NULL);
- }
- }
- salt->s.atom_count = j;
-}
-
-static void
-_SetSelection(TextWidget ctx, XawTextPosition left, XawTextPosition right,
- Atom *selections, Cardinal count)
-{
-#ifndef OLDXAW
- Cardinal i;
- XawTextPosition pos;
- TextSrcObject src = (TextSrcObject)ctx->text.source;
-
- for (i = 0; i < src->textSrc.num_text; i++) {
- TextWidget tw = (TextWidget)src->textSrc.text[i];
- Bool needs_updating = tw->text.old_insert < 0;
- Bool showposition = tw->text.showposition;
-
- if (needs_updating) {
- tw->text.showposition = False;
- _XawTextPrepareToUpdate(tw);
- }
-#else
- TextWidget tw = ctx;
- XawTextPosition pos;
-#endif /* OLDXAW */
-
- if (left < tw->text.s.left) {
- pos = Min(right, tw->text.s.left);
- _XawTextNeedsUpdating(tw, left, pos);
- }
- if (left > tw->text.s.left) {
- pos = Min(left, tw->text.s.right);
- _XawTextNeedsUpdating(tw, tw->text.s.left, pos);
- }
- if (right < tw->text.s.right) {
- pos = Max(right, tw->text.s.left);
- _XawTextNeedsUpdating(tw, pos, tw->text.s.right);
- }
- if (right > tw->text.s.right) {
- pos = Max(left, tw->text.s.right);
- _XawTextNeedsUpdating(tw, pos, right);
- }
-
- tw->text.s.left = left;
- tw->text.s.right = right;
-
-#ifndef OLDXAW
- if (needs_updating) {
- _XawTextExecuteUpdate(tw);
- tw->text.showposition = showposition;
- }
- }
-#endif /* OLDXAW */
-
- SrcSetSelection(ctx->text.source, left, right,
- (count == 0) ? None : selections[0]);
-
- if (left < right) {
- Widget w = (Widget)ctx;
- int buffer;
-
- while (count) {
- Atom selection = selections[--count];
-
- /*
- * If this is a cut buffer
- */
- if ((buffer = GetCutBufferNumber(selection)) != NOT_A_CUT_BUFFER) {
- unsigned char *ptr, *tptr;
- unsigned int amount, max_len = MAX_CUT_LEN(XtDisplay(w));
- unsigned long len;
-
- tptr= ptr= (unsigned char *)_XawTextGetSTRING(ctx,
- ctx->text.s.left,
- ctx->text.s.right);
- if (XawTextFormat(ctx, XawFmtWide)) {
- /*
- * Only XA_STRING(Latin 1) is allowed in CUT_BUFFER,
- * so we get it from wchar string, then free the wchar string
- */
- XTextProperty textprop;
-
- if (XwcTextListToTextProperty(XtDisplay(w), (wchar_t**)&ptr,
- 1, XStringStyle, &textprop)
- < Success){
- XtFree((char *)ptr);
- return;
- }
- XtFree((char *)ptr);
- tptr = ptr = textprop.value;
- }
- if (buffer == 0) {
- _CreateCutBuffers(XtDisplay(w));
- XRotateBuffers(XtDisplay(w), 1);
- }
- amount = Min ((len = strlen((char *)ptr)), max_len);
- XChangeProperty(XtDisplay(w), RootWindow(XtDisplay(w), 0),
- selection, XA_STRING, 8, PropModeReplace,
- ptr, amount);
-
- while (len > max_len) {
- len -= max_len;
- tptr += max_len;
- amount = Min (len, max_len);
- XChangeProperty(XtDisplay(w), RootWindow(XtDisplay(w), 0),
- selection, XA_STRING, 8, PropModeAppend,
- tptr, amount);
- }
- XtFree ((char *)ptr);
- }
- else /* This is a real selection */
- XtOwnSelection(w, selection, ctx->text.time, TextConvertSelection,
- TextLoseSelection, NULL);
- }
- }
- else
- XawTextUnsetSelection((Widget)ctx);
-}
-
-#ifndef OLDXAW
-void
-_XawTextSetLineAndColumnNumber(TextWidget ctx, Bool force)
-{
- int line_number, column_number;
-
- if (ctx->text.old_insert != ctx->text.insertPos &&
- ctx->text.lt.base_line < 0) {
- ctx->text.lt.base_line = 0;
- (void)_BuildLineTable(ctx, ctx->text.lt.top, 0);
- }
-
- line_number = ResolveLineNumber(ctx);
- column_number = ResolveColumnNumber(ctx);
-
- if (force || (ctx->text.column_number != column_number
- || ctx->text.line_number != line_number)) {
- XawTextPositionInfo info;
-
- ctx->text.line_number = info.line_number = line_number;
- ctx->text.column_number = info.column_number = column_number;
- info.insert_position = ctx->text.insertPos;
- info.last_position = ctx->text.lastPos;
- info.overwrite_mode = ctx->text.overwrite;
-
- XtCallCallbacks((Widget)ctx, XtNpositionCallback, (XtPointer)&info);
- }
-}
-
-static int
-ResolveColumnNumber(TextWidget ctx)
-{
- Widget src = ctx->text.source;
- short column_number = 0;
- XawTextPosition position;
- XawTextBlock block;
- unsigned long format = _XawTextFormat(ctx);
- TextSinkObject sink = (TextSinkObject)ctx->text.sink;
- short *char_tabs = sink->text_sink.char_tabs;
- int tab_count = sink->text_sink.tab_count;
- int tab_index = 0, tab_column = 0, tab_base = 0;
-
- if (ctx->text.lt.base_line < 1)
- return (ctx->text.column_number);
-
- position = SrcScan(src, ctx->text.insertPos, XawstEOL, XawsdLeft, 1, False);
- XawTextSourceRead(src, position, &block, ctx->text.insertPos - position);
-
- for (; position < ctx->text.insertPos; position++) {
- if (position - block.firstPos >= block.length)
- XawTextSourceRead(src, position, &block, ctx->text.insertPos - position);
- if ((format == XawFmt8Bit && block.ptr[position - block.firstPos] == '\t') ||
- (format == XawFmtWide && ((wchar_t*)block.ptr)[position - block.firstPos] == _Xaw_atowc(XawTAB))) {
- while (tab_base + tab_column <= column_number) {
- if (tab_count) {
- for (; tab_index < tab_count; ++tab_index)
- if (tab_base + char_tabs[tab_index] > column_number) {
- tab_column = char_tabs[tab_index];
- break;
- }
- if (tab_index >= tab_count) {
- tab_base += char_tabs[tab_count - 1];
- tab_column = tab_index = 0;
- }
- }
- else
- tab_column += DEFAULT_TAB_SIZE;
- }
- column_number = tab_base + tab_column;
- }
- else
- ++column_number;
- if (column_number >= 16384) {
- column_number = 16383;
- break;
- }
- }
-
- return (column_number);
-}
-#endif /* OLDXAW */
-
-void
-_XawTextSourceChanged(Widget w, XawTextPosition left, XawTextPosition right,
- XawTextBlock *block, int lines)
-{
- TextWidget ctx = (TextWidget)w;
- Widget src = ctx->text.source;
- XawTextPosition update_from, update_to, top;
- Boolean update_disabled;
- int delta, line, line_from;
-
- if (left < ctx->text.old_insert) {
- XawTextPosition old_insert = ctx->text.old_insert;
-
- if (right < ctx->text.old_insert)
- old_insert -= right - left;
- else
- old_insert = left;
-
- ctx->text.insertPos = old_insert + block->length;
- }
-#ifndef OLDXAW
- if (left <= ctx->text.lt.top) {
- if (left + block->length - (right - left) < ctx->text.lt.top) {
- ctx->text.source_changed = SRC_CHANGE_BEFORE;
- ctx->text.lt.base_line += lines;
- }
- else
- ctx->text.source_changed = SRC_CHANGE_OVERLAP;
- }
- else
- ctx->text.source_changed = SRC_CHANGE_AFTER;
-#endif
-
- update_from = left;
- update_to = left + block->length;
- update_to = SrcScan(src, update_to, XawstEOL, XawsdRight, 1, False);
- delta = block->length - (right - left);
- if (delta < 0)
- ctx->text.clear_to_eol = True;
- if (update_to == update_from)
- ++update_to;
- update_disabled = ctx->text.update_disabled;
- ctx->text.update_disabled = True;
- ctx->text.lastPos = XawTextGetLastPosition(ctx);
- top = ctx->text.lt.info[0].position;
-
- XawTextUnsetSelection((Widget)ctx);
-
- if (delta) {
- int i;
- XmuSegment *seg;
-
- for (seg = ctx->text.update->segment; seg; seg = seg->next) {
- if (seg->x1 > (int)left)
- break;
- else if (seg->x2 > (int)left) {
- seg->x2 += delta;
- seg = seg->next;
- break;
- }
- }
- for (; seg; seg = seg->next) {
- seg->x1 += delta;
- seg->x2 += delta;
- }
- XmuOptimizeScanline(ctx->text.update);
-
- for (i = 0; i <= ctx->text.lt.lines; i++)
- if (ctx->text.lt.info[i].position > left)
- break;
- for (; i <= ctx->text.lt.lines; i++)
- ctx->text.lt.info[i].position += delta;
- }
-
- if (top != ctx->text.lt.info[0].position) {
- line_from = line = 0;
- ctx->text.lt.top = top = SrcScan(src, ctx->text.lt.info[0].position,
- XawstEOL, XawsdLeft, 1, False);
- update_from = top;
- }
- else {
- line_from = line = LineForPosition(ctx, update_from + delta);
- top = ctx->text.lt.info[line].position;
- }
-
- if (line > 0 && ctx->text.wrap == XawtextWrapWord) {
- --line;
- top = ctx->text.lt.info[line].position;
- }
-
- (void)_BuildLineTable(ctx, top, line);
-
- if (ctx->text.wrap == XawtextWrapWord) {
- if (line_from != LineForPosition(ctx, update_from)
- || line_from != LineForPosition(ctx, update_to)) {
- ctx->text.clear_to_eol = True;
- update_from = SrcScan(src, update_from,
- XawstWhiteSpace, XawsdLeft, 1, True);
- if (update_to >= ctx->text.lastPos)
- /* this is not an error, it just tells _BuildLineTable to
- * clear to the bottom of the window. The value of update_to
- * should not be > ctx->text.lastPos.
- */
- ++update_to;
- }
- }
- else if (!ctx->text.clear_to_eol) {
- if (LineForPosition(ctx, update_from)
- != LineForPosition(ctx, update_to))
- ctx->text.clear_to_eol = True;
- }
-
- _XawTextNeedsUpdating(ctx, update_from, update_to);
- ctx->text.update_disabled = update_disabled;
-}
-
-/*
- * Function:
- * _XawTextReplace
- *
- * Parameters:
- * ctx - text widget
- * left - left offset
- * right - right offset
- * block - text block
- *
- * Description:
- * Replaces the text between left and right by the text in block.
- * Does all the required calculations of offsets, and rebuild the
- * the line table, from the insertion point (or previous line, if
- * wrap mode is 'word').
- *
- * Returns:
- * XawEditDone - success
- * any other value - error code
- */
-int
-_XawTextReplace(TextWidget ctx, XawTextPosition left, XawTextPosition right,
- XawTextBlock *block)
-{
- Arg args[1];
- Widget src;
- XawTextEditType edit_mode;
-
- if (left == right && block->length == 0)
- return (XawEditDone);
-
- src = ctx->text.source;
- XtSetArg(args[0], XtNeditType, &edit_mode);
- XtGetValues(src, args, 1);
-
- if (edit_mode == XawtextAppend) {
- if (block->length == 0)
- return (XawEditError);
- ctx->text.insertPos = ctx->text.lastPos;
- }
-
-#ifndef OLDXAW
- return (SrcReplace(src, left, right, block));
-#else
- if (SrcReplace(src, left, right, block) == XawEditDone) {
- _XawTextSourceChanged((Widget)ctx, left, right, block, 0);
-
- return (XawEditDone);
- }
-
- return (XawEditError);
-#endif
-}
-
-/*
- * This routine will display text between two arbitrary source positions.
- * In the event that this span contains highlighted text for the selection,
- * only that portion will be displayed highlighted.
- */
-static void
-OldDisplayText(Widget w, XawTextPosition left, XawTextPosition right)
-{
- static XmuSegment segment;
- static XmuScanline next;
- static XmuScanline scanline = {0, &segment, &next};
- static XmuArea area = {&scanline};
-
- TextWidget ctx = (TextWidget)w;
- int x, y, line;
- XawTextPosition start, end, last, final;
- XmuScanline *scan;
- XmuSegment *seg;
- XmuArea *clip = NULL;
- Bool cleol = ctx->text.clear_to_eol;
- Bool has_selection = ctx->text.s.right > ctx->text.s.left;
-
- left = left < ctx->text.lt.top ? ctx->text.lt.top : left;
-
- if (left > right || !LineAndXYForPosition(ctx, left, &line, &x, &y))
- return;
-
- last = XawTextGetLastPosition(ctx);
- segment.x2 = (int)XtWidth(ctx) - ctx->text.r_margin.right;
-
- if (cleol)
- clip = XmuCreateArea();
-
- for (start = left; start < right && line < ctx->text.lt.lines; line++) {
- if ((end = ctx->text.lt.info[line + 1].position) > right)
- end = right;
-
- final = end;
- if (end > last)
- end = last;
-
- if (end > start) {
- if (!has_selection
- || (start >= ctx->text.s.right || end <= ctx->text.s.left))
- _XawTextSinkDisplayText(ctx->text.sink, x, y, start, end, False);
- else if (start >= ctx->text.s.left && end <= ctx->text.s.right)
- _XawTextSinkDisplayText(ctx->text.sink, x, y, start, end, True);
- else {
- OldDisplayText(w, start, ctx->text.s.left);
- OldDisplayText(w, Max(start, ctx->text.s.left),
- Min(end, ctx->text.s.right));
- OldDisplayText(w, ctx->text.s.right, end);
- }
- }
-
- x = ctx->text.left_margin;
- if (cleol) {
- segment.x1 = ctx->text.lt.info[line].textWidth + x;
- if (XmuValidSegment(&segment)) {
- scanline.y = y;
- next.y = ctx->text.lt.info[line + 1].y;
- XmuAreaOr(clip, &area);
- }
- }
-
- start = final;
- y = ctx->text.lt.info[line + 1].y;
- }
-
- if (cleol) {
- for (scan = clip->scanline; scan && scan->next; scan = scan->next)
- for (seg = scan->segment; seg; seg = seg->next)
- SinkClearToBG(ctx->text.sink,
- seg->x1, scan->y,
- seg->x2 - seg->x1, scan->next->y - scan->y);
- XmuDestroyArea(clip);
- }
-}
-
-#ifndef OLDXAW
-/*ARGSUSED*/
-static void
-DisplayText(Widget w, XawTextPosition left, XawTextPosition right)
-{
- static XmuSegment segment;
- static XmuScanline next;
- static XmuScanline scanline = {0, &segment, &next};
- static XmuArea area = {&scanline};
-
- TextWidget ctx = (TextWidget)w;
- int y, line;
- XawTextPosition from, to, lastPos;
- Bool cleol = ctx->text.clear_to_eol;
- Bool has_selection = ctx->text.s.right > ctx->text.s.left;
- XawTextPaintList *paint_list;
-
- left = left < ctx->text.lt.top ? ctx->text.lt.top : left;
-
- if (left > right || !IsPositionVisible(ctx, left))
- return;
-
- line = LineForPosition(ctx, left);
- y = ctx->text.lt.info[line].y;
- segment.x2 = (int)XtWidth(ctx) - ctx->text.r_margin.right;
- lastPos = XawTextGetLastPosition(ctx);
-
- paint_list = ((TextSinkObject)ctx->text.sink)->text_sink.paint;
-
- for (from = left; from < right && line < ctx->text.lt.lines; line++) {
- if ((to = ctx->text.lt.info[line + 1].position) > right)
- to = right;
-
- if (to > lastPos)
- to = lastPos;
-
- if (from < to) {
- if (!has_selection
- || (from >= ctx->text.s.right || to <= ctx->text.s.left))
- XawTextSinkPreparePaint(ctx->text.sink, y, line, from, to, False);
- else if (from >= ctx->text.s.left && to <= ctx->text.s.right)
- XawTextSinkPreparePaint(ctx->text.sink, y, line, from, to, True);
- else {
- XawTextSinkPreparePaint(ctx->text.sink, y, line, from,
- ctx->text.s.left, False);
- XawTextSinkPreparePaint(ctx->text.sink, y, line,
- XawMax(from, ctx->text.s.left),
- XawMin(to, ctx->text.s.right), True);
- XawTextSinkPreparePaint(ctx->text.sink, y, line,
- ctx->text.s.right, to, False);
- }
- }
-
- if (cleol) {
- segment.x1 = ctx->text.lt.info[line].textWidth + ctx->text.left_margin;
- if (XmuValidSegment(&segment)) {
- scanline.y = y;
- next.y = ctx->text.lt.info[line + 1].y;
- XmuAreaOr(paint_list->clip, &area);
- }
- }
- y = ctx->text.lt.info[line + 1].y;
- from = to;
- }
-
- /* clear to the bottom of the window */
- if (cleol && line >= ctx->text.lt.lines) {
- segment.x1 = ctx->text.left_margin;
- if (XmuValidSegment(&segment)) {
- scanline.y = y;
- next.y = (int)XtHeight(ctx) - (int)ctx->text.margin.bottom;
- XmuAreaOr(paint_list->clip, &area);
- }
- }
-}
-#endif
-
-/*
- * This routine implements multi-click selection in a hardwired manner.
- * It supports multi-click entity cycling (char, word, line, file) and mouse
- * motion adjustment of the selected entitie (i.e. select a word then, with
- * button still down, adjust wich word you really meant by moving the mouse).
- * [NOTE: This routine is to be replaced by a set of procedures that
- * will allows clients to implements a wide class of draw through and
- * multi-click selection user interfaces.]
- */
-static void
-DoSelection(TextWidget ctx, XawTextPosition pos, Time time, Bool motion)
-{
- XawTextPosition newLeft, newRight;
- XawTextSelectType newType, *sarray;
- Widget src = ctx->text.source;
-
- if (motion)
- newType = ctx->text.s.type;
- else {
- if ((abs((long) time - (long) ctx->text.lasttime) < MULTI_CLICK_TIME)
- && (pos >= ctx->text.s.left && pos <= ctx->text.s.right)) {
- sarray = ctx->text.sarray;
- for (; *sarray != XawselectNull && *sarray != ctx->text.s.type;
- sarray++)
- ;
- if (*sarray == XawselectNull)
- newType = *(ctx->text.sarray);
- else {
- newType = *(sarray + 1);
- if (newType == XawselectNull)
- newType = *(ctx->text.sarray);
- }
- }
- else /* single-click event */
- newType = *(ctx->text.sarray);
-
- ctx->text.lasttime = time;
- }
- switch (newType) {
- case XawselectPosition:
- newLeft = newRight = pos;
- break;
- case XawselectChar:
- newLeft = pos;
- newRight = SrcScan(src, pos, XawstPositions, XawsdRight, 1, False);
- break;
- case XawselectWord:
- case XawselectParagraph:
- case XawselectAlphaNumeric: {
- XawTextScanType stype;
-
- if (newType == XawselectWord)
- stype = XawstWhiteSpace;
- else if (newType == XawselectParagraph)
- stype = XawstParagraph;
- else
- stype = XawstAlphaNumeric;
-
- /*
- * Somewhat complicated, but basically I treat the space between
- * two objects as another object. The object that I am currently
- * in then becomes the end of the selection.
- *
- * Chris Peterson - 4/19/90.
- */
- newRight = SrcScan(ctx->text.source, pos, stype,
- XawsdRight, 1, False);
- newRight = SrcScan(ctx->text.source, newRight, stype,
- XawsdLeft, 1, False);
-
- if (pos != newRight)
- newLeft = SrcScan(ctx->text.source, pos, stype,
- XawsdLeft, 1, False);
- else
- newLeft = pos;
-
- newLeft =SrcScan(ctx->text.source, newLeft, stype,
- XawsdRight, 1, False);
-
- if (newLeft > newRight) {
- XawTextPosition temp = newLeft;
- newLeft = newRight;
- newRight = temp;
- }
- } break;
- case XawselectLine:
- newLeft = SrcScan(src, pos, XawstEOL, XawsdLeft, 1, False);
- newRight = SrcScan(src, pos, XawstEOL, XawsdRight, 1, False);
- break;
- case XawselectAll:
- newLeft = SrcScan(src, pos, XawstAll, XawsdLeft, 1, False);
- newRight = SrcScan(src, pos, XawstAll, XawsdRight, 1, False);
- break;
- default:
- XtAppWarning(XtWidgetToApplicationContext((Widget) ctx),
- "Text Widget: empty selection array.");
- return;
- }
-
- if (newLeft != ctx->text.s.left || newRight != ctx->text.s.right
- || newType != ctx->text.s.type) {
- ModifySelection(ctx, newLeft, newRight);
- if (pos - ctx->text.s.left < ctx->text.s.right - pos)
- ctx->text.insertPos = newLeft;
- else
- ctx->text.insertPos = newRight;
- ctx->text.s.type = newType;
- }
- if (!motion) { /* setup so we can freely mix select extend calls*/
- ctx->text.origSel.type = ctx->text.s.type;
- ctx->text.origSel.left = ctx->text.s.left;
- ctx->text.origSel.right = ctx->text.s.right;
-
- if (pos >= ctx->text.s.left + (ctx->text.s.right - ctx->text.s.left) / 2)
- ctx->text.extendDir = XawsdRight;
- else
- ctx->text.extendDir = XawsdLeft;
- }
-}
-
-/*
- * This routine implements extension of the currently selected text in
- * the "current" mode (i.e. char word, line, etc.). It worries about
- * extending from either end of the selection and handles the case when you
- * cross through the "center" of the current selection (e.g. switch which
- * end you are extending!).
- */
-static void
-ExtendSelection(TextWidget ctx, XawTextPosition pos, Bool motion)
-{
- XawTextScanDirection dir;
-
- if (!motion) { /* setup for extending selection */
- if (ctx->text.s.left == ctx->text.s.right) /* no current selection. */
- ctx->text.s.left = ctx->text.s.right = ctx->text.insertPos;
- else {
- ctx->text.origSel.left = ctx->text.s.left;
- ctx->text.origSel.right = ctx->text.s.right;
- }
-
- ctx->text.origSel.type = ctx->text.s.type;
-
- if (pos >= ctx->text.s.left + (ctx->text.s.right - ctx->text.s.left) / 2)
- ctx->text.extendDir = XawsdRight;
- else
- ctx->text.extendDir = XawsdLeft;
- }
- else /* check for change in extend direction */
- if ((ctx->text.extendDir == XawsdRight &&
- pos <= ctx->text.origSel.left) ||
- (ctx->text.extendDir == XawsdLeft &&
- pos >= ctx->text.origSel.right)) {
- ctx->text.extendDir = (ctx->text.extendDir == XawsdRight) ?
- XawsdLeft : XawsdRight;
- ModifySelection(ctx, ctx->text.origSel.left, ctx->text.origSel.right);
- }
-
- dir = ctx->text.extendDir;
- switch (ctx->text.s.type) {
- case XawselectWord:
- case XawselectParagraph:
- case XawselectAlphaNumeric: {
- XawTextPosition left_pos, right_pos;
- XawTextScanType stype;
-
- if (ctx->text.s.type == XawselectWord)
- stype = XawstWhiteSpace;
- else if (ctx->text.s.type == XawselectParagraph)
- stype = XawstParagraph;
- else
- stype = XawstAlphaNumeric;
-
- /*
- * Somewhat complicated, but basically I treat the space between
- * two objects as another object. The object that I am currently
- * in then becomes the end of the selection.
- *
- * Chris Peterson - 4/19/90.
- */
- right_pos = SrcScan(ctx->text.source, pos, stype,
- XawsdRight, 1, False);
- right_pos =SrcScan(ctx->text.source, right_pos, stype,
- XawsdLeft, 1, False);
-
- if (pos != right_pos)
- left_pos = SrcScan(ctx->text.source, pos, stype,
- XawsdLeft, 1, False);
- else
- left_pos = pos;
-
- left_pos =SrcScan(ctx->text.source, left_pos, stype,
- XawsdRight, 1, False);
-
- if (dir == XawsdLeft)
- pos = Min(left_pos, right_pos);
- else /* dir == XawsdRight */
- pos = Max(left_pos, right_pos);
- } break;
- case XawselectLine:
- pos = SrcScan(ctx->text.source, pos, XawstEOL,
- dir, 1, dir == XawsdRight);
- break;
- case XawselectAll:
- pos = ctx->text.insertPos;
- /*FALLTHROUGH*/
- case XawselectPosition:
- default:
- break;
- }
-
- if (dir == XawsdRight)
- ModifySelection(ctx, ctx->text.s.left, pos);
- else
- ModifySelection(ctx, pos, ctx->text.s.right);
-
- ctx->text.insertPos = pos;
-}
-
-/*
- * Function:
- * _XawTextClearAndCenterDisplay
- *
- * Parameters:
- * ctx - text widget
- *
- * Description:
- * Redraws the display with the cursor in insert point
- * centered vertically.
- */
-void
-_XawTextClearAndCenterDisplay(TextWidget ctx)
-{
- int left_margin = ctx->text.left_margin;
- Bool visible = IsPositionVisible(ctx, ctx->text.insertPos);
-
- _XawTextShowPosition(ctx);
-
- if (XtIsRealized((Widget)ctx) && visible &&
- left_margin == ctx->text.left_margin) {
- int insert_line = LineForPosition(ctx, ctx->text.insertPos);
- int scroll_by = insert_line - (ctx->text.lt.lines >> 1);
- Boolean clear_to_eol = ctx->text.clear_to_eol;
-
- XawTextScroll(ctx, scroll_by, 0);
- SinkClearToBG(ctx->text.sink, 0, 0, XtWidth(ctx), XtHeight(ctx));
- ClearWindow(ctx);
- clear_to_eol = ctx->text.clear_to_eol;
- ctx->text.clear_to_eol = False;
- FlushUpdate(ctx);
- ctx->text.clear_to_eol = clear_to_eol;
- }
-}
-
-/*
- * Internal redisplay entire window
- * Legal to call only if widget is realized
- */
-static void
-DisplayTextWindow(Widget w)
-{
- TextWidget ctx = (TextWidget)w;
-
- _XawTextBuildLineTable(ctx, ctx->text.lt.top, False);
- ClearWindow(ctx);
-}
-
-static void
-TextSinkResize(Widget w)
-{
- if (w && XtClass(w)->core_class.resize)
- XtClass(w)->core_class.resize(w);
-}
-
-/* ARGSUSED */
-void
-_XawTextCheckResize(TextWidget ctx)
-{
- return;
-}
-
-/*
- * Converts (params, num_params) to a list of atoms & caches the
- * list in the TextWidget instance.
- */
-Atom *
-_XawTextSelectionList(TextWidget ctx, String *list, Cardinal nelems)
-{
- Atom *sel = ctx->text.s.selections;
- Display *dpy = XtDisplay((Widget)ctx);
- int n;
-
- if (nelems > (Cardinal)ctx->text.s.array_size) {
- sel = (Atom *)XtRealloc((char *)sel, sizeof(Atom) * nelems);
- ctx->text.s.array_size = nelems;
- ctx->text.s.selections = sel;
- }
- for (n = nelems; --n >= 0; sel++, list++)
- *sel = XInternAtom(dpy, *list, False);
- ctx->text.s.atom_count = nelems;
-
- return (ctx->text.s.selections);
-}
-
-/*
- * Function:
- * SetSelection
- *
- * Parameters:
- * ctx - text widget
- * defaultSel - default selection
- * l - left and right ends of the selection
- * r - ""
- * list - the selection list (as strings).
- * nelems - ""
- *
- * Description:
- * Sets the current selection.
- *
- * Note:
- * if (ctx->text.s.left >= ctx->text.s.right) then the selection is unset
- */
-void
-_XawTextSetSelection(TextWidget ctx, XawTextPosition l, XawTextPosition r,
- String *list, Cardinal nelems)
-{
- if (nelems == 1 && !strcmp (list[0], "none"))
- return;
- if (nelems == 0) {
- String defaultSel = "PRIMARY";
- list = &defaultSel;
- nelems = 1;
- }
- _SetSelection(ctx, l, r, _XawTextSelectionList(ctx, list, nelems), nelems);
-}
-
-/*
- * Function:
- * ModifySelection
- *
- * Parameters:
- * ctx - text widget
- * left - left and right ends of the selection
- * right - ""
- *
- * Description:
- * Modifies the current selection.
- *
- * Note:
- * if (ctx->text.s.left >= ctx->text.s.right) then the selection is unset
- */
-static void
-ModifySelection(TextWidget ctx, XawTextPosition left, XawTextPosition right)
-{
- if (left == right)
- ctx->text.insertPos = left;
- _SetSelection(ctx, left, right, NULL, 0);
-}
-
-/*
- * This routine is used to perform various selection functions. The goal is
- * to be able to specify all the more popular forms of draw-through and
- * multi-click selection user interfaces from the outside.
- */
-void
-_XawTextAlterSelection(TextWidget ctx, XawTextSelectionMode mode,
- XawTextSelectionAction action, String *params,
- Cardinal *num_params)
-{
- XawTextPosition position;
- Boolean flag;
-
- /*
- * This flag is used by TextPop.c:DoReplace() to determine if the selection
- * is okay to use, or if it has been modified.
- */
- if (ctx->text.search != NULL)
- ctx->text.search->selection_changed = True;
-
- position = PositionForXY(ctx, (int) ctx->text.ev_x, (int) ctx->text.ev_y);
-
- flag = (action != XawactionStart);
- if (mode == XawsmTextSelect)
- DoSelection(ctx, position, ctx->text.time, flag);
- else /* mode == XawsmTextExtend */
- ExtendSelection (ctx, position, flag);
-
- if (action == XawactionEnd)
- _XawTextSetSelection(ctx, ctx->text.s.left, ctx->text.s.right,
- params, *num_params);
-}
-
-/*
- * Function:
- * UpdateTextInRectangle
- *
- * Parameters:
- * ctx - the text widget
- * rect - rectangle
- *
- * Description:
- * Updates the text in the given rectangle
- */
-static void
-UpdateTextInRectangle(TextWidget ctx, XRectangle *rect)
-{
- XawTextLineTable *lt;
- int line, y1, y2, x2;
-
- y1 = rect->y;
- y2 = y1 + rect->height;
- x2 = rect->x + rect->width;
-
- for (line = 0, lt = &ctx->text.lt; line < lt->lines; line++)
- if (lt->info[line + 1].y > y1)
- break;
- for (; line <= lt->lines; line++) {
- if (lt->info[line].y > y2)
- break;
- UpdateTextInLine(ctx, line, rect->x, x2);
- }
-}
-
-/*
- * This routine processes all "expose region" XEvents. In general, its job
- * is to the best job at minimal re-paint of the text, displayed in the
- * window, that it can.
- */
-/* ARGSUSED */
-static void
-XawTextExpose(Widget w, XEvent *event, Region region)
-{
- TextWidget ctx = (TextWidget)w;
- Boolean clear_to_eol;
- XRectangle expose;
-
- if (event->type == Expose) {
- expose.x = event->xexpose.x;
- expose.y = event->xexpose.y;
- expose.width = event->xexpose.width;
- expose.height = event->xexpose.height;
- }
- else if (event->type == GraphicsExpose) {
- expose.x = event->xgraphicsexpose.x;
- expose.y = event->xgraphicsexpose.y;
- expose.width = event->xgraphicsexpose.width;
- expose.height = event->xgraphicsexpose.height;
- }
- else
- return;
-
- _XawTextPrepareToUpdate(ctx);
-
- if (Superclass->core_class.expose)
- (*Superclass->core_class.expose)(w, event, region);
-
- clear_to_eol = ctx->text.clear_to_eol;
- ctx->text.clear_to_eol = False;
-
- UpdateTextInRectangle(ctx, &expose);
- XawTextSinkGetCursorBounds(ctx->text.sink, &expose);
- UpdateTextInRectangle(ctx, &expose);
- SinkClearToBG(ctx->text.sink, expose.x, expose.y,
- expose.width, expose.height);
- _XawTextExecuteUpdate(ctx);
- ctx->text.clear_to_eol = clear_to_eol;
-}
-
-/*
- * This routine does all setup required to syncronize batched screen updates
- */
-void
-_XawTextPrepareToUpdate(TextWidget ctx)
-{
- if (ctx->text.old_insert < 0) {
- InsertCursor((Widget)ctx, XawisOff);
- ctx->text.showposition = False;
- ctx->text.old_insert = ctx->text.insertPos;
- ctx->text.clear_to_eol = False;
-#ifndef OLDXAW
- ctx->text.source_changed = SRC_CHANGE_NONE;
-#endif
- }
-}
-
-/*
- * This is a private utility routine used by _XawTextExecuteUpdate. It
- * processes all the outstanding update requests and merges update
- * ranges where possible.
- */
-static void
-FlushUpdate(TextWidget ctx)
-{
- XmuSegment *seg;
- void (*display_text)(Widget, XawTextPosition, XawTextPosition);
-
- if (XtIsRealized((Widget)ctx)) {
- ctx->text.s.right = XawMin(ctx->text.s.right, ctx->text.lastPos);
- ctx->text.s.left = XawMin(ctx->text.s.left, ctx->text.s.right);
-
-#ifndef OLDXAW
- if (XawTextSinkBeginPaint(ctx->text.sink) == False)
-#endif
- display_text = OldDisplayText;
-#ifndef OLDXAW
- else
- display_text = DisplayText;
-#endif
- for (seg = ctx->text.update->segment; seg; seg = seg->next)
- (*display_text)((Widget)ctx,
- (XawTextPosition)seg->x1,
- (XawTextPosition)seg->x2);
-#ifndef OLDXAW
- if (display_text != OldDisplayText) {
- XawTextSinkDoPaint(ctx->text.sink);
- XawTextSinkEndPaint(ctx->text.sink);
- }
-#endif
- }
- (void)XmuScanlineXor(ctx->text.update, ctx->text.update);
-}
-
-static int
-CountLines(TextWidget ctx, XawTextPosition left, XawTextPosition right)
-{
- if (ctx->text.wrap == XawtextWrapNever || left >= right)
- return (1);
- else {
- XawTextPosition tmp;
- int dim, lines = 0, wwidth = GetMaxTextWidth(ctx);
-
- while (left < right) {
- tmp = left;
- XawTextSinkFindPosition(ctx->text.sink, left,
- ctx->text.left_margin,
- wwidth, ctx->text.wrap == XawtextWrapWord,
- &left, &dim, &dim);
- ++lines;
- if (tmp == left)
- ++left;
- }
-
- return (lines);
- }
- /*NOTREACHED*/
-}
-
-static int
-GetMaxTextWidth(TextWidget ctx)
-{
- XRectangle cursor;
- int width;
-
- XawTextSinkGetCursorBounds(ctx->text.sink, &cursor);
- width = (int)XtWidth(ctx) - RHMargins(ctx) - cursor.width;
-
- return (XawMax(0, width));
-}
-
-/*
- * Function:
- * _XawTextShowPosition
- *
- * Parameters:
- * ctx - the text widget to show the position
- *
- * Description:
- * Makes sure the text cursor visible, scrolling the text window
- * if required.
- */
-void
-_XawTextShowPosition(TextWidget ctx)
-{
- /*
- * Variable scroll is used to avoid scanning large files to calculate
- * line offsets
- */
- int hpixels, vlines;
- XawTextPosition first, last, top, tmp;
- Bool visible, scroll;
-
- if (!XtIsRealized((Widget)ctx))
- return;
-
- /*
- * Checks if a horizontal scroll is required
- */
- if (ctx->text.wrap == XawtextWrapNever) {
- int x, vwidth, distance, dim;
- XRectangle rect;
-
- vwidth = (int)XtWidth(ctx) - RHMargins(ctx);
- last = SrcScan(ctx->text.source, ctx->text.insertPos,
- XawstEOL, XawsdLeft, 1, False);
- XawTextSinkFindDistance(ctx->text.sink, last,
- ctx->text.left_margin,
- ctx->text.insertPos,
- &distance, &first, &dim);
- XawTextSinkGetCursorBounds(ctx->text.sink, &rect);
- x = ctx->text.left_margin - ctx->text.r_margin.left;
-
- if (x + distance + rect.width > vwidth)
- hpixels = x + distance + rect.width - vwidth + (vwidth >> 2);
- else if (x + distance < 0)
- hpixels = x + distance - (vwidth >> 2);
- else
- hpixels = 0;
- }
- else
- hpixels = 0;
-
- visible = IsPositionVisible(ctx, ctx->text.insertPos);
-
- /*
- * If the cursor is already visible
- */
- if (!hpixels && visible)
- return;
-
- scroll = ctx->core.background_pixmap == XtUnspecifiedPixmap && !hpixels;
- vlines = 0;
- first = ctx->text.lt.top;
-
- /*
- * Needs to scroll the text window
- */
- if (visible)
- top = ctx->text.lt.top;
- else {
- top = SrcScan(ctx->text.source, ctx->text.insertPos,
- XawstEOL, XawsdLeft, 1, False);
-
- /*
- * Finds the nearest left position from ctx->text.insertPos
- */
- if (ctx->text.wrap != XawtextWrapNever) {
- int dim, vwidth = GetMaxTextWidth(ctx);
-
- last = top;
- /*CONSTCOND*/
- while (1) {
- tmp = last;
- XawTextSinkFindPosition(ctx->text.sink, last,
- ctx->text.left_margin, vwidth,
- ctx->text.wrap == XawtextWrapWord,
- &last, &dim, &dim);
- if (last == tmp)
- ++last;
- if (last <= ctx->text.insertPos)
- top = last;
- else
- break;
- }
- }
- }
-
- if (scroll) {
- if (ctx->text.insertPos < first) { /* Scroll Down */
- while (first > top) {
- last = first;
- first = SrcScan(ctx->text.source, first,
- XawstEOL, XawsdLeft, 2, False);
- vlines -= CountLines(ctx, first, last);
- if (-vlines >= ctx->text.lt.lines) {
- scroll = False;
- break;
- }
- }
- }
- else if (!visible) { /* Scroll Up */
- while (first < top) {
- last = first;
- first = SrcScan(ctx->text.source, first,
- XawstEOL, XawsdRight, 1, True);
- vlines += CountLines(ctx, last, first);
- if (vlines > ctx->text.lt.lines) {
- scroll = False;
- break;
- }
- }
- }
- else
- scroll = False;
- }
-
- /*
- * If a portion of the text that will be scrolled is visible
- */
- if (scroll)
- XawTextScroll(ctx, vlines ? vlines - (ctx->text.lt.lines >> 1) : 0, 0);
- /*
- * Else redraw the entire text window
- */
- else {
- ctx->text.left_margin -= hpixels;
- if (ctx->text.left_margin > ctx->text.r_margin.left)
- ctx->text.left_margin = ctx->text.margin.left =
- ctx->text.r_margin.left;
-
- if (!visible) {
- vlines = ctx->text.lt.lines >> 1;
- if (vlines)
- top = SrcScan(ctx->text.source, ctx->text.insertPos,
- XawstEOL, XawsdLeft, vlines + 1, False);
-
- if (ctx->text.wrap != XawtextWrapNever) {
- int dim;
- int n_lines = CountLines(ctx, top, ctx->text.insertPos);
- int vwidth = GetMaxTextWidth(ctx);
-
- while (n_lines-- > vlines) {
- tmp = top;
- XawTextSinkFindPosition(ctx->text.sink, top,
- ctx->text.left_margin,
- vwidth,
- ctx->text.wrap == XawtextWrapWord,
- &top, &dim, &dim);
- if (tmp == top)
- ++top;
- }
- }
- _XawTextBuildLineTable(ctx, top, True);
- }
- else
- ClearWindow(ctx);
- }
- ctx->text.clear_to_eol = True;
-}
-
-#ifndef OLDXAW
-static int
-ResolveLineNumber(TextWidget ctx)
-{
- int line_number = ctx->text.lt.base_line;
- XawTextPosition position = ctx->text.lt.top;
-
- if (ctx->text.lt.base_line < 1)
- return (ctx->text.line_number);
-
- if (ctx->text.wrap == XawtextWrapNever
- && IsPositionVisible(ctx, ctx->text.insertPos))
- line_number += LineForPosition(ctx, ctx->text.insertPos);
- else if (position < ctx->text.insertPos) {
- while (position < ctx->text.insertPos) {
- position = SrcScan(ctx->text.source, position,
- XawstEOL, XawsdRight, 1, True);
- if (position <= ctx->text.insertPos) {
- ++line_number;
- if (position == ctx->text.lastPos) {
- line_number -= !_XawTextSourceNewLineAtEOF(ctx->text.source);
- break;
- }
- }
- }
- }
- else if (position > ctx->text.insertPos) {
- while (position > ctx->text.insertPos) {
- position = SrcScan(ctx->text.source, position,
- XawstEOL, XawsdLeft, 1, False);
- if (--position >= ctx->text.insertPos)
- --line_number;
- }
- }
-
- return (line_number);
-}
-#endif
-
-/*
- * This routine causes all batched screen updates to be performed
- */
-void
-_XawTextExecuteUpdate(TextWidget ctx)
-{
- if (ctx->text.update_disabled || ctx->text.old_insert < 0)
- return;
-
- if(ctx->text.old_insert != ctx->text.insertPos || ctx->text.showposition)
- _XawTextShowPosition(ctx);
-
- FlushUpdate(ctx);
- InsertCursor((Widget)ctx, XawisOn);
- ctx->text.old_insert = -1;
-#ifndef OLDXAW
- _XawTextSetLineAndColumnNumber(ctx, False);
-#endif
-}
-
-static void
-XawTextDestroy(Widget w)
-{
- TextWidget ctx = (TextWidget)w;
-
- DestroyHScrollBar(ctx);
- DestroyVScrollBar(ctx);
-
- XtFree((char *)ctx->text.s.selections);
- XtFree((char *)ctx->text.lt.info);
- XtFree((char *)ctx->text.search);
- XmuDestroyScanline(ctx->text.update);
- XtReleaseGC((Widget)ctx, ctx->text.gc);
-}
-
-/*
- * by the time we are managed (and get this far) we had better
- * have both a source and a sink
- */
-static void
-XawTextResize(Widget w)
-{
- TextWidget ctx = (TextWidget)w;
-
- PositionVScrollBar(ctx);
- PositionHScrollBar(ctx);
- TextSinkResize(ctx->text.sink);
-
- ctx->text.showposition = True;
- _XawTextBuildLineTable(ctx, ctx->text.lt.top, True);
-}
-
-/*
- * This routine allow the application program to Set attributes.
- */
-/*ARGSUSED*/
-static Boolean
-XawTextSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- TextWidget oldtw = (TextWidget)current;
- TextWidget newtw = (TextWidget)cnew;
- Boolean redisplay = False;
- Boolean display_caret = newtw->text.display_caret;
-#ifndef OLDXAW
- Boolean show_lc = False;
-#endif
-
- newtw->text.display_caret = oldtw->text.display_caret;
- _XawTextPrepareToUpdate(newtw);
- newtw->text.display_caret = display_caret;
-
- if (oldtw->text.r_margin.left != newtw->text.r_margin.left) {
- newtw->text.left_margin = newtw->text.margin.left =
- newtw->text.r_margin.left;
- if (newtw->text.vbar != NULL) {
- newtw->text.left_margin += XtWidth(newtw->text.vbar) +
- XtBorderWidth(newtw->text.vbar);
- }
- redisplay = True;
- }
-
- if (oldtw->text.scroll_vert != newtw->text.scroll_vert) {
- if (newtw->text.scroll_vert == XawtextScrollAlways)
- CreateVScrollBar(newtw);
- else
- DestroyVScrollBar(newtw);
-
- redisplay = True;
- }
-
- if (oldtw->text.r_margin.bottom != newtw->text.r_margin.bottom) {
- newtw->text.margin.bottom = newtw->text.r_margin.bottom;
- if (newtw->text.hbar != NULL)
- newtw->text.margin.bottom += newtw->text.hbar->core.height +
- newtw->text.hbar->core.border_width;
- redisplay = True;
- }
-
- if (oldtw->text.scroll_horiz != newtw->text.scroll_horiz) {
- if (newtw->text.scroll_horiz == XawtextScrollAlways)
- CreateHScrollBar(newtw);
- else
- DestroyHScrollBar(newtw);
-
- redisplay = True;
- }
-
- if (oldtw->text.source != newtw->text.source) {
-#ifndef OLDXAW
- show_lc = True;
- _XawSourceRemoveText(oldtw->text.source, cnew,
- oldtw->text.source &&
- XtParent(oldtw->text.source) == cnew);
- _XawSourceAddText(newtw->text.source, cnew);
-#endif
- _XawTextSetSource((Widget)newtw, newtw->text.source, newtw->text.lt.top,
- newtw->text.insertPos);
- }
-
- newtw->text.redisplay_needed = False;
- XtSetValues((Widget)newtw->text.source, args, *num_args);
- XtSetValues((Widget)newtw->text.sink, args, *num_args);
-
- if (oldtw->text.wrap != newtw->text.wrap
- || oldtw->text.lt.top != newtw->text.lt.top
- || oldtw->text.insertPos != newtw->text.insertPos
- || oldtw->text.r_margin.right != newtw->text.r_margin.right
- || oldtw->text.r_margin.top != newtw->text.r_margin.top
- || oldtw->text.sink != newtw->text.sink
- || newtw->text.redisplay_needed) {
- if (oldtw->text.wrap != newtw->text.wrap) {
- newtw->text.left_margin = newtw->text.margin.left =
- newtw->text.r_margin.left;
- if (oldtw->text.lt.top == newtw->text.lt.top)
- newtw->text.lt.top = SrcScan(newtw->text.source, 0, XawstEOL,
- XawsdLeft, 1, False);
- }
- newtw->text.showposition = True;
-#ifndef OLDXAW
- show_lc = True;
- newtw->text.source_changed = SRC_CHANGE_OVERLAP;
-#endif
- _XawTextBuildLineTable(newtw, newtw->text.lt.top, True);
- redisplay = True;
- }
-
-#ifndef OLDXAW
- if (newtw->text.left_column < 0)
- newtw->text.left_column = 0;
- if (newtw->text.right_column < 0)
- newtw->text.right_column = 0;
-#endif
-
- _XawTextExecuteUpdate(newtw);
-
-#ifndef OLDXAW
- if (show_lc)
- _XawTextSetLineAndColumnNumber(newtw, True);
-#endif
-
- if (redisplay)
- _XawTextSetScrollBars(newtw);
-
- return (redisplay);
-}
-
-/* invoked by the Simple widget's SetValues */
-static Bool
-XawTextChangeSensitive(Widget w)
-{
- Arg args[1];
- TextWidget tw = (TextWidget)w;
-
- (*(&simpleClassRec)->simple_class.change_sensitive)(w);
-
- XtSetArg(args[0], XtNancestorSensitive,
- (tw->core.ancestor_sensitive && tw->core.sensitive));
- if (tw->text.vbar)
- XtSetValues(tw->text.vbar, args, ONE);
- if (tw->text.hbar)
- XtSetValues(tw->text.hbar, args, ONE);
- return (False);
-}
-
-/*
- * Function:
- * XawTextGetValuesHook
- *
- * Parameters:
- * w - Text Widget
- * args - argument list
- * num_args - number of args
- *
- * Description:
- * This is a get values hook routine that gets the
- * values in the text source and sink.
- */
-static void
-XawTextGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
-{
- XtGetValues(((TextWidget)w)->text.source, args, *num_args);
- XtGetValues(((TextWidget)w)->text.sink, args, *num_args);
-}
-
-/*
- * Function:
- * FindGoodPosition
- *
- * Parameters:
- * pos - any position
- *
- * Description:
- * Returns a valid position given any postition.
- *
- * Returns:
- * A position between (0 and lastPos)
- */
-static XawTextPosition
-FindGoodPosition(TextWidget ctx, XawTextPosition pos)
-{
- if (pos < 0)
- return (0);
- return (((pos > ctx->text.lastPos) ? ctx->text.lastPos : pos));
-}
-
-/* Li wrote this so the IM can find a given text position's screen position */
-void
-_XawTextPosToXY(Widget w, XawTextPosition pos, Position *x, Position *y)
-{
- int line, ix, iy;
-
- LineAndXYForPosition((TextWidget)w, pos, &line, &ix, &iy);
- *x = ix;
- *y = iy;
-}
-
-/*******************************************************************
-The following routines provide procedural interfaces to Text window state
-setting and getting. They need to be redone so than the args code can use
-them. I suggest we create a complete set that takes the context as an
-argument and then have the public version lookup the context and call the
-internal one. The major value of this set is that they have actual application
-clients and therefore the functionality provided is required for any future
-version of Text.
-********************************************************************/
-void
-XawTextDisplay(Widget w)
-{
- TextWidget ctx = (TextWidget)w;
-
- if (!XtIsRealized(w))
- return;
-
- _XawTextPrepareToUpdate(ctx);
- ctx->text.clear_to_eol = True;
- DisplayTextWindow(w);
- _XawTextExecuteUpdate(ctx);
-}
-
-void
-XawTextSetSelectionArray(Widget w, XawTextSelectType *sarray)
-{
- ((TextWidget)w)->text.sarray = sarray;
-}
-
-void
-XawTextGetSelectionPos(Widget w, XawTextPosition *left, XawTextPosition *right)
-{
- *left = ((TextWidget)w)->text.s.left;
- *right = ((TextWidget)w)->text.s.right;
-}
-
-void
-_XawTextSetSource(Widget w, Widget source,
- XawTextPosition top, XawTextPosition startPos)
-{
- TextWidget ctx = (TextWidget)w;
-#ifndef OLDXAW
- Bool resolve = False;
-#endif
-
-#ifndef OLDXAW
- if (source != ctx->text.source)
- _XawSourceRemoveText(ctx->text.source, w, ctx->text.source &&
- XtParent(ctx->text.source) == w);
- _XawSourceAddText(source, w);
-
- if (source != ctx->text.source || ctx->text.insertPos != startPos)
- resolve = True;
-
- ctx->text.source_changed = SRC_CHANGE_OVERLAP;
-#endif
- ctx->text.source = source;
- ctx->text.s.left = ctx->text.s.right = 0;
- ctx->text.lastPos = GETLASTPOS;
- top = FindGoodPosition(ctx, top);
- startPos = FindGoodPosition(ctx, startPos);
- ctx->text.insertPos = ctx->text.old_insert = startPos;
- _XawTextPrepareToUpdate(ctx);
-
- _XawTextBuildLineTable(ctx, top, True);
-
- _XawTextExecuteUpdate(ctx);
-#ifndef OLDXAW
- if (resolve)
- _XawTextSetLineAndColumnNumber(ctx, True);
-#endif
-}
-
-void
-XawTextSetSource(Widget w, Widget source, XawTextPosition top)
-{
- _XawTextSetSource(w, source, top, top);
-}
-
-/*
- * This public routine deletes the text from startPos to endPos in a source and
- * then inserts, at startPos, the text that was passed. As a side effect it
- * "invalidates" that portion of the displayed text (if any), so that things
- * will be repainted properly.
- */
-int
-XawTextReplace(Widget w, XawTextPosition startPos, XawTextPosition endPos,
- XawTextBlock *text)
-{
- TextWidget ctx = (TextWidget)w;
- int result;
-#ifndef OLDXAW
- Cardinal i;
- TextSrcObject src = (TextSrcObject)ctx->text.source;
-
- for (i = 0; i < src->textSrc.num_text; i++)
- _XawTextPrepareToUpdate((TextWidget)src->textSrc.text[i]);
-#else
- _XawTextPrepareToUpdate(ctx);
-#endif
-
- endPos = FindGoodPosition(ctx, endPos);
- startPos = FindGoodPosition(ctx, startPos);
- result = _XawTextReplace(ctx, startPos, endPos, text);
-
-#ifndef OLDXAW
- for (i = 0; i < src->textSrc.num_text; i++)
- _XawTextExecuteUpdate((TextWidget)src->textSrc.text[i]);
-#else
- _XawTextExecuteUpdate(ctx);
-#endif
-
- return (result);
-}
-
-XawTextPosition
-XawTextTopPosition(Widget w)
-{
- return (((TextWidget)w)->text.lt.top);
-}
-
-XawTextPosition
-XawTextLastPosition(Widget w)
-{
- return (((TextWidget)w)->text.lastPos);
-}
-
-void
-XawTextSetInsertionPoint(Widget w, XawTextPosition position)
-{
- TextWidget ctx = (TextWidget)w;
-
- _XawTextPrepareToUpdate(ctx);
- ctx->text.insertPos = FindGoodPosition(ctx, position);
- ctx->text.showposition = True;
- ctx->text.from_left = -1;
-
- _XawTextExecuteUpdate(ctx);
-#ifndef OLDXAW
- _XawTextSetLineAndColumnNumber(ctx, False);
-#endif
-}
-
-XawTextPosition
-XawTextGetInsertionPoint(Widget w)
-{
- return (((TextWidget)w)->text.insertPos);
-}
-
-/*
- * Note: Must walk the selection list in opposite order from TextLoseSelection
- */
-void
-XawTextUnsetSelection(Widget w)
-{
- TextWidget ctx = (TextWidget)w;
-
- while (ctx->text.s.atom_count != 0) {
- Atom sel = ctx->text.s.selections[ctx->text.s.atom_count - 1];
-
- if (sel != (Atom) 0) {
- /*
- * As selections are lost the atom_count will decrement
- */
- if (GetCutBufferNumber(sel) == NOT_A_CUT_BUFFER)
- XtDisownSelection(w, sel, ctx->text.time);
- TextLoseSelection(w, &sel); /* In case this is a cut buffer, or
- XtDisownSelection failed to call us */
- }
- }
-}
-
-void
-XawTextSetSelection(Widget w, XawTextPosition left, XawTextPosition right)
-{
- TextWidget ctx = (TextWidget)w;
-
- _XawTextPrepareToUpdate(ctx);
- _XawTextSetSelection(ctx, FindGoodPosition(ctx, left),
- FindGoodPosition(ctx, right), NULL, 0);
- _XawTextExecuteUpdate(ctx);
-}
-
-void
-XawTextInvalidate(Widget w, XawTextPosition from, XawTextPosition to)
-{
- TextWidget ctx = (TextWidget)w;
-
- from = FindGoodPosition(ctx, from);
- to = FindGoodPosition(ctx, to);
- ctx->text.lastPos = GETLASTPOS;
- _XawTextPrepareToUpdate(ctx);
- _XawTextNeedsUpdating(ctx, from, to);
- _XawTextExecuteUpdate(ctx);
-}
-
-/*ARGSUSED*/
-void
-XawTextDisableRedisplay(Widget w)
-{
- ((TextWidget)w)->text.update_disabled = True;
- _XawTextPrepareToUpdate((TextWidget)w);
-}
-
-void
-XawTextEnableRedisplay(Widget w)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition lastPos;
-
- if (!ctx->text.update_disabled)
- return;
-
- ctx->text.update_disabled = False;
- lastPos = ctx->text.lastPos = GETLASTPOS;
- ctx->text.lt.top = FindGoodPosition(ctx, ctx->text.lt.top);
- ctx->text.insertPos = FindGoodPosition(ctx, ctx->text.insertPos);
-
- if (ctx->text.s.left > lastPos || ctx->text.s.right > lastPos)
- ctx->text.s.left = ctx->text.s.right = 0;
-
- _XawTextExecuteUpdate(ctx);
-}
-
-Widget
-XawTextGetSource(Widget w)
-{
- return (((TextWidget)w)->text.source);
-}
-
-Widget
-XawTextGetSink(Widget w)
-{
- return (((TextWidget)w)->text.sink);
-}
-
-void
-XawTextDisplayCaret(Widget w,
-#if NeedWidePrototypes
- int display_caret
-#else
- Boolean display_caret
-#endif
-)
-{
- TextWidget ctx = (TextWidget)w;
-
- if (XtIsRealized(w)) {
- _XawTextPrepareToUpdate(ctx);
- ctx->text.display_caret = display_caret;
- _XawTextExecuteUpdate(ctx);
- }
- else
- ctx->text.display_caret = display_caret;
-}
-
-/*
- * Function:
- * XawTextSearch
- *
- * Parameters:
- * w - text widget
- * dir - direction to search
- * text - text block containing info about the string to search for
- *
- * Description:
- * Searches for the given text block.
- *
- * Returns:
- * The position of the text found, or XawTextSearchError on an error
- */
-XawTextPosition
-XawTextSearch(Widget w,
-#if NeedWidePrototypes
- int dir,
-#else
- XawTextScanDirection dir,
-#endif
- XawTextBlock *text)
-{
- TextWidget ctx = (TextWidget)w;
-
- return (SrcSearch(ctx->text.source, ctx->text.insertPos, dir, text));
-}
-
-TextClassRec textClassRec = {
- /* core */
- {
- (WidgetClass)&simpleClassRec, /* superclass */
- "Text", /* class_name */
- sizeof(TextRec), /* widget_size */
- XawTextClassInitialize, /* class_initialize */
- NULL, /* class_part_init */
- False, /* class_inited */
- XawTextInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawTextRealize, /* realize */
- _XawTextActionsTable, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resource */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- XtExposeGraphicsExpose | /* compress_exposure */
- XtExposeNoExpose,
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawTextDestroy, /* destroy */
- XawTextResize, /* resize */
- XawTextExpose, /* expose */
- XawTextSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- XawTextGetValuesHook, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- _XawDefaultTextTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XawTextChangeSensitive, /* change_sensitive */
- },
- /* text */
- {
- NULL, /* extension */
- }
-};
-
-WidgetClass textWidgetClass = (WidgetClass)&textClassRec;
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * Copyright (c) 1998 by The XFree86 Project, 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#include <X11/Xatom.h>
+#include <X11/Xfuncs.h>
+#include <X11/Xutil.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xmu/Xmu.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/MultiSinkP.h>
+#include <X11/Xaw/TextP.h>
+#include <X11/Xaw/TextSrcP.h>
+#include <X11/Xaw/TextSinkP.h>
+#include <X11/Xaw/Scrollbar.h>
+#include <X11/Xaw/XawImP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+#include "XawI18n.h"
+
+#ifndef MAX_LEN_CT
+#define MAX_LEN_CT 6 /* for sequence: ESC $ ( A \xx \xx */
+#endif
+
+unsigned long FMT8BIT = 0L;
+unsigned long XawFmt8Bit = 0L;
+unsigned long XawFmtWide = 0L;
+
+#define SinkClearToBG _XawTextSinkClearToBackground
+
+#define SrcScan XawTextSourceScan
+#define SrcRead XawTextSourceRead
+#define SrcReplace XawTextSourceReplace
+#define SrcSearch XawTextSourceSearch
+#define SrcCvtSel XawTextSourceConvertSelection
+#define SrcSetSelection XawTextSourceSetSelection
+
+#define MULTI_CLICK_TIME 500L
+
+#define SRC_CHANGE_NONE 0
+#define SRC_CHANGE_AFTER 1
+#define SRC_CHANGE_BEFORE 2
+#define SRC_CHANGE_OVERLAP 3
+
+#define Superclass (&simpleClassRec)
+
+/*
+ * Compute a the maximum length of a cut buffer that we can pass at any
+ * time. The 64 allows for the overhead of the Change Property request.
+ */
+#define MAX_CUT_LEN(dpy) (XMaxRequestSize(dpy) - 64)
+
+#define ClearWindow(ctx) \
+ _XawTextNeedsUpdating((ctx), \
+ (ctx)->text.lt.top, \
+ (ctx)->text.lt.info[ctx->text.lt.lines].position)
+
+/*
+ * Class Methods
+ */
+static void XawTextClassInitialize(void);
+static void XawTextInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawTextRealize(Widget, XtValueMask*, XSetWindowAttributes*);
+static void XawTextDestroy(Widget);
+static void XawTextResize(Widget);
+static void XawTextExpose(Widget, XEvent*, Region);
+static Boolean XawTextSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+static void XawTextGetValuesHook(Widget, ArgList, Cardinal*);
+static Bool XawTextChangeSensitive(Widget);
+
+/*
+ * Prototypes
+ */
+static XawTextPosition _BuildLineTable(TextWidget, XawTextPosition, int);
+static void _CreateCutBuffers(Display*);
+static Boolean TextConvertSelection(Widget, Atom*, Atom*, Atom*, XtPointer*,
+ unsigned long*, int*);
+static int CountLines(TextWidget, XawTextPosition, XawTextPosition);
+static void CreateHScrollBar(TextWidget);
+static void CreateVScrollBar(TextWidget);
+static void CvtStringToScrollMode(XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr);
+static Boolean CvtScrollModeToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static void CvtStringToWrapMode(XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr);
+static Boolean CvtWrapModeToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean CvtStringToJustifyMode(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean CvtJustifyModeToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static void DestroyHScrollBar(TextWidget);
+static void DestroyVScrollBar(TextWidget);
+#ifndef OLDXAW
+static void DisplayText(Widget, XawTextPosition, XawTextPosition);
+#endif
+static void OldDisplayText(Widget, XawTextPosition, XawTextPosition);
+static void DisplayTextWindow(Widget);
+static void DoCopyArea(TextWidget, int, int, unsigned int, unsigned int,
+ int, int);
+static void DoSelection(TextWidget, XawTextPosition, Time, Bool);
+static void ExtendSelection(TextWidget, XawTextPosition, Bool);
+static XawTextPosition FindGoodPosition(TextWidget, XawTextPosition);
+static void FlushUpdate(TextWidget);
+static int GetCutBufferNumber(Atom);
+static int GetMaxTextWidth(TextWidget);
+static unsigned int GetWidestLine(TextWidget);
+static void HScroll(Widget, XtPointer, XtPointer);
+static void HJump(Widget, XtPointer, XtPointer);
+static void InsertCursor(Widget, XawTextInsertState);
+static Bool LineAndXYForPosition(TextWidget, XawTextPosition, int*,
+ int*, int*);
+static int LineForPosition(TextWidget, XawTextPosition);
+static void TextLoseSelection(Widget, Atom*);
+static Bool MatchSelection(Atom, XawTextSelection*);
+static void ModifySelection(TextWidget, XawTextPosition, XawTextPosition);
+static XawTextPosition PositionForXY(TextWidget, int, int);
+static void PositionHScrollBar(TextWidget);
+static void PositionVScrollBar(TextWidget);
+#ifndef OLDXAW
+static int ResolveColumnNumber(TextWidget);
+static int ResolveLineNumber(TextWidget);
+#endif
+static void _SetSelection(TextWidget, XawTextPosition, XawTextPosition,
+ Atom*, Cardinal);
+static void TextSinkResize(Widget);
+static void UpdateTextInRectangle(TextWidget, XRectangle*);
+static void UpdateTextInLine(TextWidget, int, int, int);
+static void VScroll(Widget, XtPointer, XtPointer);
+static void VJump(Widget, XtPointer, XtPointer);
+
+/*
+ * External
+ */
+void _XawTextAlterSelection(TextWidget,
+ XawTextSelectionMode, XawTextSelectionAction,
+ String*, Cardinal*);
+void _XawTextCheckResize(TextWidget);
+void _XawTextClearAndCenterDisplay(TextWidget);
+void _XawTextExecuteUpdate(TextWidget);
+char *_XawTextGetText(TextWidget, XawTextPosition, XawTextPosition);
+void _XawTextPrepareToUpdate(TextWidget);
+int _XawTextReplace(TextWidget, XawTextPosition, XawTextPosition,
+ XawTextBlock*);
+Atom *_XawTextSelectionList(TextWidget, String*, Cardinal);
+void _XawTextSetScrollBars(TextWidget);
+void _XawTextSetSelection(TextWidget, XawTextPosition, XawTextPosition,
+ String*, Cardinal);
+void _XawTextVScroll(TextWidget, int);
+void XawTextScroll(TextWidget, int, int);
+void _XawTextSetSource(Widget, Widget, XawTextPosition, XawTextPosition);
+#ifndef OLDXAW
+void _XawTextSetLineAndColumnNumber(TextWidget, Bool);
+#endif
+void _XawTextSourceChanged(Widget, XawTextPosition, XawTextPosition,
+ XawTextBlock*, int);
+
+/* Not used by other modules, but were extern on previous versions
+ * of the library
+ */
+void _XawTextShowPosition(TextWidget);
+
+/*
+ * From TextAction.c
+ */
+extern void _XawTextZapSelection(TextWidget, XEvent*, Bool);
+
+/*
+ * From TextSrc.c
+ */
+void _XawSourceAddText(Widget, Widget);
+void _XawSourceRemoveText(Widget, Widget, Bool);
+Bool _XawTextSourceNewLineAtEOF(Widget);
+
+/*
+ * From TextSink.c
+ */
+void _XawTextSinkClearToBackground(Widget, int, int, unsigned, unsigned);
+void _XawTextSinkDisplayText(Widget, int, int, XawTextPosition, XawTextPosition,
+ Bool);
+
+/****************************************************************
+ *
+ * Full class record constant
+ *
+ ****************************************************************/
+/*
+ * From TextTr.c
+ */
+static XawTextSelectType defaultSelectTypes[] = {
+ XawselectPosition, XawselectAlphaNumeric, XawselectWord, XawselectLine,
+ XawselectParagraph, XawselectAll, XawselectNull,
+};
+
+static XPointer defaultSelectTypesPtr = (XPointer)defaultSelectTypes;
+static Dimension defWidth = 100;
+static Dimension defHeight = DEFAULT_TEXT_HEIGHT;
+
+#define offset(field) XtOffsetOf(TextRec, field)
+static XtResource resources[] = {
+ {
+ XtNwidth,
+ XtCWidth,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(core.width),
+ XtRDimension,
+ (XtPointer)&defWidth
+ },
+ {
+ XtNcursor,
+ XtCCursor,
+ XtRCursor,
+ sizeof(Cursor),
+ offset(simple.cursor),
+ XtRString,
+ "xterm"
+ },
+ {
+ XtNheight,
+ XtCHeight,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(core.height),
+ XtRDimension,
+ (XtPointer)&defHeight
+ },
+ {
+ XtNdisplayPosition,
+ XtCTextPosition,
+ XtRInt,
+ sizeof(XawTextPosition),
+ offset(text.lt.top),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNinsertPosition,
+ XtCTextPosition,
+ XtRInt,
+ sizeof(XawTextPosition),
+ offset(text.insertPos),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNleftMargin,
+ XtCMargin,
+ XtRPosition,
+ sizeof(Position),
+ offset(text.r_margin.left),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNrightMargin,
+ XtCMargin,
+ XtRPosition,
+ sizeof(Position),
+ offset(text.r_margin.right),
+ XtRImmediate,
+ (XtPointer)4
+ },
+ {
+ XtNtopMargin,
+ XtCMargin,
+ XtRPosition,
+ sizeof(Position),
+ offset(text.r_margin.top),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNbottomMargin,
+ XtCMargin,
+ XtRPosition,
+ sizeof(Position),
+ offset(text.r_margin.bottom),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNselectTypes,
+ XtCSelectTypes,
+ XtRPointer,
+ sizeof(XawTextSelectType*),
+ offset(text.sarray),
+ XtRPointer,
+ (XtPointer)&defaultSelectTypesPtr
+ },
+ {
+ XtNtextSource,
+ XtCTextSource,
+ XtRWidget,
+ sizeof(Widget),
+ offset(text.source),
+ XtRImmediate,
+ NULL
+ },
+ {
+ XtNtextSink,
+ XtCTextSink,
+ XtRWidget,
+ sizeof(Widget),
+ offset(text.sink),
+ XtRImmediate,
+ NULL
+ },
+ {
+ XtNdisplayCaret,
+ XtCOutput,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(text.display_caret),
+ XtRImmediate,
+ (XtPointer)True
+ },
+ {
+ XtNscrollVertical,
+ XtCScroll,
+ XtRScrollMode,
+ sizeof(XawTextScrollMode),
+ offset(text.scroll_vert),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNscrollHorizontal,
+ XtCScroll,
+ XtRScrollMode,
+ sizeof(XawTextScrollMode),
+ offset(text.scroll_horiz),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNwrap,
+ XtCWrap,
+ XtRWrapMode,
+ sizeof(XawTextWrapMode),
+ offset(text.wrap),
+ XtRImmediate,
+ (XtPointer)XawtextWrapNever
+ },
+ {
+ XtNautoFill,
+ XtCAutoFill,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(text.auto_fill),
+ XtRImmediate,
+ (XtPointer)False
+ },
+#ifndef OLDXAW
+ {
+ XtNpositionCallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(text.position_callbacks),
+ XtRCallback,
+ NULL
+ },
+ {
+ XtNleftColumn,
+ XtCColumn,
+ XtRShort,
+ sizeof(short),
+ offset(text.left_column),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNrightColumn,
+ XtCColumn,
+ XtRShort,
+ sizeof(short),
+ offset(text.right_column),
+ XtRImmediate,
+ (XtPointer)0
+ },
+ {
+ XtNjustifyMode,
+ XtCJustifyMode,
+ XtRJustifyMode,
+ sizeof(XawTextJustifyMode),
+ offset(text.justify),
+ XtRImmediate,
+ (XtPointer)XawjustifyLeft
+ },
+#endif /* OLDXAW */
+};
+#undef offset
+
+#define done(address, type) \
+ { toVal->size = sizeof(type); toVal->addr = (XPointer)address; }
+
+static XrmQuark QWrapNever, QWrapLine, QWrapWord;
+#ifndef notdef
+static XrmQuark QScrollNever, QScrollWhenNeeded, QScrollAlways;
+#endif
+static XrmQuark QJustifyLeft, QJustifyRight, QJustifyCenter, QJustifyFull;
+
+/*ARGSUSED*/
+static void
+CvtStringToScrollMode(XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal)
+{
+ static XawTextScrollMode scrollMode = XawtextScrollNever;
+ XrmQuark q;
+ char name[32];
+
+ XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
+ q = XrmStringToQuark(name);
+
+ if (q == QScrollNever || q == QScrollWhenNeeded)
+ scrollMode = XawtextScrollNever;
+ else if (q == QScrollAlways)
+ scrollMode = XawtextScrollAlways;
+ else if (strcmp(name, "true") == 0 || strcmp(name, "1") == 0)
+ scrollMode = XawtextScrollAlways;
+ else if (strcmp(name, "false") == 0 || strcmp(name, "0") == 0)
+ scrollMode = XawtextScrollNever;
+ else
+ XtStringConversionWarning((char *)fromVal->addr, XtRScrollMode);
+
+ done(&scrollMode, XawTextScrollMode);
+}
+
+/*ARGSUSED*/
+static Boolean
+CvtScrollModeToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
+{
+ static char *buffer;
+ Cardinal size;
+
+ switch (*(XawTextScrollMode *)fromVal->addr) {
+ case XawtextScrollNever:
+ case XawtextScrollWhenNeeded:
+ buffer = XtEtextScrollNever;
+ break;
+ case XawtextScrollAlways:
+ buffer = XtEtextScrollAlways;
+ break;
+ default:
+ XawTypeToStringWarning(dpy, XtRScrollMode);
+ toVal->addr = NULL;
+ toVal->size = 0;
+ return (False);
+ }
+ size = strlen(buffer) + 1;
+ if (toVal->addr != NULL) {
+ if (toVal->size < size) {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = (XPointer)buffer;
+ toVal->size = sizeof(String);
+
+ return (True);
+}
+
+/*ARGSUSED*/
+static void
+CvtStringToWrapMode(XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal)
+{
+ static XawTextWrapMode wrapMode = XawtextWrapNever;
+ XrmQuark q;
+ char lowerName[6];
+
+ XmuNCopyISOLatin1Lowered(lowerName, (char *)fromVal->addr,
+ sizeof(lowerName));
+ q = XrmStringToQuark(lowerName);
+
+ if (q == QWrapNever)
+ wrapMode = XawtextWrapNever;
+ else if (q == QWrapLine)
+ wrapMode = XawtextWrapLine;
+ else if (q == QWrapWord)
+ wrapMode = XawtextWrapWord;
+ else
+ XtStringConversionWarning((char *)fromVal->addr, XtRWrapMode);
+
+ done(&wrapMode, XawTextWrapMode);
+}
+
+/*ARGSUSED*/
+static Boolean
+CvtWrapModeToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
+{
+ static char *buffer;
+ Cardinal size;
+
+ switch (*(XawTextWrapMode *)fromVal->addr) {
+ case XawtextWrapNever:
+ buffer = XtEtextWrapNever;
+ break;
+ case XawtextWrapLine:
+ buffer = XtEtextWrapLine;
+ break;
+ case XawtextWrapWord:
+ buffer = XtEtextWrapWord;
+ break;
+ default:
+ XawTypeToStringWarning(dpy, XtRWrapMode);
+ toVal->addr = NULL;
+ toVal->size = 0;
+ return (False);
+ }
+ size = strlen(buffer) + 1;
+ if (toVal->addr != NULL) {
+ if (toVal->size < size) {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = (XPointer)buffer;
+ toVal->size = sizeof(String);
+
+ return (True);
+}
+
+/*ARGSUSED*/
+static Boolean
+CvtStringToJustifyMode(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
+{
+ XawTextJustifyMode justify;
+ XrmQuark q;
+ char lowerName[8];
+
+ XmuNCopyISOLatin1Lowered(lowerName, (char *)fromVal->addr,
+ sizeof(lowerName));
+ q = XrmStringToQuark(lowerName);
+
+ if (q == QJustifyLeft)
+ justify = XawjustifyLeft;
+ else if (q == QJustifyRight)
+ justify = XawjustifyRight;
+ else if (q == QJustifyCenter)
+ justify = XawjustifyCenter;
+ else if(q == QJustifyFull)
+ justify = XawjustifyFull;
+ else {
+ XtStringConversionWarning((char *)fromVal->addr, XtRJustifyMode);
+ return (False);
+ }
+
+ toVal->size = sizeof(XawTextJustifyMode);
+ *(XawTextJustifyMode *)(toVal->addr) = justify;
+
+ return (True);
+}
+
+
+/*ARGSUSED*/
+static Boolean
+CvtJustifyModeToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
+{
+ static char *buffer;
+ Cardinal size;
+
+ switch (*(XawTextJustifyMode *)fromVal->addr) {
+ case XawjustifyLeft:
+ buffer = XtEtextJustifyLeft;
+ break;
+ case XawjustifyRight:
+ buffer = XtEtextJustifyRight;
+ break;
+ case XawjustifyCenter:
+ buffer = XtEtextJustifyCenter;
+ break;
+ case XawjustifyFull:
+ buffer = XtEtextJustifyFull;
+ break;
+ default:
+ XawTypeToStringWarning(dpy, XtRJustifyMode);
+ toVal->addr = NULL;
+ toVal->size = 0;
+ return (False);
+ }
+ size = strlen(buffer) + 1;
+ if (toVal->addr != NULL) {
+ if (toVal->size < size) {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = (XPointer)buffer;
+ toVal->size = sizeof(String);
+
+ return (True);
+}
+
+#undef done
+
+static void
+XawTextClassInitialize(void)
+{
+ if (!XawFmt8Bit)
+ FMT8BIT = XawFmt8Bit = XrmPermStringToQuark("FMT8BIT");
+ if (!XawFmtWide)
+ XawFmtWide = XrmPermStringToQuark("FMTWIDE");
+
+ XawInitializeWidgetSet();
+
+ textClassRec.core_class.num_actions = _XawTextActionsTableCount;
+
+ QWrapNever = XrmPermStringToQuark(XtEtextWrapNever);
+ QWrapLine = XrmPermStringToQuark(XtEtextWrapLine);
+ QWrapWord = XrmPermStringToQuark(XtEtextWrapWord);
+ XtAddConverter(XtRString, XtRWrapMode, CvtStringToWrapMode, NULL, 0);
+ XtSetTypeConverter(XtRWrapMode, XtRString, CvtWrapModeToString,
+ NULL, 0, XtCacheNone, NULL);
+ QScrollNever = XrmPermStringToQuark(XtEtextScrollNever);
+ QScrollWhenNeeded = XrmPermStringToQuark(XtEtextScrollWhenNeeded);
+ QScrollAlways = XrmPermStringToQuark(XtEtextScrollAlways);
+ XtAddConverter(XtRString, XtRScrollMode, CvtStringToScrollMode,
+ NULL, 0);
+ XtSetTypeConverter(XtRScrollMode, XtRString, CvtScrollModeToString,
+ NULL, 0, XtCacheNone, NULL);
+ QJustifyLeft = XrmPermStringToQuark(XtEtextJustifyLeft);
+ QJustifyRight = XrmPermStringToQuark(XtEtextJustifyRight);
+ QJustifyCenter = XrmPermStringToQuark(XtEtextJustifyCenter);
+ QJustifyFull = XrmPermStringToQuark(XtEtextJustifyFull);
+ XtSetTypeConverter(XtRString, XtRJustifyMode, CvtStringToJustifyMode,
+ NULL, 0, XtCacheNone, NULL);
+ XtSetTypeConverter(XtRJustifyMode, XtRString, CvtJustifyModeToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+/*
+ * Function:
+ * PositionHScrollBar
+ *
+ * Parameters:
+ * ctx - text widget
+ *
+ * Description:
+ * Positions the Horizontal scrollbar.
+ */
+static void
+PositionHScrollBar(TextWidget ctx)
+{
+ Widget hbar = ctx->text.hbar, vbar = ctx->text.vbar;
+ Position x, y;
+ Dimension width, height;
+
+ if (ctx->text.hbar == NULL)
+ return;
+
+ if (vbar != NULL)
+ x = XtWidth(vbar);
+ else
+ x = -XtBorderWidth(hbar);
+ y = XtHeight(ctx) - XtHeight(hbar) - XtBorderWidth(hbar);
+ if (vbar != NULL) {
+ width = XtWidth(ctx) - XtWidth(vbar) - XtBorderWidth(vbar);
+ if (width > XtWidth(ctx))
+ width = XtWidth(ctx);
+ }
+ else
+ width = XtWidth(ctx);
+ height = XtHeight(hbar);
+
+ XtConfigureWidget(hbar, x, y, width, height, XtBorderWidth(hbar));
+}
+
+/*
+ * Function:
+ * PositionVScrollBar
+ *
+ * Parameters:
+ * ctx - text widget
+ *
+ * Description:
+ * Positions the Vertical scrollbar.
+ */
+static void
+PositionVScrollBar(TextWidget ctx)
+{
+ Widget vbar = ctx->text.vbar;
+ Position x, y;
+ Dimension width, height;
+
+ if (vbar == NULL)
+ return;
+
+ x = y = -XtBorderWidth(vbar);
+ height = XtHeight(ctx);
+ width = XtWidth(vbar);
+
+ XtConfigureWidget(vbar, x, y, width, height, XtBorderWidth(vbar));
+}
+
+static void
+CreateVScrollBar(TextWidget ctx)
+{
+ Widget vbar;
+
+ if (ctx->text.vbar != NULL)
+ return;
+
+ ctx->text.vbar = vbar =
+ XtCreateWidget("vScrollbar", scrollbarWidgetClass, (Widget)ctx, NULL, 0);
+ XtAddCallback(vbar, XtNscrollProc, VScroll, (XtPointer)ctx);
+ XtAddCallback(vbar, XtNjumpProc, VJump, (XtPointer)ctx);
+
+ ctx->text.r_margin.left += XtWidth(vbar) + XtBorderWidth(vbar);
+ ctx->text.left_margin = ctx->text.margin.left = ctx->text.r_margin.left;
+
+ PositionVScrollBar(ctx);
+ PositionHScrollBar(ctx);
+ TextSinkResize(ctx->text.sink);
+
+ if (XtIsRealized((Widget)ctx)) {
+ XtRealizeWidget(vbar);
+ XtMapWidget(vbar);
+ }
+ XtSetKeyboardFocus(vbar, (Widget)ctx);
+}
+
+/*
+ * Function:
+ * DestroyVScrollBar
+ *
+ * Parameters:
+ * ctx - parent text widget
+ *
+ * Description:
+ * Removes vertical ScrollBar.
+ */
+static void
+DestroyVScrollBar(TextWidget ctx)
+{
+ Widget vbar = ctx->text.vbar;
+
+ if (vbar == NULL)
+ return;
+
+ ctx->text.r_margin.left -= XtWidth(vbar) + XtBorderWidth(vbar);
+ ctx->text.left_margin = ctx->text.margin.left = ctx->text.r_margin.left;
+
+ XtDestroyWidget(vbar);
+ ctx->text.vbar = NULL;
+ if (!ctx->core.being_destroyed) {
+ PositionHScrollBar(ctx);
+ TextSinkResize(ctx->text.sink);
+ }
+}
+
+static void
+CreateHScrollBar(TextWidget ctx)
+{
+ Arg args[1];
+ Widget hbar;
+ int bottom;
+
+ if (ctx->text.hbar != NULL)
+ return;
+
+ XtSetArg(args[0], XtNorientation, XtorientHorizontal);
+ ctx->text.hbar = hbar =
+ XtCreateWidget("hScrollbar", scrollbarWidgetClass, (Widget)ctx, args, 1);
+ XtAddCallback(hbar, XtNscrollProc, HScroll, (XtPointer)ctx);
+ XtAddCallback(hbar, XtNjumpProc, HJump, (XtPointer)ctx);
+
+ bottom = ctx->text.r_margin.bottom + XtHeight(hbar) + XtBorderWidth(hbar);
+
+ ctx->text.margin.bottom = ctx->text.r_margin.bottom = bottom;
+
+ PositionHScrollBar(ctx);
+ TextSinkResize(ctx->text.sink);
+
+ if (XtIsRealized((Widget)ctx)) {
+ XtRealizeWidget(hbar);
+ XtMapWidget(hbar);
+ }
+ XtSetKeyboardFocus(hbar, (Widget)ctx);
+}
+
+/*
+ * Function:
+ * DestroyHScrollBar
+ *
+ * Parameters:
+ * ctx - parent text widget
+ *
+ * Description:
+ * Removes horizontal ScrollBar.
+ */
+static void
+DestroyHScrollBar(TextWidget ctx)
+{
+ Widget hbar = ctx->text.hbar;
+
+ if (hbar == NULL)
+ return;
+
+ ctx->text.r_margin.bottom -= XtHeight(hbar) + XtBorderWidth(hbar);
+ ctx->text.margin.bottom = ctx->text.r_margin.bottom;
+
+ XtDestroyWidget(hbar);
+ ctx->text.hbar = NULL;
+ if (!ctx->core.being_destroyed)
+ TextSinkResize(ctx->text.sink);
+}
+
+/*ARGSUSED*/
+static void
+XawTextInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ TextWidget ctx = (TextWidget)cnew;
+
+ ctx->text.lt.lines = 0;
+ ctx->text.lt.info = (XawTextLineTableEntry *)
+ XtCalloc(1, sizeof(XawTextLineTableEntry));
+#ifndef OLDXAW
+ ctx->text.lt.base_line = 1;
+#endif
+ (void)bzero(&ctx->text.origSel, sizeof(XawTextSelection));
+ (void)bzero(&ctx->text.s, sizeof(XawTextSelection));
+ ctx->text.s.type = XawselectPosition;
+ ctx->text.salt = NULL;
+ ctx->text.hbar = ctx->text.vbar = NULL;
+ ctx->text.lasttime = 0;
+ ctx->text.time = 0;
+ ctx->text.showposition = True;
+ ctx->text.lastPos = ctx->text.source != NULL ?
+ XawTextGetLastPosition(ctx) : 0;
+ ctx->text.file_insert = NULL;
+ ctx->text.search = NULL;
+ ctx->text.update = XmuNewScanline(0, 0, 0);
+ ctx->text.gc = XtGetGC(cnew, 0, 0);
+ ctx->text.hasfocus = False;
+ ctx->text.margin = ctx->text.r_margin; /* Strucure copy */
+ ctx->text.left_margin = ctx->text.r_margin.left;
+ ctx->text.update_disabled = False;
+ ctx->text.clear_to_eol = True;
+ ctx->text.old_insert = -1;
+ ctx->text.mult = 1;
+ ctx->text.salt2 = NULL;
+ ctx->text.from_left = -1;
+
+#ifndef OLDXAW
+ ctx->text.numeric = False;
+ ctx->text.selection_state = False;
+ ctx->text.kill_ring = 0;
+
+ ctx->text.line_number = -1;
+ ctx->text.column_number = -1;
+ ctx->text.source_changed = SRC_CHANGE_NONE;
+
+ ctx->text.kill_ring_ptr = NULL;
+ ctx->text.overwrite = False;
+#endif
+
+ if (XtHeight(ctx) == DEFAULT_TEXT_HEIGHT) {
+ XtHeight(ctx) = VMargins(ctx);
+ if (ctx->text.sink != NULL)
+ XtHeight(ctx) += XawTextSinkMaxHeight(ctx->text.sink, 1);
+ }
+
+ if (ctx->text.scroll_vert == XawtextScrollAlways)
+ CreateVScrollBar(ctx);
+ if (ctx->text.scroll_horiz == XawtextScrollAlways)
+ CreateHScrollBar(ctx);
+
+#ifndef OLDXAW
+ if (ctx->text.left_column < 0)
+ ctx->text.left_column = 0;
+ if (ctx->text.right_column < 0)
+ ctx->text.right_column = 0;
+#endif
+}
+
+static void
+XawTextRealize(Widget w, XtValueMask *mask, XSetWindowAttributes *attr)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ (*textClassRec.core_class.superclass->core_class.realize)(w, mask, attr);
+
+ if (ctx->text.hbar != NULL) {
+ XtRealizeWidget(ctx->text.hbar);
+ XtMapWidget(ctx->text.hbar);
+ }
+
+ if (ctx->text.vbar != NULL) {
+ XtRealizeWidget(ctx->text.vbar);
+ XtMapWidget(ctx->text.vbar);
+ }
+
+ _XawTextBuildLineTable(ctx, ctx->text.lt.top, True);
+
+#ifndef OLDXAW
+ _XawTextSetLineAndColumnNumber(ctx, True);
+#endif
+}
+
+/* Utility routines for support of Text */
+static void
+_CreateCutBuffers(Display *d)
+{
+ static struct _DisplayRec {
+ struct _DisplayRec *next;
+ Display *dpy;
+ } *dpy_list = NULL;
+ struct _DisplayRec *dpy_ptr;
+
+ for (dpy_ptr = dpy_list; dpy_ptr != NULL; dpy_ptr = dpy_ptr->next)
+ if (dpy_ptr->dpy == d)
+ return;
+
+ dpy_ptr = XtNew(struct _DisplayRec);
+ dpy_ptr->next = dpy_list;
+ dpy_ptr->dpy = d;
+ dpy_list = dpy_ptr;
+
+#define Create(buffer) \
+ XChangeProperty(d, RootWindow(d, 0), buffer, XA_STRING, 8, \
+ PropModeAppend, NULL, 0);
+
+ Create(XA_CUT_BUFFER0);
+ Create(XA_CUT_BUFFER1);
+ Create(XA_CUT_BUFFER2);
+ Create(XA_CUT_BUFFER3);
+ Create(XA_CUT_BUFFER4);
+ Create(XA_CUT_BUFFER5);
+ Create(XA_CUT_BUFFER6);
+ Create(XA_CUT_BUFFER7);
+
+#undef Create
+}
+
+/*
+ * Procedure to manage insert cursor visibility for editable text. It uses
+ * the value of ctx->insertPos and an implicit argument. In the event that
+ * position is immediately preceded by an eol graphic, then the insert cursor
+ * is displayed at the beginning of the next line.
+ */
+static void
+InsertCursor(Widget w, XawTextInsertState state)
+{
+ TextWidget ctx = (TextWidget)w;
+ int x, y;
+ int line;
+
+ if (ctx->text.lt.lines < 1)
+ return;
+
+ if (ctx->text.display_caret &&
+ LineAndXYForPosition(ctx, ctx->text.insertPos, &line, &x, &y)) {
+ if (line < ctx->text.lt.lines)
+ y += (ctx->text.lt.info[line + 1].y - ctx->text.lt.info[line].y) + 1;
+ else
+ y += (ctx->text.lt.info[line].y - ctx->text.lt.info[line - 1].y) + 1;
+
+ XawTextSinkInsertCursor(ctx->text.sink, x, y, state);
+ }
+
+ /* Keep Input Method up to speed */
+ if (ctx->simple.international) {
+ Arg list[1];
+
+ XtSetArg(list[0], XtNinsertPosition, ctx->text.insertPos);
+ _XawImSetValues(w, list, 1);
+ }
+}
+
+/*
+ * Procedure to register a span of text that is no longer valid on the display
+ * It is used to avoid a number of small, and potentially overlapping, screen
+ * updates.
+*/
+void
+_XawTextNeedsUpdating(TextWidget ctx,
+ XawTextPosition left, XawTextPosition right)
+{
+ XmuSegment segment;
+
+ if (left >= right)
+ return;
+
+ segment.x1 = (int)left;
+ segment.x2 = (int)right;
+ (void)XmuScanlineOrSegment(ctx->text.update, &segment);
+}
+
+/*
+ * Procedure to read a span of text in Ascii form. This is purely a hack and
+ * we probably need to add a function to sources to provide this functionality.
+ * [note: this is really a private procedure but is used in multiple modules].
+ */
+char *
+_XawTextGetText(TextWidget ctx, XawTextPosition left, XawTextPosition right)
+{
+ char *result, *tempResult;
+ XawTextBlock text;
+ int bytes;
+
+ if (XawTextFormat(ctx, XawFmt8Bit))
+ bytes = sizeof(unsigned char);
+ else if (XawTextFormat(ctx, XawFmtWide))
+ bytes = sizeof(wchar_t);
+ else /* if there is another fomat, add here */
+ bytes = 1;
+
+ /* leave space for ZERO */
+ tempResult = result = XtMalloc((unsigned)(right - left + ONE) * bytes);
+
+ while (left < right) {
+ left = SrcRead(ctx->text.source, left, &text, (int)(right - left));
+ if (!text.length)
+ break;
+ memmove(tempResult, text.ptr, (unsigned)(text.length * bytes));
+ tempResult += text.length * bytes;
+ }
+
+ if (bytes == sizeof(wchar_t))
+ *((wchar_t*)tempResult) = (wchar_t)0;
+ else
+ *tempResult = '\0';
+
+ return (result);
+}
+
+/* Like _XawTextGetText, but enforces ICCCM STRING type encoding. This
+ * routine is currently used to put just the ASCII chars in the selection
+ * into a cut buffer.
+ */
+char *
+_XawTextGetSTRING(TextWidget ctx, XawTextPosition left, XawTextPosition right)
+{
+ unsigned char *s;
+ unsigned char c;
+ long i, j, n;
+ wchar_t *ws, wc;
+
+ /* allow ESC in accordance with ICCCM */
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ MultiSinkObject sink = (MultiSinkObject)ctx->text.sink;
+ ws = (wchar_t *)_XawTextGetText(ctx, left, right);
+ n = wcslen(ws);
+ for (j = 0, i = 0; j < n; j++) {
+ wc = ws[j];
+ if (XwcTextEscapement (sink->multi_sink.fontset, &wc, 1)
+ || (wc == _Xaw_atowc(XawTAB)) || (wc == _Xaw_atowc(XawLF))
+ || (wc == _Xaw_atowc(XawESC)))
+ ws[i++] = wc;
+ }
+ ws[i] = (wchar_t)0;
+ return ((char *)ws);
+ }
+ else {
+ s = (unsigned char *)_XawTextGetText(ctx, left, right);
+ /* only HT and NL control chars are allowed, strip out others */
+ n = strlen((char *)s);
+ i = 0;
+ for (j = 0; j < n; j++) {
+ c = s[j];
+ if (((c >= 0x20) && c <= 0x7f)
+ ||(c >= 0xa0) || (c == XawTAB) || (c == XawLF)
+ || (c == XawESC)) {
+ s[i] = c;
+ i++;
+ }
+ }
+ s[i] = 0;
+
+ return ((char *)s);
+ }
+}
+
+/*
+ * This routine maps an x and y position in a window that is displaying text
+ * into the corresponding position in the source.
+ */
+static XawTextPosition
+PositionForXY(TextWidget ctx, int x, int y)
+{
+ int fromx, line, width, height;
+ XawTextPosition position;
+
+ if (ctx->text.lt.lines == 0)
+ return (0);
+
+ for (line = 0; line < ctx->text.lt.lines - 1; line++) {
+ if (y <= ctx->text.lt.info[line + 1].y)
+ break;
+ }
+ position = ctx->text.lt.info[line].position;
+ if (position >= ctx->text.lastPos)
+ return (ctx->text.lastPos);
+ fromx = ctx->text.left_margin;
+ XawTextSinkFindPosition(ctx->text.sink, position, fromx, x - fromx,
+ False, &position, &width, &height);
+
+ if (position > ctx->text.lastPos)
+ return (ctx->text.lastPos);
+
+ if (position >= ctx->text.lt.info[line + 1].position)
+ position = SrcScan(ctx->text.source, ctx->text.lt.info[line + 1].position,
+ XawstPositions, XawsdLeft, 1, True);
+
+ return (position);
+}
+
+/*
+ * This routine maps a source position in to the corresponding line number
+ * of the text that is displayed in the window.
+ */
+static int
+LineForPosition(TextWidget ctx, XawTextPosition position)
+{
+ int line;
+
+ for (line = 0; line < ctx->text.lt.lines; line++)
+ if (position < ctx->text.lt.info[line + 1].position)
+ break;
+
+ return (line);
+}
+
+/*
+ * This routine maps a source position into the corresponding line number
+ * and the x, y coordinates of the text that is displayed in the window.
+ */
+static Bool
+LineAndXYForPosition(TextWidget ctx, XawTextPosition pos,
+ int *line, int *x, int *y)
+{
+ XawTextPosition linePos, endPos;
+ Boolean visible;
+ int realW, realH;
+
+ *line = 0;
+ *x = ctx->text.left_margin;
+ *y = ctx->text.margin.top + 1;
+ if ((visible = IsPositionVisible(ctx, pos)) != False) {
+ *line = LineForPosition(ctx, pos);
+ *y = ctx->text.lt.info[*line].y;
+ linePos = ctx->text.lt.info[*line].position;
+ XawTextSinkFindDistance(ctx->text.sink, linePos,
+ *x, pos, &realW, &endPos, &realH);
+ *x += realW;
+ }
+
+ return (visible);
+}
+
+/*
+ * This routine builds a line table. It does this by starting at the
+ * specified position and measuring text to determine the staring position
+ * of each line to be displayed. It also determines and saves in the
+ * linetable all the required metrics for displaying a given line (e.g.
+ * x offset, y offset, line length, etc.).
+ */
+void
+_XawTextBuildLineTable(TextWidget ctx, XawTextPosition position,
+ _XtBoolean force_rebuild)
+{
+ Dimension height = 0;
+ int lines = 0;
+ Cardinal size;
+
+ if ((int)XtHeight(ctx) > VMargins(ctx)) {
+ height = XtHeight(ctx) - VMargins(ctx);
+ lines = XawTextSinkMaxLines(ctx->text.sink, height);
+ }
+ size = sizeof(XawTextLineTableEntry) * (lines + 1);
+
+ if (lines != ctx->text.lt.lines || ctx->text.lt.info == NULL) {
+ ctx->text.lt.info = (XawTextLineTableEntry *)
+ XtRealloc((char *)ctx->text.lt.info, size);
+ ctx->text.lt.lines = lines;
+ force_rebuild = True;
+ }
+
+ if (force_rebuild) {
+ (void)bzero((char *)ctx->text.lt.info, size);
+ /* force a text update in the first text line if it is visible */
+ ctx->text.lt.info[0].position = (XawTextPosition)-1;
+ }
+ if (position != ctx->text.lt.info[0].position) {
+ (void)_BuildLineTable(ctx, position, 0);
+ ctx->text.clear_to_eol = True;
+ }
+}
+
+/*
+ * We may need to resize the line table here, since there maybe lines with
+ * different fonts (that can be shorter or taller than the default one)
+ */
+static XawTextPosition
+_BuildLineTable(TextWidget ctx, XawTextPosition position, int line)
+{
+ XawTextLineTableEntry *lt = ctx->text.lt.info + line;
+ XawTextPosition end, update_from = -1;
+ Position y;
+ int wwidth, width, height;
+#ifndef OLDXAW
+ Widget src = ctx->text.source;
+#endif
+ int max_y = (int)XtHeight(ctx) - (int)ctx->text.margin.bottom;
+
+ if (ctx->text.wrap == XawtextWrapNever)
+ wwidth = 0x7fffffff;
+ else
+ wwidth = GetMaxTextWidth(ctx);
+
+ /* XXX y may change, due to font size changes. See later */
+ y = line == 0 ? ctx->text.margin.top : lt->y;
+
+#ifndef OLDXAW
+ if (ctx->text.lt.base_line < 0) {
+ if (line == 0)
+ ctx->text.lt.top = position;
+ }
+ else if (line == 0) {
+ XawTextPosition pos = ctx->text.lt.top;
+ int base_line = ctx->text.lt.base_line;
+
+ if (position == 0)
+ base_line = 1;
+ else if (ctx->text.lt.base_line == 0 ||
+ ctx->text.source_changed == SRC_CHANGE_OVERLAP) {
+ pos = 0;
+ base_line = 1;
+
+ while (pos < position) {
+ pos = SrcScan(src, pos, XawstEOL, XawsdRight, 1, True);
+ if (pos <= position) {
+ ++base_line;
+ if (pos == ctx->text.lastPos) {
+ base_line -= !_XawTextSourceNewLineAtEOF(src);
+ break;
+ }
+ }
+ }
+ }
+ else if (ctx->text.wrap == XawtextWrapNever
+ && IsPositionVisible(ctx, position))
+ base_line += LineForPosition(ctx, position);
+ else if (pos < position) {
+ while (pos < position) {
+ pos = SrcScan(src, pos, XawstEOL, XawsdRight, 1, True);
+ if (pos <= position) {
+ ++base_line;
+ if (pos == ctx->text.lastPos) {
+ base_line -= !_XawTextSourceNewLineAtEOF(src);
+ break;
+ }
+ }
+ }
+ }
+ else if (pos > position) {
+ while (pos > position) {
+ pos = SrcScan(src, pos, XawstEOL, XawsdLeft, 1, False);
+ if (--pos >= position)
+ --base_line;
+ }
+ }
+
+ ctx->text.lt.top = position;
+ ctx->text.lt.base_line = base_line;
+ }
+#else
+ if (line == 0)
+ ctx->text.lt.top = position;
+#endif
+
+ /* CONSTCOND */
+ while (True) {
+ XawTextSinkFindPosition(ctx->text.sink, position, ctx->text.left_margin,
+ wwidth, ctx->text.wrap == XawtextWrapWord,
+ &end, &width, &height);
+
+ if (lt->position != position) {
+ _XawTextNeedsUpdating(ctx, position,
+ end <= position ? position + 1 : end);
+ ctx->text.clear_to_eol = True;
+ lt->position = position;
+ }
+ if (lt->y != y) {
+ if (update_from < 0)
+ update_from = line == 0 ?
+ ctx->text.lt.info[0].position :
+ ctx->text.lt.info[line - 1].position;
+ lt->y = y;
+ ctx->text.clear_to_eol = True;
+ }
+ if (lt->textWidth != width) {
+ if (lt->textWidth > width)
+ ctx->text.clear_to_eol = True;
+ lt->textWidth = width;
+ }
+ y += height;
+
+ if (end > ctx->text.lastPos) {
+ position = end;
+ ctx->text.clear_to_eol = True;
+ _XawTextNeedsUpdating(ctx, end, end + ctx->text.lt.lines - line);
+ while (line++ < ctx->text.lt.lines) {
+ if (line > 1 && y > max_y) {
+ ctx->text.lt.lines = line - 1;
+ break;
+ }
+ ++lt;
+ if (lt->y != y) {
+ if (update_from < 0)
+ update_from = line < 2 ?
+ ctx->text.lt.info[0].position :
+ ctx->text.lt.info[line - 2].position;
+ lt->y = y;
+ }
+ lt->position = ++position;
+ lt->textWidth = 0;
+ y += height;
+ }
+ if (update_from >= 0)
+ _XawTextNeedsUpdating(ctx, update_from,
+ ctx->text.lt.info[ctx->text.lt.lines].position);
+ _XawTextSetScrollBars(ctx);
+
+ return (ctx->text.lastPos);
+ }
+
+ if (line && y > max_y)
+ /* will return in the next loop */
+ ctx->text.lt.lines = line;
+
+ if (++line > ctx->text.lt.lines && y < max_y) {
+ /* grow the line table */
+ ctx->text.lt.info = (XawTextLineTableEntry *)
+ XtRealloc((char *)ctx->text.lt.info,
+ sizeof(XawTextLineTableEntry) * (line + 1));
+ lt = ctx->text.lt.info + line;
+ bzero(lt, sizeof(XawTextLineTableEntry));
+ ++ctx->text.lt.lines;
+ }
+ else
+ ++lt;
+ if (position == end)
+ ++position;
+ else
+ position = end;
+
+ if (line > ctx->text.lt.lines) {
+ if (update_from >= 0)
+ _XawTextNeedsUpdating(ctx, update_from,
+ ctx->text.lt.info[ctx->text.lt.lines].position);
+ _XawTextSetScrollBars(ctx);
+
+ return (position);
+ }
+ }
+ /*NOTREACHED*/
+}
+
+/*
+ * Function:
+ * GetWidestLine
+ *
+ * Parameters:
+ * ctx - text widget
+ *
+ * Description:
+ * Returns the width (in pixels) of the widest line that
+ * is currently visable.
+ *
+ * Returns:
+ * The width of the widest line
+ */
+static unsigned int
+GetWidestLine(TextWidget ctx)
+{
+ int i;
+ unsigned int widest;
+ XawTextLineTablePtr lt = &(ctx->text.lt);
+
+ for (i = 0, widest = 0; i < lt->lines; i++)
+ if (widest < lt->info[i].textWidth)
+ widest = lt->info[i].textWidth;
+
+ return (widest);
+}
+
+/*
+ * This routine is used by Text to notify an associated scrollbar of the
+ * correct metrics (position and shown fraction) for the text being currently
+ * displayed in the window.
+ */
+void
+_XawTextSetScrollBars(TextWidget ctx)
+{
+ float first, last, denom, widest;
+
+ if (ctx->text.scroll_vert == XawtextScrollAlways) {
+ if (ctx->text.lastPos == 0)
+ first = 0.0;
+ else
+ first = ctx->text.lt.top / (float)ctx->text.lastPos;
+
+ if (ctx->text.lt.info[ctx->text.lt.lines].position < ctx->text.lastPos)
+ last = ctx->text.lt.info[ctx->text.lt.lines].position /
+ (float)ctx->text.lastPos;
+ else
+ last = 1.0;
+
+ XawScrollbarSetThumb(ctx->text.vbar, first, last - first);
+ }
+
+ if (ctx->text.scroll_horiz == XawtextScrollAlways) {
+ denom = GetWidestLine(ctx);
+ if (denom <= 0)
+ denom = (int)XtWidth(ctx) - RHMargins(ctx);
+ if (denom <= 0)
+ denom = 1;
+ widest = ((int)XtWidth(ctx) - RHMargins(ctx)) / denom;
+ first = ctx->text.r_margin.left - ctx->text.left_margin;
+ first /= denom;
+
+ XawScrollbarSetThumb(ctx->text.hbar, first, widest);
+ }
+}
+
+static void
+DoCopyArea(TextWidget ctx, int src_x, int src_y,
+ unsigned int width, unsigned int height, int dst_x, int dst_y)
+{
+ int x1, y1, x2, y2;
+
+ x1 = ctx->text.r_margin.left;
+ y1 = ctx->text.r_margin.top;
+ x2 = XtWidth(ctx) - ctx->text.r_margin.right;
+ y2 = XtHeight(ctx) - ctx->text.r_margin.bottom;
+
+ if (x1 >= x2 || y1 >= y2)
+ return;
+
+ src_x = XawMax(x1, XawMin(src_x, x2));
+ src_y = XawMax(y1, XawMin(src_y, y2));
+ dst_x = XawMax(x1, XawMin(dst_x, x2));
+ dst_y = XawMax(y1, XawMin(dst_y, y2));
+ width = XawMax(0, XawMin(x2 - dst_x, (int)width));
+ height = XawMax(0, XawMin(y2 - dst_y, (int)height));
+
+ XCopyArea(XtDisplay(ctx), XtWindow(ctx), XtWindow(ctx), ctx->text.gc,
+ src_x, src_y, width, height, dst_x, dst_y);
+}
+
+/*
+ * Function:
+ * XawTextScroll
+ *
+ * Parameters:
+ * ctx - text widget
+ * vlines - number of lines to scroll vertically
+ * hpixels - number of pixels to scroll horizontally
+ *
+ * Description:
+ * Generic function for scrolling the text window.
+ * Allows vertical and horizontal scroll at the same time.
+ */
+void
+XawTextScroll(TextWidget ctx, int vlines, int hpixels)
+{
+ XawTextPosition top, tmp, update_from, update_to;
+ XawTextLineTable *lt;
+ Arg arglist[1];
+ int y0, y1, y2, count, dim, wwidth, lines = ctx->text.lt.lines;
+ int vwidth, vheight; /* visible width and height */
+ Bool scroll;
+
+ vwidth = (int)XtWidth(ctx) - RHMargins(ctx);
+ vheight = (int)XtHeight(ctx) - RVMargins(ctx);
+ lt = &ctx->text.lt;
+
+ if (!lt || vwidth <= 0 || vheight <= 0)
+ return;
+
+ if ((scroll = ctx->core.background_pixmap == XtUnspecifiedPixmap) == True) {
+ dim = lt->info[1].y - lt->info[0].y;
+ for (count = 1; count < lt->lines - 1; count++)
+ if (lt->info[count + 1].y - lt->info[count].y != dim) {
+ scroll = False;
+ break;
+ }
+ }
+
+ wwidth = GetMaxTextWidth(ctx);
+
+ /*
+ * Do the horizontall scrolling
+ */
+ if (hpixels < 0 && ctx->text.left_margin - hpixels > ctx->text.r_margin.left)
+ hpixels = ctx->text.left_margin - ctx->text.r_margin.left;
+ ctx->text.left_margin -= hpixels;
+
+ update_from = lt->top; /* remember the old value */
+ /*
+ * Checks the requested number of lines and calculates the top
+ * of the line table
+ */
+ if (vlines < 0) { /* VScroll Up */
+ if (IsPositionVisible(ctx, 0))
+ vlines = 0;
+ else if (ctx->text.wrap != XawtextWrapNever) {
+ XawTextPosition end;
+ int n_lines = 0;
+
+ count = -vlines;
+ end = lt->top;
+ while (n_lines < count) {
+ top = SrcScan(ctx->text.source, end, XawstEOL,
+ XawsdLeft, 2, False);
+ n_lines += CountLines(ctx, top, end);
+ end = top;
+ }
+
+ while (count++ < n_lines) {
+ tmp = top;
+ XawTextSinkFindPosition(ctx->text.sink, top,
+ ctx->text.left_margin,
+ wwidth,ctx->text.wrap == XawtextWrapWord,
+ &top, &dim, &dim);
+ if (tmp == top)
+ ++top;
+ }
+ }
+ else
+ top = SrcScan(ctx->text.source, lt->top, XawstEOL,
+ XawsdLeft, -vlines + 1, False);
+ if (-vlines >= ctx->text.lt.lines)
+ scroll = False;
+ }
+ else if (vlines > 0) { /* VScroll Down */
+ if (LineForPosition(ctx, ctx->text.lastPos) == 0)
+ vlines = 0;
+ if (vlines < lt->lines)
+ top = XawMin(lt->info[vlines].position, ctx->text.lastPos);
+ else if (ctx->text.wrap == XawtextWrapNever)
+ top = SrcScan(ctx->text.source,
+ SrcScan(ctx->text.source, lt->top,
+ XawstEOL, XawsdRight, vlines,
+ True),
+ XawstEOL, XawsdLeft, 1, False);
+ else {
+ top = lt->top;
+ count = 0;
+ while (count++ < vlines) {
+ tmp = top;
+ XawTextSinkFindPosition(ctx->text.sink, top,
+ ctx->text.left_margin,
+ wwidth, ctx->text.wrap == XawtextWrapWord,
+ &top, &dim, &dim);
+ if (tmp == top)
+ ++top;
+ }
+ }
+ if (vlines >= ctx->text.lt.lines
+ || lt->info[vlines].position >= ctx->text.lastPos)
+ scroll = False;
+ }
+
+ if (!vlines) {
+ if (hpixels) {
+ ClearWindow(ctx);
+ ctx->text.clear_to_eol = True;
+ }
+ _XawTextSetScrollBars(ctx);
+ return;
+ }
+
+ /* Flushes any pending updates. Normally, there may be a call to
+ * XawTextUnsetSelection not yet updated.
+ */
+ if (!hpixels && scroll) {
+ ctx->text.clear_to_eol = True;
+ FlushUpdate(ctx);
+ }
+
+ /*
+ * Rebuild the line table, doing the vertical scroll
+ */
+ (void)_BuildLineTable(ctx, top, 0);
+ lt = &ctx->text.lt;
+ if (scroll) {
+ for (count = 0; count < lt->lines - 1; count++)
+ if (lt->info[count + 1].y - lt->info[count].y != dim) {
+ scroll = False;
+ break;
+ }
+ }
+
+ XtSetArg(arglist[0], XtNinsertPosition, lt->top + lt->lines);
+ _XawImSetValues((Widget)ctx, arglist, 1);
+
+ if (hpixels || !scroll || lines != lt->lines)
+ return;
+
+ /* _BuildLineTable updates everything if the top position changes.
+ * It is not required here.
+ */
+ (void)XmuScanlineXor(ctx->text.update, ctx->text.update);
+ if (vlines < 0 && IsPositionVisible(ctx, 0))
+ vlines = -LineForPosition(ctx, update_from);
+
+ y0 = ctx->text.r_margin.top;
+ if (vlines < 0) {
+ update_from = lt->top;
+ update_to = lt->info[-vlines + 1].position - 1;
+ y1 = lt->info[lt->lines + vlines].y;
+ y2 = lt->info[-vlines].y;
+ DoCopyArea(ctx, ctx->text.r_margin.left, y0, vwidth,
+ y1 - y0,
+ ctx->text.r_margin.left, y2);
+ }
+ else {
+ update_from = lt->info[lt->lines - vlines].position;
+ update_to = lt->info[lt->lines].position;
+ y1 = lt->info[lt->lines - vlines].y;
+ y2 = lt->info[vlines].y;
+ DoCopyArea(ctx, ctx->text.r_margin.left, y2,
+ vwidth, lt->info[lt->lines].y - y2,
+ ctx->text.r_margin.left, y0);
+ }
+ _XawTextNeedsUpdating(ctx, update_from, update_to);
+ ctx->text.clear_to_eol = True;
+}
+
+/*
+ * The routine will scroll the displayed text by lines. If the arg is
+ * positive, move up; otherwise, move down. [note: this is really a private
+ * procedure but is used in multiple modules].
+ */
+void
+_XawTextVScroll(TextWidget ctx, int n)
+{
+ XawTextScroll(ctx, n, 0);
+}
+
+/*ARGSUSED*/
+static void
+HScroll(Widget w, XtPointer closure, XtPointer callData)
+{
+ TextWidget ctx = (TextWidget)closure;
+ long pixels = (long)callData;
+
+ if (pixels > 0) {
+ long max;
+
+ max = (int)GetWidestLine(ctx) + ctx->text.left_margin -
+ ctx->text.r_margin.left;
+ max = XawMax(0, max);
+ pixels = XawMin(pixels, max);
+ }
+
+ if (pixels) {
+ _XawTextPrepareToUpdate(ctx);
+ XawTextScroll(ctx, 0, pixels);
+ _XawTextExecuteUpdate(ctx);
+ }
+}
+
+/*ARGSUSED*/
+static void
+HJump(Widget w, XtPointer closure, XtPointer callData)
+{
+ TextWidget ctx = (TextWidget)closure;
+ float percent = *(float *)callData;
+ long pixels;
+
+ pixels = ctx->text.left_margin -
+ (ctx->text.r_margin.left - (int)(percent * GetWidestLine(ctx)));
+
+ HScroll(w, (XtPointer)ctx, (XtPointer)pixels);
+}
+
+/*
+ * Function:
+ * UpdateTextInLine
+ *
+ * Parameters:
+ * ctx - text widget
+ * line - line to update
+ * x1 - left pixel
+ * x2 - right pixel
+ *
+ * Description:
+ * Updates the text in the given line and pixel interval
+ */
+static void
+UpdateTextInLine(TextWidget ctx, int line, int x1, int x2)
+{
+ XawTextLineTableEntry *lt = ctx->text.lt.info + line;
+ XawTextPosition left, right;
+ int from_x, width, height;
+
+ if (lt->position >= ctx->text.lastPos
+ || ctx->text.left_margin > x2
+ || (int)lt->textWidth + ctx->text.left_margin < x1) {
+ /* Mark line to be cleared */
+ if (ctx->text.clear_to_eol)
+ _XawTextNeedsUpdating(ctx, lt->position, lt->position + 1);
+ return;
+ }
+
+ from_x = ctx->text.left_margin;
+ XawTextSinkFindPosition(ctx->text.sink, lt->position,
+ from_x, x1 - from_x,
+ False, &left, &width, &height);
+ if (line == ctx->text.lt.lines)
+ right = -1;
+ else if (x2 >= lt->textWidth - from_x)
+ right = lt[1].position - 1;
+ else {
+ from_x += width;
+ XawTextSinkFindPosition(ctx->text.sink, left,
+ from_x, x2 - from_x,
+ False, &right, &width, &height);
+ }
+
+ if ((right < 0) || (right + 1 <= lt[1].position))
+ ++right;
+
+ /* Mark text interval to be repainted */
+ _XawTextNeedsUpdating(ctx, left, right);
+}
+
+/*
+ * The routine will scroll the displayed text by pixels. If the calldata is
+ * positive, move up; otherwise, move down.
+ */
+/*ARGSUSED*/
+static void
+VScroll(Widget w, XtPointer closure, XtPointer callData)
+{
+ TextWidget ctx = (TextWidget)closure;
+ long height, lines = (long)callData;
+
+ height = XtHeight(ctx) - VMargins(ctx);
+ if (height < 1)
+ height = 1;
+ lines = (lines * ctx->text.lt.lines) / height;
+ _XawTextPrepareToUpdate(ctx);
+ XawTextScroll(ctx, lines, 0);
+ _XawTextExecuteUpdate(ctx);
+}
+
+/*ARGSUSED*/
+static void
+VJump(Widget w, XtPointer closure, XtPointer callData)
+{
+ float percent = *(float *)callData;
+ TextWidget ctx = (TextWidget)closure;
+ XawTextPosition top, last, position, tmp;
+ XawTextLineTable *lt = &(ctx->text.lt);
+ int dim, vlines = 0, wwidth = GetMaxTextWidth(ctx);
+ Bool scroll = True;
+
+ position = percent * ctx->text.lastPos;
+ top = lt->top;
+
+ if (!lt->lines || (position >= lt->top && position < lt->info[1].position)) {
+ _XawTextSetScrollBars(ctx);
+ return;
+ }
+
+#ifndef OLDXAW
+ ctx->text.lt.base_line = -1;
+#endif
+
+ if (position > lt->top) { /* VScroll Up */
+ if (position > lt->top && position < lt->info[lt->lines].position)
+ vlines = LineForPosition(ctx, position);
+ else {
+ scroll = False;
+ top = SrcScan(ctx->text.source, position, XawstEOL,
+ XawsdLeft, 1, False);
+ if (ctx->text.wrap != XawtextWrapNever) {
+ last = top;
+ while (last < position) {
+ tmp = last;
+ XawTextSinkFindPosition(ctx->text.sink, last,
+ ctx->text.left_margin, wwidth,
+ ctx->text.wrap == XawtextWrapWord,
+ &last, &dim, &dim);
+ if (last == tmp)
+ ++last;
+ if (last < position)
+ top = last;
+ }
+ }
+ }
+ }
+ else { /* VScroll Down */
+ /*
+ * Calculates the number of lines
+ */
+ while (top > position) {
+ last = top;
+ top = SrcScan(ctx->text.source, top, XawstEOL,
+ XawsdLeft, 2, False);
+ vlines -= CountLines(ctx, top, last);
+ if (-vlines >= ctx->text.lt.lines) {
+ scroll = False;
+ top = SrcScan(ctx->text.source, position, XawstEOL,
+ XawsdLeft, 1, False);
+ break;
+ }
+ }
+ /*
+ * Normalize
+ */
+ if (ctx->text.wrap != XawtextWrapNever) {
+ last = top;
+ while (last < position) {
+ tmp = last;
+ XawTextSinkFindPosition(ctx->text.sink, last,
+ ctx->text.left_margin,
+ wwidth,
+ ctx->text.wrap == XawtextWrapWord,
+ &last, &dim, &dim);
+ if (last == tmp)
+ ++last;
+ if (last < position)
+ top = last;
+ ++vlines;
+ }
+ }
+ }
+
+ if (vlines || !scroll) {
+ _XawTextPrepareToUpdate(ctx);
+ if (scroll)
+ XawTextScroll(ctx, vlines, 0);
+ else
+ _BuildLineTable(ctx, top, 0);
+ _XawTextExecuteUpdate(ctx);
+ }
+}
+
+static Bool
+MatchSelection(Atom selection, XawTextSelection *s)
+{
+ Atom *match;
+ int count;
+
+ for (count = 0, match = s->selections; count < s->atom_count;
+ match++, count++)
+ if (*match == selection)
+ return (True);
+
+ return (False);
+}
+
+static Boolean
+TextConvertSelection(Widget w, Atom *selection, Atom *target, Atom *type,
+ XtPointer *value, unsigned long *length, int *format)
+{
+ Display *d = XtDisplay(w);
+ TextWidget ctx = (TextWidget)w;
+ Widget src = ctx->text.source;
+ XawTextEditType edit_mode;
+ Arg args[1];
+ XawTextSelectionSalt *salt = NULL;
+ XawTextSelection *s;
+
+ if (*target == XA_TARGETS(d)) {
+ Atom *targetP, *std_targets;
+ unsigned long std_length;
+
+ if (SrcCvtSel(src, selection, target, type, value, length, format))
+ return (True);
+
+ XtSetArg(args[0], XtNeditType, &edit_mode);
+ XtGetValues(src, args, ONE);
+
+ XmuConvertStandardSelection(w, ctx->text.time, selection,
+ target, type, (XPointer*)&std_targets,
+ &std_length, format);
+
+ *length = 7 + (edit_mode == XawtextEdit) + std_length;
+ *value = XtMalloc((unsigned)sizeof(Atom)*(*length));
+ targetP = *(Atom**)value;
+ *targetP++ = XA_STRING;
+ *targetP++ = XA_TEXT(d);
+ *targetP++ = XA_UTF8_STRING(d);
+ *targetP++ = XA_COMPOUND_TEXT(d);
+ *targetP++ = XA_LENGTH(d);
+ *targetP++ = XA_LIST_LENGTH(d);
+ *targetP++ = XA_CHARACTER_POSITION(d);
+ if (edit_mode == XawtextEdit) {
+ *targetP++ = XA_DELETE(d);
+ }
+ (void)memmove((char*)targetP, (char*)std_targets,
+ sizeof(Atom) * std_length);
+ XtFree((char*)std_targets);
+ *type = XA_ATOM;
+ *format = 32;
+ return (True);
+ }
+
+ if (SrcCvtSel(src, selection, target, type, value, length, format))
+ return (True);
+
+ if (MatchSelection(*selection, &ctx->text.s))
+ s = &ctx->text.s;
+ else {
+ for (salt = ctx->text.salt; salt; salt = salt->next)
+ if (MatchSelection(*selection, &salt->s))
+ break;
+ if (!salt)
+ return (False);
+ s = &salt->s;
+ }
+ if (*target == XA_STRING
+ || *target == XA_TEXT(d)
+ || *target == XA_UTF8_STRING(d)
+ || *target == XA_COMPOUND_TEXT(d)) {
+ if (*target == XA_TEXT(d)) {
+ if (XawTextFormat(ctx, XawFmtWide))
+ *type = XA_COMPOUND_TEXT(d);
+ else
+ *type = XA_STRING;
+ }
+ else
+ *type = *target;
+ /*
+ * If salt is True, the salt->contents stores CT string,
+ * its length is measured in bytes.
+ * Refer to _XawTextSaltAwaySelection().
+ *
+ * by Li Yuhong, Mar. 20, 1991.
+ */
+ if (!salt) {
+ *value = _XawTextGetSTRING(ctx, s->left, s->right);
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ XTextProperty textprop;
+ if (XwcTextListToTextProperty(d, (wchar_t **)value, 1,
+ XCompoundTextStyle, &textprop)
+ < Success) {
+ XtFree((char *)*value);
+ return (False);
+ }
+ XtFree((char *)*value);
+ *value = (XtPointer)textprop.value;
+ *length = textprop.nitems;
+ }
+ else
+ *length = strlen((char *)*value);
+ }
+ else {
+ *value = XtMalloc((salt->length + 1) * sizeof(unsigned char));
+ strcpy ((char *)*value, salt->contents);
+ *length = salt->length;
+ }
+ /* Got *value,*length, now in COMPOUND_TEXT format. */
+ if (XawTextFormat(ctx, XawFmtWide) && *type == XA_STRING) {
+ XTextProperty textprop;
+ wchar_t **wlist;
+ int count;
+
+ textprop.encoding = XA_COMPOUND_TEXT(d);
+ textprop.value = (unsigned char *)*value;
+ textprop.nitems = strlen(*value);
+ textprop.format = 8;
+ if (XwcTextPropertyToTextList(d, &textprop, &wlist, &count)
+ < Success
+ || count < 1) {
+ XtFree((char *)*value);
+ return (False);
+ }
+ XtFree((char *)*value);
+ if (XwcTextListToTextProperty(d, wlist, 1, XStringStyle, &textprop)
+ < Success) {
+ XwcFreeStringList((wchar_t**) wlist);
+ return (False);
+ }
+ *value = (XtPointer)textprop.value;
+ *length = textprop.nitems;
+ XwcFreeStringList(wlist);
+ } else if (*type == XA_UTF8_STRING(d)) {
+ XTextProperty textprop;
+ char **list;
+ int count;
+
+ textprop.encoding = XA_COMPOUND_TEXT(d);
+ textprop.value = (unsigned char *)*value;
+ textprop.nitems = strlen(*value);
+ textprop.format = 8;
+ if (Xutf8TextPropertyToTextList(d, &textprop, &list, &count)
+ < Success
+ || count < 1) {
+ XtFree((char *)*value);
+ return (False);
+ }
+ XtFree((char *)*value);
+ *value = *list;
+ *length = strlen(*list);
+ XFree(list);
+ }
+ *format = 8;
+ return (True);
+ }
+
+ if ((*target == XA_LIST_LENGTH(d)) || (*target == XA_LENGTH(d))) {
+ long * temp;
+
+ temp = (long *)XtMalloc((unsigned)sizeof(long));
+ if (*target == XA_LIST_LENGTH(d))
+ *temp = 1L;
+ else /* *target == XA_LENGTH(d) */
+ *temp = (long) (s->right - s->left);
+
+ *value = (XPointer)temp;
+ *type = XA_INTEGER;
+ *length = 1L;
+ *format = 32;
+ return (True);
+ }
+
+ if (*target == XA_CHARACTER_POSITION(d)) {
+ long * temp;
+
+ temp = (long *)XtMalloc((unsigned)(2 * sizeof(long)));
+ temp[0] = (long)(s->left + 1);
+ temp[1] = s->right;
+ *value = (XPointer)temp;
+ *type = XA_SPAN(d);
+ *length = 2L;
+ *format = 32;
+ return (True);
+ }
+
+ if (*target == XA_DELETE(d)) {
+ if (!salt)
+ _XawTextZapSelection(ctx, NULL, True);
+ *value = NULL;
+ *type = XA_NULL(d);
+ *length = 0;
+ *format = 32;
+ return (True);
+ }
+
+ if (XmuConvertStandardSelection(w, ctx->text.time, selection, target, type,
+ (XPointer *)value, length, format))
+ return (True);
+
+ /* else */
+ return (False);
+}
+
+/*
+ * Function:
+ * GetCutBuffferNumber
+ *
+ * Parameters:
+ * atom - atom to check
+ *
+ * Description:
+ * Returns the number of the cut buffer.
+ *
+ * Returns:
+ * The number of the cut buffer representing this atom or NOT_A_CUT_BUFFER
+ */
+#define NOT_A_CUT_BUFFER -1
+static int
+GetCutBufferNumber(Atom atom)
+{
+ if (atom == XA_CUT_BUFFER0) return (0);
+ if (atom == XA_CUT_BUFFER1) return (1);
+ if (atom == XA_CUT_BUFFER2) return (2);
+ if (atom == XA_CUT_BUFFER3) return (3);
+ if (atom == XA_CUT_BUFFER4) return (4);
+ if (atom == XA_CUT_BUFFER5) return (5);
+ if (atom == XA_CUT_BUFFER6) return (6);
+ if (atom == XA_CUT_BUFFER7) return (7);
+ return (NOT_A_CUT_BUFFER);
+}
+
+static void
+TextLoseSelection(Widget w, Atom *selection)
+{
+ TextWidget ctx = (TextWidget)w;
+ Atom *atomP;
+ int i;
+ XawTextSelectionSalt*salt, *prevSalt, *nextSalt;
+
+ atomP = ctx->text.s.selections;
+ for (i = 0 ; i < ctx->text.s.atom_count; i++, atomP++)
+ if ((*selection == *atomP)
+ || (GetCutBufferNumber(*atomP) != NOT_A_CUT_BUFFER))
+ *atomP = (Atom)0;
+
+ while (ctx->text.s.atom_count
+ && ctx->text.s.selections[ctx->text.s.atom_count - 1] == 0)
+ ctx->text.s.atom_count--;
+
+ /*
+ * Must walk the selection list in opposite order from UnsetSelection
+ */
+ atomP = ctx->text.s.selections;
+ for (i = 0 ; i < ctx->text.s.atom_count; i++, atomP++)
+ if (*atomP == (Atom)0) {
+ *atomP = ctx->text.s.selections[--ctx->text.s.atom_count];
+ while (ctx->text.s.atom_count
+ && ctx->text.s.selections[ctx->text.s.atom_count-1] == 0)
+ ctx->text.s.atom_count--;
+ }
+
+ if (ctx->text.s.atom_count == 0)
+ ModifySelection(ctx, ctx->text.insertPos, ctx->text.insertPos);
+
+ prevSalt = 0;
+ for (salt = ctx->text.salt; salt; salt = nextSalt) {
+ atomP = salt->s.selections;
+ nextSalt = salt->next;
+ for (i = 0 ; i < salt->s.atom_count; i++, atomP++)
+ if (*selection == *atomP)
+ *atomP = (Atom)0;
+
+ while (salt->s.atom_count
+ && salt->s.selections[salt->s.atom_count-1] == 0)
+ salt->s.atom_count--;
+
+ /*
+ * Must walk the selection list in opposite order from UnsetSelection
+ */
+ atomP = salt->s.selections;
+ for (i = 0 ; i < salt->s.atom_count; i++, atomP++)
+ if (*atomP == (Atom)0) {
+ *atomP = salt->s.selections[--salt->s.atom_count];
+ while (salt->s.atom_count
+ && salt->s.selections[salt->s.atom_count-1] == 0)
+ salt->s.atom_count--;
+ }
+
+ if (salt->s.atom_count == 0) {
+ XtFree ((char *) salt->s.selections);
+ XtFree (salt->contents);
+ if (prevSalt)
+ prevSalt->next = nextSalt;
+ else
+ ctx->text.salt = nextSalt;
+ XtFree((char *)salt);
+ }
+ else
+ prevSalt = salt;
+ }
+}
+
+void
+_XawTextSaltAwaySelection(TextWidget ctx, Atom *selections, int num_atoms)
+{
+ XawTextSelectionSalt *salt;
+ int i, j;
+
+ for (i = 0; i < num_atoms; i++)
+ TextLoseSelection((Widget)ctx, selections + i);
+ if (num_atoms == 0)
+ return;
+ salt = (XawTextSelectionSalt *)
+ XtMalloc((unsigned)sizeof(XawTextSelectionSalt));
+ if (!salt)
+ return;
+ salt->s.selections = (Atom *)XtMalloc((unsigned)(num_atoms * sizeof(Atom)));
+ if (!salt->s.selections) {
+ XtFree((char *)salt);
+ return;
+ }
+ salt->s.left = ctx->text.s.left;
+ salt->s.right = ctx->text.s.right;
+ salt->s.type = ctx->text.s.type;
+ salt->contents = _XawTextGetSTRING(ctx, ctx->text.s.left, ctx->text.s.right);
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ XTextProperty textprop;
+ if (XwcTextListToTextProperty(XtDisplay((Widget)ctx),
+ (wchar_t**)(&(salt->contents)), 1,
+ XCompoundTextStyle,
+ &textprop) < Success) {
+ XtFree(salt->contents);
+ salt->length = 0;
+ return;
+ }
+ XtFree(salt->contents);
+ salt->contents = (char *)textprop.value;
+ salt->length = textprop.nitems;
+ }
+ else
+ salt->length = strlen (salt->contents);
+ salt->next = ctx->text.salt;
+ ctx->text.salt = salt;
+ j = 0;
+ for (i = 0; i < num_atoms; i++) {
+ if (GetCutBufferNumber (selections[i]) == NOT_A_CUT_BUFFER) {
+ salt->s.selections[j++] = selections[i];
+ XtOwnSelection((Widget)ctx, selections[i], ctx->text.time,
+ TextConvertSelection, TextLoseSelection, NULL);
+ }
+ }
+ salt->s.atom_count = j;
+}
+
+static void
+_SetSelection(TextWidget ctx, XawTextPosition left, XawTextPosition right,
+ Atom *selections, Cardinal count)
+{
+#ifndef OLDXAW
+ Cardinal i;
+ XawTextPosition pos;
+ TextSrcObject src = (TextSrcObject)ctx->text.source;
+
+ for (i = 0; i < src->textSrc.num_text; i++) {
+ TextWidget tw = (TextWidget)src->textSrc.text[i];
+ Bool needs_updating = tw->text.old_insert < 0;
+ Bool showposition = tw->text.showposition;
+
+ if (needs_updating) {
+ tw->text.showposition = False;
+ _XawTextPrepareToUpdate(tw);
+ }
+#else
+ TextWidget tw = ctx;
+ XawTextPosition pos;
+#endif /* OLDXAW */
+
+ if (left < tw->text.s.left) {
+ pos = Min(right, tw->text.s.left);
+ _XawTextNeedsUpdating(tw, left, pos);
+ }
+ if (left > tw->text.s.left) {
+ pos = Min(left, tw->text.s.right);
+ _XawTextNeedsUpdating(tw, tw->text.s.left, pos);
+ }
+ if (right < tw->text.s.right) {
+ pos = Max(right, tw->text.s.left);
+ _XawTextNeedsUpdating(tw, pos, tw->text.s.right);
+ }
+ if (right > tw->text.s.right) {
+ pos = Max(left, tw->text.s.right);
+ _XawTextNeedsUpdating(tw, pos, right);
+ }
+
+ tw->text.s.left = left;
+ tw->text.s.right = right;
+
+#ifndef OLDXAW
+ if (needs_updating) {
+ _XawTextExecuteUpdate(tw);
+ tw->text.showposition = showposition;
+ }
+ }
+#endif /* OLDXAW */
+
+ SrcSetSelection(ctx->text.source, left, right,
+ (count == 0) ? None : selections[0]);
+
+ if (left < right) {
+ Widget w = (Widget)ctx;
+ int buffer;
+
+ while (count) {
+ Atom selection = selections[--count];
+
+ /*
+ * If this is a cut buffer
+ */
+ if ((buffer = GetCutBufferNumber(selection)) != NOT_A_CUT_BUFFER) {
+ unsigned char *ptr, *tptr;
+ unsigned int amount, max_len = MAX_CUT_LEN(XtDisplay(w));
+ unsigned long len;
+
+ tptr= ptr= (unsigned char *)_XawTextGetSTRING(ctx,
+ ctx->text.s.left,
+ ctx->text.s.right);
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ /*
+ * Only XA_STRING(Latin 1) is allowed in CUT_BUFFER,
+ * so we get it from wchar string, then free the wchar string
+ */
+ XTextProperty textprop;
+
+ if (XwcTextListToTextProperty(XtDisplay(w), (wchar_t**)&ptr,
+ 1, XStringStyle, &textprop)
+ < Success){
+ XtFree((char *)ptr);
+ return;
+ }
+ XtFree((char *)ptr);
+ tptr = ptr = textprop.value;
+ }
+ if (buffer == 0) {
+ _CreateCutBuffers(XtDisplay(w));
+ XRotateBuffers(XtDisplay(w), 1);
+ }
+ amount = Min ((len = strlen((char *)ptr)), max_len);
+ XChangeProperty(XtDisplay(w), RootWindow(XtDisplay(w), 0),
+ selection, XA_STRING, 8, PropModeReplace,
+ ptr, amount);
+
+ while (len > max_len) {
+ len -= max_len;
+ tptr += max_len;
+ amount = Min (len, max_len);
+ XChangeProperty(XtDisplay(w), RootWindow(XtDisplay(w), 0),
+ selection, XA_STRING, 8, PropModeAppend,
+ tptr, amount);
+ }
+ XtFree ((char *)ptr);
+ }
+ else /* This is a real selection */
+ XtOwnSelection(w, selection, ctx->text.time, TextConvertSelection,
+ TextLoseSelection, NULL);
+ }
+ }
+ else
+ XawTextUnsetSelection((Widget)ctx);
+}
+
+#ifndef OLDXAW
+void
+_XawTextSetLineAndColumnNumber(TextWidget ctx, Bool force)
+{
+ int line_number, column_number;
+
+ if (ctx->text.old_insert != ctx->text.insertPos &&
+ ctx->text.lt.base_line < 0) {
+ ctx->text.lt.base_line = 0;
+ (void)_BuildLineTable(ctx, ctx->text.lt.top, 0);
+ }
+
+ line_number = ResolveLineNumber(ctx);
+ column_number = ResolveColumnNumber(ctx);
+
+ if (force || (ctx->text.column_number != column_number
+ || ctx->text.line_number != line_number)) {
+ XawTextPositionInfo info;
+
+ ctx->text.line_number = info.line_number = line_number;
+ ctx->text.column_number = info.column_number = column_number;
+ info.insert_position = ctx->text.insertPos;
+ info.last_position = ctx->text.lastPos;
+ info.overwrite_mode = ctx->text.overwrite;
+
+ XtCallCallbacks((Widget)ctx, XtNpositionCallback, (XtPointer)&info);
+ }
+}
+
+static int
+ResolveColumnNumber(TextWidget ctx)
+{
+ Widget src = ctx->text.source;
+ short column_number = 0;
+ XawTextPosition position;
+ XawTextBlock block;
+ unsigned long format = _XawTextFormat(ctx);
+ TextSinkObject sink = (TextSinkObject)ctx->text.sink;
+ short *char_tabs = sink->text_sink.char_tabs;
+ int tab_count = sink->text_sink.tab_count;
+ int tab_index = 0, tab_column = 0, tab_base = 0;
+
+ if (ctx->text.lt.base_line < 1)
+ return (ctx->text.column_number);
+
+ position = SrcScan(src, ctx->text.insertPos, XawstEOL, XawsdLeft, 1, False);
+ XawTextSourceRead(src, position, &block, ctx->text.insertPos - position);
+
+ for (; position < ctx->text.insertPos; position++) {
+ if (position - block.firstPos >= block.length)
+ XawTextSourceRead(src, position, &block, ctx->text.insertPos - position);
+ if ((format == XawFmt8Bit && block.ptr[position - block.firstPos] == '\t') ||
+ (format == XawFmtWide && ((wchar_t*)block.ptr)[position - block.firstPos] == _Xaw_atowc(XawTAB))) {
+ while (tab_base + tab_column <= column_number) {
+ if (tab_count) {
+ for (; tab_index < tab_count; ++tab_index)
+ if (tab_base + char_tabs[tab_index] > column_number) {
+ tab_column = char_tabs[tab_index];
+ break;
+ }
+ if (tab_index >= tab_count) {
+ tab_base += char_tabs[tab_count - 1];
+ tab_column = tab_index = 0;
+ }
+ }
+ else
+ tab_column += DEFAULT_TAB_SIZE;
+ }
+ column_number = tab_base + tab_column;
+ }
+ else
+ ++column_number;
+ if (column_number >= 16384) {
+ column_number = 16383;
+ break;
+ }
+ }
+
+ return (column_number);
+}
+#endif /* OLDXAW */
+
+void
+_XawTextSourceChanged(Widget w, XawTextPosition left, XawTextPosition right,
+ XawTextBlock *block, int lines)
+{
+ TextWidget ctx = (TextWidget)w;
+ Widget src = ctx->text.source;
+ XawTextPosition update_from, update_to, top;
+ Boolean update_disabled;
+ int delta, line, line_from;
+
+ if (left < ctx->text.old_insert) {
+ XawTextPosition old_insert = ctx->text.old_insert;
+
+ if (right < ctx->text.old_insert)
+ old_insert -= right - left;
+ else
+ old_insert = left;
+
+ ctx->text.insertPos = old_insert + block->length;
+ }
+#ifndef OLDXAW
+ if (left <= ctx->text.lt.top) {
+ if (left + block->length - (right - left) < ctx->text.lt.top) {
+ ctx->text.source_changed = SRC_CHANGE_BEFORE;
+ ctx->text.lt.base_line += lines;
+ }
+ else
+ ctx->text.source_changed = SRC_CHANGE_OVERLAP;
+ }
+ else
+ ctx->text.source_changed = SRC_CHANGE_AFTER;
+#endif
+
+ update_from = left;
+ update_to = left + block->length;
+ update_to = SrcScan(src, update_to, XawstEOL, XawsdRight, 1, False);
+ delta = block->length - (right - left);
+ if (delta < 0)
+ ctx->text.clear_to_eol = True;
+ if (update_to == update_from)
+ ++update_to;
+ update_disabled = ctx->text.update_disabled;
+ ctx->text.update_disabled = True;
+ ctx->text.lastPos = XawTextGetLastPosition(ctx);
+ top = ctx->text.lt.info[0].position;
+
+ XawTextUnsetSelection((Widget)ctx);
+
+ if (delta) {
+ int i;
+ XmuSegment *seg;
+
+ for (seg = ctx->text.update->segment; seg; seg = seg->next) {
+ if (seg->x1 > (int)left)
+ break;
+ else if (seg->x2 > (int)left) {
+ seg->x2 += delta;
+ seg = seg->next;
+ break;
+ }
+ }
+ for (; seg; seg = seg->next) {
+ seg->x1 += delta;
+ seg->x2 += delta;
+ }
+ XmuOptimizeScanline(ctx->text.update);
+
+ for (i = 0; i <= ctx->text.lt.lines; i++)
+ if (ctx->text.lt.info[i].position > left)
+ break;
+ for (; i <= ctx->text.lt.lines; i++)
+ ctx->text.lt.info[i].position += delta;
+ }
+
+ if (top != ctx->text.lt.info[0].position) {
+ line_from = line = 0;
+ ctx->text.lt.top = top = SrcScan(src, ctx->text.lt.info[0].position,
+ XawstEOL, XawsdLeft, 1, False);
+ update_from = top;
+ }
+ else {
+ line_from = line = LineForPosition(ctx, update_from + delta);
+ top = ctx->text.lt.info[line].position;
+ }
+
+ if (line > 0 && ctx->text.wrap == XawtextWrapWord) {
+ --line;
+ top = ctx->text.lt.info[line].position;
+ }
+
+ (void)_BuildLineTable(ctx, top, line);
+
+ if (ctx->text.wrap == XawtextWrapWord) {
+ if (line_from != LineForPosition(ctx, update_from)
+ || line_from != LineForPosition(ctx, update_to)) {
+ ctx->text.clear_to_eol = True;
+ update_from = SrcScan(src, update_from,
+ XawstWhiteSpace, XawsdLeft, 1, True);
+ if (update_to >= ctx->text.lastPos)
+ /* this is not an error, it just tells _BuildLineTable to
+ * clear to the bottom of the window. The value of update_to
+ * should not be > ctx->text.lastPos.
+ */
+ ++update_to;
+ }
+ }
+ else if (!ctx->text.clear_to_eol) {
+ if (LineForPosition(ctx, update_from)
+ != LineForPosition(ctx, update_to))
+ ctx->text.clear_to_eol = True;
+ }
+
+ _XawTextNeedsUpdating(ctx, update_from, update_to);
+ ctx->text.update_disabled = update_disabled;
+}
+
+/*
+ * Function:
+ * _XawTextReplace
+ *
+ * Parameters:
+ * ctx - text widget
+ * left - left offset
+ * right - right offset
+ * block - text block
+ *
+ * Description:
+ * Replaces the text between left and right by the text in block.
+ * Does all the required calculations of offsets, and rebuild the
+ * the line table, from the insertion point (or previous line, if
+ * wrap mode is 'word').
+ *
+ * Returns:
+ * XawEditDone - success
+ * any other value - error code
+ */
+int
+_XawTextReplace(TextWidget ctx, XawTextPosition left, XawTextPosition right,
+ XawTextBlock *block)
+{
+ Arg args[1];
+ Widget src;
+ XawTextEditType edit_mode;
+
+ if (left == right && block->length == 0)
+ return (XawEditDone);
+
+ src = ctx->text.source;
+ XtSetArg(args[0], XtNeditType, &edit_mode);
+ XtGetValues(src, args, 1);
+
+ if (edit_mode == XawtextAppend) {
+ if (block->length == 0)
+ return (XawEditError);
+ ctx->text.insertPos = ctx->text.lastPos;
+ }
+
+#ifndef OLDXAW
+ return (SrcReplace(src, left, right, block));
+#else
+ if (SrcReplace(src, left, right, block) == XawEditDone) {
+ _XawTextSourceChanged((Widget)ctx, left, right, block, 0);
+
+ return (XawEditDone);
+ }
+
+ return (XawEditError);
+#endif
+}
+
+/*
+ * This routine will display text between two arbitrary source positions.
+ * In the event that this span contains highlighted text for the selection,
+ * only that portion will be displayed highlighted.
+ */
+static void
+OldDisplayText(Widget w, XawTextPosition left, XawTextPosition right)
+{
+ static XmuSegment segment;
+ static XmuScanline next;
+ static XmuScanline scanline = {0, &segment, &next};
+ static XmuArea area = {&scanline};
+
+ TextWidget ctx = (TextWidget)w;
+ int x, y, line;
+ XawTextPosition start, end, last, final;
+ XmuScanline *scan;
+ XmuSegment *seg;
+ XmuArea *clip = NULL;
+ Bool cleol = ctx->text.clear_to_eol;
+ Bool has_selection = ctx->text.s.right > ctx->text.s.left;
+
+ left = left < ctx->text.lt.top ? ctx->text.lt.top : left;
+
+ if (left > right || !LineAndXYForPosition(ctx, left, &line, &x, &y))
+ return;
+
+ last = XawTextGetLastPosition(ctx);
+ segment.x2 = (int)XtWidth(ctx) - ctx->text.r_margin.right;
+
+ if (cleol)
+ clip = XmuCreateArea();
+
+ for (start = left; start < right && line < ctx->text.lt.lines; line++) {
+ if ((end = ctx->text.lt.info[line + 1].position) > right)
+ end = right;
+
+ final = end;
+ if (end > last)
+ end = last;
+
+ if (end > start) {
+ if (!has_selection
+ || (start >= ctx->text.s.right || end <= ctx->text.s.left))
+ _XawTextSinkDisplayText(ctx->text.sink, x, y, start, end, False);
+ else if (start >= ctx->text.s.left && end <= ctx->text.s.right)
+ _XawTextSinkDisplayText(ctx->text.sink, x, y, start, end, True);
+ else {
+ OldDisplayText(w, start, ctx->text.s.left);
+ OldDisplayText(w, Max(start, ctx->text.s.left),
+ Min(end, ctx->text.s.right));
+ OldDisplayText(w, ctx->text.s.right, end);
+ }
+ }
+
+ x = ctx->text.left_margin;
+ if (cleol) {
+ segment.x1 = ctx->text.lt.info[line].textWidth + x;
+ if (XmuValidSegment(&segment)) {
+ scanline.y = y;
+ next.y = ctx->text.lt.info[line + 1].y;
+ XmuAreaOr(clip, &area);
+ }
+ }
+
+ start = final;
+ y = ctx->text.lt.info[line + 1].y;
+ }
+
+ if (cleol) {
+ for (scan = clip->scanline; scan && scan->next; scan = scan->next)
+ for (seg = scan->segment; seg; seg = seg->next)
+ SinkClearToBG(ctx->text.sink,
+ seg->x1, scan->y,
+ seg->x2 - seg->x1, scan->next->y - scan->y);
+ XmuDestroyArea(clip);
+ }
+}
+
+#ifndef OLDXAW
+/*ARGSUSED*/
+static void
+DisplayText(Widget w, XawTextPosition left, XawTextPosition right)
+{
+ static XmuSegment segment;
+ static XmuScanline next;
+ static XmuScanline scanline = {0, &segment, &next};
+ static XmuArea area = {&scanline};
+
+ TextWidget ctx = (TextWidget)w;
+ int y, line;
+ XawTextPosition from, to, lastPos;
+ Bool cleol = ctx->text.clear_to_eol;
+ Bool has_selection = ctx->text.s.right > ctx->text.s.left;
+ XawTextPaintList *paint_list;
+
+ left = left < ctx->text.lt.top ? ctx->text.lt.top : left;
+
+ if (left > right || !IsPositionVisible(ctx, left))
+ return;
+
+ line = LineForPosition(ctx, left);
+ y = ctx->text.lt.info[line].y;
+ segment.x2 = (int)XtWidth(ctx) - ctx->text.r_margin.right;
+ lastPos = XawTextGetLastPosition(ctx);
+
+ paint_list = ((TextSinkObject)ctx->text.sink)->text_sink.paint;
+
+ for (from = left; from < right && line < ctx->text.lt.lines; line++) {
+ if ((to = ctx->text.lt.info[line + 1].position) > right)
+ to = right;
+
+ if (to > lastPos)
+ to = lastPos;
+
+ if (from < to) {
+ if (!has_selection
+ || (from >= ctx->text.s.right || to <= ctx->text.s.left))
+ XawTextSinkPreparePaint(ctx->text.sink, y, line, from, to, False);
+ else if (from >= ctx->text.s.left && to <= ctx->text.s.right)
+ XawTextSinkPreparePaint(ctx->text.sink, y, line, from, to, True);
+ else {
+ XawTextSinkPreparePaint(ctx->text.sink, y, line, from,
+ ctx->text.s.left, False);
+ XawTextSinkPreparePaint(ctx->text.sink, y, line,
+ XawMax(from, ctx->text.s.left),
+ XawMin(to, ctx->text.s.right), True);
+ XawTextSinkPreparePaint(ctx->text.sink, y, line,
+ ctx->text.s.right, to, False);
+ }
+ }
+
+ if (cleol) {
+ segment.x1 = ctx->text.lt.info[line].textWidth + ctx->text.left_margin;
+ if (XmuValidSegment(&segment)) {
+ scanline.y = y;
+ next.y = ctx->text.lt.info[line + 1].y;
+ XmuAreaOr(paint_list->clip, &area);
+ }
+ }
+ y = ctx->text.lt.info[line + 1].y;
+ from = to;
+ }
+
+ /* clear to the bottom of the window */
+ if (cleol && line >= ctx->text.lt.lines) {
+ segment.x1 = ctx->text.left_margin;
+ if (XmuValidSegment(&segment)) {
+ scanline.y = y;
+ next.y = (int)XtHeight(ctx) - (int)ctx->text.margin.bottom;
+ XmuAreaOr(paint_list->clip, &area);
+ }
+ }
+}
+#endif
+
+/*
+ * This routine implements multi-click selection in a hardwired manner.
+ * It supports multi-click entity cycling (char, word, line, file) and mouse
+ * motion adjustment of the selected entitie (i.e. select a word then, with
+ * button still down, adjust wich word you really meant by moving the mouse).
+ * [NOTE: This routine is to be replaced by a set of procedures that
+ * will allows clients to implements a wide class of draw through and
+ * multi-click selection user interfaces.]
+ */
+static void
+DoSelection(TextWidget ctx, XawTextPosition pos, Time time, Bool motion)
+{
+ XawTextPosition newLeft, newRight;
+ XawTextSelectType newType, *sarray;
+ Widget src = ctx->text.source;
+
+ if (motion)
+ newType = ctx->text.s.type;
+ else {
+ if ((abs((long) time - (long) ctx->text.lasttime) < MULTI_CLICK_TIME)
+ && (pos >= ctx->text.s.left && pos <= ctx->text.s.right)) {
+ sarray = ctx->text.sarray;
+ for (; *sarray != XawselectNull && *sarray != ctx->text.s.type;
+ sarray++)
+ ;
+ if (*sarray == XawselectNull)
+ newType = *(ctx->text.sarray);
+ else {
+ newType = *(sarray + 1);
+ if (newType == XawselectNull)
+ newType = *(ctx->text.sarray);
+ }
+ }
+ else /* single-click event */
+ newType = *(ctx->text.sarray);
+
+ ctx->text.lasttime = time;
+ }
+ switch (newType) {
+ case XawselectPosition:
+ newLeft = newRight = pos;
+ break;
+ case XawselectChar:
+ newLeft = pos;
+ newRight = SrcScan(src, pos, XawstPositions, XawsdRight, 1, False);
+ break;
+ case XawselectWord:
+ case XawselectParagraph:
+ case XawselectAlphaNumeric: {
+ XawTextScanType stype;
+
+ if (newType == XawselectWord)
+ stype = XawstWhiteSpace;
+ else if (newType == XawselectParagraph)
+ stype = XawstParagraph;
+ else
+ stype = XawstAlphaNumeric;
+
+ /*
+ * Somewhat complicated, but basically I treat the space between
+ * two objects as another object. The object that I am currently
+ * in then becomes the end of the selection.
+ *
+ * Chris Peterson - 4/19/90.
+ */
+ newRight = SrcScan(ctx->text.source, pos, stype,
+ XawsdRight, 1, False);
+ newRight = SrcScan(ctx->text.source, newRight, stype,
+ XawsdLeft, 1, False);
+
+ if (pos != newRight)
+ newLeft = SrcScan(ctx->text.source, pos, stype,
+ XawsdLeft, 1, False);
+ else
+ newLeft = pos;
+
+ newLeft =SrcScan(ctx->text.source, newLeft, stype,
+ XawsdRight, 1, False);
+
+ if (newLeft > newRight) {
+ XawTextPosition temp = newLeft;
+ newLeft = newRight;
+ newRight = temp;
+ }
+ } break;
+ case XawselectLine:
+ newLeft = SrcScan(src, pos, XawstEOL, XawsdLeft, 1, False);
+ newRight = SrcScan(src, pos, XawstEOL, XawsdRight, 1, False);
+ break;
+ case XawselectAll:
+ newLeft = SrcScan(src, pos, XawstAll, XawsdLeft, 1, False);
+ newRight = SrcScan(src, pos, XawstAll, XawsdRight, 1, False);
+ break;
+ default:
+ XtAppWarning(XtWidgetToApplicationContext((Widget) ctx),
+ "Text Widget: empty selection array.");
+ return;
+ }
+
+ if (newLeft != ctx->text.s.left || newRight != ctx->text.s.right
+ || newType != ctx->text.s.type) {
+ ModifySelection(ctx, newLeft, newRight);
+ if (pos - ctx->text.s.left < ctx->text.s.right - pos)
+ ctx->text.insertPos = newLeft;
+ else
+ ctx->text.insertPos = newRight;
+ ctx->text.s.type = newType;
+ }
+ if (!motion) { /* setup so we can freely mix select extend calls*/
+ ctx->text.origSel.type = ctx->text.s.type;
+ ctx->text.origSel.left = ctx->text.s.left;
+ ctx->text.origSel.right = ctx->text.s.right;
+
+ if (pos >= ctx->text.s.left + (ctx->text.s.right - ctx->text.s.left) / 2)
+ ctx->text.extendDir = XawsdRight;
+ else
+ ctx->text.extendDir = XawsdLeft;
+ }
+}
+
+/*
+ * This routine implements extension of the currently selected text in
+ * the "current" mode (i.e. char word, line, etc.). It worries about
+ * extending from either end of the selection and handles the case when you
+ * cross through the "center" of the current selection (e.g. switch which
+ * end you are extending!).
+ */
+static void
+ExtendSelection(TextWidget ctx, XawTextPosition pos, Bool motion)
+{
+ XawTextScanDirection dir;
+
+ if (!motion) { /* setup for extending selection */
+ if (ctx->text.s.left == ctx->text.s.right) /* no current selection. */
+ ctx->text.s.left = ctx->text.s.right = ctx->text.insertPos;
+ else {
+ ctx->text.origSel.left = ctx->text.s.left;
+ ctx->text.origSel.right = ctx->text.s.right;
+ }
+
+ ctx->text.origSel.type = ctx->text.s.type;
+
+ if (pos >= ctx->text.s.left + (ctx->text.s.right - ctx->text.s.left) / 2)
+ ctx->text.extendDir = XawsdRight;
+ else
+ ctx->text.extendDir = XawsdLeft;
+ }
+ else /* check for change in extend direction */
+ if ((ctx->text.extendDir == XawsdRight &&
+ pos <= ctx->text.origSel.left) ||
+ (ctx->text.extendDir == XawsdLeft &&
+ pos >= ctx->text.origSel.right)) {
+ ctx->text.extendDir = (ctx->text.extendDir == XawsdRight) ?
+ XawsdLeft : XawsdRight;
+ ModifySelection(ctx, ctx->text.origSel.left, ctx->text.origSel.right);
+ }
+
+ dir = ctx->text.extendDir;
+ switch (ctx->text.s.type) {
+ case XawselectWord:
+ case XawselectParagraph:
+ case XawselectAlphaNumeric: {
+ XawTextPosition left_pos, right_pos;
+ XawTextScanType stype;
+
+ if (ctx->text.s.type == XawselectWord)
+ stype = XawstWhiteSpace;
+ else if (ctx->text.s.type == XawselectParagraph)
+ stype = XawstParagraph;
+ else
+ stype = XawstAlphaNumeric;
+
+ /*
+ * Somewhat complicated, but basically I treat the space between
+ * two objects as another object. The object that I am currently
+ * in then becomes the end of the selection.
+ *
+ * Chris Peterson - 4/19/90.
+ */
+ right_pos = SrcScan(ctx->text.source, pos, stype,
+ XawsdRight, 1, False);
+ right_pos =SrcScan(ctx->text.source, right_pos, stype,
+ XawsdLeft, 1, False);
+
+ if (pos != right_pos)
+ left_pos = SrcScan(ctx->text.source, pos, stype,
+ XawsdLeft, 1, False);
+ else
+ left_pos = pos;
+
+ left_pos =SrcScan(ctx->text.source, left_pos, stype,
+ XawsdRight, 1, False);
+
+ if (dir == XawsdLeft)
+ pos = Min(left_pos, right_pos);
+ else /* dir == XawsdRight */
+ pos = Max(left_pos, right_pos);
+ } break;
+ case XawselectLine:
+ pos = SrcScan(ctx->text.source, pos, XawstEOL,
+ dir, 1, dir == XawsdRight);
+ break;
+ case XawselectAll:
+ pos = ctx->text.insertPos;
+ /*FALLTHROUGH*/
+ case XawselectPosition:
+ default:
+ break;
+ }
+
+ if (dir == XawsdRight)
+ ModifySelection(ctx, ctx->text.s.left, pos);
+ else
+ ModifySelection(ctx, pos, ctx->text.s.right);
+
+ ctx->text.insertPos = pos;
+}
+
+/*
+ * Function:
+ * _XawTextClearAndCenterDisplay
+ *
+ * Parameters:
+ * ctx - text widget
+ *
+ * Description:
+ * Redraws the display with the cursor in insert point
+ * centered vertically.
+ */
+void
+_XawTextClearAndCenterDisplay(TextWidget ctx)
+{
+ int left_margin = ctx->text.left_margin;
+ Bool visible = IsPositionVisible(ctx, ctx->text.insertPos);
+
+ _XawTextShowPosition(ctx);
+
+ if (XtIsRealized((Widget)ctx) && visible &&
+ left_margin == ctx->text.left_margin) {
+ int insert_line = LineForPosition(ctx, ctx->text.insertPos);
+ int scroll_by = insert_line - (ctx->text.lt.lines >> 1);
+ Boolean clear_to_eol = ctx->text.clear_to_eol;
+
+ XawTextScroll(ctx, scroll_by, 0);
+ SinkClearToBG(ctx->text.sink, 0, 0, XtWidth(ctx), XtHeight(ctx));
+ ClearWindow(ctx);
+ clear_to_eol = ctx->text.clear_to_eol;
+ ctx->text.clear_to_eol = False;
+ FlushUpdate(ctx);
+ ctx->text.clear_to_eol = clear_to_eol;
+ }
+}
+
+/*
+ * Internal redisplay entire window
+ * Legal to call only if widget is realized
+ */
+static void
+DisplayTextWindow(Widget w)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ _XawTextBuildLineTable(ctx, ctx->text.lt.top, False);
+ ClearWindow(ctx);
+}
+
+static void
+TextSinkResize(Widget w)
+{
+ if (w && XtClass(w)->core_class.resize)
+ XtClass(w)->core_class.resize(w);
+}
+
+/* ARGSUSED */
+void
+_XawTextCheckResize(TextWidget ctx)
+{
+ return;
+}
+
+/*
+ * Converts (params, num_params) to a list of atoms & caches the
+ * list in the TextWidget instance.
+ */
+Atom *
+_XawTextSelectionList(TextWidget ctx, String *list, Cardinal nelems)
+{
+ Atom *sel = ctx->text.s.selections;
+ Display *dpy = XtDisplay((Widget)ctx);
+ int n;
+
+ if (nelems > (Cardinal)ctx->text.s.array_size) {
+ sel = (Atom *)XtRealloc((char *)sel, sizeof(Atom) * nelems);
+ ctx->text.s.array_size = nelems;
+ ctx->text.s.selections = sel;
+ }
+ for (n = nelems; --n >= 0; sel++, list++)
+ *sel = XInternAtom(dpy, *list, False);
+ ctx->text.s.atom_count = nelems;
+
+ return (ctx->text.s.selections);
+}
+
+/*
+ * Function:
+ * SetSelection
+ *
+ * Parameters:
+ * ctx - text widget
+ * defaultSel - default selection
+ * l - left and right ends of the selection
+ * r - ""
+ * list - the selection list (as strings).
+ * nelems - ""
+ *
+ * Description:
+ * Sets the current selection.
+ *
+ * Note:
+ * if (ctx->text.s.left >= ctx->text.s.right) then the selection is unset
+ */
+void
+_XawTextSetSelection(TextWidget ctx, XawTextPosition l, XawTextPosition r,
+ String *list, Cardinal nelems)
+{
+ if (nelems == 1 && !strcmp (list[0], "none"))
+ return;
+ if (nelems == 0) {
+ String defaultSel = "PRIMARY";
+ list = &defaultSel;
+ nelems = 1;
+ }
+ _SetSelection(ctx, l, r, _XawTextSelectionList(ctx, list, nelems), nelems);
+}
+
+/*
+ * Function:
+ * ModifySelection
+ *
+ * Parameters:
+ * ctx - text widget
+ * left - left and right ends of the selection
+ * right - ""
+ *
+ * Description:
+ * Modifies the current selection.
+ *
+ * Note:
+ * if (ctx->text.s.left >= ctx->text.s.right) then the selection is unset
+ */
+static void
+ModifySelection(TextWidget ctx, XawTextPosition left, XawTextPosition right)
+{
+ if (left == right)
+ ctx->text.insertPos = left;
+ _SetSelection(ctx, left, right, NULL, 0);
+}
+
+/*
+ * This routine is used to perform various selection functions. The goal is
+ * to be able to specify all the more popular forms of draw-through and
+ * multi-click selection user interfaces from the outside.
+ */
+void
+_XawTextAlterSelection(TextWidget ctx, XawTextSelectionMode mode,
+ XawTextSelectionAction action, String *params,
+ Cardinal *num_params)
+{
+ XawTextPosition position;
+ Boolean flag;
+
+ /*
+ * This flag is used by TextPop.c:DoReplace() to determine if the selection
+ * is okay to use, or if it has been modified.
+ */
+ if (ctx->text.search != NULL)
+ ctx->text.search->selection_changed = True;
+
+ position = PositionForXY(ctx, (int) ctx->text.ev_x, (int) ctx->text.ev_y);
+
+ flag = (action != XawactionStart);
+ if (mode == XawsmTextSelect)
+ DoSelection(ctx, position, ctx->text.time, flag);
+ else /* mode == XawsmTextExtend */
+ ExtendSelection (ctx, position, flag);
+
+ if (action == XawactionEnd)
+ _XawTextSetSelection(ctx, ctx->text.s.left, ctx->text.s.right,
+ params, *num_params);
+}
+
+/*
+ * Function:
+ * UpdateTextInRectangle
+ *
+ * Parameters:
+ * ctx - the text widget
+ * rect - rectangle
+ *
+ * Description:
+ * Updates the text in the given rectangle
+ */
+static void
+UpdateTextInRectangle(TextWidget ctx, XRectangle *rect)
+{
+ XawTextLineTable *lt;
+ int line, y1, y2, x2;
+
+ y1 = rect->y;
+ y2 = y1 + rect->height;
+ x2 = rect->x + rect->width;
+
+ for (line = 0, lt = &ctx->text.lt; line < lt->lines; line++)
+ if (lt->info[line + 1].y > y1)
+ break;
+ for (; line <= lt->lines; line++) {
+ if (lt->info[line].y > y2)
+ break;
+ UpdateTextInLine(ctx, line, rect->x, x2);
+ }
+}
+
+/*
+ * This routine processes all "expose region" XEvents. In general, its job
+ * is to the best job at minimal re-paint of the text, displayed in the
+ * window, that it can.
+ */
+/* ARGSUSED */
+static void
+XawTextExpose(Widget w, XEvent *event, Region region)
+{
+ TextWidget ctx = (TextWidget)w;
+ Boolean clear_to_eol;
+ XRectangle expose;
+
+ if (event->type == Expose) {
+ expose.x = event->xexpose.x;
+ expose.y = event->xexpose.y;
+ expose.width = event->xexpose.width;
+ expose.height = event->xexpose.height;
+ }
+ else if (event->type == GraphicsExpose) {
+ expose.x = event->xgraphicsexpose.x;
+ expose.y = event->xgraphicsexpose.y;
+ expose.width = event->xgraphicsexpose.width;
+ expose.height = event->xgraphicsexpose.height;
+ }
+ else
+ return;
+
+ _XawTextPrepareToUpdate(ctx);
+
+ if (Superclass->core_class.expose)
+ (*Superclass->core_class.expose)(w, event, region);
+
+ clear_to_eol = ctx->text.clear_to_eol;
+ ctx->text.clear_to_eol = False;
+
+ UpdateTextInRectangle(ctx, &expose);
+ XawTextSinkGetCursorBounds(ctx->text.sink, &expose);
+ UpdateTextInRectangle(ctx, &expose);
+ SinkClearToBG(ctx->text.sink, expose.x, expose.y,
+ expose.width, expose.height);
+ _XawTextExecuteUpdate(ctx);
+ ctx->text.clear_to_eol = clear_to_eol;
+}
+
+/*
+ * This routine does all setup required to syncronize batched screen updates
+ */
+void
+_XawTextPrepareToUpdate(TextWidget ctx)
+{
+ if (ctx->text.old_insert < 0) {
+ InsertCursor((Widget)ctx, XawisOff);
+ ctx->text.showposition = False;
+ ctx->text.old_insert = ctx->text.insertPos;
+ ctx->text.clear_to_eol = False;
+#ifndef OLDXAW
+ ctx->text.source_changed = SRC_CHANGE_NONE;
+#endif
+ }
+}
+
+/*
+ * This is a private utility routine used by _XawTextExecuteUpdate. It
+ * processes all the outstanding update requests and merges update
+ * ranges where possible.
+ */
+static void
+FlushUpdate(TextWidget ctx)
+{
+ XmuSegment *seg;
+ void (*display_text)(Widget, XawTextPosition, XawTextPosition);
+
+ if (XtIsRealized((Widget)ctx)) {
+ ctx->text.s.right = XawMin(ctx->text.s.right, ctx->text.lastPos);
+ ctx->text.s.left = XawMin(ctx->text.s.left, ctx->text.s.right);
+
+#ifndef OLDXAW
+ if (XawTextSinkBeginPaint(ctx->text.sink) == False)
+#endif
+ display_text = OldDisplayText;
+#ifndef OLDXAW
+ else
+ display_text = DisplayText;
+#endif
+ for (seg = ctx->text.update->segment; seg; seg = seg->next)
+ (*display_text)((Widget)ctx,
+ (XawTextPosition)seg->x1,
+ (XawTextPosition)seg->x2);
+#ifndef OLDXAW
+ if (display_text != OldDisplayText) {
+ XawTextSinkDoPaint(ctx->text.sink);
+ XawTextSinkEndPaint(ctx->text.sink);
+ }
+#endif
+ }
+ (void)XmuScanlineXor(ctx->text.update, ctx->text.update);
+}
+
+static int
+CountLines(TextWidget ctx, XawTextPosition left, XawTextPosition right)
+{
+ if (ctx->text.wrap == XawtextWrapNever || left >= right)
+ return (1);
+ else {
+ XawTextPosition tmp;
+ int dim, lines = 0, wwidth = GetMaxTextWidth(ctx);
+
+ while (left < right) {
+ tmp = left;
+ XawTextSinkFindPosition(ctx->text.sink, left,
+ ctx->text.left_margin,
+ wwidth, ctx->text.wrap == XawtextWrapWord,
+ &left, &dim, &dim);
+ ++lines;
+ if (tmp == left)
+ ++left;
+ }
+
+ return (lines);
+ }
+ /*NOTREACHED*/
+}
+
+static int
+GetMaxTextWidth(TextWidget ctx)
+{
+ XRectangle cursor;
+ int width;
+
+ XawTextSinkGetCursorBounds(ctx->text.sink, &cursor);
+ width = (int)XtWidth(ctx) - RHMargins(ctx) - cursor.width;
+
+ return (XawMax(0, width));
+}
+
+/*
+ * Function:
+ * _XawTextShowPosition
+ *
+ * Parameters:
+ * ctx - the text widget to show the position
+ *
+ * Description:
+ * Makes sure the text cursor visible, scrolling the text window
+ * if required.
+ */
+void
+_XawTextShowPosition(TextWidget ctx)
+{
+ /*
+ * Variable scroll is used to avoid scanning large files to calculate
+ * line offsets
+ */
+ int hpixels, vlines;
+ XawTextPosition first, last, top, tmp;
+ Bool visible, scroll;
+
+ if (!XtIsRealized((Widget)ctx))
+ return;
+
+ /*
+ * Checks if a horizontal scroll is required
+ */
+ if (ctx->text.wrap == XawtextWrapNever) {
+ int x, vwidth, distance, dim;
+ XRectangle rect;
+
+ vwidth = (int)XtWidth(ctx) - RHMargins(ctx);
+ last = SrcScan(ctx->text.source, ctx->text.insertPos,
+ XawstEOL, XawsdLeft, 1, False);
+ XawTextSinkFindDistance(ctx->text.sink, last,
+ ctx->text.left_margin,
+ ctx->text.insertPos,
+ &distance, &first, &dim);
+ XawTextSinkGetCursorBounds(ctx->text.sink, &rect);
+ x = ctx->text.left_margin - ctx->text.r_margin.left;
+
+ if (x + distance + rect.width > vwidth)
+ hpixels = x + distance + rect.width - vwidth + (vwidth >> 2);
+ else if (x + distance < 0)
+ hpixels = x + distance - (vwidth >> 2);
+ else
+ hpixels = 0;
+ }
+ else
+ hpixels = 0;
+
+ visible = IsPositionVisible(ctx, ctx->text.insertPos);
+
+ /*
+ * If the cursor is already visible
+ */
+ if (!hpixels && visible)
+ return;
+
+ scroll = ctx->core.background_pixmap == XtUnspecifiedPixmap && !hpixels;
+ vlines = 0;
+ first = ctx->text.lt.top;
+
+ /*
+ * Needs to scroll the text window
+ */
+ if (visible)
+ top = ctx->text.lt.top;
+ else {
+ top = SrcScan(ctx->text.source, ctx->text.insertPos,
+ XawstEOL, XawsdLeft, 1, False);
+
+ /*
+ * Finds the nearest left position from ctx->text.insertPos
+ */
+ if (ctx->text.wrap != XawtextWrapNever) {
+ int dim, vwidth = GetMaxTextWidth(ctx);
+
+ last = top;
+ /*CONSTCOND*/
+ while (1) {
+ tmp = last;
+ XawTextSinkFindPosition(ctx->text.sink, last,
+ ctx->text.left_margin, vwidth,
+ ctx->text.wrap == XawtextWrapWord,
+ &last, &dim, &dim);
+ if (last == tmp)
+ ++last;
+ if (last <= ctx->text.insertPos)
+ top = last;
+ else
+ break;
+ }
+ }
+ }
+
+ if (scroll) {
+ if (ctx->text.insertPos < first) { /* Scroll Down */
+ while (first > top) {
+ last = first;
+ first = SrcScan(ctx->text.source, first,
+ XawstEOL, XawsdLeft, 2, False);
+ vlines -= CountLines(ctx, first, last);
+ if (-vlines >= ctx->text.lt.lines) {
+ scroll = False;
+ break;
+ }
+ }
+ }
+ else if (!visible) { /* Scroll Up */
+ while (first < top) {
+ last = first;
+ first = SrcScan(ctx->text.source, first,
+ XawstEOL, XawsdRight, 1, True);
+ vlines += CountLines(ctx, last, first);
+ if (vlines > ctx->text.lt.lines) {
+ scroll = False;
+ break;
+ }
+ }
+ }
+ else
+ scroll = False;
+ }
+
+ /*
+ * If a portion of the text that will be scrolled is visible
+ */
+ if (scroll)
+ XawTextScroll(ctx, vlines ? vlines - (ctx->text.lt.lines >> 1) : 0, 0);
+ /*
+ * Else redraw the entire text window
+ */
+ else {
+ ctx->text.left_margin -= hpixels;
+ if (ctx->text.left_margin > ctx->text.r_margin.left)
+ ctx->text.left_margin = ctx->text.margin.left =
+ ctx->text.r_margin.left;
+
+ if (!visible) {
+ vlines = ctx->text.lt.lines >> 1;
+ if (vlines)
+ top = SrcScan(ctx->text.source, ctx->text.insertPos,
+ XawstEOL, XawsdLeft, vlines + 1, False);
+
+ if (ctx->text.wrap != XawtextWrapNever) {
+ int dim;
+ int n_lines = CountLines(ctx, top, ctx->text.insertPos);
+ int vwidth = GetMaxTextWidth(ctx);
+
+ while (n_lines-- > vlines) {
+ tmp = top;
+ XawTextSinkFindPosition(ctx->text.sink, top,
+ ctx->text.left_margin,
+ vwidth,
+ ctx->text.wrap == XawtextWrapWord,
+ &top, &dim, &dim);
+ if (tmp == top)
+ ++top;
+ }
+ }
+ _XawTextBuildLineTable(ctx, top, True);
+ }
+ else
+ ClearWindow(ctx);
+ }
+ ctx->text.clear_to_eol = True;
+}
+
+#ifndef OLDXAW
+static int
+ResolveLineNumber(TextWidget ctx)
+{
+ int line_number = ctx->text.lt.base_line;
+ XawTextPosition position = ctx->text.lt.top;
+
+ if (ctx->text.lt.base_line < 1)
+ return (ctx->text.line_number);
+
+ if (ctx->text.wrap == XawtextWrapNever
+ && IsPositionVisible(ctx, ctx->text.insertPos))
+ line_number += LineForPosition(ctx, ctx->text.insertPos);
+ else if (position < ctx->text.insertPos) {
+ while (position < ctx->text.insertPos) {
+ position = SrcScan(ctx->text.source, position,
+ XawstEOL, XawsdRight, 1, True);
+ if (position <= ctx->text.insertPos) {
+ ++line_number;
+ if (position == ctx->text.lastPos) {
+ line_number -= !_XawTextSourceNewLineAtEOF(ctx->text.source);
+ break;
+ }
+ }
+ }
+ }
+ else if (position > ctx->text.insertPos) {
+ while (position > ctx->text.insertPos) {
+ position = SrcScan(ctx->text.source, position,
+ XawstEOL, XawsdLeft, 1, False);
+ if (--position >= ctx->text.insertPos)
+ --line_number;
+ }
+ }
+
+ return (line_number);
+}
+#endif
+
+/*
+ * This routine causes all batched screen updates to be performed
+ */
+void
+_XawTextExecuteUpdate(TextWidget ctx)
+{
+ if (ctx->text.update_disabled || ctx->text.old_insert < 0)
+ return;
+
+ if(ctx->text.old_insert != ctx->text.insertPos || ctx->text.showposition)
+ _XawTextShowPosition(ctx);
+
+ FlushUpdate(ctx);
+ InsertCursor((Widget)ctx, XawisOn);
+ ctx->text.old_insert = -1;
+#ifndef OLDXAW
+ _XawTextSetLineAndColumnNumber(ctx, False);
+#endif
+}
+
+static void
+XawTextDestroy(Widget w)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ DestroyHScrollBar(ctx);
+ DestroyVScrollBar(ctx);
+
+ XtFree((char *)ctx->text.s.selections);
+ XtFree((char *)ctx->text.lt.info);
+ XtFree((char *)ctx->text.search);
+ XmuDestroyScanline(ctx->text.update);
+ XtReleaseGC((Widget)ctx, ctx->text.gc);
+}
+
+/*
+ * by the time we are managed (and get this far) we had better
+ * have both a source and a sink
+ */
+static void
+XawTextResize(Widget w)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ PositionVScrollBar(ctx);
+ PositionHScrollBar(ctx);
+ TextSinkResize(ctx->text.sink);
+
+ ctx->text.showposition = True;
+ _XawTextBuildLineTable(ctx, ctx->text.lt.top, True);
+}
+
+/*
+ * This routine allow the application program to Set attributes.
+ */
+/*ARGSUSED*/
+static Boolean
+XawTextSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ TextWidget oldtw = (TextWidget)current;
+ TextWidget newtw = (TextWidget)cnew;
+ Boolean redisplay = False;
+ Boolean display_caret = newtw->text.display_caret;
+#ifndef OLDXAW
+ Boolean show_lc = False;
+#endif
+
+ newtw->text.display_caret = oldtw->text.display_caret;
+ _XawTextPrepareToUpdate(newtw);
+ newtw->text.display_caret = display_caret;
+
+ if (oldtw->text.r_margin.left != newtw->text.r_margin.left) {
+ newtw->text.left_margin = newtw->text.margin.left =
+ newtw->text.r_margin.left;
+ if (newtw->text.vbar != NULL) {
+ newtw->text.left_margin += XtWidth(newtw->text.vbar) +
+ XtBorderWidth(newtw->text.vbar);
+ }
+ redisplay = True;
+ }
+
+ if (oldtw->text.scroll_vert != newtw->text.scroll_vert) {
+ if (newtw->text.scroll_vert == XawtextScrollAlways)
+ CreateVScrollBar(newtw);
+ else
+ DestroyVScrollBar(newtw);
+
+ redisplay = True;
+ }
+
+ if (oldtw->text.r_margin.bottom != newtw->text.r_margin.bottom) {
+ newtw->text.margin.bottom = newtw->text.r_margin.bottom;
+ if (newtw->text.hbar != NULL)
+ newtw->text.margin.bottom += newtw->text.hbar->core.height +
+ newtw->text.hbar->core.border_width;
+ redisplay = True;
+ }
+
+ if (oldtw->text.scroll_horiz != newtw->text.scroll_horiz) {
+ if (newtw->text.scroll_horiz == XawtextScrollAlways)
+ CreateHScrollBar(newtw);
+ else
+ DestroyHScrollBar(newtw);
+
+ redisplay = True;
+ }
+
+ if (oldtw->text.source != newtw->text.source) {
+#ifndef OLDXAW
+ show_lc = True;
+ _XawSourceRemoveText(oldtw->text.source, cnew,
+ oldtw->text.source &&
+ XtParent(oldtw->text.source) == cnew);
+ _XawSourceAddText(newtw->text.source, cnew);
+#endif
+ _XawTextSetSource((Widget)newtw, newtw->text.source, newtw->text.lt.top,
+ newtw->text.insertPos);
+ }
+
+ newtw->text.redisplay_needed = False;
+ XtSetValues((Widget)newtw->text.source, args, *num_args);
+ XtSetValues((Widget)newtw->text.sink, args, *num_args);
+
+ if (oldtw->text.wrap != newtw->text.wrap
+ || oldtw->text.lt.top != newtw->text.lt.top
+ || oldtw->text.insertPos != newtw->text.insertPos
+ || oldtw->text.r_margin.right != newtw->text.r_margin.right
+ || oldtw->text.r_margin.top != newtw->text.r_margin.top
+ || oldtw->text.sink != newtw->text.sink
+ || newtw->text.redisplay_needed) {
+ if (oldtw->text.wrap != newtw->text.wrap) {
+ newtw->text.left_margin = newtw->text.margin.left =
+ newtw->text.r_margin.left;
+ if (oldtw->text.lt.top == newtw->text.lt.top)
+ newtw->text.lt.top = SrcScan(newtw->text.source, 0, XawstEOL,
+ XawsdLeft, 1, False);
+ }
+ newtw->text.showposition = True;
+#ifndef OLDXAW
+ show_lc = True;
+ newtw->text.source_changed = SRC_CHANGE_OVERLAP;
+#endif
+ _XawTextBuildLineTable(newtw, newtw->text.lt.top, True);
+ redisplay = True;
+ }
+
+#ifndef OLDXAW
+ if (newtw->text.left_column < 0)
+ newtw->text.left_column = 0;
+ if (newtw->text.right_column < 0)
+ newtw->text.right_column = 0;
+#endif
+
+ _XawTextExecuteUpdate(newtw);
+
+#ifndef OLDXAW
+ if (show_lc)
+ _XawTextSetLineAndColumnNumber(newtw, True);
+#endif
+
+ if (redisplay)
+ _XawTextSetScrollBars(newtw);
+
+ return (redisplay);
+}
+
+/* invoked by the Simple widget's SetValues */
+static Bool
+XawTextChangeSensitive(Widget w)
+{
+ Arg args[1];
+ TextWidget tw = (TextWidget)w;
+
+ (*(&simpleClassRec)->simple_class.change_sensitive)(w);
+
+ XtSetArg(args[0], XtNancestorSensitive,
+ (tw->core.ancestor_sensitive && tw->core.sensitive));
+ if (tw->text.vbar)
+ XtSetValues(tw->text.vbar, args, ONE);
+ if (tw->text.hbar)
+ XtSetValues(tw->text.hbar, args, ONE);
+ return (False);
+}
+
+/*
+ * Function:
+ * XawTextGetValuesHook
+ *
+ * Parameters:
+ * w - Text Widget
+ * args - argument list
+ * num_args - number of args
+ *
+ * Description:
+ * This is a get values hook routine that gets the
+ * values in the text source and sink.
+ */
+static void
+XawTextGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
+{
+ XtGetValues(((TextWidget)w)->text.source, args, *num_args);
+ XtGetValues(((TextWidget)w)->text.sink, args, *num_args);
+}
+
+/*
+ * Function:
+ * FindGoodPosition
+ *
+ * Parameters:
+ * pos - any position
+ *
+ * Description:
+ * Returns a valid position given any postition.
+ *
+ * Returns:
+ * A position between (0 and lastPos)
+ */
+static XawTextPosition
+FindGoodPosition(TextWidget ctx, XawTextPosition pos)
+{
+ if (pos < 0)
+ return (0);
+ return (((pos > ctx->text.lastPos) ? ctx->text.lastPos : pos));
+}
+
+/* Li wrote this so the IM can find a given text position's screen position */
+void
+_XawTextPosToXY(Widget w, XawTextPosition pos, Position *x, Position *y)
+{
+ int line, ix, iy;
+
+ LineAndXYForPosition((TextWidget)w, pos, &line, &ix, &iy);
+ *x = ix;
+ *y = iy;
+}
+
+/*******************************************************************
+The following routines provide procedural interfaces to Text window state
+setting and getting. They need to be redone so than the args code can use
+them. I suggest we create a complete set that takes the context as an
+argument and then have the public version lookup the context and call the
+internal one. The major value of this set is that they have actual application
+clients and therefore the functionality provided is required for any future
+version of Text.
+********************************************************************/
+void
+XawTextDisplay(Widget w)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ if (!XtIsRealized(w))
+ return;
+
+ _XawTextPrepareToUpdate(ctx);
+ ctx->text.clear_to_eol = True;
+ DisplayTextWindow(w);
+ _XawTextExecuteUpdate(ctx);
+}
+
+void
+XawTextSetSelectionArray(Widget w, XawTextSelectType *sarray)
+{
+ ((TextWidget)w)->text.sarray = sarray;
+}
+
+void
+XawTextGetSelectionPos(Widget w, XawTextPosition *left, XawTextPosition *right)
+{
+ *left = ((TextWidget)w)->text.s.left;
+ *right = ((TextWidget)w)->text.s.right;
+}
+
+void
+_XawTextSetSource(Widget w, Widget source,
+ XawTextPosition top, XawTextPosition startPos)
+{
+ TextWidget ctx = (TextWidget)w;
+#ifndef OLDXAW
+ Bool resolve = False;
+#endif
+
+#ifndef OLDXAW
+ if (source != ctx->text.source)
+ _XawSourceRemoveText(ctx->text.source, w, ctx->text.source &&
+ XtParent(ctx->text.source) == w);
+ _XawSourceAddText(source, w);
+
+ if (source != ctx->text.source || ctx->text.insertPos != startPos)
+ resolve = True;
+
+ ctx->text.source_changed = SRC_CHANGE_OVERLAP;
+#endif
+ ctx->text.source = source;
+ ctx->text.s.left = ctx->text.s.right = 0;
+ ctx->text.lastPos = GETLASTPOS;
+ top = FindGoodPosition(ctx, top);
+ startPos = FindGoodPosition(ctx, startPos);
+ ctx->text.insertPos = ctx->text.old_insert = startPos;
+ _XawTextPrepareToUpdate(ctx);
+
+ _XawTextBuildLineTable(ctx, top, True);
+
+ _XawTextExecuteUpdate(ctx);
+#ifndef OLDXAW
+ if (resolve)
+ _XawTextSetLineAndColumnNumber(ctx, True);
+#endif
+}
+
+void
+XawTextSetSource(Widget w, Widget source, XawTextPosition top)
+{
+ _XawTextSetSource(w, source, top, top);
+}
+
+/*
+ * This public routine deletes the text from startPos to endPos in a source and
+ * then inserts, at startPos, the text that was passed. As a side effect it
+ * "invalidates" that portion of the displayed text (if any), so that things
+ * will be repainted properly.
+ */
+int
+XawTextReplace(Widget w, XawTextPosition startPos, XawTextPosition endPos,
+ XawTextBlock *text)
+{
+ TextWidget ctx = (TextWidget)w;
+ int result;
+#ifndef OLDXAW
+ Cardinal i;
+ TextSrcObject src = (TextSrcObject)ctx->text.source;
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ _XawTextPrepareToUpdate((TextWidget)src->textSrc.text[i]);
+#else
+ _XawTextPrepareToUpdate(ctx);
+#endif
+
+ endPos = FindGoodPosition(ctx, endPos);
+ startPos = FindGoodPosition(ctx, startPos);
+ result = _XawTextReplace(ctx, startPos, endPos, text);
+
+#ifndef OLDXAW
+ for (i = 0; i < src->textSrc.num_text; i++)
+ _XawTextExecuteUpdate((TextWidget)src->textSrc.text[i]);
+#else
+ _XawTextExecuteUpdate(ctx);
+#endif
+
+ return (result);
+}
+
+XawTextPosition
+XawTextTopPosition(Widget w)
+{
+ return (((TextWidget)w)->text.lt.top);
+}
+
+XawTextPosition
+XawTextLastPosition(Widget w)
+{
+ return (((TextWidget)w)->text.lastPos);
+}
+
+void
+XawTextSetInsertionPoint(Widget w, XawTextPosition position)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ _XawTextPrepareToUpdate(ctx);
+ ctx->text.insertPos = FindGoodPosition(ctx, position);
+ ctx->text.showposition = True;
+ ctx->text.from_left = -1;
+
+ _XawTextExecuteUpdate(ctx);
+#ifndef OLDXAW
+ _XawTextSetLineAndColumnNumber(ctx, False);
+#endif
+}
+
+XawTextPosition
+XawTextGetInsertionPoint(Widget w)
+{
+ return (((TextWidget)w)->text.insertPos);
+}
+
+/*
+ * Note: Must walk the selection list in opposite order from TextLoseSelection
+ */
+void
+XawTextUnsetSelection(Widget w)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ while (ctx->text.s.atom_count != 0) {
+ Atom sel = ctx->text.s.selections[ctx->text.s.atom_count - 1];
+
+ if (sel != (Atom) 0) {
+ /*
+ * As selections are lost the atom_count will decrement
+ */
+ if (GetCutBufferNumber(sel) == NOT_A_CUT_BUFFER)
+ XtDisownSelection(w, sel, ctx->text.time);
+ TextLoseSelection(w, &sel); /* In case this is a cut buffer, or
+ XtDisownSelection failed to call us */
+ }
+ }
+}
+
+void
+XawTextSetSelection(Widget w, XawTextPosition left, XawTextPosition right)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ _XawTextPrepareToUpdate(ctx);
+ _XawTextSetSelection(ctx, FindGoodPosition(ctx, left),
+ FindGoodPosition(ctx, right), NULL, 0);
+ _XawTextExecuteUpdate(ctx);
+}
+
+void
+XawTextInvalidate(Widget w, XawTextPosition from, XawTextPosition to)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ from = FindGoodPosition(ctx, from);
+ to = FindGoodPosition(ctx, to);
+ ctx->text.lastPos = GETLASTPOS;
+ _XawTextPrepareToUpdate(ctx);
+ _XawTextNeedsUpdating(ctx, from, to);
+ _XawTextExecuteUpdate(ctx);
+}
+
+/*ARGSUSED*/
+void
+XawTextDisableRedisplay(Widget w)
+{
+ ((TextWidget)w)->text.update_disabled = True;
+ _XawTextPrepareToUpdate((TextWidget)w);
+}
+
+void
+XawTextEnableRedisplay(Widget w)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition lastPos;
+
+ if (!ctx->text.update_disabled)
+ return;
+
+ ctx->text.update_disabled = False;
+ lastPos = ctx->text.lastPos = GETLASTPOS;
+ ctx->text.lt.top = FindGoodPosition(ctx, ctx->text.lt.top);
+ ctx->text.insertPos = FindGoodPosition(ctx, ctx->text.insertPos);
+
+ if (ctx->text.s.left > lastPos || ctx->text.s.right > lastPos)
+ ctx->text.s.left = ctx->text.s.right = 0;
+
+ _XawTextExecuteUpdate(ctx);
+}
+
+Widget
+XawTextGetSource(Widget w)
+{
+ return (((TextWidget)w)->text.source);
+}
+
+Widget
+XawTextGetSink(Widget w)
+{
+ return (((TextWidget)w)->text.sink);
+}
+
+void
+XawTextDisplayCaret(Widget w,
+#if NeedWidePrototypes
+ int display_caret
+#else
+ Boolean display_caret
+#endif
+)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ if (XtIsRealized(w)) {
+ _XawTextPrepareToUpdate(ctx);
+ ctx->text.display_caret = display_caret;
+ _XawTextExecuteUpdate(ctx);
+ }
+ else
+ ctx->text.display_caret = display_caret;
+}
+
+/*
+ * Function:
+ * XawTextSearch
+ *
+ * Parameters:
+ * w - text widget
+ * dir - direction to search
+ * text - text block containing info about the string to search for
+ *
+ * Description:
+ * Searches for the given text block.
+ *
+ * Returns:
+ * The position of the text found, or XawTextSearchError on an error
+ */
+XawTextPosition
+XawTextSearch(Widget w,
+#if NeedWidePrototypes
+ int dir,
+#else
+ XawTextScanDirection dir,
+#endif
+ XawTextBlock *text)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ return (SrcSearch(ctx->text.source, ctx->text.insertPos, dir, text));
+}
+
+TextClassRec textClassRec = {
+ /* core */
+ {
+ (WidgetClass)&simpleClassRec, /* superclass */
+ "Text", /* class_name */
+ sizeof(TextRec), /* widget_size */
+ XawTextClassInitialize, /* class_initialize */
+ NULL, /* class_part_init */
+ False, /* class_inited */
+ XawTextInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawTextRealize, /* realize */
+ _XawTextActionsTable, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resource */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ XtExposeGraphicsExpose | /* compress_exposure */
+ XtExposeNoExpose,
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawTextDestroy, /* destroy */
+ XawTextResize, /* resize */
+ XawTextExpose, /* expose */
+ XawTextSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ XawTextGetValuesHook, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ _XawDefaultTextTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XawTextChangeSensitive, /* change_sensitive */
+ },
+ /* text */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass textWidgetClass = (WidgetClass)&textClassRec;
diff --git a/libXaw/src/TextAction.c b/libXaw/src/TextAction.c
index 8f9fdd285..2e55f662e 100644
--- a/libXaw/src/TextAction.c
+++ b/libXaw/src/TextAction.c
@@ -1,4405 +1,4402 @@
-/* $Xorg: TextAction.c,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/*
-
-Copyright 1989, 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/TextAction.c,v 3.46tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <X11/Xos.h> /* for select() and struct timeval */
-#include <ctype.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xatom.h>
-#include <X11/Xfuncs.h>
-#include <X11/Xutil.h>
-#include <X11/Xwinsock.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xmu/StdSel.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/MultiSinkP.h>
-#include <X11/Xaw/MultiSrcP.h>
-#include <X11/Xaw/TextP.h>
-#include <X11/Xaw/TextSrcP.h>
-#include <X11/Xaw/XawImP.h>
-#include "Private.h"
-#include "XawI18n.h"
-
-#define SrcScan XawTextSourceScan
-#define FindDist XawTextSinkFindDistance
-#define FindPos XawTextSinkFindPosition
-#define MULT(w) (w->text.mult == 0 ? 4 : \
- w->text.mult == 32767 ? -4 : w->text.mult)
-
-#define KILL_RING_APPEND 2
-#define KILL_RING_BEGIN 3
-#define KILL_RING_YANK 100
-#define KILL_RING_YANK_DONE 98
-
-#define XawTextActionMaxHexChars 100
-
-#ifdef _MSC_VER
-#define usleep(time) Sleep(time)
-#endif
-/*
- * Prototypes
- */
-static void _DeleteOrKill(TextWidget, XawTextPosition, XawTextPosition, Bool);
-static void _SelectionReceived(Widget, XtPointer, Atom*, Atom*, XtPointer,
- unsigned long*, int*);
-static void _LoseSelection(Widget, Atom*, char**, int*);
-static void AutoFill(TextWidget);
-static Boolean ConvertSelection(Widget, Atom*, Atom*, Atom*, XtPointer*,
- unsigned long*, int*);
-static void DeleteOrKill(TextWidget, XEvent*, XawTextScanDirection,
- XawTextScanType, Bool, Bool);
-static void EndAction(TextWidget);
-#ifndef OLDXAW
-static Bool BlankLine(Widget, XawTextPosition, int*);
-static int DoFormatText(TextWidget, XawTextPosition, Bool, int,
- XawTextBlock*, XawTextPosition*, int, Bool);
-static int FormatText(TextWidget, XawTextPosition, Bool,
- XawTextPosition*, int);
-static Bool GetBlockBoundaries(TextWidget, XawTextPosition*, XawTextPosition*);
-#endif
-static int FormRegion(TextWidget, XawTextPosition, XawTextPosition,
- XawTextPosition*, int);
-static void GetSelection(Widget, Time, String*, Cardinal);
-static char *IfHexConvertHexElseReturnParam(char*, int*);
-static void InsertNewCRs(TextWidget, XawTextPosition, XawTextPosition,
- XawTextPosition*, int);
-static int InsertNewLineAndBackupInternal(TextWidget);
-static int LocalInsertNewLine(TextWidget, XEvent*);
-static void LoseSelection(Widget, Atom*);
-static void ParameterError(Widget, String);
-static Bool MatchSelection(Atom, XawTextSelection*);
-static void ModifySelection(TextWidget, XEvent*, XawTextSelectionMode,
- XawTextSelectionAction, String*, Cardinal*);
-static void Move(TextWidget, XEvent*, XawTextScanDirection, XawTextScanType,
- Bool);
-static void NotePosition(TextWidget, XEvent*);
-static void StartAction(TextWidget, XEvent*);
-static XawTextPosition StripOutOldCRs(TextWidget, XawTextPosition,
- XawTextPosition, XawTextPosition*, int);
-#ifndef OLDXAW
-static Bool StripSpaces(TextWidget, XawTextPosition, XawTextPosition,
- XawTextPosition*, int, XawTextBlock*);
-static Bool Tabify(TextWidget, XawTextPosition, XawTextPosition,
- XawTextPosition*, int, XawTextBlock*);
-static Bool Untabify(TextWidget, XawTextPosition, XawTextPosition,
- XawTextPosition*, int, XawTextBlock*);
-#endif
-
-/*
- * Actions
- */
-static void CapitalizeWord(Widget, XEvent*, String*, Cardinal*);
-static void DisplayCaret(Widget, XEvent*, String*, Cardinal*);
-static void Delete(Widget, XEvent*, String*, Cardinal*);
-static void DeleteBackwardChar(Widget, XEvent*, String*, Cardinal*);
-static void DeleteBackwardWord(Widget, XEvent*, String*, Cardinal*);
-static void DeleteCurrentSelection(Widget, XEvent*, String*, Cardinal*);
-static void DeleteForwardChar(Widget, XEvent*, String*, Cardinal*);
-static void DeleteForwardWord(Widget, XEvent*, String*, Cardinal*);
-static void DowncaseWord(Widget, XEvent*, String*, Cardinal*);
-static void ExtendAdjust(Widget, XEvent*, String*, Cardinal*);
-static void ExtendEnd(Widget, XEvent*, String*, Cardinal*);
-static void ExtendStart(Widget, XEvent*, String*, Cardinal*);
-static void FormParagraph(Widget, XEvent*, String*, Cardinal*);
-#ifndef OLDXAW
-static void Indent(Widget, XEvent*, String*, Cardinal*);
-#endif
-static void InsertChar(Widget, XEvent*, String*, Cardinal*);
-static void InsertNewLine(Widget, XEvent*, String*, Cardinal*);
-static void InsertNewLineAndBackup(Widget, XEvent*, String*, Cardinal*);
-static void InsertNewLineAndIndent(Widget, XEvent*, String*, Cardinal*);
-static void InsertSelection(Widget, XEvent*, String*, Cardinal*);
-static void InsertString(Widget, XEvent*, String*, Cardinal*);
-#ifndef OLDXAW
-static void KeyboardReset(Widget, XEvent*, String*, Cardinal*);
-#endif
-static void KillBackwardWord(Widget, XEvent*, String*, Cardinal*);
-static void KillCurrentSelection(Widget, XEvent*, String*, Cardinal*);
-static void KillForwardWord(Widget, XEvent*, String*, Cardinal*);
-#ifndef OLDXAW
-static void KillRingYank(Widget, XEvent*, String*, Cardinal*);
-#endif
-static void KillToEndOfLine(Widget, XEvent*, String*, Cardinal*);
-static void KillToEndOfParagraph(Widget, XEvent*, String*, Cardinal*);
-static void MoveBackwardChar(Widget, XEvent*, String*, Cardinal*);
-static void MoveBackwardWord(Widget, XEvent*, String*, Cardinal*);
-static void MoveBackwardParagraph(Widget, XEvent*, String*, Cardinal*);
-static void MoveBeginningOfFile(Widget, XEvent*, String*, Cardinal*);
-static void MoveEndOfFile(Widget, XEvent*, String*, Cardinal*);
-static void MoveForwardChar(Widget, XEvent*, String*, Cardinal*);
-static void MoveForwardWord(Widget, XEvent*, String*, Cardinal*);
-static void MoveForwardParagraph(Widget, XEvent*, String*, Cardinal*);
-static void MoveNextLine(Widget, XEvent*, String*, Cardinal*);
-static void MoveNextPage(Widget, XEvent*, String*, Cardinal*);
-static void MovePage(TextWidget, XEvent*, XawTextScanDirection);
-static void MovePreviousLine(Widget, XEvent*, String*, Cardinal*);
-static void MovePreviousPage(Widget, XEvent*, String*, Cardinal*);
-static void MoveLine(TextWidget, XEvent*, XawTextScanDirection);
-static void MoveToLineEnd(Widget, XEvent*, String*, Cardinal*);
-static void MoveToLineStart(Widget, XEvent*, String*, Cardinal*);
-static void Multiply(Widget, XEvent*, String*, Cardinal*);
-static void NoOp(Widget, XEvent*, String*, Cardinal*);
-#ifndef OLDXAW
-static void Numeric(Widget, XEvent*, String*, Cardinal*);
-#endif
-static void Reconnect(Widget, XEvent*, String*, Cardinal*);
-static void RedrawDisplay(Widget, XEvent*, String*, Cardinal*);
-static void Scroll(TextWidget, XEvent*, XawTextScanDirection);
-static void ScrollOneLineDown(Widget, XEvent*, String*, Cardinal*);
-static void ScrollOneLineUp(Widget, XEvent*, String*, Cardinal*);
-static void SelectAdjust(Widget, XEvent*, String*, Cardinal*);
-static void SelectAll(Widget, XEvent*, String*, Cardinal*);
-static void SelectEnd(Widget, XEvent*, String*, Cardinal*);
-static void SelectSave(Widget, XEvent*, String*, Cardinal*);
-static void SelectStart(Widget, XEvent*, String*, Cardinal*);
-static void SelectWord(Widget, XEvent*, String*, Cardinal*);
-static void SetKeyboardFocus(Widget, XEvent*, String*, Cardinal*);
-static void TextEnterWindow(Widget, XEvent*, String*, Cardinal*);
-static void TextFocusIn(Widget, XEvent*, String*, Cardinal*);
-static void TextFocusOut(Widget, XEvent*, String*, Cardinal*);
-static void TextLeaveWindow(Widget, XEvent*, String*, Cardinal*);
-static void TransposeCharacters(Widget, XEvent*, String*, Cardinal*);
-#ifndef OLDXAW
-static void ToggleOverwrite(Widget, XEvent*, String*, Cardinal*);
-static void Undo(Widget, XEvent*, String*, Cardinal*);
-#endif
-static void UpcaseWord(Widget, XEvent*, String*, Cardinal*);
-static void DestroyFocusCallback(Widget, XtPointer, XtPointer);
-
-/*
- * External
- */
-void _XawTextZapSelection(TextWidget, XEvent*, Bool);
-
-/*
- * Defined in TextPop.c
- */
-void _XawTextInsertFileAction(Widget, XEvent*, String*, Cardinal*);
-void _XawTextInsertFile(Widget, XEvent*, String*, Cardinal*);
-void _XawTextSearch(Widget, XEvent*, String*, Cardinal*);
-void _XawTextDoSearchAction(Widget, XEvent*, String*, Cardinal*);
-void _XawTextDoReplaceAction(Widget, XEvent*, String*, Cardinal*);
-void _XawTextSetField(Widget, XEvent*, String*, Cardinal*);
-void _XawTextPopdownSearchAction(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * These are defined in Text.c
- */
-void _XawTextAlterSelection(TextWidget, XawTextSelectionMode,
- XawTextSelectionAction, String*, Cardinal*);
-void _XawTextClearAndCenterDisplay(TextWidget);
-void _XawTextExecuteUpdate(TextWidget);
-char *_XawTextGetText(TextWidget, XawTextPosition, XawTextPosition);
-void _XawTextPrepareToUpdate(TextWidget);
-int _XawTextReplace(TextWidget, XawTextPosition, XawTextPosition,
- XawTextBlock*);
-Atom *_XawTextSelectionList(TextWidget, String*, Cardinal);
-void _XawTextSetSelection(TextWidget, XawTextPosition, XawTextPosition,
- String*, Cardinal);
-void _XawTextVScroll(TextWidget, int);
-void XawTextScroll(TextWidget, int, int);
-void _XawTextSetLineAndColumnNumber(TextWidget, Bool);
-
-#ifndef OLDXAW
-/*
- * Defined in TextSrc.c
- */
-Bool _XawTextSrcUndo(TextSrcObject, XawTextPosition*);
-Bool _XawTextSrcToggleUndo(TextSrcObject);
-void _XawSourceSetUndoErase(TextSrcObject, int);
-void _XawSourceSetUndoMerge(TextSrcObject, Bool);
-#endif /* OLDXAW */
-
-/*
- * Initialization
- */
-#ifndef OLDXAW
-#define MAX_KILL_RINGS 1024
-XawTextKillRing *xaw_text_kill_ring;
-static XawTextKillRing kill_ring_prev, kill_ring_null = { &kill_ring_prev, };
-static unsigned num_kill_rings;
-#endif
-
-/*
- * Implementation
- */
-static void
-ParameterError(Widget w, String param)
-{
- String params[2];
- Cardinal num_params = 2;
- params[0] = XtName(w);
- params[1] = param;
-
- XtAppWarningMsg(XtWidgetToApplicationContext(w),
- "parameterError", "textAction", "XawError",
- "Widget: %s Parameter: %s",
- params, &num_params);
- XBell(XtDisplay(w), 50);
-}
-
-static void
-StartAction(TextWidget ctx, XEvent *event)
-{
-#ifndef OLDXAW
- Cardinal i;
- TextSrcObject src = (TextSrcObject)ctx->text.source;
-
- for (i = 0; i < src->textSrc.num_text; i++)
- _XawTextPrepareToUpdate((TextWidget)src->textSrc.text[i]);
- _XawSourceSetUndoMerge(src, False);
-#else
- _XawTextPrepareToUpdate(ctx);
-#endif
-
- if (event != NULL) {
- switch (event->type) {
- case ButtonPress:
- case ButtonRelease:
- ctx->text.time = event->xbutton.time;
- break;
- case KeyPress:
- case KeyRelease:
- ctx->text.time = event->xkey.time;
- break;
- case MotionNotify:
- ctx->text.time = event->xmotion.time;
- break;
- case EnterNotify:
- case LeaveNotify:
- ctx->text.time = event->xcrossing.time;
- }
- }
-}
-
-static void
-NotePosition(TextWidget ctx, XEvent *event)
-{
- switch (event->type) {
- case ButtonPress:
- case ButtonRelease:
- ctx->text.ev_x = event->xbutton.x;
- ctx->text.ev_y = event->xbutton.y;
- break;
- case KeyPress:
- case KeyRelease: {
- XRectangle cursor;
- XawTextSinkGetCursorBounds(ctx->text.sink, &cursor);
- ctx->text.ev_x = cursor.x + cursor.width / 2;
- ctx->text.ev_y = cursor.y + cursor.height / 2;
- } break;
- case MotionNotify:
- ctx->text.ev_x = event->xmotion.x;
- ctx->text.ev_y = event->xmotion.y;
- break;
- case EnterNotify:
- case LeaveNotify:
- ctx->text.ev_x = event->xcrossing.x;
- ctx->text.ev_y = event->xcrossing.y;
- }
-}
-
-static void
-EndAction(TextWidget ctx)
-{
-#ifndef OLDXAW
- Cardinal i;
- TextSrcObject src = (TextSrcObject)ctx->text.source;
-
- for (i = 0; i < src->textSrc.num_text; i++)
- _XawTextExecuteUpdate((TextWidget)src->textSrc.text[i]);
-
- ctx->text.mult = 1;
- ctx->text.numeric = False;
- if (ctx->text.kill_ring) {
- if (--ctx->text.kill_ring == KILL_RING_YANK_DONE) {
- if (ctx->text.kill_ring_ptr) {
- --ctx->text.kill_ring_ptr->refcount;
- ctx->text.kill_ring_ptr = NULL;
- }
- }
- }
-#else
- ctx->text.mult = 1;
- _XawTextExecuteUpdate(ctx);
-#endif /* OLDXAW */
-}
-
-struct _SelectionList {
- String* params;
- Cardinal count;
- Time time;
- int asked; /* which selection currently has been asked for:
- 0 = UTF8_STRING, 1 = COMPOUND_TEXT, 2 = STRING */
- Atom selection; /* selection atom (normally XA_PRIMARY) */
-};
-
-/*ARGSUSED*/
-static void
-_SelectionReceived(Widget w, XtPointer client_data, Atom *selection,
- Atom *type, XtPointer value, unsigned long *length,
- int *format)
-{
- Display *d = XtDisplay(w);
- TextWidget ctx = (TextWidget)w;
- XawTextBlock text;
-
- if (*type == 0 /*XT_CONVERT_FAIL*/ || *length == 0) {
- struct _SelectionList* list = (struct _SelectionList*)client_data;
-
- if (list != NULL) {
- if (list->asked == 0) {
- /* If we just asked for XA_UTF8_STRING and got no response,
- we'll ask again, this time for XA_COMPOUND_TEXT. */
- list->asked++;
- XtGetSelectionValue(w, list->selection, XA_COMPOUND_TEXT(d),
- _SelectionReceived,
- (XtPointer)list, list->time);
- } else if (list->asked == 1) {
- /* If we just asked for XA_COMPOUND_TEXT and got no response,
- we'll ask again, this time for XA_STRING. */
- list->asked++;
- XtGetSelectionValue(w, list->selection, XA_STRING,
- _SelectionReceived,
- (XtPointer)list, list->time);
- } else {
- /* We tried all possible text targets in this param.
- Recurse on the tail of the params list. */
- GetSelection(w, list->time, list->params, list->count);
- XtFree(client_data);
- }
- }
- return;
- }
-
- StartAction(ctx, NULL);
- if (XawTextFormat(ctx, XawFmtWide)) {
- XTextProperty textprop;
- wchar_t **wlist;
- int count;
-
- textprop.encoding = *type;
- textprop.value = (unsigned char *)value;
- textprop.nitems = strlen(value);
- textprop.format = 8;
-
- if (XwcTextPropertyToTextList(d, &textprop, &wlist, &count)
- != Success
- || count < 1) {
- XwcFreeStringList(wlist);
-
- /* Notify the user on strerr and in the insertion :) */
- fprintf(stderr, "Xaw Text Widget: An attempt was made to insert "
- "an illegal selection.\n");
-
- textprop.value = (unsigned char *)" >> ILLEGAL SELECTION << ";
- textprop.nitems = strlen((char *) textprop.value);
- if (XwcTextPropertyToTextList(d, &textprop, &wlist, &count)
- != Success
- || count < 1)
- return;
- }
-
- XFree(value);
- value = (XPointer)wlist[0];
-
- *length = wcslen(wlist[0]);
- XtFree((XtPointer)wlist);
- text.format = XawFmtWide;
- }
- text.ptr = (char*)value;
- text.firstPos = 0;
- text.length = *length;
- if (_XawTextReplace(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
- XBell(XtDisplay(ctx), 0);
- EndAction(ctx);
- return;
- }
-
- ctx->text.from_left = -1;
- ctx->text.insertPos = SrcScan(ctx->text.source, ctx->text.old_insert,
- XawstPositions, XawsdRight, text.length, True);
-
- EndAction(ctx);
- XtFree(client_data);
- XFree(value); /* the selection value should be freed with XFree */
-}
-
-static void
-GetSelection(Widget w, Time timev, String *params, Cardinal num_params)
-{
- Display *d = XtDisplay(w);
- TextWidget ctx = (TextWidget)w;
- Atom selection;
- int buffer;
-
- selection = XInternAtom(XtDisplay(w), *params, False);
- switch (selection) {
- case XA_CUT_BUFFER0: buffer = 0; break;
- case XA_CUT_BUFFER1: buffer = 1; break;
- case XA_CUT_BUFFER2: buffer = 2; break;
- case XA_CUT_BUFFER3: buffer = 3; break;
- case XA_CUT_BUFFER4: buffer = 4; break;
- case XA_CUT_BUFFER5: buffer = 5; break;
- case XA_CUT_BUFFER6: buffer = 6; break;
- case XA_CUT_BUFFER7: buffer = 7; break;
- default: buffer = -1;
- }
- if (buffer >= 0) {
- int nbytes;
- unsigned long length;
- int fmt8 = 8;
- Atom type = XA_STRING;
- char *line = XFetchBuffer(XtDisplay(w), &nbytes, buffer);
-
- if ((length = nbytes) != 0L)
- _SelectionReceived(w, NULL, &selection, &type, line, &length, &fmt8);
- else if (num_params > 1)
- GetSelection(w, timev, params+1, num_params-1);
- }
- else {
- struct _SelectionList* list;
-
- if (--num_params) {
- list = XtNew(struct _SelectionList);
- list->params = params + 1;
- list->count = num_params;
- list->time = timev;
- list->asked = 0;
- list->selection = selection;
- }
- else
- list = NULL;
- XtGetSelectionValue(w, selection, XawTextFormat(ctx, XawFmtWide) ?
- XA_UTF8_STRING(d) : XA_TEXT(d),
- _SelectionReceived, (XtPointer)list, timev);
- }
-}
-
-static void
-InsertSelection(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- StartAction((TextWidget)w, event); /* Get Time. */
- GetSelection(w, ((TextWidget)w)->text.time, params, *num_params);
- EndAction((TextWidget)w);
-}
-
-/*
- * Routines for Moving Around
- */
-static void
-Move(TextWidget ctx, XEvent *event, XawTextScanDirection dir,
- XawTextScanType type, Bool include)
-{
- XawTextPosition insertPos;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- mult = -mult;
- dir = dir == XawsdLeft ? XawsdRight : XawsdLeft;
- }
-
- insertPos = SrcScan(ctx->text.source, ctx->text.insertPos,
- type, dir, mult, include);
-
- StartAction(ctx, event);
-
- if (ctx->text.s.left != ctx->text.s.right)
- XawTextUnsetSelection((Widget)ctx);
-
-#ifndef OLDXAW
- ctx->text.numeric = False;
-#endif
- ctx->text.mult = 1;
- ctx->text.showposition = True;
- ctx->text.from_left = -1;
- ctx->text.insertPos = insertPos;
- EndAction(ctx);
-}
-
-/*ARGSUSED*/
-static void
-MoveForwardChar(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- Move((TextWidget)w, event, XawsdRight, XawstPositions, True);
-}
-
-/*ARGSUSED*/
-static void
-MoveBackwardChar(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- Move((TextWidget)w, event, XawsdLeft, XawstPositions, True);
-}
-
-static void
-MoveForwardWord(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- if (*n && (p[0][0] == 'A' || p[0][0] == 'a'))
- Move((TextWidget)w, event, XawsdRight, XawstAlphaNumeric, False);
- else
- Move((TextWidget)w, event, XawsdRight, XawstWhiteSpace, False);
-}
-
-static void
-MoveBackwardWord(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- if (*n && (p[0][0] == 'A' || p[0][0] == 'a'))
- Move((TextWidget)w, event, XawsdLeft, XawstAlphaNumeric, False);
- else
- Move((TextWidget)w, event, XawsdLeft, XawstWhiteSpace, False);
-}
-
-static void
-MoveForwardParagraph(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition position = ctx->text.insertPos;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- ctx->text.mult = -mult;
- MoveBackwardParagraph(w, event, p, n);
- return;
- }
-
- while (mult--) {
- position = SrcScan(ctx->text.source, position,
- XawstEOL, XawsdRight, 1, False) - 1;
-
- while (position == SrcScan(ctx->text.source, position,
- XawstEOL, XawsdRight, 1, False))
- if (++position > ctx->text.lastPos) {
- mult = 0;
- break;
- }
-
- position = SrcScan(ctx->text.source, position,
- XawstParagraph, XawsdRight, 1, True);
- if (position != ctx->text.lastPos)
- position = SrcScan(ctx->text.source, position - 1,
- XawstEOL, XawsdLeft, 1, False);
- else
- break;
- }
-
- if (position != ctx->text.insertPos) {
- XawTextUnsetSelection(w);
- StartAction(ctx, event);
- ctx->text.showposition = True;
- ctx->text.from_left = -1;
- ctx->text.insertPos = position;
- EndAction(ctx);
- }
- else
- ctx->text.mult = 1;
-}
-
-/*ARGSUSED*/
-static void
-MoveBackwardParagraph(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition position = ctx->text.insertPos;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- ctx->text.mult = -mult;
- MoveForwardParagraph(w, event, p, n);
- return;
- }
-
- while (mult--) {
- position = SrcScan(ctx->text.source, position,
- XawstEOL, XawsdLeft, 1, False) + 1;
-
- while (position == SrcScan(ctx->text.source, position,
- XawstEOL, XawsdLeft, 1, False))
- if (--position < 0) {
- mult = 0;
- break;
- }
-
- position = SrcScan(ctx->text.source, position,
- XawstParagraph, XawsdLeft, 1, True);
- if (position > 0 && position < ctx->text.lastPos)
- ++position;
- else
- break;
- }
-
- if (position != ctx->text.insertPos) {
- XawTextUnsetSelection(w);
- StartAction(ctx, event);
- ctx->text.showposition = True;
- ctx->text.from_left = -1;
- ctx->text.insertPos = position;
- EndAction(ctx);
- }
- else
- ctx->text.mult = 1;
-}
-
-/*ARGSUSED*/
-static void
-MoveToLineEnd(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- Move((TextWidget)w, event, XawsdRight, XawstEOL, False);
-}
-
-/*ARGSUSED*/
-static void
-MoveToLineStart(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- Move((TextWidget)w, event, XawsdLeft, XawstEOL, False);
-}
-
-static void
-MoveLine(TextWidget ctx, XEvent *event, XawTextScanDirection dir)
-{
- XawTextPosition cnew, next_line, ltemp;
- int itemp, from_left;
- short mult = MULT(ctx);
-
- StartAction(ctx, event);
-
- XawTextUnsetSelection((Widget)ctx);
-
- if (dir == XawsdLeft)
- mult = mult == 0 ? 5 : mult + 1;
-
- cnew = SrcScan(ctx->text.source, ctx->text.insertPos,
- XawstEOL, XawsdLeft, 1, False);
-
- if (ctx->text.from_left < 0)
- FindDist(ctx->text.sink, cnew, ctx->text.left_margin, ctx->text.insertPos,
- &ctx->text.from_left, &ltemp, &itemp);
-
- cnew = SrcScan(ctx->text.source, ctx->text.insertPos, XawstEOL, dir,
- mult, (dir == XawsdRight));
-
- next_line = SrcScan(ctx->text.source, cnew, XawstEOL, XawsdRight, 1, False);
-
- FindPos(ctx->text.sink, cnew, ctx->text.left_margin, ctx->text.from_left,
- False, &ctx->text.insertPos, &from_left, &itemp);
-
- if (from_left < ctx->text.from_left) {
- XawTextBlock block;
-
- XawTextSourceRead(ctx->text.source, ctx->text.insertPos, &block, 1);
- if (block.length) {
- if (XawTextFormat(ctx, XawFmtWide)) {
- if (*(wchar_t *)block.ptr == _Xaw_atowc(XawTAB))
- ++ctx->text.insertPos;
- }
- else if (block.ptr[0] == XawTAB)
- ++ctx->text.insertPos;
- }
- }
-
- if (ctx->text.insertPos > next_line)
- ctx->text.insertPos = next_line;
-
- EndAction(ctx);
-}
-
-static void
-MoveNextLine(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- ctx->text.mult = -mult;
- MovePreviousLine(w, event, p, n);
- return;
- }
-
- if (ctx->text.insertPos < ctx->text.lastPos)
- MoveLine(ctx, event, XawsdRight);
- else
- ctx->text.mult = 1;
-}
-
-static void
-MovePreviousLine(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- ctx->text.mult = -mult;
- MoveNextLine(w, event, p, n);
- return;
- }
-
- if (ctx->text.lt.top != 0 || (ctx->text.lt.lines > 1 &&
- ctx->text.insertPos >= ctx->text.lt.info[1].position))
- MoveLine(ctx, event, XawsdLeft);
- else
- ctx->text.mult = 1;
-}
-
-/*ARGSUSED*/
-static void
-MoveBeginningOfFile(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- Move((TextWidget)w, event, XawsdLeft, XawstAll, True);
-}
-
-/*ARGSUSED*/
-static void
-MoveEndOfFile(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- Move((TextWidget)w, event, XawsdRight, XawstAll, True);
-}
-
-static void
-Scroll(TextWidget ctx, XEvent *event, XawTextScanDirection dir)
-{
- short mult = MULT(ctx);
-
- if (mult < 0) {
- mult = -mult;
- dir = dir == XawsdLeft ? XawsdRight : XawsdLeft;
- }
-
- if (ctx->text.lt.lines > 1
- && (dir == XawsdRight
- || ctx->text.lastPos >= ctx->text.lt.info[1].position)) {
- StartAction(ctx, event);
-
- if (dir == XawsdLeft)
- _XawTextVScroll(ctx, mult);
- else
- _XawTextVScroll(ctx, -mult);
-
- EndAction(ctx);
- }
- else {
- ctx->text.mult = 1;
-#ifndef OLDXAW
- ctx->text.numeric = False;
-#endif
- }
-}
-
-/*ARGSUSED*/
-static void
-ScrollOneLineUp(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- Scroll((TextWidget)w, event, XawsdLeft);
-}
-
-/*ARGSUSED*/
-static void
-ScrollOneLineDown(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- Scroll((TextWidget)w, event, XawsdRight);
-}
-
-static void
-MovePage(TextWidget ctx, XEvent *event, XawTextScanDirection dir)
-{
- int scroll_val = 0;
- XawTextPosition old_pos;
-
- ctx->text.from_left = -1;
- switch (dir) {
- case XawsdLeft:
- if (ctx->text.lt.top != 0)
- scroll_val = -Max(1, ctx->text.lt.lines - 1);
- break;
- case XawsdRight:
- if (!IsPositionVisible(ctx, Max(0, ctx->text.lastPos)))
- scroll_val = Max(1, ctx->text.lt.lines - 1);
- break;
- }
-
- if (scroll_val)
- XawTextScroll(ctx, scroll_val,
- ctx->text.left_margin - ctx->text.r_margin.left);
-
- old_pos = ctx->text.insertPos;
- switch (dir) {
- case XawsdRight:
- if (IsPositionVisible(ctx, Max(0, ctx->text.lastPos)))
- ctx->text.insertPos = Max(0, ctx->text.lastPos);
- else
- ctx->text.insertPos = ctx->text.lt.top;
- if (ctx->text.insertPos < old_pos)
- ctx->text.insertPos = SrcScan(ctx->text.source, old_pos,
- XawstEOL, XawsdLeft, 1, False);
- break;
- case XawsdLeft:
- if (IsPositionVisible(ctx, 0))
- ctx->text.insertPos = 0;
- else if (ctx->text.lt.lines)
- ctx->text.insertPos =
- ctx->text.lt.info[ctx->text.lt.lines - 1].position;
- else
- ctx->text.insertPos = ctx->text.lt.top;
- if (ctx->text.insertPos > old_pos)
- ctx->text.insertPos = SrcScan(ctx->text.source, old_pos,
- XawstEOL, XawsdLeft, 1, False);
- break;
- }
-}
-
-static void
-MoveNextPage(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- ctx->text.mult = -mult;
- MovePreviousPage(w, event, p, n);
- return;
- }
-
- if (ctx->text.insertPos < ctx->text.lastPos) {
- XawTextUnsetSelection(w);
- StartAction(ctx, event);
- ctx->text.clear_to_eol = True;
- while (mult-- && ctx->text.insertPos < ctx->text.lastPos)
- MovePage(ctx, event, XawsdRight);
- EndAction(ctx);
- }
- else
- ctx->text.mult = 1;
-}
-
-/*ARGSUSED*/
-static void
-MovePreviousPage(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- ctx->text.mult = -mult;
- MoveNextPage(w, event, p, n);
- return;
- }
-
- if (ctx->text.insertPos > 0) {
- XawTextUnsetSelection(w);
- StartAction(ctx, event);
- ctx->text.clear_to_eol = True;
- while (mult-- && ctx->text.insertPos > 0)
- MovePage(ctx, event, XawsdLeft);
- EndAction(ctx);
- }
- else
- ctx->text.mult = 1;
-}
-
-/*
- * Delete Routines
- */
-static Bool
-MatchSelection(Atom selection, XawTextSelection *s)
-{
- Atom *match;
- int count;
-
- for (count = 0, match = s->selections; count < s->atom_count;
- match++, count++)
- if (*match == selection)
- return (True);
-
- return (False);
-}
-
-#define SrcCvtSel XawTextSourceConvertSelection
-
-static Boolean
-ConvertSelection(Widget w, Atom *selection, Atom *target, Atom *type,
- XtPointer *value, unsigned long *length, int *format)
-{
- Display *d = XtDisplay(w);
- TextWidget ctx = (TextWidget)w;
- Widget src = ctx->text.source;
- XawTextEditType edit_mode;
- Arg args[1];
- XawTextSelectionSalt *salt = NULL;
- XawTextSelection *s;
-
- if (*target == XA_TARGETS(d)) {
- Atom *targetP, *std_targets;
- unsigned long std_length;
-
- if (SrcCvtSel(src, selection, target, type, value, length, format))
- return (True);
-
- XtSetArg(args[0], XtNeditType,&edit_mode);
- XtGetValues(src, args, 1);
-
- XmuConvertStandardSelection(w, ctx->text.time, selection,
- target, type, (XPointer *)&std_targets,
- &std_length, format);
-
- *length = 7 + (edit_mode == XawtextEdit) + std_length;
- *value = XtMalloc((unsigned)sizeof(Atom)*(*length));
- targetP = *(Atom**)value;
- *targetP++ = XA_STRING;
- *targetP++ = XA_TEXT(d);
- *targetP++ = XA_UTF8_STRING(d);
- *targetP++ = XA_COMPOUND_TEXT(d);
- *targetP++ = XA_LENGTH(d);
- *targetP++ = XA_LIST_LENGTH(d);
- *targetP++ = XA_CHARACTER_POSITION(d);
- if (edit_mode == XawtextEdit) {
- *targetP++ = XA_DELETE(d);
- }
- memcpy((char*)targetP, (char*)std_targets, sizeof(Atom)*std_length);
- XtFree((char*)std_targets);
- *type = XA_ATOM;
- *format = 32;
- return (True);
- }
-
- if (SrcCvtSel(src, selection, target, type, value, length, format))
- return (True);
-
- for (salt = ctx->text.salt2; salt; salt = salt->next)
- if (MatchSelection (*selection, &salt->s))
- break;
- if (!salt)
- return (False);
- s = &salt->s;
- if (*target == XA_STRING
- || *target == XA_TEXT(d)
- || *target == XA_UTF8_STRING(d)
- || *target == XA_COMPOUND_TEXT(d)) {
- if (*target == XA_TEXT(d)) {
- if (XawTextFormat(ctx, XawFmtWide))
- *type = XA_COMPOUND_TEXT(d);
- else
- *type = XA_STRING;
- }
- else
- *type = *target;
-
- /*
- * If salt is True, the salt->contents stores CT string,
- * its length is measured in bytes.
- * Refer to _XawTextSaltAwaySelection()
- *
- * by Li Yuhong, Mar. 20, 1991.
- */
- if (!salt) {
- *value = (char *)_XawTextGetSTRING(ctx, s->left, s->right);
- if (XawTextFormat(ctx, XawFmtWide)) {
- XTextProperty textprop;
- if (XwcTextListToTextProperty(d, (wchar_t**)value, 1,
- XCompoundTextStyle, &textprop)
- < Success) {
- XtFree(*value);
- return (False);
- }
- XtFree(*value);
- *value = (XtPointer)textprop.value;
- *length = textprop.nitems;
- }
- else
- *length = strlen(*value);
- }
- else {
- *value = XtMalloc((salt->length + 1) * sizeof(unsigned char));
- strcpy (*value, salt->contents);
- *length = salt->length;
- }
- /* Got *value,*length, now in COMPOUND_TEXT format. */
- if (XawTextFormat(ctx, XawFmtWide)) {
- if (*type == XA_STRING) {
- XTextProperty textprop;
- wchar_t **wlist;
- int count;
-
- textprop.encoding = XA_COMPOUND_TEXT(d);
- textprop.value = (unsigned char *)*value;
- textprop.nitems = strlen(*value);
- textprop.format = 8;
- if (XwcTextPropertyToTextList(d, &textprop, &wlist, &count)
- < Success
- || count < 1) {
- XtFree(*value);
- return (False);
- }
- XtFree(*value);
- if (XwcTextListToTextProperty(d, wlist, 1, XStringStyle, &textprop)
- < Success) {
- XwcFreeStringList((wchar_t**)wlist);
- return (False);
- }
- *value = (XtPointer)textprop.value;
- *length = textprop.nitems;
- XwcFreeStringList((wchar_t**) wlist);
- }
- else if (*type == XA_UTF8_STRING(d)) {
- XTextProperty textprop;
- char **list;
- int count;
-
- textprop.encoding = XA_COMPOUND_TEXT(d);
- textprop.value = (unsigned char *)*value;
- textprop.nitems = strlen(*value);
- textprop.format = 8;
- if (Xutf8TextPropertyToTextList(d, &textprop, &list, &count)
- < Success
- || count < 1) {
- XtFree(*value);
- return (False);
- }
- XtFree(*value);
- *value = *list;
- *length = strlen(*list);
- XFree(list);
- }
- }
- *format = 8;
- return (True);
- }
-
- if (*target == XA_LIST_LENGTH(d) || *target == XA_LENGTH(d)) {
- long *temp;
-
- temp = (long *)XtMalloc(sizeof(long));
- if (*target == XA_LIST_LENGTH(d))
- *temp = 1L;
- else /* *target == XA_LENGTH(d) */
- *temp = (long)(s->right - s->left);
-
- *value = (XPointer)temp;
- *type = XA_INTEGER;
- *length = 1L;
- *format = 32;
- return (True);
- }
-
- if (*target == XA_CHARACTER_POSITION(d)) {
- long *temp;
-
- temp = (long *) XtMalloc(2 * sizeof(long));
- temp[0] = (long)(s->left + 1);
- temp[1] = s->right;
- *value = (XPointer)temp;
- *type = XA_SPAN(d);
- *length = 2L;
- *format = 32;
- return (True);
- }
-
- if (*target == XA_DELETE(d)) {
- if (!salt)
- _XawTextZapSelection(ctx, NULL, True);
- *value = NULL;
- *type = XA_NULL(d);
- *length = 0;
- *format = 32;
- return (True);
- }
-
- if (XmuConvertStandardSelection(w, ctx->text.time, selection, target, type,
- (XPointer *)value, length, format))
- return (True);
-
- return (False);
-}
-
-static void
-LoseSelection(Widget w, Atom *selection)
-{
- _LoseSelection(w, selection, NULL, NULL);
-}
-
-static void
-_LoseSelection(Widget w, Atom *selection, char **contents, int *length)
-{
- TextWidget ctx = (TextWidget)w;
- Atom *atomP;
- int i;
- XawTextSelectionSalt *salt, *prevSalt, *nextSalt;
-
- prevSalt = 0;
- for (salt = ctx->text.salt2; salt; salt = nextSalt) {
- atomP = salt->s.selections;
- nextSalt = salt->next;
- for (i = 0 ; i < salt->s.atom_count; i++, atomP++)
- if (*selection == *atomP)
- *atomP = (Atom)0;
-
- while (salt->s.atom_count
- && salt->s.selections[salt->s.atom_count-1] == 0)
- salt->s.atom_count--;
-
- /*
- * Must walk the selection list in opposite order from UnsetSelection.
- */
- atomP = salt->s.selections;
- for (i = 0 ; i < salt->s.atom_count; i++, atomP++)
- if (*atomP == (Atom)0) {
- *atomP = salt->s.selections[--salt->s.atom_count];
-
- while (salt->s.atom_count
- && salt->s.selections[salt->s.atom_count-1] == 0)
- salt->s.atom_count--;
- }
- if (salt->s.atom_count == 0) {
-#ifndef OLDXAW
- if (contents == NULL) {
- XawTextKillRing *kill_ring = XtNew(XawTextKillRing);
-
- kill_ring->next = xaw_text_kill_ring;
- kill_ring->contents = salt->contents;
- kill_ring->length = salt->length;
- kill_ring->format = XawFmt8Bit;
- xaw_text_kill_ring = kill_ring;
- kill_ring_prev.next = xaw_text_kill_ring;
-
- if (++num_kill_rings > MAX_KILL_RINGS) {
- XawTextKillRing *tail = NULL;
-
- while (kill_ring->next) {
- tail = kill_ring;
- kill_ring = kill_ring->next;
- }
- if (kill_ring->refcount == 0) {
- --num_kill_rings;
- tail->next = NULL;
- XtFree(kill_ring->contents);
- XtFree((char*)kill_ring);
- }
- }
- }
- else {
- *contents = salt->contents;
- *length = salt->length;
- }
-#endif
- if (prevSalt)
- prevSalt->next = nextSalt;
- else
- ctx->text.salt2 = nextSalt;
-
- XtFree((char *)salt->s.selections);
- XtFree((char *)salt);
- }
- else
- prevSalt = salt;
- }
-}
-
-static void
-_DeleteOrKill(TextWidget ctx, XawTextPosition from, XawTextPosition to,
- Bool kill)
-{
- XawTextBlock text;
-
-#ifndef OLDXAW
- if (ctx->text.kill_ring_ptr) {
- --ctx->text.kill_ring_ptr->refcount;
- ctx->text.kill_ring_ptr = NULL;
- }
-#endif
- if (kill && from < to) {
-#ifndef OLDXAW
- Bool append = False;
- char *ring = NULL;
- XawTextPosition old_from = from;
-#endif
- char *string;
- int size = 0, length;
- XawTextSelectionSalt *salt;
- Atom selection = XInternAtom(XtDisplay(ctx), "SECONDARY", False);
-
-#ifndef OLDXAW
- if (ctx->text.kill_ring == KILL_RING_APPEND) {
- old_from = ctx->text.salt2->s.left;
- append = True;
- }
- else
- ctx->text.kill_ring = KILL_RING_BEGIN;
-
- if (append)
- _LoseSelection((Widget)ctx, &selection, &ring, &size);
- else
-#endif
- LoseSelection((Widget)ctx, &selection);
-
- salt = (XawTextSelectionSalt*)XtMalloc(sizeof(XawTextSelectionSalt));
- salt->s.selections = (Atom *)XtMalloc(sizeof(Atom));
- salt->s.left = from;
- salt->s.right = to;
-
- string = (char *)_XawTextGetSTRING(ctx, from, to);
-
- if (XawTextFormat(ctx, XawFmtWide)) {
- XTextProperty textprop;
-
- if (XwcTextListToTextProperty(XtDisplay((Widget)ctx),
- (wchar_t**)(&string),
- 1, XCompoundTextStyle,
- &textprop) < Success) {
- XtFree(string);
- XtFree((char*)salt->s.selections);
- XtFree((char*)salt);
- return;
- }
- XtFree(string);
- string = (char *)textprop.value;
- length = textprop.nitems;
- }
- else
- length = strlen(string);
-
- salt->length = length + size;
-
-#ifndef OLDXAW
- if (!append)
- salt->contents = string;
- else {
- salt->contents = XtMalloc(length + size + 1);
- if (from >= old_from) {
- strncpy(salt->contents, ring, size);
- salt->contents[size] = '\0';
- strncat(salt->contents, string, length);
- }
- else {
- strncpy(salt->contents, string, length);
- salt->contents[length] = '\0';
- strncat(salt->contents, ring, size);
- }
- salt->contents[length + size] = '\0';
- XtFree(ring);
- XtFree(string);
- }
-
- kill_ring_prev.contents = salt->contents;
- kill_ring_prev.length = salt->length;
- kill_ring_prev.format = XawFmt8Bit;
-#else
- salt->contents = string;
-#endif
-
- salt->next = ctx->text.salt2;
- ctx->text.salt2 = salt;
-
-#ifndef OLDXAW
- if (append)
- ctx->text.kill_ring = KILL_RING_BEGIN;
-#endif
-
- salt->s.selections[0] = selection;
-
- XtOwnSelection((Widget)ctx, selection, ctx->text.time,
- ConvertSelection, LoseSelection, NULL);
- salt->s.atom_count = 1;
- }
- text.length = 0;
- text.firstPos = 0;
-
- text.format = _XawTextFormat(ctx);
- text.ptr = "";
-
- if (_XawTextReplace(ctx, from, to, &text)) {
- XBell(XtDisplay(ctx), 50);
- return;
- }
- ctx->text.from_left = -1;
- ctx->text.insertPos = from;
- ctx->text.showposition = TRUE;
-}
-
-static void
-DeleteOrKill(TextWidget ctx, XEvent *event, XawTextScanDirection dir,
- XawTextScanType type, Bool include, Bool kill)
-{
- XawTextPosition from, to;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- mult = -mult;
- dir = dir == XawsdLeft ? XawsdRight : XawsdLeft;
- }
-
- StartAction(ctx, event);
-#ifndef OLDXAW
- if (mult == 1)
- _XawSourceSetUndoMerge((TextSrcObject)ctx->text.source, True);
-#endif
- to = SrcScan(ctx->text.source, ctx->text.insertPos,
- type, dir, mult, include);
-
- /*
- * If no movement actually happened, then bump the count and try again.
- * This causes the character position at the very beginning and end of
- * a boundary to act correctly
- */
- if (to == ctx->text.insertPos)
- to = SrcScan(ctx->text.source, ctx->text.insertPos,
- type, dir, mult + 1, include);
-
- if (dir == XawsdLeft) {
- from = to;
- to = ctx->text.insertPos;
- }
- else
- from = ctx->text.insertPos;
-
- _DeleteOrKill(ctx, from, to, kill);
- EndAction(ctx);
-}
-
-static void
-Delete(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
-
- if (ctx->text.s.left != ctx->text.s.right)
- DeleteCurrentSelection(w, event, p, n);
- else
- DeleteBackwardChar(w, event, p, n);
-}
-
-static void
-DeleteChar(Widget w, XEvent *event, XawTextScanDirection dir)
-{
- TextWidget ctx = (TextWidget)w;
- short mul = MULT(ctx);
-
- if (mul < 0) {
- ctx->text.mult = mul = -mul;
- dir = dir == XawsdLeft ? XawsdRight : XawsdLeft;
- }
- DeleteOrKill(ctx, event, dir, XawstPositions, True, False);
-#ifndef OLDXAW
- if (mul == 1)
- _XawSourceSetUndoErase((TextSrcObject)ctx->text.source,
- dir == XawsdLeft ? -1 : 1);
-#endif
-}
-
-/*ARGSUSED*/
-static void
-DeleteForwardChar(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- DeleteChar(w, event, XawsdRight);
-}
-
-/*ARGSUSED*/
-static void
-DeleteBackwardChar(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- DeleteChar(w, event, XawsdLeft);
-}
-
-static void
-DeleteForwardWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- XawTextScanType type;
-
- if (*num_params && (*params[0] == 'A' || *params[0] == 'a'))
- type = XawstAlphaNumeric;
- else
- type = XawstWhiteSpace;
-
- DeleteOrKill((TextWidget)w, event, XawsdRight, type, False, False);
-}
-
-static void
-DeleteBackwardWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- XawTextScanType type;
-
- if (*num_params && (*params[0] == 'A' || *params[0] == 'a'))
- type = XawstAlphaNumeric;
- else
- type = XawstWhiteSpace;
-
- DeleteOrKill((TextWidget)w, event, XawsdLeft, type, False, False);
-}
-
-static void
-KillForwardWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- XawTextScanType type;
-
- if (*num_params && (*params[0] == 'A' || *params[0] == 'a'))
- type = XawstAlphaNumeric;
- else
- type = XawstWhiteSpace;
-
- DeleteOrKill((TextWidget)w, event, XawsdRight, type, False, True);
-}
-
-static void
-KillBackwardWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- XawTextScanType type;
-
- if (*num_params && (*params[0] == 'A' || *params[0] == 'a'))
- type = XawstAlphaNumeric;
- else
- type = XawstWhiteSpace;
-
- DeleteOrKill((TextWidget) w, event, XawsdLeft, type, False, True);
-}
-
-/*ARGSUSED*/
-static void
-KillToEndOfLine(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition end_of_line;
- XawTextScanDirection dir = XawsdRight;
- short mult = MULT(ctx);
-
- if (mult < 0) {
- dir = XawsdLeft;
- mult = -mult;
- }
-
- StartAction(ctx, event);
- end_of_line = SrcScan(ctx->text.source, ctx->text.insertPos, XawstEOL,
- dir, mult, False);
- if (end_of_line == ctx->text.insertPos)
- end_of_line = SrcScan(ctx->text.source, ctx->text.insertPos, XawstEOL,
- dir, mult, True);
-
- if (dir == XawsdRight)
- _DeleteOrKill(ctx, ctx->text.insertPos, end_of_line, True);
- else
- _DeleteOrKill(ctx, end_of_line, ctx->text.insertPos, True);
- EndAction(ctx);
-}
-
-/*ARGSUSED*/
-static void
-KillToEndOfParagraph(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- DeleteOrKill((TextWidget)w, event, XawsdRight, XawstParagraph, False, True);
-}
-
-void
-_XawTextZapSelection(TextWidget ctx, XEvent *event, Bool kill)
-{
- StartAction(ctx, event);
- _DeleteOrKill(ctx, ctx->text.s.left, ctx->text.s.right, kill);
- EndAction(ctx);
-}
-
-/*ARGSUSED*/
-static void
-KillCurrentSelection(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- _XawTextZapSelection((TextWidget) w, event, True);
-}
-
-#ifndef OLDXAW
-/*ARGSUSED*/
-static void
-KillRingYank(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition insertPos = ctx->text.insertPos;
- Bool first_yank = False;
-
- if (ctx->text.s.left != ctx->text.s.right)
- XawTextUnsetSelection((Widget)ctx);
-
- StartAction(ctx, event);
-
- if (ctx->text.kill_ring_ptr == NULL) {
- ctx->text.kill_ring_ptr = &kill_ring_prev;
- ++ctx->text.kill_ring_ptr->refcount;
- ctx->text.s.left = ctx->text.s.right = insertPos;
- first_yank = True;
- }
- if (ctx->text.kill_ring_ptr) {
- int mul = MULT(ctx);
- XawTextBlock text;
-
- if (!first_yank) {
- if (mul < 0)
- mul = 1;
- --ctx->text.kill_ring_ptr->refcount;
- while (mul--) {
- if ((ctx->text.kill_ring_ptr = ctx->text.kill_ring_ptr->next) == NULL)
- ctx->text.kill_ring_ptr = &kill_ring_null;
- }
- ++ctx->text.kill_ring_ptr->refcount;
- }
- text.firstPos = 0;
- text.length = ctx->text.kill_ring_ptr->length;
- text.ptr = ctx->text.kill_ring_ptr->contents;
- text.format = ctx->text.kill_ring_ptr->format;
-
- if (_XawTextReplace(ctx, ctx->text.s.left, insertPos, &text) == XawEditDone) {
- ctx->text.kill_ring = KILL_RING_YANK;
- ctx->text.insertPos = ctx->text.s.left + text.length;
- }
- }
- else
- XBell(XtDisplay(w), 0);
-
- EndAction(ctx);
-}
-#endif /* OLDXAW */
-
-/*ARGSUSED*/
-static void
-DeleteCurrentSelection(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- _XawTextZapSelection((TextWidget)w, event, False);
-}
-
-#ifndef OLDXAW
-#define CHECK_SAVE() \
- if (save && !save->ptr) \
- save->ptr = _XawTextGetText(ctx, save->firstPos, \
- save->firstPos + save->length)
-static Bool
-StripSpaces(TextWidget ctx, XawTextPosition left, XawTextPosition right,
- XawTextPosition *pos, int num_pos, XawTextBlock *save)
-{
- Bool done, space;
- int i, cpos, count = 0;
- XawTextBlock block, text;
- XawTextPosition ipos, position = left, tmp = left;
-
- text.firstPos = 0;
- text.format = XawFmt8Bit;
- text.ptr = " ";
- text.length = 1;
-
- position = XawTextSourceRead(ctx->text.source, position,
- &block, right - left);
- done = False;
- space = False;
- /* convert tabs and returns to spaces */
- while (!done) {
- if (XawTextFormat(ctx, XawFmt8Bit)) {
- for (i = 0; i < block.length; i++)
- if (block.ptr[i] == '\t' || block.ptr[i] == '\n') {
- space = True;
- break;
- }
- }
- else {
- wchar_t *wptr = (wchar_t*)block.ptr;
- for (i = 0; i < block.length; i++)
- if (wptr[i] == _Xaw_atowc('\t') || wptr[i] == _Xaw_atowc('\n')) {
- space = True;
- break;
- }
- }
- if (space) {
- CHECK_SAVE();
- if (_XawTextReplace(ctx, tmp + i, tmp + i + 1, &text))
- return (False);
- space = False;
- }
- tmp += i;
- position = XawTextSourceRead(ctx->text.source, tmp,
- &block, right - tmp);
- if (block.length == 0 || tmp == position || tmp >= right)
- done = True;
- }
-
- text.ptr = "";
- text.length = 0;
- position = tmp = left;
- position = XawTextSourceRead(ctx->text.source, position,
- &block, right - left);
- ipos = ctx->text.insertPos;
- done = False;
- while (!done) {
- if (XawTextFormat(ctx, XawFmt8Bit)) {
- for (i = 0; i < block.length; i++)
- if (block.ptr[i] == ' ')
- ++count;
- else if (count == 1)
- count = 0;
- else if (count)
- break;
- }
- else {
- wchar_t *wptr = (wchar_t*)block.ptr;
- for (i = 0; i < block.length; i++)
- if (wptr[i] == _Xaw_atowc(' '))
- ++count;
- else if (count == 1)
- count = 0;
- else if (count)
- break;
- }
- if (--count > 0) {
- CHECK_SAVE();
- if (_XawTextReplace(ctx, tmp + i - count, tmp + i, &text))
- return (False);
- right -= count;
- if (num_pos) {
- for (cpos = 0; cpos < num_pos; cpos++) {
- if (tmp + i - count < pos[cpos]) {
- if (tmp + i < pos[cpos])
- pos[cpos] -= count;
- else
- pos[cpos] = tmp + i - count;
- }
- }
- }
- else {
- if (tmp + i - count < ipos) {
- if (tmp + i < ipos)
- ipos -= count;
- else
- ipos = tmp + i - count;
- }
- }
- tmp += i - count;
- }
- else
- tmp += i + 1;
- count = 0;
- position = XawTextSourceRead(ctx->text.source, tmp,
- &block, right - tmp);
- if (block.length == 0 || tmp == position || tmp >= right)
- done = True;
- }
- if (!num_pos)
- ctx->text.insertPos = ipos;
-
- return (True);
-}
-
-static Bool
-Tabify(TextWidget ctx, XawTextPosition left, XawTextPosition right,
- XawTextPosition *pos, int num_pos, XawTextBlock *save)
-{
- Bool done, zero;
- int i, cpos, count = 0, column = 0, offset = 0;
- XawTextBlock text, block;
- XawTextPosition ipos, position = left, tmp = left;
- TextSinkObject sink = (TextSinkObject)ctx->text.sink;
- short *char_tabs = sink->text_sink.char_tabs;
- int tab_count = sink->text_sink.tab_count;
- int tab_index = 0, tab_column = 0, TAB_SIZE = DEFAULT_TAB_SIZE;
-
- text.firstPos = 0;
- text.ptr = "\t";
- text.format = XawFmt8Bit;
- text.length = 1;
-
- position = XawTextSourceRead(ctx->text.source, position,
- &block, right - left);
- ipos = ctx->text.insertPos;
- done = zero = False;
- if (tab_count)
- TAB_SIZE = *char_tabs;
- while (!done) {
- if (XawTextFormat(ctx, XawFmt8Bit)) {
- for (i = 0; i < block.length; i++) {
- ++offset;
- ++column;
- if (tab_count) {
- if (column > tab_column + char_tabs[tab_index]) {
- TAB_SIZE = tab_index < tab_count - 1 ? char_tabs[tab_index + 1] - char_tabs[tab_index] : *char_tabs;
- if (++tab_index >= tab_count) {
- tab_column += char_tabs[tab_count - 1];
- tab_index = 0;
- }
- }
- }
- if (block.ptr[i] == ' ') {
- if (++count > TAB_SIZE)
- count %= TAB_SIZE;
- if ((tab_count && column == tab_column + char_tabs[tab_index]) ||
- (!tab_count && column % TAB_SIZE == 0)) {
- if (count % (TAB_SIZE + 1) > 1)
- break;
- else
- count = 0;
- }
- }
- else {
- if (block.ptr[i] == '\n') {
- zero = True;
- break;
- }
- count = 0;
- }
- }
- }
- else {
- wchar_t *wptr = (wchar_t*)block.ptr;
- for (i = 0; i < block.length; i++) {
- ++offset;
- ++column;
- if (tab_count) {
- if (column > tab_column + char_tabs[tab_index]) {
- TAB_SIZE = tab_index < tab_count - 1 ? char_tabs[tab_index + 1] - char_tabs[tab_index] : *char_tabs;
- if (++tab_index >= tab_count) {
- tab_column += char_tabs[tab_count - 1];
- tab_index = 0;
- }
- }
- }
- if (wptr[i] == _Xaw_atowc(' ')) {
- if (++count > TAB_SIZE)
- count %= TAB_SIZE;
- if ((tab_count && column == tab_column + char_tabs[tab_index]) ||
- (!tab_count && column % TAB_SIZE == 0)) {
- if (count % (TAB_SIZE + 1) > 1)
- break;
- else
- count = 0;
- }
- }
- else {
- if (wptr[i] == _Xaw_atowc('\n')) {
- zero = True;
- break;
- }
- count = 0;
- }
- }
- }
- count %= TAB_SIZE + 1;
- if (!zero && count > 1 && i < block.length) {
- CHECK_SAVE();
- if (_XawTextReplace(ctx, tmp + i - count + 1, tmp + i + 1, &text))
- return (False);
- right -= count - 1;
- offset -= count - 1;
- if (num_pos) {
- for (cpos = 0; cpos < num_pos; cpos++) {
- if (tmp + i - count + 1 < pos[cpos]) {
- if (tmp + i + 1 < pos[cpos])
- pos[cpos] -= count;
- else
- pos[cpos] = tmp + i - count + 1;
- ++pos[cpos];
- }
- }
- }
- else {
- if (tmp + i - count + 1 < ipos) {
- if (tmp + i + 1 < ipos)
- ipos -= count;
- else
- ipos = tmp + i - count + 1;
- ++ipos;
- }
- }
- }
- if (count)
- --count;
- if (zero) {
- count = column = 0;
- zero = False;
- if (tab_count) {
- tab_column = tab_index = 0;
- TAB_SIZE = *char_tabs;
- }
- }
- else if (i < block.length)
- count = 0;
- tmp = left + offset;
- position = XawTextSourceRead(ctx->text.source, tmp,
- &block, right - tmp);
- if (tmp == position || tmp >= right)
- done = True;
- }
- if (!num_pos)
- ctx->text.insertPos = ipos;
-
- return (True);
-}
-
-static Bool
-Untabify(TextWidget ctx, XawTextPosition left, XawTextPosition right,
- XawTextPosition *pos, int num_pos, XawTextBlock *save)
-{
- Bool done, zero;
- int i, cpos, count = 0, diff = 0;
- XawTextBlock block, text;
- XawTextPosition ipos, position = left, tmp = left;
- TextSinkObject sink = (TextSinkObject)ctx->text.sink;
- short *char_tabs = sink->text_sink.char_tabs;
- int tab_count = sink->text_sink.tab_count;
- int tab_index = 0, tab_column = 0, tab_base = 0;
- static char *tabs = " ";
-
- text.firstPos = 0;
- text.format = XawFmt8Bit;
- text.ptr = tabs;
-
- position = XawTextSourceRead(ctx->text.source, position,
- &block, right - left);
- ipos = ctx->text.insertPos;
- done = False;
- zero = False;
- while (!done) {
- if (XawTextFormat(ctx, XawFmt8Bit))
- for (i = 0; i < block.length; i++) {
- if (block.ptr[i] != '\t') {
- ++count;
- if (block.ptr[i] == '\n') {
- zero = True;
- break;
- }
- }
- else
- break;
- }
- else {
- wchar_t *wptr = (wchar_t*)block.ptr;
- for (i = 0; i < block.length; i++)
- if (wptr[i] != _Xaw_atowc('\t')) {
- ++count;
- if (wptr[i] != _Xaw_atowc('\n')) {
- zero = True;
- break;
- }
- }
- else
- break;
- }
- if (!zero && i < block.length) {
- if (tab_count) {
- while (tab_base + tab_column <= count) {
- for (; tab_index < tab_count; ++tab_index)
- if (tab_base + char_tabs[tab_index] > count) {
- tab_column = char_tabs[tab_index];
- break;
- }
- if (tab_index >= tab_count) {
- tab_base += char_tabs[tab_count - 1];
- tab_column = tab_index = 0;
- }
- }
- text.length = (tab_base + tab_column) - count;
- if (text.length > 8) {
- int j;
-
- text.ptr = XtMalloc(text.length);
- for (j = 0; j < text.length; j++)
- text.ptr[j] = ' ';
- }
- else
- text.ptr = tabs;
- }
- else
- text.length = DEFAULT_TAB_SIZE - (count % DEFAULT_TAB_SIZE);
- CHECK_SAVE();
- if (_XawTextReplace(ctx, tmp + i, tmp + i + 1, &text)) {
- if (tab_count && text.length > 8)
- XtFree(text.ptr);
- return (False);
- }
- if (tab_count && text.length > 8)
- XtFree(text.ptr);
- count += text.length;
- right += text.length - 1;
- if (num_pos) {
- for (cpos = 0; cpos < num_pos; cpos++) {
- if (tmp + i < pos[cpos]) {
- if (tmp + i + 1 < pos[cpos])
- --pos[cpos];
- else
- pos[cpos] = tmp + i;
- pos[cpos] += text.length;
- }
- }
- }
- else {
- if (tmp + i < ipos) {
- if (tmp + i + 1 < ipos)
- --ipos;
- else
- ipos = tmp + i;
- ipos += text.length;
- }
- }
- }
- tmp = left + count + diff;
- if (zero) {
- diff += count;
- count = 0;
- zero = False;
- if (tab_count)
- tab_base = tab_column = tab_index = 0;
- }
- position = XawTextSourceRead(ctx->text.source, tmp,
- &block, right - tmp);
- if (tmp == position || tmp >= right)
- done = True;
- }
- if (!num_pos)
- ctx->text.insertPos = ipos;
-
- return (True);
-}
-
-static int
-FormatText(TextWidget ctx, XawTextPosition left, Bool force,
- XawTextPosition *pos, int num_pos)
-{
- char *ptr = NULL;
- Bool freepos = False, undo, paragraph = pos != NULL;
- int i, result;
- XawTextBlock block, *text;
- XawTextPosition end = ctx->text.lastPos, buf[32];
- TextSrcObject src = (TextSrcObject)ctx->text.source;
- XawTextPosition right = SrcScan(ctx->text.source, left, XawstEOL,
- XawsdRight, 1, False);
-
- undo = src->textSrc.enable_undo && src->textSrc.undo_state == False;
- if (undo) {
- if (!pos) {
- num_pos = src->textSrc.num_text;
- pos = XawStackAlloc(sizeof(XawTextPosition) * num_pos, buf);
- for (i = 0; i < num_pos; i++)
- pos[i] = ((TextWidget)src->textSrc.text[i])->text.insertPos;
- freepos = True;
- }
- else
- freepos = False;
- src->textSrc.undo_state = True;
- block.ptr = NULL;
- block.firstPos = left;
- block.length = right - left;
- text = &block;
- }
- else
- text = NULL;
-
- result = DoFormatText(ctx, left, force, 1, text, pos, num_pos, paragraph);
- if (undo && result == XawEditDone && block.ptr) {
- char *lbuf, *rbuf;
- unsigned llen, rlen, size;
-
- ptr = lbuf = block.ptr;
- llen = block.length;
- rlen = llen + (ctx->text.lastPos - end);
-
- block.firstPos = 0;
- block.format = _XawTextFormat(ctx);
-
- rbuf = _XawTextGetText(ctx, left, left + rlen);
-
- size = XawTextFormat(ctx, XawFmtWide) ? sizeof(wchar_t) : sizeof(char);
- if (llen != rlen || memcmp(lbuf, rbuf, llen * size)) {
- block.ptr = lbuf;
- block.length = llen;
- _XawTextReplace(ctx, left, left + rlen, &block);
-
- src->textSrc.undo_state = False;
- block.ptr = rbuf;
- block.length = rlen;
- _XawTextReplace(ctx, left, left + llen, &block);
- }
- else
- src->textSrc.undo_state = False;
- XtFree(rbuf);
- }
- if (undo) {
- src->textSrc.undo_state = False;
- if (freepos) {
- for (i = 0; i < num_pos; i++) {
- TextWidget tw = (TextWidget)src->textSrc.text[i];
- tw->text.insertPos = XawMin(XawMax(0, pos[i]), tw->text.lastPos);
- }
- XawStackFree(pos, buf);
- }
- if (ptr)
- XtFree(ptr);
- }
-
- return (result);
-}
-
-static int
-DoFormatText(TextWidget ctx, XawTextPosition left, Bool force, int level,
- XawTextBlock *save, XawTextPosition *pos, int num_pos,
- Bool paragraph)
-{
- XawTextPosition right = SrcScan(ctx->text.source, left, XawstEOL,
- XawsdRight, 1, False);
- XawTextPosition position, tmp, ipos;
- XawTextBlock block, text;
- char buf[128];
- wchar_t *wptr;
- int i, count, cpos;
- Bool done, force2 = force, recurse = False;
-
- position = XawTextSourceRead(ctx->text.source, left, &block, right - left);
- if (block.length == 0 || left >= right ||
- (level == 1 && ((XawTextFormat(ctx, XawFmt8Bit) &&
- block.ptr[0] != ' ' &&
- block.ptr[0] != '\t' &&
- !isalnum(*(unsigned char*)block.ptr)) ||
- (XawTextFormat(ctx, XawFmtWide) &&
- _Xaw_atowc(XawSP) != *(wchar_t*)block.ptr &&
- _Xaw_atowc(XawTAB) != *(wchar_t*)block.ptr &&
- !iswalnum(*(wchar_t*)block.ptr)))))
- return (XawEditDone);
-
- if (level == 1 && !paragraph) {
- tmp = ctx->text.lastPos;
- if (Untabify(ctx, left, right, pos, num_pos, save) == False)
- return (XawEditError);
- right += ctx->text.lastPos - tmp;
- position = XawTextSourceRead(ctx->text.source, left, &block,
- right - left);
- }
-
- text.firstPos = 0;
- text.format = XawFmt8Bit;
-
- ipos = ctx->text.insertPos;
- count = 0;
- done = False;
- while (!done) {
- if (XawTextFormat(ctx, XawFmt8Bit)) {
- for (i = 0; i < block.length; i++)
- if (block.ptr[i] == ' ')
- ++count;
- else {
- done = True;
- break;
- }
- }
- else {
- wptr = (wchar_t*)block.ptr;
- for (i = 0; i < block.length; i++)
- if (wptr[i] == _Xaw_atowc(' '))
- ++count;
- else {
- done = True;
- break;
- }
- }
- tmp = position;
- position = XawTextSourceRead(ctx->text.source, position,
- &block, right - position);
- if (tmp == position)
- done = True;
- }
- position = left + count;
- if (count < ctx->text.left_column) {
- int bytes = ctx->text.left_column - count;
-
- text.ptr = XawStackAlloc(bytes, buf);
- text.length = bytes;
- for (i = 0; i < bytes; i++)
- text.ptr[i] = ' ';
- CHECK_SAVE();
- if (_XawTextReplace(ctx, left, left, &text)) {
- XawStackFree(text.ptr, buf);
- return (XawEditError);
- }
- XawStackFree(text.ptr, buf);
- right += bytes;
- if (num_pos) {
- for (cpos = 0; cpos < num_pos; cpos++)
- if (pos[cpos] >= left)
- pos[cpos] += bytes;
- }
- if (ipos >= left)
- ipos += bytes;
- count += bytes;
- }
-
- done = False;
- if (!paragraph && level == 1
- && ipos <= right && ipos - left > ctx->text.right_column) {
- XawTextPosition len = ctx->text.lastPos;
- int skip = ctx->text.justify == XawjustifyRight
- || ctx->text.justify == XawjustifyCenter ?
- ctx->text.left_column : count;
-
- if (pos)
- for (i = 0; i < num_pos; i++)
- if (pos[i] == ipos)
- break;
-
- StripSpaces(ctx, left + skip, right, pos, num_pos, save);
- right += ctx->text.lastPos - len;
- if (pos && i < num_pos)
- ipos = pos[i];
- else
- ipos = ctx->text.insertPos;
- done = ipos - left > ctx->text.right_column;
- count = skip + (count == skip + 1);
- }
- if ((paragraph || done) && right - left > ctx->text.right_column) {
- position = tmp = right;
- XawTextSourceRead(ctx->text.source, position - 1, &block, 1);
- if (block.length &&
- ((XawTextFormat(ctx, XawFmt8Bit) &&
- block.ptr[0] == ' ') ||
- (XawTextFormat(ctx, XawFmtWide) &&
- _Xaw_atowc(XawSP) == *(wchar_t*)block.ptr)))
- --position;
- while (position - left > ctx->text.right_column) {
- tmp = position;
- position = SrcScan(ctx->text.source, position,
- XawstWhiteSpace, XawsdLeft, 1, True);
- }
- if (position <= left + ctx->text.left_column)
- position = tmp;
- if (position > left && position - left > ctx->text.left_column
- && position != right) {
- text.ptr = "\n";
- text.length = 1;
- CHECK_SAVE();
- if (_XawTextReplace(ctx, position, position + 1, &text))
- return (XawEditError);
- right = position;
- recurse = True;
- force = True;
- }
- }
-
- if (force) {
- if (ctx->text.justify == XawjustifyCenter)
- count = ctx->text.right_column - (count - ctx->text.left_column);
- else
- count = ctx->text.right_column;
- if (count > right - left)
- count -= right - left;
- else
- count = 0;
- }
- else
- count = 0;
- if (count > 0) {
- switch (ctx->text.justify) {
- case XawjustifyLeft:
- break;
- case XawjustifyRight:
- case XawjustifyCenter:
- if (ctx->text.justify == XawjustifyCenter) {
- int alnum = 0;
-
- if (!(count & 1)) {
- XawTextSourceRead(ctx->text.source, right, &block, 1);
- if ((XawTextFormat(ctx, XawFmt8Bit)
- && isalnum(*(unsigned char*)block.ptr)) ||
- (XawTextFormat(ctx, XawFmtWide)
- && iswalnum(*(wchar_t*)block.ptr)))
- alnum = 1;
- }
- count = (count + alnum) >> 1;
- }
- text.ptr = XawStackAlloc(count, buf);
- text.length = count;
- for (i = 0; i < count; i++)
- text.ptr[i] = ' ';
- CHECK_SAVE();
- if (_XawTextReplace(ctx, left, left, &text)) {
- XawStackFree(text.ptr, buf);
- return (XawEditError);
- }
- XawStackFree(text.ptr, buf);
- position += count;
- right += count;
- if (num_pos) {
- for (cpos = 0; cpos < num_pos; cpos++)
- if (pos[cpos] > left)
- pos[cpos] += count;
- }
- else if (ipos > left)
- ipos += count;
- break;
- case XawjustifyFull:
- i = 0;
- tmp = left;
- /*CONSTCOND*/
- while (True) {
- tmp = SrcScan(ctx->text.source, tmp, XawstWhiteSpace,
- XawsdRight, 1, True);
- if (tmp < right)
- ++i;
- else
- break;
- }
- if (i) {
- double inc, ii;
- int bytes, steps;
-
- bytes = count;
- inc = ii = (count + .5) / (double)i;
-
- steps = count;
- text.ptr = XawStackAlloc(steps, buf);
- for (i = 0; i < steps; i++)
- text.ptr[i] = ' ';
- tmp = left;
- CHECK_SAVE();
- while (bytes) {
- steps = 1;
- while (inc + ii < 1) {
- ++steps;
- inc += ii;
- }
- tmp = SrcScan(ctx->text.source, tmp, XawstWhiteSpace,
- XawsdRight, steps, True);
- if (bytes > inc)
- text.length = (int)inc;
- else
- text.length = bytes;
- bytes -= text.length;
- if (_XawTextReplace(ctx, tmp, tmp, &text)) {
- XawStackFree(buf, text.ptr);
- return (XawEditError);
- }
- if (num_pos) {
- for (cpos = 0; cpos < num_pos; cpos++)
- if (tmp <= pos[cpos])
- pos[cpos] += text.length;
- }
- else if (tmp <= ipos)
- ipos += text.length;
- inc -= (int)inc;
- inc += ii;
- }
- position += count;
- right += count;
- XawStackFree(buf, text.ptr);
- }
- break;
- }
- }
-
- if (!num_pos)
- ctx->text.insertPos = XawMin(ipos, ctx->text.lastPos);
-
- return (recurse ? DoFormatText(ctx, position + 1,
- ctx->text.justify != XawjustifyFull
- && (force2 || paragraph),
- ++level, save, pos, num_pos, paragraph)
- : XawEditDone);
-}
-#undef CHECK_SAVE
-
-/*ARGSUSED*/
-static void
-Indent(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- TextSrcObject src = (TextSrcObject)ctx->text.source;
- XawTextPosition from, to, tmp, end = 0, *pos, *posbuf[32];
- char buf[32];
- XawTextBlock text;
- int i, spaces = MULT(ctx);
- char *lbuf = NULL, *rbuf;
- unsigned llen = 0, rlen, size;
- Bool undo = src->textSrc.enable_undo && src->textSrc.undo_state == False;
- Bool format = ctx->text.auto_fill
- && ctx->text.left_column < ctx->text.right_column;
-
- text.firstPos = 0;
- text.format = XawFmt8Bit;
- text.ptr = "";
-
- StartAction(ctx, event);
-
- pos = XawStackAlloc(sizeof(XawTextPosition) * src->textSrc.num_text, posbuf);
- for (i = 0; i < src->textSrc.num_text; i++)
- pos[i] = ((TextWidget)src->textSrc.text[i])->text.insertPos;
-
- if (!GetBlockBoundaries(ctx, &from, &to)) {
- EndAction(ctx);
- XawStackFree(pos, posbuf);
- return;
- }
-
- if (undo) {
- llen = to - from;
- end = ctx->text.lastPos;
- lbuf = _XawTextGetText(ctx, from, to);
- src->textSrc.undo_state = True;
- }
-
- tmp = ctx->text.lastPos;
- if (!Untabify(ctx, from, to, pos, src->textSrc.num_text, NULL)) {
- XBell(XtDisplay(ctx), 0);
- EndAction(ctx);
- XawStackFree(pos, posbuf);
- if (undo) {
- src->textSrc.undo_state = True;
- XtFree(lbuf);
- }
- return;
- }
- to += ctx->text.lastPos - tmp;
-
- tmp = from;
-
- if (spaces > 0) {
- text.ptr = XawStackAlloc(spaces, buf);
- for (i = 0; i < spaces; i++)
- text.ptr[i] = ' ';
-
- text.length = spaces;
- while (tmp < to) {
- _XawTextReplace(ctx, tmp, tmp, &text);
-
- for (i = 0; i < src->textSrc.num_text; i++)
- if (tmp < pos[i])
- pos[i] += spaces;
-
- to += spaces;
- tmp = SrcScan(ctx->text.source, tmp, XawstEOL, XawsdRight, 1, True);
- }
- XawStackFree(text.ptr, buf);
- }
- else {
- int min = 32767;
-
- text.length = 0;
- tmp = from;
-
- /* find the amount of spaces to cut */
- while (tmp < to) {
- (void)BlankLine(w, tmp, &i);
- if (i < min)
- min = i;
- tmp = SrcScan(ctx->text.source, tmp, XawstEOL, XawsdRight, 1, True);
- }
- spaces = XawMin(-spaces, min);
-
- /* cut the spaces */
- tmp = from;
- while (tmp < to) {
- _XawTextReplace(ctx, tmp, tmp + spaces, &text);
-
- for (i = 0; i < src->textSrc.num_text; i++)
- if (tmp < pos[i]) {
- if (tmp + spaces < pos[i])
- pos[i] -= spaces;
- else
- pos[i] = tmp;
- }
-
- to -= spaces;
- tmp = SrcScan(ctx->text.source, tmp, XawstEOL, XawsdRight, 1, True);
- }
- }
-
- if (!format)
- Tabify(ctx, from, to, pos, src->textSrc.num_text, NULL);
-
- if (undo) {
- rlen = llen + (ctx->text.lastPos - end);
- rbuf = _XawTextGetText(ctx, from, from + rlen);
-
- text.format = _XawTextFormat(ctx);
- size = XawTextFormat(ctx, XawFmtWide) ? sizeof(wchar_t) : sizeof(char);
- if (llen != rlen || memcmp(lbuf, rbuf, llen * size)) {
- text.ptr = lbuf;
- text.length = llen;
- _XawTextReplace(ctx, from, from + rlen, &text);
-
- src->textSrc.undo_state = False;
- text.ptr = rbuf;
- text.length = rlen;
- _XawTextReplace(ctx, from, from + llen, &text);
- }
- else
- src->textSrc.undo_state = False;
- XtFree(lbuf);
- XtFree(rbuf);
- }
-
- for (i = 0; i < src->textSrc.num_text; i++) {
- TextWidget tw = (TextWidget)src->textSrc.text[i];
-
- tw->text.insertPos = XawMin(XawMax(0, pos[i]), tw->text.lastPos);
- }
- XawStackFree(pos, posbuf);
- ctx->text.showposition = True;
-
- EndAction(ctx);
-}
-
-/*ARGSUSED*/
-static void
-ToggleOverwrite(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
- ctx->text.overwrite = !ctx->text.overwrite;
-
- /* call information callback */
- _XawTextSetLineAndColumnNumber(ctx, True);
-}
-#endif /* OLDXAW */
-
-/*
- * Insertion Routines
- */
-static int
-InsertNewLineAndBackupInternal(TextWidget ctx)
-{
- int count, error = XawEditDone, mult = MULT(ctx);
-#ifndef OLDXAW
- XawTextPosition position;
-#endif
- XawTextBlock text;
- char buf[32];
-
- if (mult < 0) {
- ctx->text.mult = 1;
- return (XawEditError);
- }
-
- text.format = _XawTextFormat(ctx);
- text.length = mult;
- text.firstPos = 0;
-
- if (text.format == XawFmtWide) {
- wchar_t *wptr;
-
- text.ptr = XawStackAlloc(sizeof(wchar_t) * mult, buf);
- wptr = (wchar_t *)text.ptr;
- for (count = 0; count < mult; count++)
- wptr[count] = _Xaw_atowc(XawLF);
- }
- else {
- text.ptr = XawStackAlloc(sizeof(char) * mult, buf);
- for (count = 0; count < mult; count++)
- text.ptr[count] = XawLF;
- }
-
-#ifndef OLDXAW
- position = SrcScan(ctx->text.source, ctx->text.insertPos,
- XawstEOL, XawsdLeft, 1, False);
-#endif
- if (_XawTextReplace(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
- XBell( XtDisplay(ctx), 50);
- error = XawEditError;
- }
- else {
- ctx->text.showposition = TRUE;
- ctx->text.insertPos += text.length;
- }
-
- XawStackFree(text.ptr, buf);
-
-#ifndef OLDXAW
- if (ctx->text.auto_fill && error == XawEditDone)
- (void)FormatText(ctx, position, ctx->text.justify != XawjustifyFull,
- NULL, 0);
-#endif
-
- return (error);
-}
-
-/*ARGSUSED*/
-static void
-InsertNewLineAndBackup(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition insertPos = ctx->text.insertPos;
-
- StartAction((TextWidget)w, event);
- (void)InsertNewLineAndBackupInternal(ctx);
- ctx->text.insertPos = SrcScan(ctx->text.source, insertPos, XawstEOL,
- XawsdRight, 1, False);
- EndAction((TextWidget)w);
-}
-
-static int
-LocalInsertNewLine(TextWidget ctx, XEvent *event)
-{
- int error;
-
- StartAction(ctx, event);
- error = InsertNewLineAndBackupInternal(ctx);
- ctx->text.from_left = -1;
- EndAction(ctx);
-
- return (error);
-}
-
-/*ARGSUSED*/
-static void
-InsertNewLine(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- (void)LocalInsertNewLine((TextWidget)w, event);
-}
-
-/*ARGSUSED*/
-static void
-InsertNewLineAndIndent(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- XawTextBlock text;
- XawTextPosition pos1;
- int length;
- TextWidget ctx = (TextWidget)w;
- String line_to_ip;
-
- StartAction(ctx, event);
- pos1 = SrcScan(ctx->text.source, ctx->text.insertPos,
- XawstEOL, XawsdLeft, 1, False);
-
- line_to_ip = _XawTextGetText(ctx, pos1, ctx->text.insertPos);
-
- text.format = _XawTextFormat(ctx);
- text.firstPos = 0;
-
- if (text.format == XawFmtWide) {
- wchar_t *ptr;
-
- text.ptr = XtMalloc((2 + wcslen((wchar_t*)line_to_ip))
- * sizeof(wchar_t));
- ptr = (wchar_t*)text.ptr;
- ptr[0] = _Xaw_atowc(XawLF);
- wcscpy((wchar_t*)++ptr, (wchar_t*)line_to_ip);
-
- length = wcslen((wchar_t*)text.ptr);
- while (length && (iswspace(*ptr) || *ptr == _Xaw_atowc(XawTAB)))
- ptr++, length--;
- *ptr = (wchar_t)0;
- text.length = wcslen((wchar_t*)text.ptr);
- }
- else {
- char *ptr;
-
- length = strlen(line_to_ip);
- text.ptr = XtMalloc((2 + length) * sizeof(char));
- ptr = text.ptr;
- ptr[0] = XawLF;
- strcpy(++ptr, line_to_ip);
-
- length++;
- while (length && (isspace(*ptr) || (*ptr == XawTAB)))
- ptr++, length--;
- *ptr = '\0';
- text.length = strlen(text.ptr);
- }
- XtFree(line_to_ip);
-
- if (_XawTextReplace(ctx,ctx->text.insertPos, ctx->text.insertPos, &text)) {
- XBell(XtDisplay(ctx), 50);
- XtFree(text.ptr);
- EndAction(ctx);
- return;
- }
-
- XtFree(text.ptr);
- ctx->text.from_left = -1;
- ctx->text.insertPos = SrcScan(ctx->text.source, ctx->text.old_insert,
- XawstPositions, XawsdRight, text.length, True);
- EndAction(ctx);
-}
-
-/*
- * Selection Routines
- */
-static void
-SelectWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition l, r;
-
- StartAction(ctx, event);
- l = SrcScan(ctx->text.source, ctx->text.insertPos,
- XawstWhiteSpace, XawsdLeft, 1, False);
- r = SrcScan(ctx->text.source, l, XawstWhiteSpace, XawsdRight, 1, False);
- _XawTextSetSelection(ctx, l, r, params, *num_params);
- EndAction(ctx);
-}
-
-static void
-SelectAll(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
- StartAction(ctx, event);
- _XawTextSetSelection(ctx,zeroPosition,ctx->text.lastPos,params,*num_params);
- EndAction(ctx);
-}
-
-static void
-ModifySelection(TextWidget ctx, XEvent *event,
- XawTextSelectionMode mode,
- XawTextSelectionAction action,
- String *params, Cardinal *num_params)
-{
-#ifndef OLDXAW
- int old_y = ctx->text.ev_y;
-#endif
-
- StartAction(ctx, event);
- NotePosition(ctx, event);
-
-#ifndef OLDXAW
- if (event->type == MotionNotify) {
- if (ctx->text.ev_y <= ctx->text.margin.top) {
- if (old_y >= ctx->text.ev_y)
- XawTextScroll(ctx, -1, 0);
- }
- else if (ctx->text.ev_y >= XtHeight(ctx) - ctx->text.margin.bottom) {
- if (old_y <= ctx->text.ev_y
- && !IsPositionVisible(ctx, ctx->text.lastPos))
- XawTextScroll(ctx, 1, 0);
- }
- }
-#endif
- ctx->text.from_left = -1;
- _XawTextAlterSelection(ctx, mode, action, params, num_params);
-
- EndAction(ctx);
-}
-
-static void
-SelectStart(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
-#ifndef OLDXAW
- if (!ctx->text.selection_state) {
- ctx->text.selection_state = True;
-#endif
- ModifySelection(ctx, event,
- XawsmTextSelect, XawactionStart, params, num_params);
-#ifndef OLDXAW
- }
-#endif
-}
-
-static void
-SelectAdjust(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
-#ifndef OLDXAW
- if (ctx->text.selection_state)
-#endif
- ModifySelection(ctx, event,
- XawsmTextSelect, XawactionAdjust, params, num_params);
-}
-
-static void
-SelectEnd(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
-#ifndef OLDXAW
- if (ctx->text.selection_state) {
- ctx->text.selection_state = False;
-#endif
- ModifySelection(ctx, event,
- XawsmTextSelect, XawactionEnd, params, num_params);
-#ifndef OLDXAW
- }
-#endif
-}
-
-static void
-ExtendStart(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
-#ifndef OLDXAW
- if (!ctx->text.selection_state) {
- ctx->text.selection_state = True;
-#endif
- ModifySelection(ctx, event,
- XawsmTextExtend, XawactionStart, params, num_params);
-#ifndef OLDXAW
- }
-#endif
-}
-
-static void
-ExtendAdjust(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
-#ifndef OLDXAW
- if (ctx->text.selection_state)
-#endif
- ModifySelection(ctx, event,
- XawsmTextExtend, XawactionAdjust, params, num_params);
-}
-
-static void
-ExtendEnd(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
-#ifndef OLDXAW
- if (ctx->text.selection_state) {
- ctx->text.selection_state = False;
-#endif
- ModifySelection(ctx, event,
- XawsmTextExtend, XawactionEnd, params, num_params);
-#ifndef OLDXAW
- }
-#endif
-}
-
-static void
-SelectSave(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- int num_atoms;
- Atom *sel;
- Display *dpy = XtDisplay(w);
- Atom selections[256];
-
- StartAction((TextWidget)w, event);
- num_atoms = *num_params;
- if (num_atoms > 256)
- num_atoms = 256;
- for (sel=selections; --num_atoms >= 0; sel++, params++)
- *sel = XInternAtom(dpy, *params, False);
- num_atoms = *num_params;
- _XawTextSaltAwaySelection((TextWidget)w, selections, num_atoms);
- EndAction((TextWidget)w);
-}
-
-/*
- * Misc. Routines
- */
-/*ARGSUSED*/
-static void
-SetKeyboardFocus(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- Widget shell, parent;
-
- shell = parent = w;
- while (parent) {
- if (XtIsShell(shell = parent))
- break;
- parent = XtParent(parent);
- }
- XtSetKeyboardFocus(shell, w);
-}
-
-/*ARGSUSED*/
-static void
-RedrawDisplay(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- StartAction((TextWidget)w, event);
- _XawTextClearAndCenterDisplay((TextWidget)w);
- EndAction((TextWidget)w);
-}
-
-/* This is kind of a hack, but, only one text widget can have focus at
- * a time on one display. There is a problem in the implementation of the
- * text widget, the scrollbars can not be adressed via editres, since they
- * are not children of a subclass of composite.
- * The focus variable is required to make sure only one text window will
- * show a block cursor at one time.
- */
-struct _focus { Display *display; Widget widget; };
-static struct _focus *focus;
-static Cardinal num_focus;
-
-/*ARGSUSED*/
-static void
-DestroyFocusCallback(Widget w, XtPointer user_data, XtPointer call_data)
-{
- struct _focus *f = (struct _focus*)(user_data);
-
- if (f->widget == w)
- f->widget = NULL;
-}
-
-/*ARGSUSED*/
-static void
-TextFocusIn(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- Bool display_caret = ctx->text.display_caret;
- int i;
-
- if (event->xfocus.detail == NotifyPointer)
- return;
-
- if (event->xfocus.send_event) {
- Window root, child;
- int rootx, rooty, x, y;
- unsigned int mask;
-
- if (ctx->text.hasfocus)
- return;
-
- if (XQueryPointer(XtDisplay(w), XtWindow(w), &root, &child,
- &rootx, &rooty, &x, &y, &mask)) {
- if (child)
- return;
- }
- }
-
- /* Let the input method know focus has arrived. */
- _XawImSetFocusValues(w, NULL, 0);
-
- if (display_caret)
- StartAction(ctx, event);
- ctx->text.hasfocus = TRUE;
- if (display_caret)
- EndAction(ctx);
-
- for (i = 0; i < num_focus; i++)
- if (focus[i].display == XtDisplay(w))
- break;
- if (i >= num_focus) {
- focus = (struct _focus*)
- XtRealloc((XtPointer)focus, sizeof(struct _focus) * (num_focus + 1));
- i = num_focus;
- focus[i].widget = NULL;
- focus[i].display = XtDisplay(w);
- num_focus++;
- }
- if (focus[i].widget != w) {
- Widget old = focus[i].widget;
-
- focus[i].widget = w;
- if (old != NULL) {
- TextFocusOut(old, event, p, n);
- /* TextFocusOut may set it to NULL */
- focus[i].widget = w;
- }
- XtAddCallback(w, XtNdestroyCallback,
- DestroyFocusCallback, (XtPointer)&focus[i]);
- }
-}
-
-/*ARGSUSED*/
-static void
-TextFocusOut(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- Bool display_caret = ctx->text.display_caret;
- Widget shell;
- Window window;
- int i, revert;
-
- shell = w;
- while (shell) {
- if (XtIsShell(shell))
- break;
- shell = XtParent(shell);
- }
-
- for (i = 0; i < num_focus; i++)
- if (focus[i].display == XtDisplay(w))
- break;
- XGetInputFocus(XtDisplay(w), &window, &revert);
- if ((XtWindow(shell) == window &&
- (i < num_focus && focus[i].widget == w))
- || event->xfocus.detail == NotifyPointer)
- return;
-
- if (i < num_focus && focus[i].widget) {
- XtRemoveCallback(focus[i].widget, XtNdestroyCallback,
- DestroyFocusCallback, (XtPointer)&focus[i]);
- focus[i].widget = NULL;
- }
-
- /* Let the input method know focus has left.*/
- _XawImUnsetFocus(w);
-
- if (display_caret)
- StartAction(ctx, event);
- ctx->text.hasfocus = FALSE;
- if (display_caret)
- EndAction(ctx);
-}
-
-/*ARGSUSED*/
-static void
-TextEnterWindow(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
- if ((event->xcrossing.detail != NotifyInferior) && event->xcrossing.focus
- && !ctx->text.hasfocus)
- _XawImSetFocusValues(w, NULL, 0);
-}
-
-/*ARGSUSED*/
-static void
-TextLeaveWindow(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
- if ((event->xcrossing.detail != NotifyInferior) && event->xcrossing.focus
- && !ctx->text.hasfocus)
- _XawImUnsetFocus(w);
-}
-
-/*
- * Function:
- * AutoFill
- * Arguments: ctx - The text widget.
- *
- * Description:
- * Breaks the line at the previous word boundry when
- * called inside InsertChar.
- */
-static void
-AutoFill(TextWidget ctx)
-{
- int width, height, x, line_num, max_width;
- XawTextPosition ret_pos;
- XawTextBlock text;
- XRectangle cursor;
- wchar_t wc_buf[2];
-
- for (line_num = 0; line_num < ctx->text.lt.lines ; line_num++)
- if (ctx->text.lt.info[line_num].position >= ctx->text.insertPos)
- break;
- if (line_num)
- line_num--; /* backup a line. */
-
- XawTextSinkGetCursorBounds(ctx->text.sink, &cursor);
- max_width = Max(0, (int)XtWidth(ctx) - RHMargins(ctx) - cursor.width);
-
- x = ctx->text.r_margin.left;
- XawTextSinkFindPosition(ctx->text.sink, ctx->text.lt.info[line_num].position,
- x, max_width, True, &ret_pos,
- &width, &height);
-
- if (ret_pos <= ctx->text.lt.info[line_num].position
- || ret_pos >= ctx->text.insertPos || ret_pos < 1)
- return;
-
- XawTextSourceRead(ctx->text.source, ret_pos - 1, &text, 1);
-
- if (XawTextFormat(ctx, XawFmtWide)) {
- wc_buf[0] = *(wchar_t *)text.ptr;
- if (wc_buf[0] != _Xaw_atowc(XawSP) && wc_buf[0] != _Xaw_atowc(XawTAB))
- /* Only eats white spaces */
- return;
-
- text.format = XawFmtWide;
- text.ptr = (char *)wc_buf;
- wc_buf[0] = _Xaw_atowc(XawLF);
- wc_buf[1] = 0;
- }
- else {
- if (text.ptr[0] != XawSP && text.ptr[0] != XawTAB)
- /* Only eats white spaces */
- return;
-
- text.format = XawFmt8Bit;
- text.ptr = "\n";
- }
- text.length = 1;
- text.firstPos = 0;
-
- if (_XawTextReplace(ctx, ret_pos - 1, ret_pos, &text))
- XBell(XtDisplay((Widget)ctx), 0);
-
- if (++ctx->text.insertPos > ctx->text.lastPos)
- ctx->text.insertPos = ctx->text.lastPos;
-}
-
-/*ARGSUSED*/
-static void
-InsertChar(Widget w, XEvent *event, String *p, Cardinal *n)
-{
- TextWidget ctx = (TextWidget)w;
- char *ptr, strbuf[128], ptrbuf[512];
- int count, error, mult = MULT(ctx);
- KeySym keysym;
- XawTextBlock text;
-#ifndef OLDXAW
- Bool format = False;
-#endif
- XawTextPosition from, to;
-
- if (XtIsSubclass (ctx->text.source, (WidgetClass) multiSrcObjectClass))
- text.length = _XawImWcLookupString(w, &event->xkey, (wchar_t*)strbuf,
- sizeof(strbuf), &keysym);
- else
- text.length = _XawLookupString(w, (XKeyEvent*)event, strbuf,
- sizeof(strbuf), &keysym);
-
- if (text.length == 0)
- return;
-
- if (mult < 0) {
- ctx->text.mult = 1;
- return;
- }
-
- text.format = _XawTextFormat(ctx);
- if (text.format == XawFmtWide) {
- text.ptr = ptr = XawStackAlloc(sizeof(wchar_t) * text.length
- * mult, ptrbuf);
- for (count = 0; count < mult; count++) {
- memcpy((char*)ptr, (char *)strbuf, sizeof(wchar_t) * text.length);
- ptr += sizeof(wchar_t) * text.length;
- }
-#ifndef OLDXAW
- if (mult == 1)
- format = ctx->text.left_column < ctx->text.right_column;
-#endif
- }
- else { /* == XawFmt8Bit */
- text.ptr = ptr = XawStackAlloc(text.length * mult, ptrbuf);
- for (count = 0; count < mult; count++) {
- strncpy(ptr, strbuf, text.length);
- ptr += text.length;
- }
-#ifndef OLDXAW
- if (mult == 1)
- format = ctx->text.left_column < ctx->text.right_column;
-#endif
- }
-
- text.length = text.length * mult;
- text.firstPos = 0;
-
- StartAction(ctx, event);
-#ifndef OLDXAW
- if (mult == 1)
- _XawSourceSetUndoMerge((TextSrcObject)ctx->text.source, True);
-#endif
-
- from = ctx->text.insertPos;
-#ifndef OLDXAW
- if (ctx->text.overwrite) {
- XawTextPosition tmp;
-
- to = from + mult;
- tmp = SrcScan(ctx->text.source, from, XawstEOL, XawsdRight, 1, False);
- if (to > tmp)
- to = tmp;
- }
- else
-#endif
- to = from;
-
- error = _XawTextReplace(ctx, from , to, &text);
-
- if (error == XawEditDone) {
- ctx->text.from_left = -1;
- ctx->text.insertPos = SrcScan(ctx->text.source, ctx->text.old_insert,
- XawstPositions, XawsdRight,
- text.length, True);
- if (ctx->text.auto_fill) {
-#ifndef OLDXAW
- if (format)
- (void)FormatText(ctx, SrcScan(ctx->text.source,
- ctx->text.insertPos, XawstEOL,
- XawsdLeft, 1, False), False,
- NULL, 0);
- else
-#endif
- AutoFill(ctx);
- }
- }
- else
- XBell(XtDisplay(ctx), 50);
-
- XawStackFree(text.ptr, ptrbuf);
- EndAction(ctx);
-
- if (error == XawEditDone && text.format == XawFmt8Bit && text.length == 1
- && (text.ptr[0] == ')' || text.ptr[0] == ']' || text.ptr[0] == '}')
- && ctx->text.display_caret) {
- static struct timeval tmval = {0, 500000};
- fd_set fds;
- Widget source = ctx->text.source;
- XawTextPosition insertPos = ctx->text.insertPos, pos, tmp, last;
- char left, right = text.ptr[0];
- int level = 0;
- XtAppContext app_context = XtWidgetToApplicationContext(w);
-
- left = right == ')' ? '(' : right == ']' ? '[' : '{';
-
- last = insertPos - 1;
- do {
- text.ptr[0] = left;
- pos = XawTextSourceSearch(source, last, XawsdLeft, &text);
- if (pos == XawTextSearchError || !IsPositionVisible(ctx, pos))
- return;
- text.ptr[0] = right;
- tmp = pos;
- do {
- tmp = XawTextSourceSearch(source, tmp, XawsdRight, &text);
- if (tmp == XawTextSearchError)
- return;
- if (tmp <= last)
- ++level;
- } while (++tmp <= last);
- --level;
- last = pos;
- } while (level);
-
- StartAction(ctx, NULL);
-#ifndef OLDXAW
- _XawSourceSetUndoMerge((TextSrcObject)ctx->text.source, True);
-#endif
- ctx->text.insertPos = pos;
- EndAction(ctx);
-
- XSync(XtDisplay(w), False);
- while (XtAppPending(app_context) & XtIMXEvent) {
- XEvent ev;
- if (! XtAppPeekEvent(app_context, &ev))
- break;
- if (ev.type == KeyPress || ev.type == ButtonPress)
- break;
- XtAppProcessEvent(app_context, XtIMXEvent);
- }
- FD_ZERO(&fds);
- FD_SET(ConnectionNumber(XtDisplay(w)), &fds);
- (void)select(FD_SETSIZE, &fds, NULL, NULL, &tmval);
- if (tmval.tv_usec != 500000)
- usleep(40000);
-
- StartAction(ctx, NULL);
-#ifndef OLDXAW
- _XawSourceSetUndoMerge((TextSrcObject)ctx->text.source, True);
-#endif
- ctx->text.insertPos = insertPos;
- EndAction(ctx);
- }
-}
-
-/* IfHexConvertHexElseReturnParam() - called by InsertString
- *
- * i18n requires the ability to specify multiple characters in a hexa-
- * decimal string at once. Since Insert was already too long, I made
- * this a seperate routine.
- *
- * A legal hex string in MBNF: '0' 'x' ( HEX-DIGIT HEX-DIGIT )+ '\0'
- *
- * WHEN: the passed param is a legal hex string
- * RETURNS: a pointer to that converted, null terminated hex string;
- * len_return holds the character count of conversion result
- *
- * WHEN: the passed param is not a legal hex string:
- * RETURNS: the parameter passed;
- * len_return holds the char count of param.
- *
- * NOTE: In neither case will there be strings to free. */
-static char *
-IfHexConvertHexElseReturnParam(char *param, int *len_return)
-{
- char *p; /* steps through param char by char */
- char c; /* holds the character pointed to by p */
- int ind; /* steps through hexval buffer char by char */
- static char hexval[XawTextActionMaxHexChars];
- Boolean first_digit;
-
- /* reject if it doesn't begin with 0x and at least one more character. */
- if ((param[0] != '0') || (param[1] != 'x') || (param[2] == '\0')) {
- *len_return = strlen(param);
- return(param);
- }
-
- /* Skip the 0x; go character by character shifting and adding. */
- first_digit = True;
- ind = 0;
- hexval[ind] = '\0';
-
- for (p = param+2; (c = *p) != '\0'; p++) {
- hexval[ind] *= 16;
- if (c >= '0' && c <= '9')
- hexval[ind] += c - '0';
- else if (c >= 'a' && c <= 'f')
- hexval[ind] += c - 'a' + 10;
- else if (c >= 'A' && c <= 'F')
- hexval[ind] += c - 'A' + 10;
- else
- break;
-
- /* If we didn't break in preceding line, it was a good hex char. */
- if (first_digit)
- first_digit = False;
- else {
- first_digit = True;
- if (++ind < XawTextActionMaxHexChars)
- hexval[ind] = '\0';
- else {
- *len_return = strlen(param);
- return(param);
- }
- }
- }
-
- /* We quit the above loop becasue we hit a non hex. If that char is \0... */
- if ((c == '\0') && first_digit) {
- *len_return = strlen(hexval);
- return (hexval); /* ...it was a legal hex string, so return it */
- }
-
- /* Else, there were non-hex chars or odd digit count, so... */
-
- *len_return = strlen(param);
- return (param); /* ...return the verbatim string. */
-}
-
-/* InsertString() - action
- *
- * Mostly rewritten for R6 i18n.
- *
- * Each parameter, in turn, will be insert at the inputPos
- * and the inputPos advances to the insertion's end.
- *
- * The exception is that parameters composed of the two
- * characters 0x, followed only by an even number of
- * hexadecimal digits will be converted to characters */
-/*ARGSUSED*/
-static void
-InsertString(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- XtAppContext app_con = XtWidgetToApplicationContext(w);
- XawTextBlock text;
- int i;
-
- text.firstPos = 0;
- text.format = _XawTextFormat(ctx);
-
- StartAction(ctx, event);
- for (i = *num_params; i; i--, params++) { /* DO FOR EACH PARAMETER */
- text.ptr = IfHexConvertHexElseReturnParam(*params, &text.length);
-
- if (text.length == 0)
- continue;
-
- if (XawTextFormat(ctx, XawFmtWide)) { /* convert to WC */
- int temp_len;
-
- text.ptr = (char*)_XawTextMBToWC(XtDisplay(w), text.ptr,
- &text.length);
-
- if (text.ptr == NULL) { /* conversion error */
- XtAppWarningMsg(app_con,
- "insertString", "textAction", "XawError",
- "insert-string()'s parameter contents "
- "not legal in this locale.",
- NULL, NULL);
- ParameterError(w, *params);
- continue;
- }
-
- /* Double check that the new input is legal: try to convert to MB. */
-
- temp_len = text.length; /* _XawTextWCToMB's 3rd arg is in_out */
- if (_XawTextWCToMB(XtDisplay(w), (wchar_t*)text.ptr, &temp_len)
- == NULL) {
- XtAppWarningMsg( app_con,
- "insertString", "textAction", "XawError",
- "insert-string()'s parameter contents "
- "not legal in this locale.",
- NULL, NULL);
- ParameterError(w, *params);
- continue;
- }
- } /* convert to WC */
-
- if (_XawTextReplace(ctx, ctx->text.insertPos,
- ctx->text.insertPos, &text)) {
- XBell(XtDisplay(ctx), 50);
- EndAction(ctx);
- return;
- }
-
- ctx->text.from_left = -1;
- /* Advance insertPos to the end of the string we just inserted. */
- ctx->text.insertPos = SrcScan(ctx->text.source, ctx->text.old_insert,
- XawstPositions, XawsdRight, text.length,
- True);
-
- } /* DO FOR EACH PARAMETER */
-
- EndAction(ctx);
-}
-
-/* DisplayCaret() - action
- *
- * The parameter list should contain one boolean value. If the
- * argument is true, the cursor will be displayed. If false, not.
- *
- * The exception is that EnterNotify and LeaveNotify events may
- * have a second argument, "always". If they do not, the cursor
- * is only affected if the focus member of the event is true. */
-static void
-DisplayCaret(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- Bool display_caret = True;
-
- if ((event->type == EnterNotify || event->type == LeaveNotify)
- && ((*num_params >= 2) && (strcmp(params[1], "always") == 0))
- && (!event->xcrossing.focus))
- return;
-
- if (*num_params > 0) { /* default arg is "True" */
- XrmValue from, to;
- from.size = strlen(from.addr = params[0]);
- XtConvert(w, XtRString, &from, XtRBoolean, &to);
-
- if (to.addr != NULL)
- display_caret = *(Boolean*)to.addr;
- if (ctx->text.display_caret == display_caret)
- return;
- }
- StartAction(ctx, event);
- ctx->text.display_caret = display_caret;
- EndAction(ctx);
-}
-
-#ifndef OLDXAW
-static void
-Numeric(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
- if (ctx->text.numeric) {
- long mult = ctx->text.mult;
-
- if (*num_params != 1 || strlen(params[0]) != 1
- || (!isdigit(params[0][0])
- && (params[0][0] != '-' || mult != 0))) {
- char err_buf[256];
-
- if (event && (event->type == KeyPress || event->type == KeyRelease)
- && params[0][0] == '-') {
- InsertChar(w, event, params, num_params);
- return;
- }
- XmuSnprintf(err_buf, sizeof(err_buf),
- "numeric: Invalid argument%s'%s'",
- *num_params ? ", " : "", *num_params ? params[0] : "");
- XtAppWarning(XtWidgetToApplicationContext(w), err_buf);
- ctx->text.numeric = False;
- ctx->text.mult = 1;
- return;
- }
- if (params[0][0] == '-') {
- ctx->text.mult = 32767;
- return;
- }
- else if (mult == 32767) {
- mult = ctx->text.mult = - (params[0][0] - '0');
- return;
- }
- else {
- mult = mult * 10 + (params[0][0] - '0') * (mult < 0 ? -1 : 1);
- ctx->text.mult = ctx->text.mult * 10 + (params[0][0] - '0') *
- (mult < 0 ? -1 : 1);
- }
- if (mult != ctx->text.mult || mult >= 32767) { /* checks for overflow */
- XBell(XtDisplay(w), 0);
- ctx->text.mult = 1;
- ctx->text.numeric = False;
- return;
- }
- }
- else
- InsertChar(w, event, params, num_params);
-}
-
-/*ARGSUSED*/
-static void
-KeyboardReset(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
-
- ctx->text.numeric = False;
- ctx->text.mult = 1;
-
- (void)_XawTextSrcToggleUndo((TextSrcObject)ctx->text.source);
-
- if (ctx->text.kill_ring_ptr) {
- --ctx->text.kill_ring_ptr->refcount;
- ctx->text.kill_ring_ptr = NULL;
- }
- ctx->text.kill_ring = 0;
-
- XBell(XtDisplay(w), 0);
-}
-#endif /* OLDXAW */
-
-/* Multiply() - action
- *
- * The parameter list may contain either a number or the string 'Reset'.
- *
- * A number will multiply the current multiplication factor by that number.
- * Many of the text widget actions will will perform n actions, where n is
- * the multiplication factor.
- *
- * The string reset will reset the mutiplication factor to 1. */
-/*ARGSUSED*/
-static void
-Multiply(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- int mult;
-
- if (*num_params != 1) {
- XtAppError(XtWidgetToApplicationContext(w),
- "Xaw Text Widget: multiply() takes exactly one argument.");
- XBell(XtDisplay(w), 0);
- return;
- }
-
- if ((params[0][0] == 'r') || (params[0][0] == 'R')) {
- XBell(XtDisplay(w), 0);
-#ifndef OLDXAW
- ctx->text.numeric = False;
-#endif
- ctx->text.mult = 1;
- return;
- }
-
-#ifndef OLDXAW
- if (params[0][0] == 's' || params[0][0] == 'S') {
- ctx->text.numeric = True;
- ctx->text.mult = 0;
- return;
- }
- else
-#endif
- if ((mult = atoi(params[0])) == 0) {
- char buf[BUFSIZ];
-
- XmuSnprintf(buf, sizeof(buf),
- "%s %s", "Xaw Text Widget: multiply() argument",
- "must be a number greater than zero, or 'Reset'.");
- XtAppError(XtWidgetToApplicationContext(w), buf);
- XBell(XtDisplay(w), 50);
- return;
- }
-
- ctx->text.mult *= mult;
-}
-
-/* StripOutOldCRs() - called from FormRegion
- *
- * removes CRs in widget ctx, from from to to.
- *
- * RETURNS: the new ending location (we may add some characters),
- * or XawReplaceError if the widget can't be written to. */
-static XawTextPosition
-StripOutOldCRs(TextWidget ctx, XawTextPosition from, XawTextPosition to,
- XawTextPosition *pos, int num_pos)
-{
- XawTextPosition startPos, endPos, eop_begin, eop_end, temp;
- Widget src = ctx->text.source;
- XawTextBlock text;
- char *buf;
- static wchar_t wc_two_spaces[3];
- int idx;
-
- /* Initialize our TextBlock with two spaces. */
- text.firstPos = 0;
- text.format = _XawTextFormat(ctx);
- if (text.format == XawFmt8Bit)
- text.ptr= " ";
- else {
- wc_two_spaces[0] = _Xaw_atowc(XawSP);
- wc_two_spaces[1] = _Xaw_atowc(XawSP);
- wc_two_spaces[2] = 0;
- text.ptr = (char*)wc_two_spaces;
- }
-
- /* Strip out CR's. */
- eop_begin = eop_end = startPos = endPos = from;
-
- /* CONSTCOND */
- while (TRUE) {
- endPos=SrcScan(src, startPos, XawstEOL, XawsdRight, 1, False);
-
- temp = SrcScan(src, endPos, XawstWhiteSpace, XawsdLeft, 1, False);
- temp = SrcScan(src, temp, XawstWhiteSpace, XawsdRight,1, False);
-
- if (temp > startPos)
- endPos = temp;
-
- if (endPos >= to)
- break;
-
- if (endPos >= eop_begin) {
- startPos = eop_end;
- eop_begin=SrcScan(src, startPos, XawstParagraph,
- XawsdRight, 1,False);
- eop_end = SrcScan(src, startPos, XawstParagraph,
- XawsdRight, 1, True);
- }
- else {
- XawTextPosition periodPos, next_word;
- int i, len;
-
- periodPos = SrcScan(src, endPos, XawstPositions,
- XawsdLeft, 1, True);
- next_word = SrcScan(src, endPos, XawstWhiteSpace,
- XawsdRight, 1, False);
-
- len = next_word - periodPos;
-
- text.length = 1;
- buf = _XawTextGetText(ctx, periodPos, next_word);
- if (text.format == XawFmtWide) {
- if (periodPos < endPos && ((wchar_t*)buf)[0] == _Xaw_atowc('.'))
- text.length++;
- }
- else
- if (periodPos < endPos && buf[0] == '.')
- text.length++; /* Put in two spaces. */
-
- /*
- * Remove all extra spaces.
- */
- for (i = 1 ; i < len; i++)
- if (text.format == XawFmtWide) {
- if (!iswspace(((wchar_t*)buf)[i]) || ((periodPos + i) >= to))
- break;
- }
- else if (!isspace(buf[i]) || (periodPos + i) >= to)
- break;
-
- XtFree(buf);
-
- to -= (i - text.length - 1);
- startPos = SrcScan(src, periodPos, XawstPositions,
- XawsdRight, i, True);
- if (_XawTextReplace(ctx, endPos, startPos, &text) != XawEditDone)
- return (XawReplaceError);
-
- for (idx = 0; idx < num_pos; idx++) {
- if (endPos < pos[idx]) {
- if (startPos < pos[idx])
- pos[idx] -= startPos - endPos;
- else
- pos[idx] = endPos;
- pos[idx] += text.length;
- }
- }
-
- startPos -= i - text.length;
- }
- }
-
- return (to);
-}
-
-/* InsertNewCRs() - called from FormRegion
- *
- * inserts new CRs for FormRegion, thus for FormParagraph action */
-static void
-InsertNewCRs(TextWidget ctx, XawTextPosition from, XawTextPosition to,
- XawTextPosition *pos, int num_pos)
-{
- XawTextPosition startPos, endPos, space, eol;
- XawTextBlock text;
- int i, width, height, len, wwidth, idx;
- char *buf;
- static wchar_t wide_CR[2];
-
- text.firstPos = 0;
- text.length = 1;
- text.format = _XawTextFormat(ctx);
-
- if (text.format == XawFmt8Bit)
- text.ptr = "\n";
- else {
- wide_CR[0] = _Xaw_atowc(XawLF);
- wide_CR[1] = 0;
- text.ptr = (char*)wide_CR;
- }
-
- startPos = from;
-
- wwidth = (int)XtWidth(ctx) - (int)HMargins(ctx);
- if (ctx->text.wrap != XawtextWrapNever) {
- XRectangle cursor;
-
- XawTextSinkGetCursorBounds(ctx->text.sink, &cursor);
- wwidth -= (int)cursor.width;
- }
- wwidth = XawMax(0, wwidth);
-
- /* CONSTCOND */
- while (TRUE) {
- XawTextSinkFindPosition(ctx->text.sink, startPos,
- (int)ctx->text.r_margin.left, wwidth,
- True, &eol, &width, &height);
- if (eol == startPos)
- ++eol;
- if (eol >= to)
- break;
-
- eol = SrcScan(ctx->text.source, eol, XawstPositions,
- XawsdLeft, 1, True);
- space = SrcScan(ctx->text.source, eol, XawstWhiteSpace,
- XawsdRight,1, True);
-
- startPos = endPos = eol;
- if (eol == space)
- return;
-
- len = (int)(space - eol);
- buf = _XawTextGetText(ctx, eol, space);
- for (i = 0 ; i < len ; i++)
- if (text.format == XawFmtWide) {
- if (!iswspace(((wchar_t*)buf)[i]))
- break;
- }
- else if (!isspace(buf[i]))
- break;
-
- to -= (i - 1);
- endPos = SrcScan(ctx->text.source, endPos,
- XawstPositions, XawsdRight, i, True);
- XtFree(buf);
-
- if (_XawTextReplace(ctx, startPos, endPos, &text))
- return;
-
- for (idx = 0; idx < num_pos; idx++) {
- if (startPos < pos[idx]) {
- if (endPos < pos[idx])
- pos[idx] -= endPos - startPos;
- else
- pos[idx] = startPos;
- pos[idx] += text.length;
- }
- }
-
- startPos = SrcScan(ctx->text.source, startPos,
- XawstPositions, XawsdRight, 1, True);
- }
-}
-
-/* FormRegion() - called by FormParagraph
- *
- * oversees the work of paragraph-forming a region
- *
- * Return:
- * XawEditDone if successful, or XawReplaceError
- */
-static int
-FormRegion(TextWidget ctx, XawTextPosition from, XawTextPosition to,
- XawTextPosition *pos, int num_pos)
-{
-#ifndef OLDXAW
- Bool format = ctx->text.auto_fill
- && ctx->text.left_column < ctx->text.right_column;
-#endif
-
- if (from >= to)
- return (XawEditDone);
-
-#ifndef OLDXAW
- if (format) {
- XawTextPosition len = ctx->text.lastPos;
- int inc = 0;
-
- if (ctx->text.justify == XawjustifyLeft ||
- ctx->text.justify == XawjustifyFull) {
- Untabify(ctx, from, to, pos, num_pos, NULL);
- to += ctx->text.lastPos - len;
- len = ctx->text.insertPos;
- (void)BlankLine((Widget)ctx, from, &inc);
- if (from + inc >= to)
- return (XawEditDone);
- }
- if (!StripSpaces(ctx, from + inc, to, pos, num_pos, NULL))
- return (XawReplaceError);
- to += ctx->text.lastPos - len;
-
- FormatText(ctx, from, ctx->text.justify != XawjustifyFull, pos, num_pos);
- }
- else {
-#endif
- if ((to = StripOutOldCRs(ctx, from, to, pos, num_pos)) == XawReplaceError)
- return (XawReplaceError);
- InsertNewCRs(ctx, from, to, pos, num_pos);
-#ifndef OLDXAW
- }
-#endif
- ctx->text.from_left = -1;
-
- return (XawEditDone);
-}
-
-#ifndef OLDXAW
-static Bool
-BlankLine(Widget w, XawTextPosition pos, int *blanks_return)
-{
- int i, blanks = 0;
- XawTextBlock block;
- Widget src = XawTextGetSource(w);
- XawTextPosition l = SrcScan(src, pos, XawstEOL, XawsdLeft, 1, False);
- XawTextPosition r = SrcScan(src, pos, XawstEOL, XawsdRight, 1, False);
-
- while (l < r) {
- l = XawTextSourceRead(src, l, &block, r - l);
- if (block.length == 0) {
- if (blanks_return)
- *blanks_return = blanks;
- return (True);
- }
- if (XawTextFormat((TextWidget)w, XawFmt8Bit)) {
- for (i = 0; i < block.length; i++, blanks++)
- if (block.ptr[i] != ' ' &&
- block.ptr[i] != '\t') {
- if (blanks_return)
- *blanks_return = blanks;
- return (block.ptr[i] == '\n');
- }
- }
- else if (XawTextFormat((TextWidget)w, XawFmtWide)) {
- for (i = 0; i < block.length; i++, blanks++)
- if (_Xaw_atowc(XawSP) != ((wchar_t*)block.ptr)[i] &&
- _Xaw_atowc(XawTAB) != ((wchar_t*)block.ptr)[i]) {
- if (blanks_return)
- *blanks_return = blanks;
- return (_Xaw_atowc(XawLF) == ((wchar_t*)block.ptr)[i]);
- }
- }
- }
-
- return (True);
-}
-
-static Bool
-GetBlockBoundaries(TextWidget ctx,
- XawTextPosition *from_return, XawTextPosition *to_return)
-{
- XawTextPosition from, to;
-
- if (ctx->text.auto_fill && ctx->text.left_column < ctx->text.right_column) {
- if (ctx->text.s.left != ctx->text.s.right) {
- from = SrcScan(ctx->text.source,
- XawMin(ctx->text.s.left, ctx->text.s.right),
- XawstEOL, XawsdLeft, 1, False);
- to = SrcScan(ctx->text.source,
- XawMax(ctx->text.s.right, ctx->text.s.right),
- XawstEOL, XawsdRight, 1, False);
- }
- else {
- XawTextBlock block;
- XawTextPosition tmp;
- Bool first;
-
- from = to = ctx->text.insertPos;
-
- /* find from position */
- first = True;
- while (1) {
- tmp = from;
- from = SrcScan(ctx->text.source, from, XawstEOL, XawsdLeft,
- 1 + !first, False);
- XawTextSourceRead(ctx->text.source, from, &block, 1);
- if (block.length == 0 ||
- (XawTextFormat(ctx, XawFmt8Bit) &&
- block.ptr[0] != ' ' &&
- block.ptr[0] != '\t' &&
- !isalnum(*(unsigned char*)block.ptr)) ||
- (XawTextFormat(ctx, XawFmtWide) &&
- _Xaw_atowc(XawSP) != *(wchar_t*)block.ptr &&
- _Xaw_atowc(XawTAB) != *(wchar_t*)block.ptr &&
- !iswalnum(*(wchar_t*)block.ptr)) ||
- BlankLine((Widget)ctx, from, NULL)) {
- from = tmp;
- break;
- }
- if (from == tmp && !first)
- break;
- first = False;
- }
- if (first)
- return (False);
-
- /* find to position */
- first = True;
- while (1) {
- tmp = to;
- to = SrcScan(ctx->text.source, to, XawstEOL, XawsdRight,
- 1 + !first, False);
- XawTextSourceRead(ctx->text.source, to + (to < ctx->text.lastPos),
- &block, 1);
- if (block.length == 0 ||
- (XawTextFormat(ctx, XawFmt8Bit) &&
- block.ptr[0] != ' ' &&
- block.ptr[0] != '\t' &&
- !isalnum(*(unsigned char*)block.ptr)) ||
- (XawTextFormat(ctx, XawFmtWide) &&
- _Xaw_atowc(XawSP) != *(wchar_t*)block.ptr &&
- _Xaw_atowc(XawTAB) != *(wchar_t*)block.ptr &&
- !iswalnum(*(wchar_t*)block.ptr)) ||
- BlankLine((Widget)ctx, to, NULL))
- break;
- if (to == tmp && !first)
- break;
- first = False;
- }
- }
- }
- else {
- from = SrcScan(ctx->text.source, ctx->text.insertPos, XawstEOL,
- XawsdLeft, 1, False);
- if (BlankLine((Widget)ctx, from, NULL))
- return (False);
- from = SrcScan(ctx->text.source, from, XawstParagraph,
- XawsdLeft, 1, False);
- if (BlankLine((Widget)ctx, from, NULL))
- from = SrcScan(ctx->text.source, from, XawstEOL,
- XawsdRight, 1, True);
- to = SrcScan(ctx->text.source, from, XawstParagraph,
- XawsdRight, 1, False);
- }
-
- if (from < to) {
- *from_return = from;
- *to_return = to;
- return (True);
- }
-
- return (False);
-}
-#endif /* OLDXAW */
-
-/* FormParagraph() - action
- *
- * removes and reinserts CRs to maximize line length without clipping */
-/*ARGSUSED*/
-static void
-FormParagraph(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition from, to, buf[32], *pos;
-#ifndef OLDXAW
- XawTextPosition endPos = 0;
- char *lbuf = NULL, *rbuf;
- TextSrcObject src = (TextSrcObject)ctx->text.source;
- Cardinal i;
- Bool undo = src->textSrc.enable_undo && src->textSrc.undo_state == False;
-#endif
-
- StartAction(ctx, event);
-
-#ifndef OLDXAW
- pos = XawStackAlloc(sizeof(XawTextPosition) * src->textSrc.num_text, buf);
- for (i = 0; i < src->textSrc.num_text; i++)
- pos[i] = ((TextWidget)src->textSrc.text[i])->text.old_insert;
-#else
- pos = buf;
- *pos = ctx->text.old_insert;
-#endif
-
-#ifndef OLDXAW
- if (!GetBlockBoundaries(ctx, &from, &to)) {
- EndAction(ctx);
- XawStackFree(pos, buf);
- return;
- }
-
- if (undo) {
- src->textSrc.undo_state = True;
- lbuf = _XawTextGetText(ctx, from, to);
- endPos = ctx->text.lastPos;
- }
-
- if (FormRegion(ctx, from, to, pos, src->textSrc.num_text) == XawReplaceError) {
-#else
- from = SrcScan(ctx->text.source, ctx->text.insertPos,
- XawstParagraph, XawsdLeft, 1, False);
- to = SrcScan(ctx->text.source, from,
- XawstParagraph, XawsdRight, 1, False);
-
- if (FormRegion(ctx, from, to, pos, 1) == XawReplaceError) {
-#endif
- XawStackFree(pos, buf);
- XBell(XtDisplay(w), 0);
-#ifndef OLDXAW
- if (undo) {
- src->textSrc.undo_state = False;
- XtFree(lbuf);
- }
-#endif
- }
-#ifndef OLDXAW
- else if (undo) {
- /* makes the form-paragraph only one undo/redo step */
- unsigned llen, rlen, size;
- XawTextBlock block;
-
- llen = to - from;
- rlen = llen + (ctx->text.lastPos - endPos);
-
- block.firstPos = 0;
- block.format = _XawTextFormat(ctx);
-
- rbuf = _XawTextGetText(ctx, from, from + rlen);
-
- size = XawTextFormat(ctx, XawFmtWide) ? sizeof(wchar_t) : sizeof(char);
- if (llen != rlen || memcmp(lbuf, rbuf, llen * size)) {
- block.ptr = lbuf;
- block.length = llen;
- _XawTextReplace(ctx, from, from + rlen, &block);
-
- src->textSrc.undo_state = False;
- block.ptr = rbuf;
- block.length = rlen;
- _XawTextReplace(ctx, from, from + llen, &block);
- }
- else
- src->textSrc.undo_state = False;
- XtFree(lbuf);
- XtFree(rbuf);
- }
-
- for (i = 0; i < src->textSrc.num_text; i++) {
- TextWidget tw = (TextWidget)src->textSrc.text[i];
-
- tw->text.old_insert = tw->text.insertPos = pos[i];
- _XawTextBuildLineTable(tw, SrcScan((Widget)src, tw->text.lt.top, XawstEOL,
- XawsdLeft, 1, False), False);
- tw->text.clear_to_eol = True;
- }
-#else
- ctx->text.old_insert = ctx->text.insertPos = *pos;
- _XawTextBuildLineTable(ctx, SrcScan(ctx->text.source, ctx->text.lt.top,
- XawstEOL, XawsdLeft, 1, False), False);
- ctx->text.clear_to_eol = True;
-#endif
- XawStackFree(pos, buf);
- ctx->text.showposition = True;
-
- EndAction(ctx);
-}
-
-/* TransposeCharacters() - action
- *
- * Swaps the character to the left of the mark
- * with the character to the right of the mark */
-/*ARGSUSED*/
-static void
-TransposeCharacters(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextPosition start, end;
- XawTextBlock text;
- char *buf;
- int i, mult = MULT(ctx);
-
- if (mult < 0) {
- ctx->text.mult = 1;
- return;
- }
-
- StartAction(ctx, event);
-
- /* Get bounds. */
-
- start = SrcScan(ctx->text.source, ctx->text.insertPos, XawstPositions,
- XawsdLeft, 1, True);
- end = SrcScan(ctx->text.source, ctx->text.insertPos, XawstPositions,
- XawsdRight, mult, True);
-
- /* Make sure we aren't at the very beginning or end of the buffer. */
-
- if (start == ctx->text.insertPos || end == ctx->text.insertPos) {
- XBell(XtDisplay(w), 0); /* complain. */
- EndAction(ctx);
- return;
- }
-
- ctx->text.from_left = -1;
- ctx->text.insertPos = end;
-
- text.firstPos = 0;
- text.format = _XawTextFormat(ctx);
-
- /* Retrieve text and swap the characters. */
- if (text.format == XawFmtWide) {
- wchar_t wc;
- wchar_t *wbuf;
-
- wbuf = (wchar_t*)_XawTextGetText(ctx, start, end);
- text.length = wcslen(wbuf);
- wc = wbuf[0];
- for (i = 1; i < text.length; i++)
- wbuf[i - 1] = wbuf[i];
- wbuf[i - 1] = wc;
- buf = (char*)wbuf; /* so that it gets assigned and freed */
- }
- else { /* thus text.format == XawFmt8Bit */
- char c;
-
- buf = _XawTextGetText(ctx, start, end);
- text.length = strlen(buf);
- c = buf[0];
- for (i = 1; i < text.length; i++)
- buf[i - 1] = buf[i];
- buf[i - 1] = c;
- }
-
- text.ptr = buf;
-
- /* Store new text in source. */
-
- if (_XawTextReplace (ctx, start, end, &text))
- XBell(XtDisplay(w), 0);
- XtFree((char *)buf);
- EndAction(ctx);
-}
-
-#ifndef OLDXAW
-/*ARGSUSED*/
-static void
-Undo(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- int mul = MULT(ctx);
- Bool toggle = False;
-
- if (mul < 0) {
- toggle = True;
- _XawTextSrcToggleUndo((TextSrcObject)ctx->text.source);
- ctx->text.mult = mul = -mul;
- }
-
- StartAction(ctx, event);
- for (; mul; --mul)
- if (!_XawTextSrcUndo((TextSrcObject)ctx->text.source, &ctx->text.insertPos))
- break;
- ctx->text.showposition = True;
-
- if (toggle)
- _XawTextSrcToggleUndo((TextSrcObject)ctx->text.source);
- EndAction(ctx);
-}
-#endif
-
-/* NoOp() - action
- * This action performs no action, and allows the user or
- * application programmer to unbind a translation.
- *
- * Note: If the parameter list contains the string "RingBell" then
- * this action will ring the bell.
- */
-/*ARGSUSED*/
-static void
-NoOp(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- if (*num_params != 1)
- return;
-
- switch(params[0][0]) {
- case 'R':
- case 'r':
- XBell(XtDisplay(w), 0);
- /*FALLTROUGH*/
- default:
- break;
- }
-}
-
-/* Reconnect() - action
- * This reconnects to the input method. The user will typically call
- * this action if/when connection has been severed, or when the app
- * was started up before an IM was started up
- */
-/*ARGSUSED*/
-static void
-Reconnect(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- _XawImReconnect(w);
-}
-
-#define CAPITALIZE 1
-#define DOWNCASE 2
-#define UPCASE 3
-
-#ifdef NO_LIBC_I18N
-static int
-ToLower(int ch)
-{
- char buf[2];
-
- *buf = ch;
- XmuNCopyISOLatin1Lowered(buf, buf, sizeof(buf));
-
- return (*buf);
-}
-
-static int
-ToUpper(int ch)
-{
- char buf[2];
-
- *buf = ch;
- XmuNCopyISOLatin1Uppered(buf, buf, sizeof(buf));
-
- return (*buf);
-}
-
-static int
-IsAlnum(int ch)
-{
- return ((ch >= '0' && ch <= '9') || ToUpper(ch) != ch || ToLower(ch) != ch);
-}
-
-static int
-IsLower(int ch)
-{
- char upbuf[2];
- char lobuf[2];
-
- *upbuf = *lobuf = ch;
- XmuNCopyISOLatin1Lowered(lobuf, lobuf, sizeof(lobuf));
- XmuNCopyISOLatin1Uppered(upbuf, upbuf, sizeof(upbuf));
-
- return (*lobuf != *upbuf && ch == *lobuf);
-}
-
-static int
-IsUpper(int ch)
-{
- char upbuf[2];
- char lobuf[2];
-
- *upbuf = *lobuf = ch;
- XmuNCopyISOLatin1Lowered(lobuf, lobuf, sizeof(lobuf));
- XmuNCopyISOLatin1Uppered(upbuf, upbuf, sizeof(upbuf));
-
- return (*lobuf != *upbuf && ch == *upbuf);
-}
-#else
-#define ToLower tolower
-#define ToUpper toupper
-#define IsAlnum isalnum
-#define IsLower islower
-#define IsUpper isupper
-#endif
-
-static void
-CaseProc(Widget w, XEvent *event, int cmd)
-{
- TextWidget ctx = (TextWidget)w;
- short mul = MULT(ctx);
- XawTextPosition left, right;
- XawTextBlock block;
- Bool changed = False;
- unsigned char ch, mb[sizeof(wchar_t)];
- int i, count;
-
- if (mul > 0)
- right = SrcScan(ctx->text.source, left = ctx->text.insertPos,
- XawstAlphaNumeric, XawsdRight, mul, False);
- else
- left = SrcScan(ctx->text.source, right = ctx->text.insertPos,
- XawstAlphaNumeric, XawsdLeft, 1 + -mul, False);
- block.firstPos = 0;
- block.format = _XawTextFormat(ctx);
- block.length = right - left;
- block.ptr = _XawTextGetText(ctx, left, right);
-
- count = 0;
- if (block.format == XawFmt8Bit)
- for (i = 0; i < block.length; i++) {
- if (!IsAlnum(*mb = (unsigned char)block.ptr[i]))
- count = 0;
- else if (++count == 1 || cmd != CAPITALIZE) {
- ch = cmd == DOWNCASE ? ToLower(*mb) : ToUpper(*mb);
- if (ch != *mb) {
- changed = True;
- block.ptr[i] = ch;
- }
- }
- else if (cmd == CAPITALIZE) {
- if ((ch = ToLower(*mb)) != *mb) {
- changed = True;
- block.ptr[i] = ch;
- }
- }
- }
- else
- for (i = 0; i < block.length; i++) {
- wctomb((char*)mb, ((wchar_t*)block.ptr)[i]);
- if (!IsAlnum(*mb))
- count = 0;
- else if (++count == 1 || cmd != CAPITALIZE) {
- ch = cmd == DOWNCASE ? ToLower(*mb) : ToUpper(*mb);
- if (ch != *mb) {
- changed = True;
- ((wchar_t*)block.ptr)[i] = _Xaw_atowc(ch);
- }
- }
- else if (cmd == CAPITALIZE) {
- if ((ch = ToLower(*mb)) != *mb) {
- changed = True;
- ((wchar_t*)block.ptr)[i] = _Xaw_atowc(ch);
- }
- }
- }
-
- StartAction(ctx, event);
- if (changed && _XawTextReplace(ctx, left, right, &block) != XawEditDone)
- XBell(XtDisplay(ctx), 0);
- ctx->text.insertPos = right;
- EndAction(ctx);
-
- XtFree(block.ptr);
-}
-
-/*ARGSUSED*/
-static void
-CapitalizeWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CaseProc(w, event, CAPITALIZE);
-}
-
-/*ARGSUSED*/
-static void
-DowncaseWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CaseProc(w, event, DOWNCASE);
-}
-
-/*ARGSUSED*/
-static void
-UpcaseWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- CaseProc(w, event, UPCASE);
-}
-#undef CAPITALIZE
-#undef DOWNCASE
-#undef UPCASE
-
-XtActionsRec _XawTextActionsTable[] = {
- /* motion */
- {"forward-character", MoveForwardChar},
- {"backward-character", MoveBackwardChar},
- {"forward-word", MoveForwardWord},
- {"backward-word", MoveBackwardWord},
- {"forward-paragraph", MoveForwardParagraph},
- {"backward-paragraph", MoveBackwardParagraph},
- {"beginning-of-line", MoveToLineStart},
- {"end-of-line", MoveToLineEnd},
- {"next-line", MoveNextLine},
- {"previous-line", MovePreviousLine},
- {"next-page", MoveNextPage},
- {"previous-page", MovePreviousPage},
- {"beginning-of-file", MoveBeginningOfFile},
- {"end-of-file", MoveEndOfFile},
- {"scroll-one-line-up", ScrollOneLineUp},
- {"scroll-one-line-down", ScrollOneLineDown},
-
- /* delete */
- {"delete-next-character", DeleteForwardChar},
- {"delete-previous-character", DeleteBackwardChar},
- {"delete-next-word", DeleteForwardWord},
- {"delete-previous-word", DeleteBackwardWord},
- {"delete-selection", DeleteCurrentSelection},
- {"delete", Delete},
-
- /* kill */
- {"kill-word", KillForwardWord},
- {"backward-kill-word", KillBackwardWord},
- {"kill-selection", KillCurrentSelection},
- {"kill-to-end-of-line", KillToEndOfLine},
- {"kill-to-end-of-paragraph", KillToEndOfParagraph},
-
- /* new line */
- {"newline-and-indent", InsertNewLineAndIndent},
- {"newline-and-backup", InsertNewLineAndBackup},
- {"newline", InsertNewLine},
-
- /* selection */
- {"select-word", SelectWord},
- {"select-all", SelectAll},
- {"select-start", SelectStart},
- {"select-adjust", SelectAdjust},
- {"select-end", SelectEnd},
- {"select-save", SelectSave},
- {"extend-start", ExtendStart},
- {"extend-adjust", ExtendAdjust},
- {"extend-end", ExtendEnd},
- {"insert-selection", InsertSelection},
-
- /* miscellaneous */
- {"redraw-display", RedrawDisplay},
- {"insert-file", _XawTextInsertFile},
- {"search", _XawTextSearch},
- {"insert-char", InsertChar},
- {"insert-string", InsertString},
- {"focus-in", TextFocusIn},
- {"focus-out", TextFocusOut},
- {"enter-window", TextEnterWindow},
- {"leave-window", TextLeaveWindow},
- {"display-caret", DisplayCaret},
- {"multiply", Multiply},
- {"form-paragraph", FormParagraph},
- {"transpose-characters", TransposeCharacters},
- {"set-keyboard-focus", SetKeyboardFocus},
-#ifndef OLDXAW
- {"numeric", Numeric},
- {"undo", Undo},
- {"keyboard-reset", KeyboardReset},
- {"kill-ring-yank", KillRingYank},
- {"toggle-overwrite", ToggleOverwrite},
- {"indent", Indent},
-#endif
- {"no-op", NoOp},
-
- /* case transformations */
- {"capitalize-word", CapitalizeWord},
- {"downcase-word", DowncaseWord},
- {"upcase-word", UpcaseWord},
-
- /* action to bind translations for text dialogs */
- {"InsertFileAction", _XawTextInsertFileAction},
- {"DoSearchAction", _XawTextDoSearchAction},
- {"DoReplaceAction", _XawTextDoReplaceAction},
- {"SetField", _XawTextSetField},
- {"PopdownSearchAction", _XawTextPopdownSearchAction},
-
- /* reconnect to Input Method */
- {"reconnect-im", Reconnect} /* Li Yuhong, Omron KK, 1991 */
-};
-
-Cardinal _XawTextActionsTableCount = XtNumber(_XawTextActionsTable);
+/*
+
+Copyright 1989, 1994, 1998 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.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xos.h> /* for select() and struct timeval */
+#include <ctype.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xatom.h>
+#include <X11/Xfuncs.h>
+#include <X11/Xutil.h>
+#include <X11/Xwinsock.h>
+#include <X11/Xmu/Atoms.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xmu/StdSel.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/MultiSinkP.h>
+#include <X11/Xaw/MultiSrcP.h>
+#include <X11/Xaw/TextP.h>
+#include <X11/Xaw/TextSrcP.h>
+#include <X11/Xaw/XawImP.h>
+#include "Private.h"
+#include "XawI18n.h"
+
+#define SrcScan XawTextSourceScan
+#define FindDist XawTextSinkFindDistance
+#define FindPos XawTextSinkFindPosition
+#define MULT(w) (w->text.mult == 0 ? 4 : \
+ w->text.mult == 32767 ? -4 : w->text.mult)
+
+#define KILL_RING_APPEND 2
+#define KILL_RING_BEGIN 3
+#define KILL_RING_YANK 100
+#define KILL_RING_YANK_DONE 98
+
+#define XawTextActionMaxHexChars 100
+
+#ifdef _MSC_VER
+#define usleep(time) Sleep(time)
+#endif
+/*
+ * Prototypes
+ */
+static void _DeleteOrKill(TextWidget, XawTextPosition, XawTextPosition, Bool);
+static void _SelectionReceived(Widget, XtPointer, Atom*, Atom*, XtPointer,
+ unsigned long*, int*);
+static void _LoseSelection(Widget, Atom*, char**, int*);
+static void AutoFill(TextWidget);
+static Boolean ConvertSelection(Widget, Atom*, Atom*, Atom*, XtPointer*,
+ unsigned long*, int*);
+static void DeleteOrKill(TextWidget, XEvent*, XawTextScanDirection,
+ XawTextScanType, Bool, Bool);
+static void EndAction(TextWidget);
+#ifndef OLDXAW
+static Bool BlankLine(Widget, XawTextPosition, int*);
+static int DoFormatText(TextWidget, XawTextPosition, Bool, int,
+ XawTextBlock*, XawTextPosition*, int, Bool);
+static int FormatText(TextWidget, XawTextPosition, Bool,
+ XawTextPosition*, int);
+static Bool GetBlockBoundaries(TextWidget, XawTextPosition*, XawTextPosition*);
+#endif
+static int FormRegion(TextWidget, XawTextPosition, XawTextPosition,
+ XawTextPosition*, int);
+static void GetSelection(Widget, Time, String*, Cardinal);
+static char *IfHexConvertHexElseReturnParam(char*, int*);
+static void InsertNewCRs(TextWidget, XawTextPosition, XawTextPosition,
+ XawTextPosition*, int);
+static int InsertNewLineAndBackupInternal(TextWidget);
+static int LocalInsertNewLine(TextWidget, XEvent*);
+static void LoseSelection(Widget, Atom*);
+static void ParameterError(Widget, String);
+static Bool MatchSelection(Atom, XawTextSelection*);
+static void ModifySelection(TextWidget, XEvent*, XawTextSelectionMode,
+ XawTextSelectionAction, String*, Cardinal*);
+static void Move(TextWidget, XEvent*, XawTextScanDirection, XawTextScanType,
+ Bool);
+static void NotePosition(TextWidget, XEvent*);
+static void StartAction(TextWidget, XEvent*);
+static XawTextPosition StripOutOldCRs(TextWidget, XawTextPosition,
+ XawTextPosition, XawTextPosition*, int);
+#ifndef OLDXAW
+static Bool StripSpaces(TextWidget, XawTextPosition, XawTextPosition,
+ XawTextPosition*, int, XawTextBlock*);
+static Bool Tabify(TextWidget, XawTextPosition, XawTextPosition,
+ XawTextPosition*, int, XawTextBlock*);
+static Bool Untabify(TextWidget, XawTextPosition, XawTextPosition,
+ XawTextPosition*, int, XawTextBlock*);
+#endif
+
+/*
+ * Actions
+ */
+static void CapitalizeWord(Widget, XEvent*, String*, Cardinal*);
+static void DisplayCaret(Widget, XEvent*, String*, Cardinal*);
+static void Delete(Widget, XEvent*, String*, Cardinal*);
+static void DeleteBackwardChar(Widget, XEvent*, String*, Cardinal*);
+static void DeleteBackwardWord(Widget, XEvent*, String*, Cardinal*);
+static void DeleteCurrentSelection(Widget, XEvent*, String*, Cardinal*);
+static void DeleteForwardChar(Widget, XEvent*, String*, Cardinal*);
+static void DeleteForwardWord(Widget, XEvent*, String*, Cardinal*);
+static void DowncaseWord(Widget, XEvent*, String*, Cardinal*);
+static void ExtendAdjust(Widget, XEvent*, String*, Cardinal*);
+static void ExtendEnd(Widget, XEvent*, String*, Cardinal*);
+static void ExtendStart(Widget, XEvent*, String*, Cardinal*);
+static void FormParagraph(Widget, XEvent*, String*, Cardinal*);
+#ifndef OLDXAW
+static void Indent(Widget, XEvent*, String*, Cardinal*);
+#endif
+static void InsertChar(Widget, XEvent*, String*, Cardinal*);
+static void InsertNewLine(Widget, XEvent*, String*, Cardinal*);
+static void InsertNewLineAndBackup(Widget, XEvent*, String*, Cardinal*);
+static void InsertNewLineAndIndent(Widget, XEvent*, String*, Cardinal*);
+static void InsertSelection(Widget, XEvent*, String*, Cardinal*);
+static void InsertString(Widget, XEvent*, String*, Cardinal*);
+#ifndef OLDXAW
+static void KeyboardReset(Widget, XEvent*, String*, Cardinal*);
+#endif
+static void KillBackwardWord(Widget, XEvent*, String*, Cardinal*);
+static void KillCurrentSelection(Widget, XEvent*, String*, Cardinal*);
+static void KillForwardWord(Widget, XEvent*, String*, Cardinal*);
+#ifndef OLDXAW
+static void KillRingYank(Widget, XEvent*, String*, Cardinal*);
+#endif
+static void KillToEndOfLine(Widget, XEvent*, String*, Cardinal*);
+static void KillToEndOfParagraph(Widget, XEvent*, String*, Cardinal*);
+static void MoveBackwardChar(Widget, XEvent*, String*, Cardinal*);
+static void MoveBackwardWord(Widget, XEvent*, String*, Cardinal*);
+static void MoveBackwardParagraph(Widget, XEvent*, String*, Cardinal*);
+static void MoveBeginningOfFile(Widget, XEvent*, String*, Cardinal*);
+static void MoveEndOfFile(Widget, XEvent*, String*, Cardinal*);
+static void MoveForwardChar(Widget, XEvent*, String*, Cardinal*);
+static void MoveForwardWord(Widget, XEvent*, String*, Cardinal*);
+static void MoveForwardParagraph(Widget, XEvent*, String*, Cardinal*);
+static void MoveNextLine(Widget, XEvent*, String*, Cardinal*);
+static void MoveNextPage(Widget, XEvent*, String*, Cardinal*);
+static void MovePage(TextWidget, XEvent*, XawTextScanDirection);
+static void MovePreviousLine(Widget, XEvent*, String*, Cardinal*);
+static void MovePreviousPage(Widget, XEvent*, String*, Cardinal*);
+static void MoveLine(TextWidget, XEvent*, XawTextScanDirection);
+static void MoveToLineEnd(Widget, XEvent*, String*, Cardinal*);
+static void MoveToLineStart(Widget, XEvent*, String*, Cardinal*);
+static void Multiply(Widget, XEvent*, String*, Cardinal*);
+static void NoOp(Widget, XEvent*, String*, Cardinal*);
+#ifndef OLDXAW
+static void Numeric(Widget, XEvent*, String*, Cardinal*);
+#endif
+static void Reconnect(Widget, XEvent*, String*, Cardinal*);
+static void RedrawDisplay(Widget, XEvent*, String*, Cardinal*);
+static void Scroll(TextWidget, XEvent*, XawTextScanDirection);
+static void ScrollOneLineDown(Widget, XEvent*, String*, Cardinal*);
+static void ScrollOneLineUp(Widget, XEvent*, String*, Cardinal*);
+static void SelectAdjust(Widget, XEvent*, String*, Cardinal*);
+static void SelectAll(Widget, XEvent*, String*, Cardinal*);
+static void SelectEnd(Widget, XEvent*, String*, Cardinal*);
+static void SelectSave(Widget, XEvent*, String*, Cardinal*);
+static void SelectStart(Widget, XEvent*, String*, Cardinal*);
+static void SelectWord(Widget, XEvent*, String*, Cardinal*);
+static void SetKeyboardFocus(Widget, XEvent*, String*, Cardinal*);
+static void TextEnterWindow(Widget, XEvent*, String*, Cardinal*);
+static void TextFocusIn(Widget, XEvent*, String*, Cardinal*);
+static void TextFocusOut(Widget, XEvent*, String*, Cardinal*);
+static void TextLeaveWindow(Widget, XEvent*, String*, Cardinal*);
+static void TransposeCharacters(Widget, XEvent*, String*, Cardinal*);
+#ifndef OLDXAW
+static void ToggleOverwrite(Widget, XEvent*, String*, Cardinal*);
+static void Undo(Widget, XEvent*, String*, Cardinal*);
+#endif
+static void UpcaseWord(Widget, XEvent*, String*, Cardinal*);
+static void DestroyFocusCallback(Widget, XtPointer, XtPointer);
+
+/*
+ * External
+ */
+void _XawTextZapSelection(TextWidget, XEvent*, Bool);
+
+/*
+ * Defined in TextPop.c
+ */
+void _XawTextInsertFileAction(Widget, XEvent*, String*, Cardinal*);
+void _XawTextInsertFile(Widget, XEvent*, String*, Cardinal*);
+void _XawTextSearch(Widget, XEvent*, String*, Cardinal*);
+void _XawTextDoSearchAction(Widget, XEvent*, String*, Cardinal*);
+void _XawTextDoReplaceAction(Widget, XEvent*, String*, Cardinal*);
+void _XawTextSetField(Widget, XEvent*, String*, Cardinal*);
+void _XawTextPopdownSearchAction(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * These are defined in Text.c
+ */
+void _XawTextAlterSelection(TextWidget, XawTextSelectionMode,
+ XawTextSelectionAction, String*, Cardinal*);
+void _XawTextClearAndCenterDisplay(TextWidget);
+void _XawTextExecuteUpdate(TextWidget);
+char *_XawTextGetText(TextWidget, XawTextPosition, XawTextPosition);
+void _XawTextPrepareToUpdate(TextWidget);
+int _XawTextReplace(TextWidget, XawTextPosition, XawTextPosition,
+ XawTextBlock*);
+Atom *_XawTextSelectionList(TextWidget, String*, Cardinal);
+void _XawTextSetSelection(TextWidget, XawTextPosition, XawTextPosition,
+ String*, Cardinal);
+void _XawTextVScroll(TextWidget, int);
+void XawTextScroll(TextWidget, int, int);
+void _XawTextSetLineAndColumnNumber(TextWidget, Bool);
+
+#ifndef OLDXAW
+/*
+ * Defined in TextSrc.c
+ */
+Bool _XawTextSrcUndo(TextSrcObject, XawTextPosition*);
+Bool _XawTextSrcToggleUndo(TextSrcObject);
+void _XawSourceSetUndoErase(TextSrcObject, int);
+void _XawSourceSetUndoMerge(TextSrcObject, Bool);
+#endif /* OLDXAW */
+
+/*
+ * Initialization
+ */
+#ifndef OLDXAW
+#define MAX_KILL_RINGS 1024
+XawTextKillRing *xaw_text_kill_ring;
+static XawTextKillRing kill_ring_prev, kill_ring_null = { &kill_ring_prev, };
+static unsigned num_kill_rings;
+#endif
+
+/*
+ * Implementation
+ */
+static void
+ParameterError(Widget w, String param)
+{
+ String params[2];
+ Cardinal num_params = 2;
+ params[0] = XtName(w);
+ params[1] = param;
+
+ XtAppWarningMsg(XtWidgetToApplicationContext(w),
+ "parameterError", "textAction", "XawError",
+ "Widget: %s Parameter: %s",
+ params, &num_params);
+ XBell(XtDisplay(w), 50);
+}
+
+static void
+StartAction(TextWidget ctx, XEvent *event)
+{
+#ifndef OLDXAW
+ Cardinal i;
+ TextSrcObject src = (TextSrcObject)ctx->text.source;
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ _XawTextPrepareToUpdate((TextWidget)src->textSrc.text[i]);
+ _XawSourceSetUndoMerge(src, False);
+#else
+ _XawTextPrepareToUpdate(ctx);
+#endif
+
+ if (event != NULL) {
+ switch (event->type) {
+ case ButtonPress:
+ case ButtonRelease:
+ ctx->text.time = event->xbutton.time;
+ break;
+ case KeyPress:
+ case KeyRelease:
+ ctx->text.time = event->xkey.time;
+ break;
+ case MotionNotify:
+ ctx->text.time = event->xmotion.time;
+ break;
+ case EnterNotify:
+ case LeaveNotify:
+ ctx->text.time = event->xcrossing.time;
+ }
+ }
+}
+
+static void
+NotePosition(TextWidget ctx, XEvent *event)
+{
+ switch (event->type) {
+ case ButtonPress:
+ case ButtonRelease:
+ ctx->text.ev_x = event->xbutton.x;
+ ctx->text.ev_y = event->xbutton.y;
+ break;
+ case KeyPress:
+ case KeyRelease: {
+ XRectangle cursor;
+ XawTextSinkGetCursorBounds(ctx->text.sink, &cursor);
+ ctx->text.ev_x = cursor.x + cursor.width / 2;
+ ctx->text.ev_y = cursor.y + cursor.height / 2;
+ } break;
+ case MotionNotify:
+ ctx->text.ev_x = event->xmotion.x;
+ ctx->text.ev_y = event->xmotion.y;
+ break;
+ case EnterNotify:
+ case LeaveNotify:
+ ctx->text.ev_x = event->xcrossing.x;
+ ctx->text.ev_y = event->xcrossing.y;
+ }
+}
+
+static void
+EndAction(TextWidget ctx)
+{
+#ifndef OLDXAW
+ Cardinal i;
+ TextSrcObject src = (TextSrcObject)ctx->text.source;
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ _XawTextExecuteUpdate((TextWidget)src->textSrc.text[i]);
+
+ ctx->text.mult = 1;
+ ctx->text.numeric = False;
+ if (ctx->text.kill_ring) {
+ if (--ctx->text.kill_ring == KILL_RING_YANK_DONE) {
+ if (ctx->text.kill_ring_ptr) {
+ --ctx->text.kill_ring_ptr->refcount;
+ ctx->text.kill_ring_ptr = NULL;
+ }
+ }
+ }
+#else
+ ctx->text.mult = 1;
+ _XawTextExecuteUpdate(ctx);
+#endif /* OLDXAW */
+}
+
+struct _SelectionList {
+ String* params;
+ Cardinal count;
+ Time time;
+ int asked; /* which selection currently has been asked for:
+ 0 = UTF8_STRING, 1 = COMPOUND_TEXT, 2 = STRING */
+ Atom selection; /* selection atom (normally XA_PRIMARY) */
+};
+
+/*ARGSUSED*/
+static void
+_SelectionReceived(Widget w, XtPointer client_data, Atom *selection,
+ Atom *type, XtPointer value, unsigned long *length,
+ int *format)
+{
+ Display *d = XtDisplay(w);
+ TextWidget ctx = (TextWidget)w;
+ XawTextBlock text;
+
+ if (*type == 0 /*XT_CONVERT_FAIL*/ || *length == 0) {
+ struct _SelectionList* list = (struct _SelectionList*)client_data;
+
+ if (list != NULL) {
+ if (list->asked == 0) {
+ /* If we just asked for XA_UTF8_STRING and got no response,
+ we'll ask again, this time for XA_COMPOUND_TEXT. */
+ list->asked++;
+ XtGetSelectionValue(w, list->selection, XA_COMPOUND_TEXT(d),
+ _SelectionReceived,
+ (XtPointer)list, list->time);
+ } else if (list->asked == 1) {
+ /* If we just asked for XA_COMPOUND_TEXT and got no response,
+ we'll ask again, this time for XA_STRING. */
+ list->asked++;
+ XtGetSelectionValue(w, list->selection, XA_STRING,
+ _SelectionReceived,
+ (XtPointer)list, list->time);
+ } else {
+ /* We tried all possible text targets in this param.
+ Recurse on the tail of the params list. */
+ GetSelection(w, list->time, list->params, list->count);
+ XtFree(client_data);
+ }
+ }
+ return;
+ }
+
+ StartAction(ctx, NULL);
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ XTextProperty textprop;
+ wchar_t **wlist;
+ int count;
+
+ textprop.encoding = *type;
+ textprop.value = (unsigned char *)value;
+ textprop.nitems = strlen(value);
+ textprop.format = 8;
+
+ if (XwcTextPropertyToTextList(d, &textprop, &wlist, &count)
+ != Success
+ || count < 1) {
+ XwcFreeStringList(wlist);
+
+ /* Notify the user on strerr and in the insertion :) */
+ fprintf(stderr, "Xaw Text Widget: An attempt was made to insert "
+ "an illegal selection.\n");
+
+ textprop.value = (unsigned char *)" >> ILLEGAL SELECTION << ";
+ textprop.nitems = strlen((char *) textprop.value);
+ if (XwcTextPropertyToTextList(d, &textprop, &wlist, &count)
+ != Success
+ || count < 1)
+ return;
+ }
+
+ XFree(value);
+ value = (XPointer)wlist[0];
+
+ *length = wcslen(wlist[0]);
+ XtFree((XtPointer)wlist);
+ text.format = XawFmtWide;
+ }
+ text.ptr = (char*)value;
+ text.firstPos = 0;
+ text.length = *length;
+ if (_XawTextReplace(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
+ XBell(XtDisplay(ctx), 0);
+ EndAction(ctx);
+ return;
+ }
+
+ ctx->text.from_left = -1;
+ ctx->text.insertPos = SrcScan(ctx->text.source, ctx->text.old_insert,
+ XawstPositions, XawsdRight, text.length, True);
+
+ EndAction(ctx);
+ XtFree(client_data);
+ XFree(value); /* the selection value should be freed with XFree */
+}
+
+static void
+GetSelection(Widget w, Time timev, String *params, Cardinal num_params)
+{
+ Display *d = XtDisplay(w);
+ TextWidget ctx = (TextWidget)w;
+ Atom selection;
+ int buffer;
+
+ selection = XInternAtom(XtDisplay(w), *params, False);
+ switch (selection) {
+ case XA_CUT_BUFFER0: buffer = 0; break;
+ case XA_CUT_BUFFER1: buffer = 1; break;
+ case XA_CUT_BUFFER2: buffer = 2; break;
+ case XA_CUT_BUFFER3: buffer = 3; break;
+ case XA_CUT_BUFFER4: buffer = 4; break;
+ case XA_CUT_BUFFER5: buffer = 5; break;
+ case XA_CUT_BUFFER6: buffer = 6; break;
+ case XA_CUT_BUFFER7: buffer = 7; break;
+ default: buffer = -1;
+ }
+ if (buffer >= 0) {
+ int nbytes;
+ unsigned long length;
+ int fmt8 = 8;
+ Atom type = XA_STRING;
+ char *line = XFetchBuffer(XtDisplay(w), &nbytes, buffer);
+
+ if ((length = nbytes) != 0L)
+ _SelectionReceived(w, NULL, &selection, &type, line, &length, &fmt8);
+ else if (num_params > 1)
+ GetSelection(w, timev, params+1, num_params-1);
+ }
+ else {
+ struct _SelectionList* list;
+
+ if (--num_params) {
+ list = XtNew(struct _SelectionList);
+ list->params = params + 1;
+ list->count = num_params;
+ list->time = timev;
+ list->asked = 0;
+ list->selection = selection;
+ }
+ else
+ list = NULL;
+ XtGetSelectionValue(w, selection, XawTextFormat(ctx, XawFmtWide) ?
+ XA_UTF8_STRING(d) : XA_TEXT(d),
+ _SelectionReceived, (XtPointer)list, timev);
+ }
+}
+
+static void
+InsertSelection(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ StartAction((TextWidget)w, event); /* Get Time. */
+ GetSelection(w, ((TextWidget)w)->text.time, params, *num_params);
+ EndAction((TextWidget)w);
+}
+
+/*
+ * Routines for Moving Around
+ */
+static void
+Move(TextWidget ctx, XEvent *event, XawTextScanDirection dir,
+ XawTextScanType type, Bool include)
+{
+ XawTextPosition insertPos;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ mult = -mult;
+ dir = dir == XawsdLeft ? XawsdRight : XawsdLeft;
+ }
+
+ insertPos = SrcScan(ctx->text.source, ctx->text.insertPos,
+ type, dir, mult, include);
+
+ StartAction(ctx, event);
+
+ if (ctx->text.s.left != ctx->text.s.right)
+ XawTextUnsetSelection((Widget)ctx);
+
+#ifndef OLDXAW
+ ctx->text.numeric = False;
+#endif
+ ctx->text.mult = 1;
+ ctx->text.showposition = True;
+ ctx->text.from_left = -1;
+ ctx->text.insertPos = insertPos;
+ EndAction(ctx);
+}
+
+/*ARGSUSED*/
+static void
+MoveForwardChar(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ Move((TextWidget)w, event, XawsdRight, XawstPositions, True);
+}
+
+/*ARGSUSED*/
+static void
+MoveBackwardChar(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ Move((TextWidget)w, event, XawsdLeft, XawstPositions, True);
+}
+
+static void
+MoveForwardWord(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ if (*n && (p[0][0] == 'A' || p[0][0] == 'a'))
+ Move((TextWidget)w, event, XawsdRight, XawstAlphaNumeric, False);
+ else
+ Move((TextWidget)w, event, XawsdRight, XawstWhiteSpace, False);
+}
+
+static void
+MoveBackwardWord(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ if (*n && (p[0][0] == 'A' || p[0][0] == 'a'))
+ Move((TextWidget)w, event, XawsdLeft, XawstAlphaNumeric, False);
+ else
+ Move((TextWidget)w, event, XawsdLeft, XawstWhiteSpace, False);
+}
+
+static void
+MoveForwardParagraph(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition position = ctx->text.insertPos;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ ctx->text.mult = -mult;
+ MoveBackwardParagraph(w, event, p, n);
+ return;
+ }
+
+ while (mult--) {
+ position = SrcScan(ctx->text.source, position,
+ XawstEOL, XawsdRight, 1, False) - 1;
+
+ while (position == SrcScan(ctx->text.source, position,
+ XawstEOL, XawsdRight, 1, False))
+ if (++position > ctx->text.lastPos) {
+ mult = 0;
+ break;
+ }
+
+ position = SrcScan(ctx->text.source, position,
+ XawstParagraph, XawsdRight, 1, True);
+ if (position != ctx->text.lastPos)
+ position = SrcScan(ctx->text.source, position - 1,
+ XawstEOL, XawsdLeft, 1, False);
+ else
+ break;
+ }
+
+ if (position != ctx->text.insertPos) {
+ XawTextUnsetSelection(w);
+ StartAction(ctx, event);
+ ctx->text.showposition = True;
+ ctx->text.from_left = -1;
+ ctx->text.insertPos = position;
+ EndAction(ctx);
+ }
+ else
+ ctx->text.mult = 1;
+}
+
+/*ARGSUSED*/
+static void
+MoveBackwardParagraph(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition position = ctx->text.insertPos;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ ctx->text.mult = -mult;
+ MoveForwardParagraph(w, event, p, n);
+ return;
+ }
+
+ while (mult--) {
+ position = SrcScan(ctx->text.source, position,
+ XawstEOL, XawsdLeft, 1, False) + 1;
+
+ while (position == SrcScan(ctx->text.source, position,
+ XawstEOL, XawsdLeft, 1, False))
+ if (--position < 0) {
+ mult = 0;
+ break;
+ }
+
+ position = SrcScan(ctx->text.source, position,
+ XawstParagraph, XawsdLeft, 1, True);
+ if (position > 0 && position < ctx->text.lastPos)
+ ++position;
+ else
+ break;
+ }
+
+ if (position != ctx->text.insertPos) {
+ XawTextUnsetSelection(w);
+ StartAction(ctx, event);
+ ctx->text.showposition = True;
+ ctx->text.from_left = -1;
+ ctx->text.insertPos = position;
+ EndAction(ctx);
+ }
+ else
+ ctx->text.mult = 1;
+}
+
+/*ARGSUSED*/
+static void
+MoveToLineEnd(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ Move((TextWidget)w, event, XawsdRight, XawstEOL, False);
+}
+
+/*ARGSUSED*/
+static void
+MoveToLineStart(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ Move((TextWidget)w, event, XawsdLeft, XawstEOL, False);
+}
+
+static void
+MoveLine(TextWidget ctx, XEvent *event, XawTextScanDirection dir)
+{
+ XawTextPosition cnew, next_line, ltemp;
+ int itemp, from_left;
+ short mult = MULT(ctx);
+
+ StartAction(ctx, event);
+
+ XawTextUnsetSelection((Widget)ctx);
+
+ if (dir == XawsdLeft)
+ mult = mult == 0 ? 5 : mult + 1;
+
+ cnew = SrcScan(ctx->text.source, ctx->text.insertPos,
+ XawstEOL, XawsdLeft, 1, False);
+
+ if (ctx->text.from_left < 0)
+ FindDist(ctx->text.sink, cnew, ctx->text.left_margin, ctx->text.insertPos,
+ &ctx->text.from_left, &ltemp, &itemp);
+
+ cnew = SrcScan(ctx->text.source, ctx->text.insertPos, XawstEOL, dir,
+ mult, (dir == XawsdRight));
+
+ next_line = SrcScan(ctx->text.source, cnew, XawstEOL, XawsdRight, 1, False);
+
+ FindPos(ctx->text.sink, cnew, ctx->text.left_margin, ctx->text.from_left,
+ False, &ctx->text.insertPos, &from_left, &itemp);
+
+ if (from_left < ctx->text.from_left) {
+ XawTextBlock block;
+
+ XawTextSourceRead(ctx->text.source, ctx->text.insertPos, &block, 1);
+ if (block.length) {
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ if (*(wchar_t *)block.ptr == _Xaw_atowc(XawTAB))
+ ++ctx->text.insertPos;
+ }
+ else if (block.ptr[0] == XawTAB)
+ ++ctx->text.insertPos;
+ }
+ }
+
+ if (ctx->text.insertPos > next_line)
+ ctx->text.insertPos = next_line;
+
+ EndAction(ctx);
+}
+
+static void
+MoveNextLine(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ ctx->text.mult = -mult;
+ MovePreviousLine(w, event, p, n);
+ return;
+ }
+
+ if (ctx->text.insertPos < ctx->text.lastPos)
+ MoveLine(ctx, event, XawsdRight);
+ else
+ ctx->text.mult = 1;
+}
+
+static void
+MovePreviousLine(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ ctx->text.mult = -mult;
+ MoveNextLine(w, event, p, n);
+ return;
+ }
+
+ if (ctx->text.lt.top != 0 || (ctx->text.lt.lines > 1 &&
+ ctx->text.insertPos >= ctx->text.lt.info[1].position))
+ MoveLine(ctx, event, XawsdLeft);
+ else
+ ctx->text.mult = 1;
+}
+
+/*ARGSUSED*/
+static void
+MoveBeginningOfFile(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ Move((TextWidget)w, event, XawsdLeft, XawstAll, True);
+}
+
+/*ARGSUSED*/
+static void
+MoveEndOfFile(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ Move((TextWidget)w, event, XawsdRight, XawstAll, True);
+}
+
+static void
+Scroll(TextWidget ctx, XEvent *event, XawTextScanDirection dir)
+{
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ mult = -mult;
+ dir = dir == XawsdLeft ? XawsdRight : XawsdLeft;
+ }
+
+ if (ctx->text.lt.lines > 1
+ && (dir == XawsdRight
+ || ctx->text.lastPos >= ctx->text.lt.info[1].position)) {
+ StartAction(ctx, event);
+
+ if (dir == XawsdLeft)
+ _XawTextVScroll(ctx, mult);
+ else
+ _XawTextVScroll(ctx, -mult);
+
+ EndAction(ctx);
+ }
+ else {
+ ctx->text.mult = 1;
+#ifndef OLDXAW
+ ctx->text.numeric = False;
+#endif
+ }
+}
+
+/*ARGSUSED*/
+static void
+ScrollOneLineUp(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ Scroll((TextWidget)w, event, XawsdLeft);
+}
+
+/*ARGSUSED*/
+static void
+ScrollOneLineDown(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ Scroll((TextWidget)w, event, XawsdRight);
+}
+
+static void
+MovePage(TextWidget ctx, XEvent *event, XawTextScanDirection dir)
+{
+ int scroll_val = 0;
+ XawTextPosition old_pos;
+
+ ctx->text.from_left = -1;
+ switch (dir) {
+ case XawsdLeft:
+ if (ctx->text.lt.top != 0)
+ scroll_val = -Max(1, ctx->text.lt.lines - 1);
+ break;
+ case XawsdRight:
+ if (!IsPositionVisible(ctx, Max(0, ctx->text.lastPos)))
+ scroll_val = Max(1, ctx->text.lt.lines - 1);
+ break;
+ }
+
+ if (scroll_val)
+ XawTextScroll(ctx, scroll_val,
+ ctx->text.left_margin - ctx->text.r_margin.left);
+
+ old_pos = ctx->text.insertPos;
+ switch (dir) {
+ case XawsdRight:
+ if (IsPositionVisible(ctx, Max(0, ctx->text.lastPos)))
+ ctx->text.insertPos = Max(0, ctx->text.lastPos);
+ else
+ ctx->text.insertPos = ctx->text.lt.top;
+ if (ctx->text.insertPos < old_pos)
+ ctx->text.insertPos = SrcScan(ctx->text.source, old_pos,
+ XawstEOL, XawsdLeft, 1, False);
+ break;
+ case XawsdLeft:
+ if (IsPositionVisible(ctx, 0))
+ ctx->text.insertPos = 0;
+ else if (ctx->text.lt.lines)
+ ctx->text.insertPos =
+ ctx->text.lt.info[ctx->text.lt.lines - 1].position;
+ else
+ ctx->text.insertPos = ctx->text.lt.top;
+ if (ctx->text.insertPos > old_pos)
+ ctx->text.insertPos = SrcScan(ctx->text.source, old_pos,
+ XawstEOL, XawsdLeft, 1, False);
+ break;
+ }
+}
+
+static void
+MoveNextPage(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ ctx->text.mult = -mult;
+ MovePreviousPage(w, event, p, n);
+ return;
+ }
+
+ if (ctx->text.insertPos < ctx->text.lastPos) {
+ XawTextUnsetSelection(w);
+ StartAction(ctx, event);
+ ctx->text.clear_to_eol = True;
+ while (mult-- && ctx->text.insertPos < ctx->text.lastPos)
+ MovePage(ctx, event, XawsdRight);
+ EndAction(ctx);
+ }
+ else
+ ctx->text.mult = 1;
+}
+
+/*ARGSUSED*/
+static void
+MovePreviousPage(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ ctx->text.mult = -mult;
+ MoveNextPage(w, event, p, n);
+ return;
+ }
+
+ if (ctx->text.insertPos > 0) {
+ XawTextUnsetSelection(w);
+ StartAction(ctx, event);
+ ctx->text.clear_to_eol = True;
+ while (mult-- && ctx->text.insertPos > 0)
+ MovePage(ctx, event, XawsdLeft);
+ EndAction(ctx);
+ }
+ else
+ ctx->text.mult = 1;
+}
+
+/*
+ * Delete Routines
+ */
+static Bool
+MatchSelection(Atom selection, XawTextSelection *s)
+{
+ Atom *match;
+ int count;
+
+ for (count = 0, match = s->selections; count < s->atom_count;
+ match++, count++)
+ if (*match == selection)
+ return (True);
+
+ return (False);
+}
+
+#define SrcCvtSel XawTextSourceConvertSelection
+
+static Boolean
+ConvertSelection(Widget w, Atom *selection, Atom *target, Atom *type,
+ XtPointer *value, unsigned long *length, int *format)
+{
+ Display *d = XtDisplay(w);
+ TextWidget ctx = (TextWidget)w;
+ Widget src = ctx->text.source;
+ XawTextEditType edit_mode;
+ Arg args[1];
+ XawTextSelectionSalt *salt = NULL;
+ XawTextSelection *s;
+
+ if (*target == XA_TARGETS(d)) {
+ Atom *targetP, *std_targets;
+ unsigned long std_length;
+
+ if (SrcCvtSel(src, selection, target, type, value, length, format))
+ return (True);
+
+ XtSetArg(args[0], XtNeditType,&edit_mode);
+ XtGetValues(src, args, 1);
+
+ XmuConvertStandardSelection(w, ctx->text.time, selection,
+ target, type, (XPointer *)&std_targets,
+ &std_length, format);
+
+ *length = 7 + (edit_mode == XawtextEdit) + std_length;
+ *value = XtMalloc((unsigned)sizeof(Atom)*(*length));
+ targetP = *(Atom**)value;
+ *targetP++ = XA_STRING;
+ *targetP++ = XA_TEXT(d);
+ *targetP++ = XA_UTF8_STRING(d);
+ *targetP++ = XA_COMPOUND_TEXT(d);
+ *targetP++ = XA_LENGTH(d);
+ *targetP++ = XA_LIST_LENGTH(d);
+ *targetP++ = XA_CHARACTER_POSITION(d);
+ if (edit_mode == XawtextEdit) {
+ *targetP++ = XA_DELETE(d);
+ }
+ memcpy((char*)targetP, (char*)std_targets, sizeof(Atom)*std_length);
+ XtFree((char*)std_targets);
+ *type = XA_ATOM;
+ *format = 32;
+ return (True);
+ }
+
+ if (SrcCvtSel(src, selection, target, type, value, length, format))
+ return (True);
+
+ for (salt = ctx->text.salt2; salt; salt = salt->next)
+ if (MatchSelection (*selection, &salt->s))
+ break;
+ if (!salt)
+ return (False);
+ s = &salt->s;
+ if (*target == XA_STRING
+ || *target == XA_TEXT(d)
+ || *target == XA_UTF8_STRING(d)
+ || *target == XA_COMPOUND_TEXT(d)) {
+ if (*target == XA_TEXT(d)) {
+ if (XawTextFormat(ctx, XawFmtWide))
+ *type = XA_COMPOUND_TEXT(d);
+ else
+ *type = XA_STRING;
+ }
+ else
+ *type = *target;
+
+ /*
+ * If salt is True, the salt->contents stores CT string,
+ * its length is measured in bytes.
+ * Refer to _XawTextSaltAwaySelection()
+ *
+ * by Li Yuhong, Mar. 20, 1991.
+ */
+ if (!salt) {
+ *value = (char *)_XawTextGetSTRING(ctx, s->left, s->right);
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ XTextProperty textprop;
+ if (XwcTextListToTextProperty(d, (wchar_t**)value, 1,
+ XCompoundTextStyle, &textprop)
+ < Success) {
+ XtFree(*value);
+ return (False);
+ }
+ XtFree(*value);
+ *value = (XtPointer)textprop.value;
+ *length = textprop.nitems;
+ }
+ else
+ *length = strlen(*value);
+ }
+ else {
+ *value = XtMalloc((salt->length + 1) * sizeof(unsigned char));
+ strcpy (*value, salt->contents);
+ *length = salt->length;
+ }
+ /* Got *value,*length, now in COMPOUND_TEXT format. */
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ if (*type == XA_STRING) {
+ XTextProperty textprop;
+ wchar_t **wlist;
+ int count;
+
+ textprop.encoding = XA_COMPOUND_TEXT(d);
+ textprop.value = (unsigned char *)*value;
+ textprop.nitems = strlen(*value);
+ textprop.format = 8;
+ if (XwcTextPropertyToTextList(d, &textprop, &wlist, &count)
+ < Success
+ || count < 1) {
+ XtFree(*value);
+ return (False);
+ }
+ XtFree(*value);
+ if (XwcTextListToTextProperty(d, wlist, 1, XStringStyle, &textprop)
+ < Success) {
+ XwcFreeStringList((wchar_t**)wlist);
+ return (False);
+ }
+ *value = (XtPointer)textprop.value;
+ *length = textprop.nitems;
+ XwcFreeStringList((wchar_t**) wlist);
+ }
+ else if (*type == XA_UTF8_STRING(d)) {
+ XTextProperty textprop;
+ char **list;
+ int count;
+
+ textprop.encoding = XA_COMPOUND_TEXT(d);
+ textprop.value = (unsigned char *)*value;
+ textprop.nitems = strlen(*value);
+ textprop.format = 8;
+ if (Xutf8TextPropertyToTextList(d, &textprop, &list, &count)
+ < Success
+ || count < 1) {
+ XtFree(*value);
+ return (False);
+ }
+ XtFree(*value);
+ *value = *list;
+ *length = strlen(*list);
+ XFree(list);
+ }
+ }
+ *format = 8;
+ return (True);
+ }
+
+ if (*target == XA_LIST_LENGTH(d) || *target == XA_LENGTH(d)) {
+ long *temp;
+
+ temp = (long *)XtMalloc(sizeof(long));
+ if (*target == XA_LIST_LENGTH(d))
+ *temp = 1L;
+ else /* *target == XA_LENGTH(d) */
+ *temp = (long)(s->right - s->left);
+
+ *value = (XPointer)temp;
+ *type = XA_INTEGER;
+ *length = 1L;
+ *format = 32;
+ return (True);
+ }
+
+ if (*target == XA_CHARACTER_POSITION(d)) {
+ long *temp;
+
+ temp = (long *) XtMalloc(2 * sizeof(long));
+ temp[0] = (long)(s->left + 1);
+ temp[1] = s->right;
+ *value = (XPointer)temp;
+ *type = XA_SPAN(d);
+ *length = 2L;
+ *format = 32;
+ return (True);
+ }
+
+ if (*target == XA_DELETE(d)) {
+ if (!salt)
+ _XawTextZapSelection(ctx, NULL, True);
+ *value = NULL;
+ *type = XA_NULL(d);
+ *length = 0;
+ *format = 32;
+ return (True);
+ }
+
+ if (XmuConvertStandardSelection(w, ctx->text.time, selection, target, type,
+ (XPointer *)value, length, format))
+ return (True);
+
+ return (False);
+}
+
+static void
+LoseSelection(Widget w, Atom *selection)
+{
+ _LoseSelection(w, selection, NULL, NULL);
+}
+
+static void
+_LoseSelection(Widget w, Atom *selection, char **contents, int *length)
+{
+ TextWidget ctx = (TextWidget)w;
+ Atom *atomP;
+ int i;
+ XawTextSelectionSalt *salt, *prevSalt, *nextSalt;
+
+ prevSalt = 0;
+ for (salt = ctx->text.salt2; salt; salt = nextSalt) {
+ atomP = salt->s.selections;
+ nextSalt = salt->next;
+ for (i = 0 ; i < salt->s.atom_count; i++, atomP++)
+ if (*selection == *atomP)
+ *atomP = (Atom)0;
+
+ while (salt->s.atom_count
+ && salt->s.selections[salt->s.atom_count-1] == 0)
+ salt->s.atom_count--;
+
+ /*
+ * Must walk the selection list in opposite order from UnsetSelection.
+ */
+ atomP = salt->s.selections;
+ for (i = 0 ; i < salt->s.atom_count; i++, atomP++)
+ if (*atomP == (Atom)0) {
+ *atomP = salt->s.selections[--salt->s.atom_count];
+
+ while (salt->s.atom_count
+ && salt->s.selections[salt->s.atom_count-1] == 0)
+ salt->s.atom_count--;
+ }
+ if (salt->s.atom_count == 0) {
+#ifndef OLDXAW
+ if (contents == NULL) {
+ XawTextKillRing *kill_ring = XtNew(XawTextKillRing);
+
+ kill_ring->next = xaw_text_kill_ring;
+ kill_ring->contents = salt->contents;
+ kill_ring->length = salt->length;
+ kill_ring->format = XawFmt8Bit;
+ xaw_text_kill_ring = kill_ring;
+ kill_ring_prev.next = xaw_text_kill_ring;
+
+ if (++num_kill_rings > MAX_KILL_RINGS) {
+ XawTextKillRing *tail = NULL;
+
+ while (kill_ring->next) {
+ tail = kill_ring;
+ kill_ring = kill_ring->next;
+ }
+ if (kill_ring->refcount == 0) {
+ --num_kill_rings;
+ tail->next = NULL;
+ XtFree(kill_ring->contents);
+ XtFree((char*)kill_ring);
+ }
+ }
+ }
+ else {
+ *contents = salt->contents;
+ *length = salt->length;
+ }
+#endif
+ if (prevSalt)
+ prevSalt->next = nextSalt;
+ else
+ ctx->text.salt2 = nextSalt;
+
+ XtFree((char *)salt->s.selections);
+ XtFree((char *)salt);
+ }
+ else
+ prevSalt = salt;
+ }
+}
+
+static void
+_DeleteOrKill(TextWidget ctx, XawTextPosition from, XawTextPosition to,
+ Bool kill)
+{
+ XawTextBlock text;
+
+#ifndef OLDXAW
+ if (ctx->text.kill_ring_ptr) {
+ --ctx->text.kill_ring_ptr->refcount;
+ ctx->text.kill_ring_ptr = NULL;
+ }
+#endif
+ if (kill && from < to) {
+#ifndef OLDXAW
+ Bool append = False;
+ char *ring = NULL;
+ XawTextPosition old_from = from;
+#endif
+ char *string;
+ int size = 0, length;
+ XawTextSelectionSalt *salt;
+ Atom selection = XInternAtom(XtDisplay(ctx), "SECONDARY", False);
+
+#ifndef OLDXAW
+ if (ctx->text.kill_ring == KILL_RING_APPEND) {
+ old_from = ctx->text.salt2->s.left;
+ append = True;
+ }
+ else
+ ctx->text.kill_ring = KILL_RING_BEGIN;
+
+ if (append)
+ _LoseSelection((Widget)ctx, &selection, &ring, &size);
+ else
+#endif
+ LoseSelection((Widget)ctx, &selection);
+
+ salt = (XawTextSelectionSalt*)XtMalloc(sizeof(XawTextSelectionSalt));
+ salt->s.selections = (Atom *)XtMalloc(sizeof(Atom));
+ salt->s.left = from;
+ salt->s.right = to;
+
+ string = (char *)_XawTextGetSTRING(ctx, from, to);
+
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ XTextProperty textprop;
+
+ if (XwcTextListToTextProperty(XtDisplay((Widget)ctx),
+ (wchar_t**)(&string),
+ 1, XCompoundTextStyle,
+ &textprop) < Success) {
+ XtFree(string);
+ XtFree((char*)salt->s.selections);
+ XtFree((char*)salt);
+ return;
+ }
+ XtFree(string);
+ string = (char *)textprop.value;
+ length = textprop.nitems;
+ }
+ else
+ length = strlen(string);
+
+ salt->length = length + size;
+
+#ifndef OLDXAW
+ if (!append)
+ salt->contents = string;
+ else {
+ salt->contents = XtMalloc(length + size + 1);
+ if (from >= old_from) {
+ strncpy(salt->contents, ring, size);
+ salt->contents[size] = '\0';
+ strncat(salt->contents, string, length);
+ }
+ else {
+ strncpy(salt->contents, string, length);
+ salt->contents[length] = '\0';
+ strncat(salt->contents, ring, size);
+ }
+ salt->contents[length + size] = '\0';
+ XtFree(ring);
+ XtFree(string);
+ }
+
+ kill_ring_prev.contents = salt->contents;
+ kill_ring_prev.length = salt->length;
+ kill_ring_prev.format = XawFmt8Bit;
+#else
+ salt->contents = string;
+#endif
+
+ salt->next = ctx->text.salt2;
+ ctx->text.salt2 = salt;
+
+#ifndef OLDXAW
+ if (append)
+ ctx->text.kill_ring = KILL_RING_BEGIN;
+#endif
+
+ salt->s.selections[0] = selection;
+
+ XtOwnSelection((Widget)ctx, selection, ctx->text.time,
+ ConvertSelection, LoseSelection, NULL);
+ salt->s.atom_count = 1;
+ }
+ text.length = 0;
+ text.firstPos = 0;
+
+ text.format = _XawTextFormat(ctx);
+ text.ptr = "";
+
+ if (_XawTextReplace(ctx, from, to, &text)) {
+ XBell(XtDisplay(ctx), 50);
+ return;
+ }
+ ctx->text.from_left = -1;
+ ctx->text.insertPos = from;
+ ctx->text.showposition = TRUE;
+}
+
+static void
+DeleteOrKill(TextWidget ctx, XEvent *event, XawTextScanDirection dir,
+ XawTextScanType type, Bool include, Bool kill)
+{
+ XawTextPosition from, to;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ mult = -mult;
+ dir = dir == XawsdLeft ? XawsdRight : XawsdLeft;
+ }
+
+ StartAction(ctx, event);
+#ifndef OLDXAW
+ if (mult == 1)
+ _XawSourceSetUndoMerge((TextSrcObject)ctx->text.source, True);
+#endif
+ to = SrcScan(ctx->text.source, ctx->text.insertPos,
+ type, dir, mult, include);
+
+ /*
+ * If no movement actually happened, then bump the count and try again.
+ * This causes the character position at the very beginning and end of
+ * a boundary to act correctly
+ */
+ if (to == ctx->text.insertPos)
+ to = SrcScan(ctx->text.source, ctx->text.insertPos,
+ type, dir, mult + 1, include);
+
+ if (dir == XawsdLeft) {
+ from = to;
+ to = ctx->text.insertPos;
+ }
+ else
+ from = ctx->text.insertPos;
+
+ _DeleteOrKill(ctx, from, to, kill);
+ EndAction(ctx);
+}
+
+static void
+Delete(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ if (ctx->text.s.left != ctx->text.s.right)
+ DeleteCurrentSelection(w, event, p, n);
+ else
+ DeleteBackwardChar(w, event, p, n);
+}
+
+static void
+DeleteChar(Widget w, XEvent *event, XawTextScanDirection dir)
+{
+ TextWidget ctx = (TextWidget)w;
+ short mul = MULT(ctx);
+
+ if (mul < 0) {
+ ctx->text.mult = mul = -mul;
+ dir = dir == XawsdLeft ? XawsdRight : XawsdLeft;
+ }
+ DeleteOrKill(ctx, event, dir, XawstPositions, True, False);
+#ifndef OLDXAW
+ if (mul == 1)
+ _XawSourceSetUndoErase((TextSrcObject)ctx->text.source,
+ dir == XawsdLeft ? -1 : 1);
+#endif
+}
+
+/*ARGSUSED*/
+static void
+DeleteForwardChar(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ DeleteChar(w, event, XawsdRight);
+}
+
+/*ARGSUSED*/
+static void
+DeleteBackwardChar(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ DeleteChar(w, event, XawsdLeft);
+}
+
+static void
+DeleteForwardWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ XawTextScanType type;
+
+ if (*num_params && (*params[0] == 'A' || *params[0] == 'a'))
+ type = XawstAlphaNumeric;
+ else
+ type = XawstWhiteSpace;
+
+ DeleteOrKill((TextWidget)w, event, XawsdRight, type, False, False);
+}
+
+static void
+DeleteBackwardWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ XawTextScanType type;
+
+ if (*num_params && (*params[0] == 'A' || *params[0] == 'a'))
+ type = XawstAlphaNumeric;
+ else
+ type = XawstWhiteSpace;
+
+ DeleteOrKill((TextWidget)w, event, XawsdLeft, type, False, False);
+}
+
+static void
+KillForwardWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ XawTextScanType type;
+
+ if (*num_params && (*params[0] == 'A' || *params[0] == 'a'))
+ type = XawstAlphaNumeric;
+ else
+ type = XawstWhiteSpace;
+
+ DeleteOrKill((TextWidget)w, event, XawsdRight, type, False, True);
+}
+
+static void
+KillBackwardWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ XawTextScanType type;
+
+ if (*num_params && (*params[0] == 'A' || *params[0] == 'a'))
+ type = XawstAlphaNumeric;
+ else
+ type = XawstWhiteSpace;
+
+ DeleteOrKill((TextWidget) w, event, XawsdLeft, type, False, True);
+}
+
+/*ARGSUSED*/
+static void
+KillToEndOfLine(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition end_of_line;
+ XawTextScanDirection dir = XawsdRight;
+ short mult = MULT(ctx);
+
+ if (mult < 0) {
+ dir = XawsdLeft;
+ mult = -mult;
+ }
+
+ StartAction(ctx, event);
+ end_of_line = SrcScan(ctx->text.source, ctx->text.insertPos, XawstEOL,
+ dir, mult, False);
+ if (end_of_line == ctx->text.insertPos)
+ end_of_line = SrcScan(ctx->text.source, ctx->text.insertPos, XawstEOL,
+ dir, mult, True);
+
+ if (dir == XawsdRight)
+ _DeleteOrKill(ctx, ctx->text.insertPos, end_of_line, True);
+ else
+ _DeleteOrKill(ctx, end_of_line, ctx->text.insertPos, True);
+ EndAction(ctx);
+}
+
+/*ARGSUSED*/
+static void
+KillToEndOfParagraph(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ DeleteOrKill((TextWidget)w, event, XawsdRight, XawstParagraph, False, True);
+}
+
+void
+_XawTextZapSelection(TextWidget ctx, XEvent *event, Bool kill)
+{
+ StartAction(ctx, event);
+ _DeleteOrKill(ctx, ctx->text.s.left, ctx->text.s.right, kill);
+ EndAction(ctx);
+}
+
+/*ARGSUSED*/
+static void
+KillCurrentSelection(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ _XawTextZapSelection((TextWidget) w, event, True);
+}
+
+#ifndef OLDXAW
+/*ARGSUSED*/
+static void
+KillRingYank(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition insertPos = ctx->text.insertPos;
+ Bool first_yank = False;
+
+ if (ctx->text.s.left != ctx->text.s.right)
+ XawTextUnsetSelection((Widget)ctx);
+
+ StartAction(ctx, event);
+
+ if (ctx->text.kill_ring_ptr == NULL) {
+ ctx->text.kill_ring_ptr = &kill_ring_prev;
+ ++ctx->text.kill_ring_ptr->refcount;
+ ctx->text.s.left = ctx->text.s.right = insertPos;
+ first_yank = True;
+ }
+ if (ctx->text.kill_ring_ptr) {
+ int mul = MULT(ctx);
+ XawTextBlock text;
+
+ if (!first_yank) {
+ if (mul < 0)
+ mul = 1;
+ --ctx->text.kill_ring_ptr->refcount;
+ while (mul--) {
+ if ((ctx->text.kill_ring_ptr = ctx->text.kill_ring_ptr->next) == NULL)
+ ctx->text.kill_ring_ptr = &kill_ring_null;
+ }
+ ++ctx->text.kill_ring_ptr->refcount;
+ }
+ text.firstPos = 0;
+ text.length = ctx->text.kill_ring_ptr->length;
+ text.ptr = ctx->text.kill_ring_ptr->contents;
+ text.format = ctx->text.kill_ring_ptr->format;
+
+ if (_XawTextReplace(ctx, ctx->text.s.left, insertPos, &text) == XawEditDone) {
+ ctx->text.kill_ring = KILL_RING_YANK;
+ ctx->text.insertPos = ctx->text.s.left + text.length;
+ }
+ }
+ else
+ XBell(XtDisplay(w), 0);
+
+ EndAction(ctx);
+}
+#endif /* OLDXAW */
+
+/*ARGSUSED*/
+static void
+DeleteCurrentSelection(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ _XawTextZapSelection((TextWidget)w, event, False);
+}
+
+#ifndef OLDXAW
+#define CHECK_SAVE() \
+ if (save && !save->ptr) \
+ save->ptr = _XawTextGetText(ctx, save->firstPos, \
+ save->firstPos + save->length)
+static Bool
+StripSpaces(TextWidget ctx, XawTextPosition left, XawTextPosition right,
+ XawTextPosition *pos, int num_pos, XawTextBlock *save)
+{
+ Bool done, space;
+ int i, cpos, count = 0;
+ XawTextBlock block, text;
+ XawTextPosition ipos, position = left, tmp = left;
+
+ text.firstPos = 0;
+ text.format = XawFmt8Bit;
+ text.ptr = " ";
+ text.length = 1;
+
+ position = XawTextSourceRead(ctx->text.source, position,
+ &block, right - left);
+ done = False;
+ space = False;
+ /* convert tabs and returns to spaces */
+ while (!done) {
+ if (XawTextFormat(ctx, XawFmt8Bit)) {
+ for (i = 0; i < block.length; i++)
+ if (block.ptr[i] == '\t' || block.ptr[i] == '\n') {
+ space = True;
+ break;
+ }
+ }
+ else {
+ wchar_t *wptr = (wchar_t*)block.ptr;
+ for (i = 0; i < block.length; i++)
+ if (wptr[i] == _Xaw_atowc('\t') || wptr[i] == _Xaw_atowc('\n')) {
+ space = True;
+ break;
+ }
+ }
+ if (space) {
+ CHECK_SAVE();
+ if (_XawTextReplace(ctx, tmp + i, tmp + i + 1, &text))
+ return (False);
+ space = False;
+ }
+ tmp += i;
+ position = XawTextSourceRead(ctx->text.source, tmp,
+ &block, right - tmp);
+ if (block.length == 0 || tmp == position || tmp >= right)
+ done = True;
+ }
+
+ text.ptr = "";
+ text.length = 0;
+ position = tmp = left;
+ position = XawTextSourceRead(ctx->text.source, position,
+ &block, right - left);
+ ipos = ctx->text.insertPos;
+ done = False;
+ while (!done) {
+ if (XawTextFormat(ctx, XawFmt8Bit)) {
+ for (i = 0; i < block.length; i++)
+ if (block.ptr[i] == ' ')
+ ++count;
+ else if (count == 1)
+ count = 0;
+ else if (count)
+ break;
+ }
+ else {
+ wchar_t *wptr = (wchar_t*)block.ptr;
+ for (i = 0; i < block.length; i++)
+ if (wptr[i] == _Xaw_atowc(' '))
+ ++count;
+ else if (count == 1)
+ count = 0;
+ else if (count)
+ break;
+ }
+ if (--count > 0) {
+ CHECK_SAVE();
+ if (_XawTextReplace(ctx, tmp + i - count, tmp + i, &text))
+ return (False);
+ right -= count;
+ if (num_pos) {
+ for (cpos = 0; cpos < num_pos; cpos++) {
+ if (tmp + i - count < pos[cpos]) {
+ if (tmp + i < pos[cpos])
+ pos[cpos] -= count;
+ else
+ pos[cpos] = tmp + i - count;
+ }
+ }
+ }
+ else {
+ if (tmp + i - count < ipos) {
+ if (tmp + i < ipos)
+ ipos -= count;
+ else
+ ipos = tmp + i - count;
+ }
+ }
+ tmp += i - count;
+ }
+ else
+ tmp += i + 1;
+ count = 0;
+ position = XawTextSourceRead(ctx->text.source, tmp,
+ &block, right - tmp);
+ if (block.length == 0 || tmp == position || tmp >= right)
+ done = True;
+ }
+ if (!num_pos)
+ ctx->text.insertPos = ipos;
+
+ return (True);
+}
+
+static Bool
+Tabify(TextWidget ctx, XawTextPosition left, XawTextPosition right,
+ XawTextPosition *pos, int num_pos, XawTextBlock *save)
+{
+ Bool done, zero;
+ int i, cpos, count = 0, column = 0, offset = 0;
+ XawTextBlock text, block;
+ XawTextPosition ipos, position = left, tmp = left;
+ TextSinkObject sink = (TextSinkObject)ctx->text.sink;
+ short *char_tabs = sink->text_sink.char_tabs;
+ int tab_count = sink->text_sink.tab_count;
+ int tab_index = 0, tab_column = 0, TAB_SIZE = DEFAULT_TAB_SIZE;
+
+ text.firstPos = 0;
+ text.ptr = "\t";
+ text.format = XawFmt8Bit;
+ text.length = 1;
+
+ position = XawTextSourceRead(ctx->text.source, position,
+ &block, right - left);
+ ipos = ctx->text.insertPos;
+ done = zero = False;
+ if (tab_count)
+ TAB_SIZE = *char_tabs;
+ while (!done) {
+ if (XawTextFormat(ctx, XawFmt8Bit)) {
+ for (i = 0; i < block.length; i++) {
+ ++offset;
+ ++column;
+ if (tab_count) {
+ if (column > tab_column + char_tabs[tab_index]) {
+ TAB_SIZE = tab_index < tab_count - 1 ? char_tabs[tab_index + 1] - char_tabs[tab_index] : *char_tabs;
+ if (++tab_index >= tab_count) {
+ tab_column += char_tabs[tab_count - 1];
+ tab_index = 0;
+ }
+ }
+ }
+ if (block.ptr[i] == ' ') {
+ if (++count > TAB_SIZE)
+ count %= TAB_SIZE;
+ if ((tab_count && column == tab_column + char_tabs[tab_index]) ||
+ (!tab_count && column % TAB_SIZE == 0)) {
+ if (count % (TAB_SIZE + 1) > 1)
+ break;
+ else
+ count = 0;
+ }
+ }
+ else {
+ if (block.ptr[i] == '\n') {
+ zero = True;
+ break;
+ }
+ count = 0;
+ }
+ }
+ }
+ else {
+ wchar_t *wptr = (wchar_t*)block.ptr;
+ for (i = 0; i < block.length; i++) {
+ ++offset;
+ ++column;
+ if (tab_count) {
+ if (column > tab_column + char_tabs[tab_index]) {
+ TAB_SIZE = tab_index < tab_count - 1 ? char_tabs[tab_index + 1] - char_tabs[tab_index] : *char_tabs;
+ if (++tab_index >= tab_count) {
+ tab_column += char_tabs[tab_count - 1];
+ tab_index = 0;
+ }
+ }
+ }
+ if (wptr[i] == _Xaw_atowc(' ')) {
+ if (++count > TAB_SIZE)
+ count %= TAB_SIZE;
+ if ((tab_count && column == tab_column + char_tabs[tab_index]) ||
+ (!tab_count && column % TAB_SIZE == 0)) {
+ if (count % (TAB_SIZE + 1) > 1)
+ break;
+ else
+ count = 0;
+ }
+ }
+ else {
+ if (wptr[i] == _Xaw_atowc('\n')) {
+ zero = True;
+ break;
+ }
+ count = 0;
+ }
+ }
+ }
+ count %= TAB_SIZE + 1;
+ if (!zero && count > 1 && i < block.length) {
+ CHECK_SAVE();
+ if (_XawTextReplace(ctx, tmp + i - count + 1, tmp + i + 1, &text))
+ return (False);
+ right -= count - 1;
+ offset -= count - 1;
+ if (num_pos) {
+ for (cpos = 0; cpos < num_pos; cpos++) {
+ if (tmp + i - count + 1 < pos[cpos]) {
+ if (tmp + i + 1 < pos[cpos])
+ pos[cpos] -= count;
+ else
+ pos[cpos] = tmp + i - count + 1;
+ ++pos[cpos];
+ }
+ }
+ }
+ else {
+ if (tmp + i - count + 1 < ipos) {
+ if (tmp + i + 1 < ipos)
+ ipos -= count;
+ else
+ ipos = tmp + i - count + 1;
+ ++ipos;
+ }
+ }
+ }
+ if (count)
+ --count;
+ if (zero) {
+ count = column = 0;
+ zero = False;
+ if (tab_count) {
+ tab_column = tab_index = 0;
+ TAB_SIZE = *char_tabs;
+ }
+ }
+ else if (i < block.length)
+ count = 0;
+ tmp = left + offset;
+ position = XawTextSourceRead(ctx->text.source, tmp,
+ &block, right - tmp);
+ if (tmp == position || tmp >= right)
+ done = True;
+ }
+ if (!num_pos)
+ ctx->text.insertPos = ipos;
+
+ return (True);
+}
+
+static Bool
+Untabify(TextWidget ctx, XawTextPosition left, XawTextPosition right,
+ XawTextPosition *pos, int num_pos, XawTextBlock *save)
+{
+ Bool done, zero;
+ int i, cpos, count = 0, diff = 0;
+ XawTextBlock block, text;
+ XawTextPosition ipos, position = left, tmp = left;
+ TextSinkObject sink = (TextSinkObject)ctx->text.sink;
+ short *char_tabs = sink->text_sink.char_tabs;
+ int tab_count = sink->text_sink.tab_count;
+ int tab_index = 0, tab_column = 0, tab_base = 0;
+ static char *tabs = " ";
+
+ text.firstPos = 0;
+ text.format = XawFmt8Bit;
+ text.ptr = tabs;
+
+ position = XawTextSourceRead(ctx->text.source, position,
+ &block, right - left);
+ ipos = ctx->text.insertPos;
+ done = False;
+ zero = False;
+ while (!done) {
+ if (XawTextFormat(ctx, XawFmt8Bit))
+ for (i = 0; i < block.length; i++) {
+ if (block.ptr[i] != '\t') {
+ ++count;
+ if (block.ptr[i] == '\n') {
+ zero = True;
+ break;
+ }
+ }
+ else
+ break;
+ }
+ else {
+ wchar_t *wptr = (wchar_t*)block.ptr;
+ for (i = 0; i < block.length; i++)
+ if (wptr[i] != _Xaw_atowc('\t')) {
+ ++count;
+ if (wptr[i] != _Xaw_atowc('\n')) {
+ zero = True;
+ break;
+ }
+ }
+ else
+ break;
+ }
+ if (!zero && i < block.length) {
+ if (tab_count) {
+ while (tab_base + tab_column <= count) {
+ for (; tab_index < tab_count; ++tab_index)
+ if (tab_base + char_tabs[tab_index] > count) {
+ tab_column = char_tabs[tab_index];
+ break;
+ }
+ if (tab_index >= tab_count) {
+ tab_base += char_tabs[tab_count - 1];
+ tab_column = tab_index = 0;
+ }
+ }
+ text.length = (tab_base + tab_column) - count;
+ if (text.length > 8) {
+ int j;
+
+ text.ptr = XtMalloc(text.length);
+ for (j = 0; j < text.length; j++)
+ text.ptr[j] = ' ';
+ }
+ else
+ text.ptr = tabs;
+ }
+ else
+ text.length = DEFAULT_TAB_SIZE - (count % DEFAULT_TAB_SIZE);
+ CHECK_SAVE();
+ if (_XawTextReplace(ctx, tmp + i, tmp + i + 1, &text)) {
+ if (tab_count && text.length > 8)
+ XtFree(text.ptr);
+ return (False);
+ }
+ if (tab_count && text.length > 8)
+ XtFree(text.ptr);
+ count += text.length;
+ right += text.length - 1;
+ if (num_pos) {
+ for (cpos = 0; cpos < num_pos; cpos++) {
+ if (tmp + i < pos[cpos]) {
+ if (tmp + i + 1 < pos[cpos])
+ --pos[cpos];
+ else
+ pos[cpos] = tmp + i;
+ pos[cpos] += text.length;
+ }
+ }
+ }
+ else {
+ if (tmp + i < ipos) {
+ if (tmp + i + 1 < ipos)
+ --ipos;
+ else
+ ipos = tmp + i;
+ ipos += text.length;
+ }
+ }
+ }
+ tmp = left + count + diff;
+ if (zero) {
+ diff += count;
+ count = 0;
+ zero = False;
+ if (tab_count)
+ tab_base = tab_column = tab_index = 0;
+ }
+ position = XawTextSourceRead(ctx->text.source, tmp,
+ &block, right - tmp);
+ if (tmp == position || tmp >= right)
+ done = True;
+ }
+ if (!num_pos)
+ ctx->text.insertPos = ipos;
+
+ return (True);
+}
+
+static int
+FormatText(TextWidget ctx, XawTextPosition left, Bool force,
+ XawTextPosition *pos, int num_pos)
+{
+ char *ptr = NULL;
+ Bool freepos = False, undo, paragraph = pos != NULL;
+ int i, result;
+ XawTextBlock block, *text;
+ XawTextPosition end = ctx->text.lastPos, buf[32];
+ TextSrcObject src = (TextSrcObject)ctx->text.source;
+ XawTextPosition right = SrcScan(ctx->text.source, left, XawstEOL,
+ XawsdRight, 1, False);
+
+ undo = src->textSrc.enable_undo && src->textSrc.undo_state == False;
+ if (undo) {
+ if (!pos) {
+ num_pos = src->textSrc.num_text;
+ pos = XawStackAlloc(sizeof(XawTextPosition) * num_pos, buf);
+ for (i = 0; i < num_pos; i++)
+ pos[i] = ((TextWidget)src->textSrc.text[i])->text.insertPos;
+ freepos = True;
+ }
+ else
+ freepos = False;
+ src->textSrc.undo_state = True;
+ block.ptr = NULL;
+ block.firstPos = left;
+ block.length = right - left;
+ text = &block;
+ }
+ else
+ text = NULL;
+
+ result = DoFormatText(ctx, left, force, 1, text, pos, num_pos, paragraph);
+ if (undo && result == XawEditDone && block.ptr) {
+ char *lbuf, *rbuf;
+ unsigned llen, rlen, size;
+
+ ptr = lbuf = block.ptr;
+ llen = block.length;
+ rlen = llen + (ctx->text.lastPos - end);
+
+ block.firstPos = 0;
+ block.format = _XawTextFormat(ctx);
+
+ rbuf = _XawTextGetText(ctx, left, left + rlen);
+
+ size = XawTextFormat(ctx, XawFmtWide) ? sizeof(wchar_t) : sizeof(char);
+ if (llen != rlen || memcmp(lbuf, rbuf, llen * size)) {
+ block.ptr = lbuf;
+ block.length = llen;
+ _XawTextReplace(ctx, left, left + rlen, &block);
+
+ src->textSrc.undo_state = False;
+ block.ptr = rbuf;
+ block.length = rlen;
+ _XawTextReplace(ctx, left, left + llen, &block);
+ }
+ else
+ src->textSrc.undo_state = False;
+ XtFree(rbuf);
+ }
+ if (undo) {
+ src->textSrc.undo_state = False;
+ if (freepos) {
+ for (i = 0; i < num_pos; i++) {
+ TextWidget tw = (TextWidget)src->textSrc.text[i];
+ tw->text.insertPos = XawMin(XawMax(0, pos[i]), tw->text.lastPos);
+ }
+ XawStackFree(pos, buf);
+ }
+ if (ptr)
+ XtFree(ptr);
+ }
+
+ return (result);
+}
+
+static int
+DoFormatText(TextWidget ctx, XawTextPosition left, Bool force, int level,
+ XawTextBlock *save, XawTextPosition *pos, int num_pos,
+ Bool paragraph)
+{
+ XawTextPosition right = SrcScan(ctx->text.source, left, XawstEOL,
+ XawsdRight, 1, False);
+ XawTextPosition position, tmp, ipos;
+ XawTextBlock block, text;
+ char buf[128];
+ wchar_t *wptr;
+ int i, count, cpos;
+ Bool done, force2 = force, recurse = False;
+
+ position = XawTextSourceRead(ctx->text.source, left, &block, right - left);
+ if (block.length == 0 || left >= right ||
+ (level == 1 && ((XawTextFormat(ctx, XawFmt8Bit) &&
+ block.ptr[0] != ' ' &&
+ block.ptr[0] != '\t' &&
+ !isalnum(*(unsigned char*)block.ptr)) ||
+ (XawTextFormat(ctx, XawFmtWide) &&
+ _Xaw_atowc(XawSP) != *(wchar_t*)block.ptr &&
+ _Xaw_atowc(XawTAB) != *(wchar_t*)block.ptr &&
+ !iswalnum(*(wchar_t*)block.ptr)))))
+ return (XawEditDone);
+
+ if (level == 1 && !paragraph) {
+ tmp = ctx->text.lastPos;
+ if (Untabify(ctx, left, right, pos, num_pos, save) == False)
+ return (XawEditError);
+ right += ctx->text.lastPos - tmp;
+ position = XawTextSourceRead(ctx->text.source, left, &block,
+ right - left);
+ }
+
+ text.firstPos = 0;
+ text.format = XawFmt8Bit;
+
+ ipos = ctx->text.insertPos;
+ count = 0;
+ done = False;
+ while (!done) {
+ if (XawTextFormat(ctx, XawFmt8Bit)) {
+ for (i = 0; i < block.length; i++)
+ if (block.ptr[i] == ' ')
+ ++count;
+ else {
+ done = True;
+ break;
+ }
+ }
+ else {
+ wptr = (wchar_t*)block.ptr;
+ for (i = 0; i < block.length; i++)
+ if (wptr[i] == _Xaw_atowc(' '))
+ ++count;
+ else {
+ done = True;
+ break;
+ }
+ }
+ tmp = position;
+ position = XawTextSourceRead(ctx->text.source, position,
+ &block, right - position);
+ if (tmp == position)
+ done = True;
+ }
+ position = left + count;
+ if (count < ctx->text.left_column) {
+ int bytes = ctx->text.left_column - count;
+
+ text.ptr = XawStackAlloc(bytes, buf);
+ text.length = bytes;
+ for (i = 0; i < bytes; i++)
+ text.ptr[i] = ' ';
+ CHECK_SAVE();
+ if (_XawTextReplace(ctx, left, left, &text)) {
+ XawStackFree(text.ptr, buf);
+ return (XawEditError);
+ }
+ XawStackFree(text.ptr, buf);
+ right += bytes;
+ if (num_pos) {
+ for (cpos = 0; cpos < num_pos; cpos++)
+ if (pos[cpos] >= left)
+ pos[cpos] += bytes;
+ }
+ if (ipos >= left)
+ ipos += bytes;
+ count += bytes;
+ }
+
+ done = False;
+ if (!paragraph && level == 1
+ && ipos <= right && ipos - left > ctx->text.right_column) {
+ XawTextPosition len = ctx->text.lastPos;
+ int skip = ctx->text.justify == XawjustifyRight
+ || ctx->text.justify == XawjustifyCenter ?
+ ctx->text.left_column : count;
+
+ if (pos)
+ for (i = 0; i < num_pos; i++)
+ if (pos[i] == ipos)
+ break;
+
+ StripSpaces(ctx, left + skip, right, pos, num_pos, save);
+ right += ctx->text.lastPos - len;
+ if (pos && i < num_pos)
+ ipos = pos[i];
+ else
+ ipos = ctx->text.insertPos;
+ done = ipos - left > ctx->text.right_column;
+ count = skip + (count == skip + 1);
+ }
+ if ((paragraph || done) && right - left > ctx->text.right_column) {
+ position = tmp = right;
+ XawTextSourceRead(ctx->text.source, position - 1, &block, 1);
+ if (block.length &&
+ ((XawTextFormat(ctx, XawFmt8Bit) &&
+ block.ptr[0] == ' ') ||
+ (XawTextFormat(ctx, XawFmtWide) &&
+ _Xaw_atowc(XawSP) == *(wchar_t*)block.ptr)))
+ --position;
+ while (position - left > ctx->text.right_column) {
+ tmp = position;
+ position = SrcScan(ctx->text.source, position,
+ XawstWhiteSpace, XawsdLeft, 1, True);
+ }
+ if (position <= left + ctx->text.left_column)
+ position = tmp;
+ if (position > left && position - left > ctx->text.left_column
+ && position != right) {
+ text.ptr = "\n";
+ text.length = 1;
+ CHECK_SAVE();
+ if (_XawTextReplace(ctx, position, position + 1, &text))
+ return (XawEditError);
+ right = position;
+ recurse = True;
+ force = True;
+ }
+ }
+
+ if (force) {
+ if (ctx->text.justify == XawjustifyCenter)
+ count = ctx->text.right_column - (count - ctx->text.left_column);
+ else
+ count = ctx->text.right_column;
+ if (count > right - left)
+ count -= right - left;
+ else
+ count = 0;
+ }
+ else
+ count = 0;
+ if (count > 0) {
+ switch (ctx->text.justify) {
+ case XawjustifyLeft:
+ break;
+ case XawjustifyRight:
+ case XawjustifyCenter:
+ if (ctx->text.justify == XawjustifyCenter) {
+ int alnum = 0;
+
+ if (!(count & 1)) {
+ XawTextSourceRead(ctx->text.source, right, &block, 1);
+ if ((XawTextFormat(ctx, XawFmt8Bit)
+ && isalnum(*(unsigned char*)block.ptr)) ||
+ (XawTextFormat(ctx, XawFmtWide)
+ && iswalnum(*(wchar_t*)block.ptr)))
+ alnum = 1;
+ }
+ count = (count + alnum) >> 1;
+ }
+ text.ptr = XawStackAlloc(count, buf);
+ text.length = count;
+ for (i = 0; i < count; i++)
+ text.ptr[i] = ' ';
+ CHECK_SAVE();
+ if (_XawTextReplace(ctx, left, left, &text)) {
+ XawStackFree(text.ptr, buf);
+ return (XawEditError);
+ }
+ XawStackFree(text.ptr, buf);
+ position += count;
+ right += count;
+ if (num_pos) {
+ for (cpos = 0; cpos < num_pos; cpos++)
+ if (pos[cpos] > left)
+ pos[cpos] += count;
+ }
+ else if (ipos > left)
+ ipos += count;
+ break;
+ case XawjustifyFull:
+ i = 0;
+ tmp = left;
+ /*CONSTCOND*/
+ while (True) {
+ tmp = SrcScan(ctx->text.source, tmp, XawstWhiteSpace,
+ XawsdRight, 1, True);
+ if (tmp < right)
+ ++i;
+ else
+ break;
+ }
+ if (i) {
+ double inc, ii;
+ int bytes, steps;
+
+ bytes = count;
+ inc = ii = (count + .5) / (double)i;
+
+ steps = count;
+ text.ptr = XawStackAlloc(steps, buf);
+ for (i = 0; i < steps; i++)
+ text.ptr[i] = ' ';
+ tmp = left;
+ CHECK_SAVE();
+ while (bytes) {
+ steps = 1;
+ while (inc + ii < 1) {
+ ++steps;
+ inc += ii;
+ }
+ tmp = SrcScan(ctx->text.source, tmp, XawstWhiteSpace,
+ XawsdRight, steps, True);
+ if (bytes > inc)
+ text.length = (int)inc;
+ else
+ text.length = bytes;
+ bytes -= text.length;
+ if (_XawTextReplace(ctx, tmp, tmp, &text)) {
+ XawStackFree(buf, text.ptr);
+ return (XawEditError);
+ }
+ if (num_pos) {
+ for (cpos = 0; cpos < num_pos; cpos++)
+ if (tmp <= pos[cpos])
+ pos[cpos] += text.length;
+ }
+ else if (tmp <= ipos)
+ ipos += text.length;
+ inc -= (int)inc;
+ inc += ii;
+ }
+ position += count;
+ right += count;
+ XawStackFree(buf, text.ptr);
+ }
+ break;
+ }
+ }
+
+ if (!num_pos)
+ ctx->text.insertPos = XawMin(ipos, ctx->text.lastPos);
+
+ return (recurse ? DoFormatText(ctx, position + 1,
+ ctx->text.justify != XawjustifyFull
+ && (force2 || paragraph),
+ ++level, save, pos, num_pos, paragraph)
+ : XawEditDone);
+}
+#undef CHECK_SAVE
+
+/*ARGSUSED*/
+static void
+Indent(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ TextSrcObject src = (TextSrcObject)ctx->text.source;
+ XawTextPosition from, to, tmp, end = 0, *pos, *posbuf[32];
+ char buf[32];
+ XawTextBlock text;
+ int i, spaces = MULT(ctx);
+ char *lbuf = NULL, *rbuf;
+ unsigned llen = 0, rlen, size;
+ Bool undo = src->textSrc.enable_undo && src->textSrc.undo_state == False;
+ Bool format = ctx->text.auto_fill
+ && ctx->text.left_column < ctx->text.right_column;
+
+ text.firstPos = 0;
+ text.format = XawFmt8Bit;
+ text.ptr = "";
+
+ StartAction(ctx, event);
+
+ pos = XawStackAlloc(sizeof(XawTextPosition) * src->textSrc.num_text, posbuf);
+ for (i = 0; i < src->textSrc.num_text; i++)
+ pos[i] = ((TextWidget)src->textSrc.text[i])->text.insertPos;
+
+ if (!GetBlockBoundaries(ctx, &from, &to)) {
+ EndAction(ctx);
+ XawStackFree(pos, posbuf);
+ return;
+ }
+
+ if (undo) {
+ llen = to - from;
+ end = ctx->text.lastPos;
+ lbuf = _XawTextGetText(ctx, from, to);
+ src->textSrc.undo_state = True;
+ }
+
+ tmp = ctx->text.lastPos;
+ if (!Untabify(ctx, from, to, pos, src->textSrc.num_text, NULL)) {
+ XBell(XtDisplay(ctx), 0);
+ EndAction(ctx);
+ XawStackFree(pos, posbuf);
+ if (undo) {
+ src->textSrc.undo_state = True;
+ XtFree(lbuf);
+ }
+ return;
+ }
+ to += ctx->text.lastPos - tmp;
+
+ tmp = from;
+
+ if (spaces > 0) {
+ text.ptr = XawStackAlloc(spaces, buf);
+ for (i = 0; i < spaces; i++)
+ text.ptr[i] = ' ';
+
+ text.length = spaces;
+ while (tmp < to) {
+ _XawTextReplace(ctx, tmp, tmp, &text);
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ if (tmp < pos[i])
+ pos[i] += spaces;
+
+ to += spaces;
+ tmp = SrcScan(ctx->text.source, tmp, XawstEOL, XawsdRight, 1, True);
+ }
+ XawStackFree(text.ptr, buf);
+ }
+ else {
+ int min = 32767;
+
+ text.length = 0;
+ tmp = from;
+
+ /* find the amount of spaces to cut */
+ while (tmp < to) {
+ (void)BlankLine(w, tmp, &i);
+ if (i < min)
+ min = i;
+ tmp = SrcScan(ctx->text.source, tmp, XawstEOL, XawsdRight, 1, True);
+ }
+ spaces = XawMin(-spaces, min);
+
+ /* cut the spaces */
+ tmp = from;
+ while (tmp < to) {
+ _XawTextReplace(ctx, tmp, tmp + spaces, &text);
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ if (tmp < pos[i]) {
+ if (tmp + spaces < pos[i])
+ pos[i] -= spaces;
+ else
+ pos[i] = tmp;
+ }
+
+ to -= spaces;
+ tmp = SrcScan(ctx->text.source, tmp, XawstEOL, XawsdRight, 1, True);
+ }
+ }
+
+ if (!format)
+ Tabify(ctx, from, to, pos, src->textSrc.num_text, NULL);
+
+ if (undo) {
+ rlen = llen + (ctx->text.lastPos - end);
+ rbuf = _XawTextGetText(ctx, from, from + rlen);
+
+ text.format = _XawTextFormat(ctx);
+ size = XawTextFormat(ctx, XawFmtWide) ? sizeof(wchar_t) : sizeof(char);
+ if (llen != rlen || memcmp(lbuf, rbuf, llen * size)) {
+ text.ptr = lbuf;
+ text.length = llen;
+ _XawTextReplace(ctx, from, from + rlen, &text);
+
+ src->textSrc.undo_state = False;
+ text.ptr = rbuf;
+ text.length = rlen;
+ _XawTextReplace(ctx, from, from + llen, &text);
+ }
+ else
+ src->textSrc.undo_state = False;
+ XtFree(lbuf);
+ XtFree(rbuf);
+ }
+
+ for (i = 0; i < src->textSrc.num_text; i++) {
+ TextWidget tw = (TextWidget)src->textSrc.text[i];
+
+ tw->text.insertPos = XawMin(XawMax(0, pos[i]), tw->text.lastPos);
+ }
+ XawStackFree(pos, posbuf);
+ ctx->text.showposition = True;
+
+ EndAction(ctx);
+}
+
+/*ARGSUSED*/
+static void
+ToggleOverwrite(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ ctx->text.overwrite = !ctx->text.overwrite;
+
+ /* call information callback */
+ _XawTextSetLineAndColumnNumber(ctx, True);
+}
+#endif /* OLDXAW */
+
+/*
+ * Insertion Routines
+ */
+static int
+InsertNewLineAndBackupInternal(TextWidget ctx)
+{
+ int count, error = XawEditDone, mult = MULT(ctx);
+#ifndef OLDXAW
+ XawTextPosition position;
+#endif
+ XawTextBlock text;
+ char buf[32];
+
+ if (mult < 0) {
+ ctx->text.mult = 1;
+ return (XawEditError);
+ }
+
+ text.format = _XawTextFormat(ctx);
+ text.length = mult;
+ text.firstPos = 0;
+
+ if (text.format == XawFmtWide) {
+ wchar_t *wptr;
+
+ text.ptr = XawStackAlloc(sizeof(wchar_t) * mult, buf);
+ wptr = (wchar_t *)text.ptr;
+ for (count = 0; count < mult; count++)
+ wptr[count] = _Xaw_atowc(XawLF);
+ }
+ else {
+ text.ptr = XawStackAlloc(sizeof(char) * mult, buf);
+ for (count = 0; count < mult; count++)
+ text.ptr[count] = XawLF;
+ }
+
+#ifndef OLDXAW
+ position = SrcScan(ctx->text.source, ctx->text.insertPos,
+ XawstEOL, XawsdLeft, 1, False);
+#endif
+ if (_XawTextReplace(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
+ XBell( XtDisplay(ctx), 50);
+ error = XawEditError;
+ }
+ else {
+ ctx->text.showposition = TRUE;
+ ctx->text.insertPos += text.length;
+ }
+
+ XawStackFree(text.ptr, buf);
+
+#ifndef OLDXAW
+ if (ctx->text.auto_fill && error == XawEditDone)
+ (void)FormatText(ctx, position, ctx->text.justify != XawjustifyFull,
+ NULL, 0);
+#endif
+
+ return (error);
+}
+
+/*ARGSUSED*/
+static void
+InsertNewLineAndBackup(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition insertPos = ctx->text.insertPos;
+
+ StartAction((TextWidget)w, event);
+ (void)InsertNewLineAndBackupInternal(ctx);
+ ctx->text.insertPos = SrcScan(ctx->text.source, insertPos, XawstEOL,
+ XawsdRight, 1, False);
+ EndAction((TextWidget)w);
+}
+
+static int
+LocalInsertNewLine(TextWidget ctx, XEvent *event)
+{
+ int error;
+
+ StartAction(ctx, event);
+ error = InsertNewLineAndBackupInternal(ctx);
+ ctx->text.from_left = -1;
+ EndAction(ctx);
+
+ return (error);
+}
+
+/*ARGSUSED*/
+static void
+InsertNewLine(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ (void)LocalInsertNewLine((TextWidget)w, event);
+}
+
+/*ARGSUSED*/
+static void
+InsertNewLineAndIndent(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ XawTextBlock text;
+ XawTextPosition pos1;
+ int length;
+ TextWidget ctx = (TextWidget)w;
+ String line_to_ip;
+
+ StartAction(ctx, event);
+ pos1 = SrcScan(ctx->text.source, ctx->text.insertPos,
+ XawstEOL, XawsdLeft, 1, False);
+
+ line_to_ip = _XawTextGetText(ctx, pos1, ctx->text.insertPos);
+
+ text.format = _XawTextFormat(ctx);
+ text.firstPos = 0;
+
+ if (text.format == XawFmtWide) {
+ wchar_t *ptr;
+
+ text.ptr = XtMalloc((2 + wcslen((wchar_t*)line_to_ip))
+ * sizeof(wchar_t));
+ ptr = (wchar_t*)text.ptr;
+ ptr[0] = _Xaw_atowc(XawLF);
+ wcscpy((wchar_t*)++ptr, (wchar_t*)line_to_ip);
+
+ length = wcslen((wchar_t*)text.ptr);
+ while (length && (iswspace(*ptr) || *ptr == _Xaw_atowc(XawTAB)))
+ ptr++, length--;
+ *ptr = (wchar_t)0;
+ text.length = wcslen((wchar_t*)text.ptr);
+ }
+ else {
+ char *ptr;
+
+ length = strlen(line_to_ip);
+ text.ptr = XtMalloc((2 + length) * sizeof(char));
+ ptr = text.ptr;
+ ptr[0] = XawLF;
+ strcpy(++ptr, line_to_ip);
+
+ length++;
+ while (length && (isspace(*ptr) || (*ptr == XawTAB)))
+ ptr++, length--;
+ *ptr = '\0';
+ text.length = strlen(text.ptr);
+ }
+ XtFree(line_to_ip);
+
+ if (_XawTextReplace(ctx,ctx->text.insertPos, ctx->text.insertPos, &text)) {
+ XBell(XtDisplay(ctx), 50);
+ XtFree(text.ptr);
+ EndAction(ctx);
+ return;
+ }
+
+ XtFree(text.ptr);
+ ctx->text.from_left = -1;
+ ctx->text.insertPos = SrcScan(ctx->text.source, ctx->text.old_insert,
+ XawstPositions, XawsdRight, text.length, True);
+ EndAction(ctx);
+}
+
+/*
+ * Selection Routines
+ */
+static void
+SelectWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition l, r;
+
+ StartAction(ctx, event);
+ l = SrcScan(ctx->text.source, ctx->text.insertPos,
+ XawstWhiteSpace, XawsdLeft, 1, False);
+ r = SrcScan(ctx->text.source, l, XawstWhiteSpace, XawsdRight, 1, False);
+ _XawTextSetSelection(ctx, l, r, params, *num_params);
+ EndAction(ctx);
+}
+
+static void
+SelectAll(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ StartAction(ctx, event);
+ _XawTextSetSelection(ctx,zeroPosition,ctx->text.lastPos,params,*num_params);
+ EndAction(ctx);
+}
+
+static void
+ModifySelection(TextWidget ctx, XEvent *event,
+ XawTextSelectionMode mode,
+ XawTextSelectionAction action,
+ String *params, Cardinal *num_params)
+{
+#ifndef OLDXAW
+ int old_y = ctx->text.ev_y;
+#endif
+
+ StartAction(ctx, event);
+ NotePosition(ctx, event);
+
+#ifndef OLDXAW
+ if (event->type == MotionNotify) {
+ if (ctx->text.ev_y <= ctx->text.margin.top) {
+ if (old_y >= ctx->text.ev_y)
+ XawTextScroll(ctx, -1, 0);
+ }
+ else if (ctx->text.ev_y >= XtHeight(ctx) - ctx->text.margin.bottom) {
+ if (old_y <= ctx->text.ev_y
+ && !IsPositionVisible(ctx, ctx->text.lastPos))
+ XawTextScroll(ctx, 1, 0);
+ }
+ }
+#endif
+ ctx->text.from_left = -1;
+ _XawTextAlterSelection(ctx, mode, action, params, num_params);
+
+ EndAction(ctx);
+}
+
+static void
+SelectStart(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+#ifndef OLDXAW
+ if (!ctx->text.selection_state) {
+ ctx->text.selection_state = True;
+#endif
+ ModifySelection(ctx, event,
+ XawsmTextSelect, XawactionStart, params, num_params);
+#ifndef OLDXAW
+ }
+#endif
+}
+
+static void
+SelectAdjust(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+#ifndef OLDXAW
+ if (ctx->text.selection_state)
+#endif
+ ModifySelection(ctx, event,
+ XawsmTextSelect, XawactionAdjust, params, num_params);
+}
+
+static void
+SelectEnd(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+#ifndef OLDXAW
+ if (ctx->text.selection_state) {
+ ctx->text.selection_state = False;
+#endif
+ ModifySelection(ctx, event,
+ XawsmTextSelect, XawactionEnd, params, num_params);
+#ifndef OLDXAW
+ }
+#endif
+}
+
+static void
+ExtendStart(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+#ifndef OLDXAW
+ if (!ctx->text.selection_state) {
+ ctx->text.selection_state = True;
+#endif
+ ModifySelection(ctx, event,
+ XawsmTextExtend, XawactionStart, params, num_params);
+#ifndef OLDXAW
+ }
+#endif
+}
+
+static void
+ExtendAdjust(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+#ifndef OLDXAW
+ if (ctx->text.selection_state)
+#endif
+ ModifySelection(ctx, event,
+ XawsmTextExtend, XawactionAdjust, params, num_params);
+}
+
+static void
+ExtendEnd(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+#ifndef OLDXAW
+ if (ctx->text.selection_state) {
+ ctx->text.selection_state = False;
+#endif
+ ModifySelection(ctx, event,
+ XawsmTextExtend, XawactionEnd, params, num_params);
+#ifndef OLDXAW
+ }
+#endif
+}
+
+static void
+SelectSave(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ int num_atoms;
+ Atom *sel;
+ Display *dpy = XtDisplay(w);
+ Atom selections[256];
+
+ StartAction((TextWidget)w, event);
+ num_atoms = *num_params;
+ if (num_atoms > 256)
+ num_atoms = 256;
+ for (sel=selections; --num_atoms >= 0; sel++, params++)
+ *sel = XInternAtom(dpy, *params, False);
+ num_atoms = *num_params;
+ _XawTextSaltAwaySelection((TextWidget)w, selections, num_atoms);
+ EndAction((TextWidget)w);
+}
+
+/*
+ * Misc. Routines
+ */
+/*ARGSUSED*/
+static void
+SetKeyboardFocus(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ Widget shell, parent;
+
+ shell = parent = w;
+ while (parent) {
+ if (XtIsShell(shell = parent))
+ break;
+ parent = XtParent(parent);
+ }
+ XtSetKeyboardFocus(shell, w);
+}
+
+/*ARGSUSED*/
+static void
+RedrawDisplay(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ StartAction((TextWidget)w, event);
+ _XawTextClearAndCenterDisplay((TextWidget)w);
+ EndAction((TextWidget)w);
+}
+
+/* This is kind of a hack, but, only one text widget can have focus at
+ * a time on one display. There is a problem in the implementation of the
+ * text widget, the scrollbars can not be adressed via editres, since they
+ * are not children of a subclass of composite.
+ * The focus variable is required to make sure only one text window will
+ * show a block cursor at one time.
+ */
+struct _focus { Display *display; Widget widget; };
+static struct _focus *focus;
+static Cardinal num_focus;
+
+/*ARGSUSED*/
+static void
+DestroyFocusCallback(Widget w, XtPointer user_data, XtPointer call_data)
+{
+ struct _focus *f = (struct _focus*)(user_data);
+
+ if (f->widget == w)
+ f->widget = NULL;
+}
+
+/*ARGSUSED*/
+static void
+TextFocusIn(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ Bool display_caret = ctx->text.display_caret;
+ int i;
+
+ if (event->xfocus.detail == NotifyPointer)
+ return;
+
+ if (event->xfocus.send_event) {
+ Window root, child;
+ int rootx, rooty, x, y;
+ unsigned int mask;
+
+ if (ctx->text.hasfocus)
+ return;
+
+ if (XQueryPointer(XtDisplay(w), XtWindow(w), &root, &child,
+ &rootx, &rooty, &x, &y, &mask)) {
+ if (child)
+ return;
+ }
+ }
+
+ /* Let the input method know focus has arrived. */
+ _XawImSetFocusValues(w, NULL, 0);
+
+ if (display_caret)
+ StartAction(ctx, event);
+ ctx->text.hasfocus = TRUE;
+ if (display_caret)
+ EndAction(ctx);
+
+ for (i = 0; i < num_focus; i++)
+ if (focus[i].display == XtDisplay(w))
+ break;
+ if (i >= num_focus) {
+ focus = (struct _focus*)
+ XtRealloc((XtPointer)focus, sizeof(struct _focus) * (num_focus + 1));
+ i = num_focus;
+ focus[i].widget = NULL;
+ focus[i].display = XtDisplay(w);
+ num_focus++;
+ }
+ if (focus[i].widget != w) {
+ Widget old = focus[i].widget;
+
+ focus[i].widget = w;
+ if (old != NULL) {
+ TextFocusOut(old, event, p, n);
+ /* TextFocusOut may set it to NULL */
+ focus[i].widget = w;
+ }
+ XtAddCallback(w, XtNdestroyCallback,
+ DestroyFocusCallback, (XtPointer)&focus[i]);
+ }
+}
+
+/*ARGSUSED*/
+static void
+TextFocusOut(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ Bool display_caret = ctx->text.display_caret;
+ Widget shell;
+ Window window;
+ int i, revert;
+
+ shell = w;
+ while (shell) {
+ if (XtIsShell(shell))
+ break;
+ shell = XtParent(shell);
+ }
+
+ for (i = 0; i < num_focus; i++)
+ if (focus[i].display == XtDisplay(w))
+ break;
+ XGetInputFocus(XtDisplay(w), &window, &revert);
+ if ((XtWindow(shell) == window &&
+ (i < num_focus && focus[i].widget == w))
+ || event->xfocus.detail == NotifyPointer)
+ return;
+
+ if (i < num_focus && focus[i].widget) {
+ XtRemoveCallback(focus[i].widget, XtNdestroyCallback,
+ DestroyFocusCallback, (XtPointer)&focus[i]);
+ focus[i].widget = NULL;
+ }
+
+ /* Let the input method know focus has left.*/
+ _XawImUnsetFocus(w);
+
+ if (display_caret)
+ StartAction(ctx, event);
+ ctx->text.hasfocus = FALSE;
+ if (display_caret)
+ EndAction(ctx);
+}
+
+/*ARGSUSED*/
+static void
+TextEnterWindow(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ if ((event->xcrossing.detail != NotifyInferior) && event->xcrossing.focus
+ && !ctx->text.hasfocus)
+ _XawImSetFocusValues(w, NULL, 0);
+}
+
+/*ARGSUSED*/
+static void
+TextLeaveWindow(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ if ((event->xcrossing.detail != NotifyInferior) && event->xcrossing.focus
+ && !ctx->text.hasfocus)
+ _XawImUnsetFocus(w);
+}
+
+/*
+ * Function:
+ * AutoFill
+ * Arguments: ctx - The text widget.
+ *
+ * Description:
+ * Breaks the line at the previous word boundry when
+ * called inside InsertChar.
+ */
+static void
+AutoFill(TextWidget ctx)
+{
+ int width, height, x, line_num, max_width;
+ XawTextPosition ret_pos;
+ XawTextBlock text;
+ XRectangle cursor;
+ wchar_t wc_buf[2];
+
+ for (line_num = 0; line_num < ctx->text.lt.lines ; line_num++)
+ if (ctx->text.lt.info[line_num].position >= ctx->text.insertPos)
+ break;
+ if (line_num)
+ line_num--; /* backup a line. */
+
+ XawTextSinkGetCursorBounds(ctx->text.sink, &cursor);
+ max_width = Max(0, (int)XtWidth(ctx) - RHMargins(ctx) - cursor.width);
+
+ x = ctx->text.r_margin.left;
+ XawTextSinkFindPosition(ctx->text.sink, ctx->text.lt.info[line_num].position,
+ x, max_width, True, &ret_pos,
+ &width, &height);
+
+ if (ret_pos <= ctx->text.lt.info[line_num].position
+ || ret_pos >= ctx->text.insertPos || ret_pos < 1)
+ return;
+
+ XawTextSourceRead(ctx->text.source, ret_pos - 1, &text, 1);
+
+ if (XawTextFormat(ctx, XawFmtWide)) {
+ wc_buf[0] = *(wchar_t *)text.ptr;
+ if (wc_buf[0] != _Xaw_atowc(XawSP) && wc_buf[0] != _Xaw_atowc(XawTAB))
+ /* Only eats white spaces */
+ return;
+
+ text.format = XawFmtWide;
+ text.ptr = (char *)wc_buf;
+ wc_buf[0] = _Xaw_atowc(XawLF);
+ wc_buf[1] = 0;
+ }
+ else {
+ if (text.ptr[0] != XawSP && text.ptr[0] != XawTAB)
+ /* Only eats white spaces */
+ return;
+
+ text.format = XawFmt8Bit;
+ text.ptr = "\n";
+ }
+ text.length = 1;
+ text.firstPos = 0;
+
+ if (_XawTextReplace(ctx, ret_pos - 1, ret_pos, &text))
+ XBell(XtDisplay((Widget)ctx), 0);
+
+ if (++ctx->text.insertPos > ctx->text.lastPos)
+ ctx->text.insertPos = ctx->text.lastPos;
+}
+
+/*ARGSUSED*/
+static void
+InsertChar(Widget w, XEvent *event, String *p, Cardinal *n)
+{
+ TextWidget ctx = (TextWidget)w;
+ char *ptr, strbuf[128], ptrbuf[512];
+ int count, error, mult = MULT(ctx);
+ KeySym keysym;
+ XawTextBlock text;
+#ifndef OLDXAW
+ Bool format = False;
+#endif
+ XawTextPosition from, to;
+
+ if (XtIsSubclass (ctx->text.source, (WidgetClass) multiSrcObjectClass))
+ text.length = _XawImWcLookupString(w, &event->xkey, (wchar_t*)strbuf,
+ sizeof(strbuf), &keysym);
+ else
+ text.length = _XawLookupString(w, (XKeyEvent*)event, strbuf,
+ sizeof(strbuf), &keysym);
+
+ if (text.length == 0)
+ return;
+
+ if (mult < 0) {
+ ctx->text.mult = 1;
+ return;
+ }
+
+ text.format = _XawTextFormat(ctx);
+ if (text.format == XawFmtWide) {
+ text.ptr = ptr = XawStackAlloc(sizeof(wchar_t) * text.length
+ * mult, ptrbuf);
+ for (count = 0; count < mult; count++) {
+ memcpy((char*)ptr, (char *)strbuf, sizeof(wchar_t) * text.length);
+ ptr += sizeof(wchar_t) * text.length;
+ }
+#ifndef OLDXAW
+ if (mult == 1)
+ format = ctx->text.left_column < ctx->text.right_column;
+#endif
+ }
+ else { /* == XawFmt8Bit */
+ text.ptr = ptr = XawStackAlloc(text.length * mult, ptrbuf);
+ for (count = 0; count < mult; count++) {
+ strncpy(ptr, strbuf, text.length);
+ ptr += text.length;
+ }
+#ifndef OLDXAW
+ if (mult == 1)
+ format = ctx->text.left_column < ctx->text.right_column;
+#endif
+ }
+
+ text.length = text.length * mult;
+ text.firstPos = 0;
+
+ StartAction(ctx, event);
+#ifndef OLDXAW
+ if (mult == 1)
+ _XawSourceSetUndoMerge((TextSrcObject)ctx->text.source, True);
+#endif
+
+ from = ctx->text.insertPos;
+#ifndef OLDXAW
+ if (ctx->text.overwrite) {
+ XawTextPosition tmp;
+
+ to = from + mult;
+ tmp = SrcScan(ctx->text.source, from, XawstEOL, XawsdRight, 1, False);
+ if (to > tmp)
+ to = tmp;
+ }
+ else
+#endif
+ to = from;
+
+ error = _XawTextReplace(ctx, from , to, &text);
+
+ if (error == XawEditDone) {
+ ctx->text.from_left = -1;
+ ctx->text.insertPos = SrcScan(ctx->text.source, ctx->text.old_insert,
+ XawstPositions, XawsdRight,
+ text.length, True);
+ if (ctx->text.auto_fill) {
+#ifndef OLDXAW
+ if (format)
+ (void)FormatText(ctx, SrcScan(ctx->text.source,
+ ctx->text.insertPos, XawstEOL,
+ XawsdLeft, 1, False), False,
+ NULL, 0);
+ else
+#endif
+ AutoFill(ctx);
+ }
+ }
+ else
+ XBell(XtDisplay(ctx), 50);
+
+ XawStackFree(text.ptr, ptrbuf);
+ EndAction(ctx);
+
+ if (error == XawEditDone && text.format == XawFmt8Bit && text.length == 1
+ && (text.ptr[0] == ')' || text.ptr[0] == ']' || text.ptr[0] == '}')
+ && ctx->text.display_caret) {
+ static struct timeval tmval = {0, 500000};
+ fd_set fds;
+ Widget source = ctx->text.source;
+ XawTextPosition insertPos = ctx->text.insertPos, pos, tmp, last;
+ char left, right = text.ptr[0];
+ int level = 0;
+ XtAppContext app_context = XtWidgetToApplicationContext(w);
+
+ left = right == ')' ? '(' : right == ']' ? '[' : '{';
+
+ last = insertPos - 1;
+ do {
+ text.ptr[0] = left;
+ pos = XawTextSourceSearch(source, last, XawsdLeft, &text);
+ if (pos == XawTextSearchError || !IsPositionVisible(ctx, pos))
+ return;
+ text.ptr[0] = right;
+ tmp = pos;
+ do {
+ tmp = XawTextSourceSearch(source, tmp, XawsdRight, &text);
+ if (tmp == XawTextSearchError)
+ return;
+ if (tmp <= last)
+ ++level;
+ } while (++tmp <= last);
+ --level;
+ last = pos;
+ } while (level);
+
+ StartAction(ctx, NULL);
+#ifndef OLDXAW
+ _XawSourceSetUndoMerge((TextSrcObject)ctx->text.source, True);
+#endif
+ ctx->text.insertPos = pos;
+ EndAction(ctx);
+
+ XSync(XtDisplay(w), False);
+ while (XtAppPending(app_context) & XtIMXEvent) {
+ XEvent ev;
+ if (! XtAppPeekEvent(app_context, &ev))
+ break;
+ if (ev.type == KeyPress || ev.type == ButtonPress)
+ break;
+ XtAppProcessEvent(app_context, XtIMXEvent);
+ }
+ FD_ZERO(&fds);
+ FD_SET(ConnectionNumber(XtDisplay(w)), &fds);
+ (void)select(FD_SETSIZE, &fds, NULL, NULL, &tmval);
+ if (tmval.tv_usec != 500000)
+ usleep(40000);
+
+ StartAction(ctx, NULL);
+#ifndef OLDXAW
+ _XawSourceSetUndoMerge((TextSrcObject)ctx->text.source, True);
+#endif
+ ctx->text.insertPos = insertPos;
+ EndAction(ctx);
+ }
+}
+
+/* IfHexConvertHexElseReturnParam() - called by InsertString
+ *
+ * i18n requires the ability to specify multiple characters in a hexa-
+ * decimal string at once. Since Insert was already too long, I made
+ * this a seperate routine.
+ *
+ * A legal hex string in MBNF: '0' 'x' ( HEX-DIGIT HEX-DIGIT )+ '\0'
+ *
+ * WHEN: the passed param is a legal hex string
+ * RETURNS: a pointer to that converted, null terminated hex string;
+ * len_return holds the character count of conversion result
+ *
+ * WHEN: the passed param is not a legal hex string:
+ * RETURNS: the parameter passed;
+ * len_return holds the char count of param.
+ *
+ * NOTE: In neither case will there be strings to free. */
+static char *
+IfHexConvertHexElseReturnParam(char *param, int *len_return)
+{
+ char *p; /* steps through param char by char */
+ char c; /* holds the character pointed to by p */
+ int ind; /* steps through hexval buffer char by char */
+ static char hexval[XawTextActionMaxHexChars];
+ Boolean first_digit;
+
+ /* reject if it doesn't begin with 0x and at least one more character. */
+ if ((param[0] != '0') || (param[1] != 'x') || (param[2] == '\0')) {
+ *len_return = strlen(param);
+ return(param);
+ }
+
+ /* Skip the 0x; go character by character shifting and adding. */
+ first_digit = True;
+ ind = 0;
+ hexval[ind] = '\0';
+
+ for (p = param+2; (c = *p) != '\0'; p++) {
+ hexval[ind] *= 16;
+ if (c >= '0' && c <= '9')
+ hexval[ind] += c - '0';
+ else if (c >= 'a' && c <= 'f')
+ hexval[ind] += c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F')
+ hexval[ind] += c - 'A' + 10;
+ else
+ break;
+
+ /* If we didn't break in preceding line, it was a good hex char. */
+ if (first_digit)
+ first_digit = False;
+ else {
+ first_digit = True;
+ if (++ind < XawTextActionMaxHexChars)
+ hexval[ind] = '\0';
+ else {
+ *len_return = strlen(param);
+ return(param);
+ }
+ }
+ }
+
+ /* We quit the above loop becasue we hit a non hex. If that char is \0... */
+ if ((c == '\0') && first_digit) {
+ *len_return = strlen(hexval);
+ return (hexval); /* ...it was a legal hex string, so return it */
+ }
+
+ /* Else, there were non-hex chars or odd digit count, so... */
+
+ *len_return = strlen(param);
+ return (param); /* ...return the verbatim string. */
+}
+
+/* InsertString() - action
+ *
+ * Mostly rewritten for R6 i18n.
+ *
+ * Each parameter, in turn, will be insert at the inputPos
+ * and the inputPos advances to the insertion's end.
+ *
+ * The exception is that parameters composed of the two
+ * characters 0x, followed only by an even number of
+ * hexadecimal digits will be converted to characters */
+/*ARGSUSED*/
+static void
+InsertString(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ XtAppContext app_con = XtWidgetToApplicationContext(w);
+ XawTextBlock text;
+ int i;
+
+ text.firstPos = 0;
+ text.format = _XawTextFormat(ctx);
+
+ StartAction(ctx, event);
+ for (i = *num_params; i; i--, params++) { /* DO FOR EACH PARAMETER */
+ text.ptr = IfHexConvertHexElseReturnParam(*params, &text.length);
+
+ if (text.length == 0)
+ continue;
+
+ if (XawTextFormat(ctx, XawFmtWide)) { /* convert to WC */
+ int temp_len;
+
+ text.ptr = (char*)_XawTextMBToWC(XtDisplay(w), text.ptr,
+ &text.length);
+
+ if (text.ptr == NULL) { /* conversion error */
+ XtAppWarningMsg(app_con,
+ "insertString", "textAction", "XawError",
+ "insert-string()'s parameter contents "
+ "not legal in this locale.",
+ NULL, NULL);
+ ParameterError(w, *params);
+ continue;
+ }
+
+ /* Double check that the new input is legal: try to convert to MB. */
+
+ temp_len = text.length; /* _XawTextWCToMB's 3rd arg is in_out */
+ if (_XawTextWCToMB(XtDisplay(w), (wchar_t*)text.ptr, &temp_len)
+ == NULL) {
+ XtAppWarningMsg( app_con,
+ "insertString", "textAction", "XawError",
+ "insert-string()'s parameter contents "
+ "not legal in this locale.",
+ NULL, NULL);
+ ParameterError(w, *params);
+ continue;
+ }
+ } /* convert to WC */
+
+ if (_XawTextReplace(ctx, ctx->text.insertPos,
+ ctx->text.insertPos, &text)) {
+ XBell(XtDisplay(ctx), 50);
+ EndAction(ctx);
+ return;
+ }
+
+ ctx->text.from_left = -1;
+ /* Advance insertPos to the end of the string we just inserted. */
+ ctx->text.insertPos = SrcScan(ctx->text.source, ctx->text.old_insert,
+ XawstPositions, XawsdRight, text.length,
+ True);
+
+ } /* DO FOR EACH PARAMETER */
+
+ EndAction(ctx);
+}
+
+/* DisplayCaret() - action
+ *
+ * The parameter list should contain one boolean value. If the
+ * argument is true, the cursor will be displayed. If false, not.
+ *
+ * The exception is that EnterNotify and LeaveNotify events may
+ * have a second argument, "always". If they do not, the cursor
+ * is only affected if the focus member of the event is true. */
+static void
+DisplayCaret(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ Bool display_caret = True;
+
+ if ((event->type == EnterNotify || event->type == LeaveNotify)
+ && ((*num_params >= 2) && (strcmp(params[1], "always") == 0))
+ && (!event->xcrossing.focus))
+ return;
+
+ if (*num_params > 0) { /* default arg is "True" */
+ XrmValue from, to;
+ from.size = strlen(from.addr = params[0]);
+ XtConvert(w, XtRString, &from, XtRBoolean, &to);
+
+ if (to.addr != NULL)
+ display_caret = *(Boolean*)to.addr;
+ if (ctx->text.display_caret == display_caret)
+ return;
+ }
+ StartAction(ctx, event);
+ ctx->text.display_caret = display_caret;
+ EndAction(ctx);
+}
+
+#ifndef OLDXAW
+static void
+Numeric(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ if (ctx->text.numeric) {
+ long mult = ctx->text.mult;
+
+ if (*num_params != 1 || strlen(params[0]) != 1
+ || (!isdigit(params[0][0])
+ && (params[0][0] != '-' || mult != 0))) {
+ char err_buf[256];
+
+ if (event && (event->type == KeyPress || event->type == KeyRelease)
+ && params[0][0] == '-') {
+ InsertChar(w, event, params, num_params);
+ return;
+ }
+ XmuSnprintf(err_buf, sizeof(err_buf),
+ "numeric: Invalid argument%s'%s'",
+ *num_params ? ", " : "", *num_params ? params[0] : "");
+ XtAppWarning(XtWidgetToApplicationContext(w), err_buf);
+ ctx->text.numeric = False;
+ ctx->text.mult = 1;
+ return;
+ }
+ if (params[0][0] == '-') {
+ ctx->text.mult = 32767;
+ return;
+ }
+ else if (mult == 32767) {
+ mult = ctx->text.mult = - (params[0][0] - '0');
+ return;
+ }
+ else {
+ mult = mult * 10 + (params[0][0] - '0') * (mult < 0 ? -1 : 1);
+ ctx->text.mult = ctx->text.mult * 10 + (params[0][0] - '0') *
+ (mult < 0 ? -1 : 1);
+ }
+ if (mult != ctx->text.mult || mult >= 32767) { /* checks for overflow */
+ XBell(XtDisplay(w), 0);
+ ctx->text.mult = 1;
+ ctx->text.numeric = False;
+ return;
+ }
+ }
+ else
+ InsertChar(w, event, params, num_params);
+}
+
+/*ARGSUSED*/
+static void
+KeyboardReset(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+
+ ctx->text.numeric = False;
+ ctx->text.mult = 1;
+
+ (void)_XawTextSrcToggleUndo((TextSrcObject)ctx->text.source);
+
+ if (ctx->text.kill_ring_ptr) {
+ --ctx->text.kill_ring_ptr->refcount;
+ ctx->text.kill_ring_ptr = NULL;
+ }
+ ctx->text.kill_ring = 0;
+
+ XBell(XtDisplay(w), 0);
+}
+#endif /* OLDXAW */
+
+/* Multiply() - action
+ *
+ * The parameter list may contain either a number or the string 'Reset'.
+ *
+ * A number will multiply the current multiplication factor by that number.
+ * Many of the text widget actions will will perform n actions, where n is
+ * the multiplication factor.
+ *
+ * The string reset will reset the mutiplication factor to 1. */
+/*ARGSUSED*/
+static void
+Multiply(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ int mult;
+
+ if (*num_params != 1) {
+ XtAppError(XtWidgetToApplicationContext(w),
+ "Xaw Text Widget: multiply() takes exactly one argument.");
+ XBell(XtDisplay(w), 0);
+ return;
+ }
+
+ if ((params[0][0] == 'r') || (params[0][0] == 'R')) {
+ XBell(XtDisplay(w), 0);
+#ifndef OLDXAW
+ ctx->text.numeric = False;
+#endif
+ ctx->text.mult = 1;
+ return;
+ }
+
+#ifndef OLDXAW
+ if (params[0][0] == 's' || params[0][0] == 'S') {
+ ctx->text.numeric = True;
+ ctx->text.mult = 0;
+ return;
+ }
+ else
+#endif
+ if ((mult = atoi(params[0])) == 0) {
+ char buf[BUFSIZ];
+
+ XmuSnprintf(buf, sizeof(buf),
+ "%s %s", "Xaw Text Widget: multiply() argument",
+ "must be a number greater than zero, or 'Reset'.");
+ XtAppError(XtWidgetToApplicationContext(w), buf);
+ XBell(XtDisplay(w), 50);
+ return;
+ }
+
+ ctx->text.mult *= mult;
+}
+
+/* StripOutOldCRs() - called from FormRegion
+ *
+ * removes CRs in widget ctx, from from to to.
+ *
+ * RETURNS: the new ending location (we may add some characters),
+ * or XawReplaceError if the widget can't be written to. */
+static XawTextPosition
+StripOutOldCRs(TextWidget ctx, XawTextPosition from, XawTextPosition to,
+ XawTextPosition *pos, int num_pos)
+{
+ XawTextPosition startPos, endPos, eop_begin, eop_end, temp;
+ Widget src = ctx->text.source;
+ XawTextBlock text;
+ char *buf;
+ static wchar_t wc_two_spaces[3];
+ int idx;
+
+ /* Initialize our TextBlock with two spaces. */
+ text.firstPos = 0;
+ text.format = _XawTextFormat(ctx);
+ if (text.format == XawFmt8Bit)
+ text.ptr= " ";
+ else {
+ wc_two_spaces[0] = _Xaw_atowc(XawSP);
+ wc_two_spaces[1] = _Xaw_atowc(XawSP);
+ wc_two_spaces[2] = 0;
+ text.ptr = (char*)wc_two_spaces;
+ }
+
+ /* Strip out CR's. */
+ eop_begin = eop_end = startPos = endPos = from;
+
+ /* CONSTCOND */
+ while (TRUE) {
+ endPos=SrcScan(src, startPos, XawstEOL, XawsdRight, 1, False);
+
+ temp = SrcScan(src, endPos, XawstWhiteSpace, XawsdLeft, 1, False);
+ temp = SrcScan(src, temp, XawstWhiteSpace, XawsdRight,1, False);
+
+ if (temp > startPos)
+ endPos = temp;
+
+ if (endPos >= to)
+ break;
+
+ if (endPos >= eop_begin) {
+ startPos = eop_end;
+ eop_begin=SrcScan(src, startPos, XawstParagraph,
+ XawsdRight, 1,False);
+ eop_end = SrcScan(src, startPos, XawstParagraph,
+ XawsdRight, 1, True);
+ }
+ else {
+ XawTextPosition periodPos, next_word;
+ int i, len;
+
+ periodPos = SrcScan(src, endPos, XawstPositions,
+ XawsdLeft, 1, True);
+ next_word = SrcScan(src, endPos, XawstWhiteSpace,
+ XawsdRight, 1, False);
+
+ len = next_word - periodPos;
+
+ text.length = 1;
+ buf = _XawTextGetText(ctx, periodPos, next_word);
+ if (text.format == XawFmtWide) {
+ if (periodPos < endPos && ((wchar_t*)buf)[0] == _Xaw_atowc('.'))
+ text.length++;
+ }
+ else
+ if (periodPos < endPos && buf[0] == '.')
+ text.length++; /* Put in two spaces. */
+
+ /*
+ * Remove all extra spaces.
+ */
+ for (i = 1 ; i < len; i++)
+ if (text.format == XawFmtWide) {
+ if (!iswspace(((wchar_t*)buf)[i]) || ((periodPos + i) >= to))
+ break;
+ }
+ else if (!isspace(buf[i]) || (periodPos + i) >= to)
+ break;
+
+ XtFree(buf);
+
+ to -= (i - text.length - 1);
+ startPos = SrcScan(src, periodPos, XawstPositions,
+ XawsdRight, i, True);
+ if (_XawTextReplace(ctx, endPos, startPos, &text) != XawEditDone)
+ return (XawReplaceError);
+
+ for (idx = 0; idx < num_pos; idx++) {
+ if (endPos < pos[idx]) {
+ if (startPos < pos[idx])
+ pos[idx] -= startPos - endPos;
+ else
+ pos[idx] = endPos;
+ pos[idx] += text.length;
+ }
+ }
+
+ startPos -= i - text.length;
+ }
+ }
+
+ return (to);
+}
+
+/* InsertNewCRs() - called from FormRegion
+ *
+ * inserts new CRs for FormRegion, thus for FormParagraph action */
+static void
+InsertNewCRs(TextWidget ctx, XawTextPosition from, XawTextPosition to,
+ XawTextPosition *pos, int num_pos)
+{
+ XawTextPosition startPos, endPos, space, eol;
+ XawTextBlock text;
+ int i, width, height, len, wwidth, idx;
+ char *buf;
+ static wchar_t wide_CR[2];
+
+ text.firstPos = 0;
+ text.length = 1;
+ text.format = _XawTextFormat(ctx);
+
+ if (text.format == XawFmt8Bit)
+ text.ptr = "\n";
+ else {
+ wide_CR[0] = _Xaw_atowc(XawLF);
+ wide_CR[1] = 0;
+ text.ptr = (char*)wide_CR;
+ }
+
+ startPos = from;
+
+ wwidth = (int)XtWidth(ctx) - (int)HMargins(ctx);
+ if (ctx->text.wrap != XawtextWrapNever) {
+ XRectangle cursor;
+
+ XawTextSinkGetCursorBounds(ctx->text.sink, &cursor);
+ wwidth -= (int)cursor.width;
+ }
+ wwidth = XawMax(0, wwidth);
+
+ /* CONSTCOND */
+ while (TRUE) {
+ XawTextSinkFindPosition(ctx->text.sink, startPos,
+ (int)ctx->text.r_margin.left, wwidth,
+ True, &eol, &width, &height);
+ if (eol == startPos)
+ ++eol;
+ if (eol >= to)
+ break;
+
+ eol = SrcScan(ctx->text.source, eol, XawstPositions,
+ XawsdLeft, 1, True);
+ space = SrcScan(ctx->text.source, eol, XawstWhiteSpace,
+ XawsdRight,1, True);
+
+ startPos = endPos = eol;
+ if (eol == space)
+ return;
+
+ len = (int)(space - eol);
+ buf = _XawTextGetText(ctx, eol, space);
+ for (i = 0 ; i < len ; i++)
+ if (text.format == XawFmtWide) {
+ if (!iswspace(((wchar_t*)buf)[i]))
+ break;
+ }
+ else if (!isspace(buf[i]))
+ break;
+
+ to -= (i - 1);
+ endPos = SrcScan(ctx->text.source, endPos,
+ XawstPositions, XawsdRight, i, True);
+ XtFree(buf);
+
+ if (_XawTextReplace(ctx, startPos, endPos, &text))
+ return;
+
+ for (idx = 0; idx < num_pos; idx++) {
+ if (startPos < pos[idx]) {
+ if (endPos < pos[idx])
+ pos[idx] -= endPos - startPos;
+ else
+ pos[idx] = startPos;
+ pos[idx] += text.length;
+ }
+ }
+
+ startPos = SrcScan(ctx->text.source, startPos,
+ XawstPositions, XawsdRight, 1, True);
+ }
+}
+
+/* FormRegion() - called by FormParagraph
+ *
+ * oversees the work of paragraph-forming a region
+ *
+ * Return:
+ * XawEditDone if successful, or XawReplaceError
+ */
+static int
+FormRegion(TextWidget ctx, XawTextPosition from, XawTextPosition to,
+ XawTextPosition *pos, int num_pos)
+{
+#ifndef OLDXAW
+ Bool format = ctx->text.auto_fill
+ && ctx->text.left_column < ctx->text.right_column;
+#endif
+
+ if (from >= to)
+ return (XawEditDone);
+
+#ifndef OLDXAW
+ if (format) {
+ XawTextPosition len = ctx->text.lastPos;
+ int inc = 0;
+
+ if (ctx->text.justify == XawjustifyLeft ||
+ ctx->text.justify == XawjustifyFull) {
+ Untabify(ctx, from, to, pos, num_pos, NULL);
+ to += ctx->text.lastPos - len;
+ len = ctx->text.insertPos;
+ (void)BlankLine((Widget)ctx, from, &inc);
+ if (from + inc >= to)
+ return (XawEditDone);
+ }
+ if (!StripSpaces(ctx, from + inc, to, pos, num_pos, NULL))
+ return (XawReplaceError);
+ to += ctx->text.lastPos - len;
+
+ FormatText(ctx, from, ctx->text.justify != XawjustifyFull, pos, num_pos);
+ }
+ else {
+#endif
+ if ((to = StripOutOldCRs(ctx, from, to, pos, num_pos)) == XawReplaceError)
+ return (XawReplaceError);
+ InsertNewCRs(ctx, from, to, pos, num_pos);
+#ifndef OLDXAW
+ }
+#endif
+ ctx->text.from_left = -1;
+
+ return (XawEditDone);
+}
+
+#ifndef OLDXAW
+static Bool
+BlankLine(Widget w, XawTextPosition pos, int *blanks_return)
+{
+ int i, blanks = 0;
+ XawTextBlock block;
+ Widget src = XawTextGetSource(w);
+ XawTextPosition l = SrcScan(src, pos, XawstEOL, XawsdLeft, 1, False);
+ XawTextPosition r = SrcScan(src, pos, XawstEOL, XawsdRight, 1, False);
+
+ while (l < r) {
+ l = XawTextSourceRead(src, l, &block, r - l);
+ if (block.length == 0) {
+ if (blanks_return)
+ *blanks_return = blanks;
+ return (True);
+ }
+ if (XawTextFormat((TextWidget)w, XawFmt8Bit)) {
+ for (i = 0; i < block.length; i++, blanks++)
+ if (block.ptr[i] != ' ' &&
+ block.ptr[i] != '\t') {
+ if (blanks_return)
+ *blanks_return = blanks;
+ return (block.ptr[i] == '\n');
+ }
+ }
+ else if (XawTextFormat((TextWidget)w, XawFmtWide)) {
+ for (i = 0; i < block.length; i++, blanks++)
+ if (_Xaw_atowc(XawSP) != ((wchar_t*)block.ptr)[i] &&
+ _Xaw_atowc(XawTAB) != ((wchar_t*)block.ptr)[i]) {
+ if (blanks_return)
+ *blanks_return = blanks;
+ return (_Xaw_atowc(XawLF) == ((wchar_t*)block.ptr)[i]);
+ }
+ }
+ }
+
+ return (True);
+}
+
+static Bool
+GetBlockBoundaries(TextWidget ctx,
+ XawTextPosition *from_return, XawTextPosition *to_return)
+{
+ XawTextPosition from, to;
+
+ if (ctx->text.auto_fill && ctx->text.left_column < ctx->text.right_column) {
+ if (ctx->text.s.left != ctx->text.s.right) {
+ from = SrcScan(ctx->text.source,
+ XawMin(ctx->text.s.left, ctx->text.s.right),
+ XawstEOL, XawsdLeft, 1, False);
+ to = SrcScan(ctx->text.source,
+ XawMax(ctx->text.s.right, ctx->text.s.right),
+ XawstEOL, XawsdRight, 1, False);
+ }
+ else {
+ XawTextBlock block;
+ XawTextPosition tmp;
+ Bool first;
+
+ from = to = ctx->text.insertPos;
+
+ /* find from position */
+ first = True;
+ while (1) {
+ tmp = from;
+ from = SrcScan(ctx->text.source, from, XawstEOL, XawsdLeft,
+ 1 + !first, False);
+ XawTextSourceRead(ctx->text.source, from, &block, 1);
+ if (block.length == 0 ||
+ (XawTextFormat(ctx, XawFmt8Bit) &&
+ block.ptr[0] != ' ' &&
+ block.ptr[0] != '\t' &&
+ !isalnum(*(unsigned char*)block.ptr)) ||
+ (XawTextFormat(ctx, XawFmtWide) &&
+ _Xaw_atowc(XawSP) != *(wchar_t*)block.ptr &&
+ _Xaw_atowc(XawTAB) != *(wchar_t*)block.ptr &&
+ !iswalnum(*(wchar_t*)block.ptr)) ||
+ BlankLine((Widget)ctx, from, NULL)) {
+ from = tmp;
+ break;
+ }
+ if (from == tmp && !first)
+ break;
+ first = False;
+ }
+ if (first)
+ return (False);
+
+ /* find to position */
+ first = True;
+ while (1) {
+ tmp = to;
+ to = SrcScan(ctx->text.source, to, XawstEOL, XawsdRight,
+ 1 + !first, False);
+ XawTextSourceRead(ctx->text.source, to + (to < ctx->text.lastPos),
+ &block, 1);
+ if (block.length == 0 ||
+ (XawTextFormat(ctx, XawFmt8Bit) &&
+ block.ptr[0] != ' ' &&
+ block.ptr[0] != '\t' &&
+ !isalnum(*(unsigned char*)block.ptr)) ||
+ (XawTextFormat(ctx, XawFmtWide) &&
+ _Xaw_atowc(XawSP) != *(wchar_t*)block.ptr &&
+ _Xaw_atowc(XawTAB) != *(wchar_t*)block.ptr &&
+ !iswalnum(*(wchar_t*)block.ptr)) ||
+ BlankLine((Widget)ctx, to, NULL))
+ break;
+ if (to == tmp && !first)
+ break;
+ first = False;
+ }
+ }
+ }
+ else {
+ from = SrcScan(ctx->text.source, ctx->text.insertPos, XawstEOL,
+ XawsdLeft, 1, False);
+ if (BlankLine((Widget)ctx, from, NULL))
+ return (False);
+ from = SrcScan(ctx->text.source, from, XawstParagraph,
+ XawsdLeft, 1, False);
+ if (BlankLine((Widget)ctx, from, NULL))
+ from = SrcScan(ctx->text.source, from, XawstEOL,
+ XawsdRight, 1, True);
+ to = SrcScan(ctx->text.source, from, XawstParagraph,
+ XawsdRight, 1, False);
+ }
+
+ if (from < to) {
+ *from_return = from;
+ *to_return = to;
+ return (True);
+ }
+
+ return (False);
+}
+#endif /* OLDXAW */
+
+/* FormParagraph() - action
+ *
+ * removes and reinserts CRs to maximize line length without clipping */
+/*ARGSUSED*/
+static void
+FormParagraph(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition from, to, buf[32], *pos;
+#ifndef OLDXAW
+ XawTextPosition endPos = 0;
+ char *lbuf = NULL, *rbuf;
+ TextSrcObject src = (TextSrcObject)ctx->text.source;
+ Cardinal i;
+ Bool undo = src->textSrc.enable_undo && src->textSrc.undo_state == False;
+#endif
+
+ StartAction(ctx, event);
+
+#ifndef OLDXAW
+ pos = XawStackAlloc(sizeof(XawTextPosition) * src->textSrc.num_text, buf);
+ for (i = 0; i < src->textSrc.num_text; i++)
+ pos[i] = ((TextWidget)src->textSrc.text[i])->text.old_insert;
+#else
+ pos = buf;
+ *pos = ctx->text.old_insert;
+#endif
+
+#ifndef OLDXAW
+ if (!GetBlockBoundaries(ctx, &from, &to)) {
+ EndAction(ctx);
+ XawStackFree(pos, buf);
+ return;
+ }
+
+ if (undo) {
+ src->textSrc.undo_state = True;
+ lbuf = _XawTextGetText(ctx, from, to);
+ endPos = ctx->text.lastPos;
+ }
+
+ if (FormRegion(ctx, from, to, pos, src->textSrc.num_text) == XawReplaceError) {
+#else
+ from = SrcScan(ctx->text.source, ctx->text.insertPos,
+ XawstParagraph, XawsdLeft, 1, False);
+ to = SrcScan(ctx->text.source, from,
+ XawstParagraph, XawsdRight, 1, False);
+
+ if (FormRegion(ctx, from, to, pos, 1) == XawReplaceError) {
+#endif
+ XawStackFree(pos, buf);
+ XBell(XtDisplay(w), 0);
+#ifndef OLDXAW
+ if (undo) {
+ src->textSrc.undo_state = False;
+ XtFree(lbuf);
+ }
+#endif
+ }
+#ifndef OLDXAW
+ else if (undo) {
+ /* makes the form-paragraph only one undo/redo step */
+ unsigned llen, rlen, size;
+ XawTextBlock block;
+
+ llen = to - from;
+ rlen = llen + (ctx->text.lastPos - endPos);
+
+ block.firstPos = 0;
+ block.format = _XawTextFormat(ctx);
+
+ rbuf = _XawTextGetText(ctx, from, from + rlen);
+
+ size = XawTextFormat(ctx, XawFmtWide) ? sizeof(wchar_t) : sizeof(char);
+ if (llen != rlen || memcmp(lbuf, rbuf, llen * size)) {
+ block.ptr = lbuf;
+ block.length = llen;
+ _XawTextReplace(ctx, from, from + rlen, &block);
+
+ src->textSrc.undo_state = False;
+ block.ptr = rbuf;
+ block.length = rlen;
+ _XawTextReplace(ctx, from, from + llen, &block);
+ }
+ else
+ src->textSrc.undo_state = False;
+ XtFree(lbuf);
+ XtFree(rbuf);
+ }
+
+ for (i = 0; i < src->textSrc.num_text; i++) {
+ TextWidget tw = (TextWidget)src->textSrc.text[i];
+
+ tw->text.old_insert = tw->text.insertPos = pos[i];
+ _XawTextBuildLineTable(tw, SrcScan((Widget)src, tw->text.lt.top, XawstEOL,
+ XawsdLeft, 1, False), False);
+ tw->text.clear_to_eol = True;
+ }
+#else
+ ctx->text.old_insert = ctx->text.insertPos = *pos;
+ _XawTextBuildLineTable(ctx, SrcScan(ctx->text.source, ctx->text.lt.top,
+ XawstEOL, XawsdLeft, 1, False), False);
+ ctx->text.clear_to_eol = True;
+#endif
+ XawStackFree(pos, buf);
+ ctx->text.showposition = True;
+
+ EndAction(ctx);
+}
+
+/* TransposeCharacters() - action
+ *
+ * Swaps the character to the left of the mark
+ * with the character to the right of the mark */
+/*ARGSUSED*/
+static void
+TransposeCharacters(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextPosition start, end;
+ XawTextBlock text;
+ char *buf;
+ int i, mult = MULT(ctx);
+
+ if (mult < 0) {
+ ctx->text.mult = 1;
+ return;
+ }
+
+ StartAction(ctx, event);
+
+ /* Get bounds. */
+
+ start = SrcScan(ctx->text.source, ctx->text.insertPos, XawstPositions,
+ XawsdLeft, 1, True);
+ end = SrcScan(ctx->text.source, ctx->text.insertPos, XawstPositions,
+ XawsdRight, mult, True);
+
+ /* Make sure we aren't at the very beginning or end of the buffer. */
+
+ if (start == ctx->text.insertPos || end == ctx->text.insertPos) {
+ XBell(XtDisplay(w), 0); /* complain. */
+ EndAction(ctx);
+ return;
+ }
+
+ ctx->text.from_left = -1;
+ ctx->text.insertPos = end;
+
+ text.firstPos = 0;
+ text.format = _XawTextFormat(ctx);
+
+ /* Retrieve text and swap the characters. */
+ if (text.format == XawFmtWide) {
+ wchar_t wc;
+ wchar_t *wbuf;
+
+ wbuf = (wchar_t*)_XawTextGetText(ctx, start, end);
+ text.length = wcslen(wbuf);
+ wc = wbuf[0];
+ for (i = 1; i < text.length; i++)
+ wbuf[i - 1] = wbuf[i];
+ wbuf[i - 1] = wc;
+ buf = (char*)wbuf; /* so that it gets assigned and freed */
+ }
+ else { /* thus text.format == XawFmt8Bit */
+ char c;
+
+ buf = _XawTextGetText(ctx, start, end);
+ text.length = strlen(buf);
+ c = buf[0];
+ for (i = 1; i < text.length; i++)
+ buf[i - 1] = buf[i];
+ buf[i - 1] = c;
+ }
+
+ text.ptr = buf;
+
+ /* Store new text in source. */
+
+ if (_XawTextReplace (ctx, start, end, &text))
+ XBell(XtDisplay(w), 0);
+ XtFree((char *)buf);
+ EndAction(ctx);
+}
+
+#ifndef OLDXAW
+/*ARGSUSED*/
+static void
+Undo(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ int mul = MULT(ctx);
+ Bool toggle = False;
+
+ if (mul < 0) {
+ toggle = True;
+ _XawTextSrcToggleUndo((TextSrcObject)ctx->text.source);
+ ctx->text.mult = mul = -mul;
+ }
+
+ StartAction(ctx, event);
+ for (; mul; --mul)
+ if (!_XawTextSrcUndo((TextSrcObject)ctx->text.source, &ctx->text.insertPos))
+ break;
+ ctx->text.showposition = True;
+
+ if (toggle)
+ _XawTextSrcToggleUndo((TextSrcObject)ctx->text.source);
+ EndAction(ctx);
+}
+#endif
+
+/* NoOp() - action
+ * This action performs no action, and allows the user or
+ * application programmer to unbind a translation.
+ *
+ * Note: If the parameter list contains the string "RingBell" then
+ * this action will ring the bell.
+ */
+/*ARGSUSED*/
+static void
+NoOp(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ if (*num_params != 1)
+ return;
+
+ switch(params[0][0]) {
+ case 'R':
+ case 'r':
+ XBell(XtDisplay(w), 0);
+ /*FALLTROUGH*/
+ default:
+ break;
+ }
+}
+
+/* Reconnect() - action
+ * This reconnects to the input method. The user will typically call
+ * this action if/when connection has been severed, or when the app
+ * was started up before an IM was started up
+ */
+/*ARGSUSED*/
+static void
+Reconnect(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ _XawImReconnect(w);
+}
+
+#define CAPITALIZE 1
+#define DOWNCASE 2
+#define UPCASE 3
+
+#ifdef NO_LIBC_I18N
+static int
+ToLower(int ch)
+{
+ char buf[2];
+
+ *buf = ch;
+ XmuNCopyISOLatin1Lowered(buf, buf, sizeof(buf));
+
+ return (*buf);
+}
+
+static int
+ToUpper(int ch)
+{
+ char buf[2];
+
+ *buf = ch;
+ XmuNCopyISOLatin1Uppered(buf, buf, sizeof(buf));
+
+ return (*buf);
+}
+
+static int
+IsAlnum(int ch)
+{
+ return ((ch >= '0' && ch <= '9') || ToUpper(ch) != ch || ToLower(ch) != ch);
+}
+
+static int
+IsLower(int ch)
+{
+ char upbuf[2];
+ char lobuf[2];
+
+ *upbuf = *lobuf = ch;
+ XmuNCopyISOLatin1Lowered(lobuf, lobuf, sizeof(lobuf));
+ XmuNCopyISOLatin1Uppered(upbuf, upbuf, sizeof(upbuf));
+
+ return (*lobuf != *upbuf && ch == *lobuf);
+}
+
+static int
+IsUpper(int ch)
+{
+ char upbuf[2];
+ char lobuf[2];
+
+ *upbuf = *lobuf = ch;
+ XmuNCopyISOLatin1Lowered(lobuf, lobuf, sizeof(lobuf));
+ XmuNCopyISOLatin1Uppered(upbuf, upbuf, sizeof(upbuf));
+
+ return (*lobuf != *upbuf && ch == *upbuf);
+}
+#else
+#define ToLower tolower
+#define ToUpper toupper
+#define IsAlnum isalnum
+#define IsLower islower
+#define IsUpper isupper
+#endif
+
+static void
+CaseProc(Widget w, XEvent *event, int cmd)
+{
+ TextWidget ctx = (TextWidget)w;
+ short mul = MULT(ctx);
+ XawTextPosition left, right;
+ XawTextBlock block;
+ Bool changed = False;
+ unsigned char ch, mb[sizeof(wchar_t)];
+ int i, count;
+
+ if (mul > 0)
+ right = SrcScan(ctx->text.source, left = ctx->text.insertPos,
+ XawstAlphaNumeric, XawsdRight, mul, False);
+ else
+ left = SrcScan(ctx->text.source, right = ctx->text.insertPos,
+ XawstAlphaNumeric, XawsdLeft, 1 + -mul, False);
+ block.firstPos = 0;
+ block.format = _XawTextFormat(ctx);
+ block.length = right - left;
+ block.ptr = _XawTextGetText(ctx, left, right);
+
+ count = 0;
+ if (block.format == XawFmt8Bit)
+ for (i = 0; i < block.length; i++) {
+ if (!IsAlnum(*mb = (unsigned char)block.ptr[i]))
+ count = 0;
+ else if (++count == 1 || cmd != CAPITALIZE) {
+ ch = cmd == DOWNCASE ? ToLower(*mb) : ToUpper(*mb);
+ if (ch != *mb) {
+ changed = True;
+ block.ptr[i] = ch;
+ }
+ }
+ else if (cmd == CAPITALIZE) {
+ if ((ch = ToLower(*mb)) != *mb) {
+ changed = True;
+ block.ptr[i] = ch;
+ }
+ }
+ }
+ else
+ for (i = 0; i < block.length; i++) {
+ wctomb((char*)mb, ((wchar_t*)block.ptr)[i]);
+ if (!IsAlnum(*mb))
+ count = 0;
+ else if (++count == 1 || cmd != CAPITALIZE) {
+ ch = cmd == DOWNCASE ? ToLower(*mb) : ToUpper(*mb);
+ if (ch != *mb) {
+ changed = True;
+ ((wchar_t*)block.ptr)[i] = _Xaw_atowc(ch);
+ }
+ }
+ else if (cmd == CAPITALIZE) {
+ if ((ch = ToLower(*mb)) != *mb) {
+ changed = True;
+ ((wchar_t*)block.ptr)[i] = _Xaw_atowc(ch);
+ }
+ }
+ }
+
+ StartAction(ctx, event);
+ if (changed && _XawTextReplace(ctx, left, right, &block) != XawEditDone)
+ XBell(XtDisplay(ctx), 0);
+ ctx->text.insertPos = right;
+ EndAction(ctx);
+
+ XtFree(block.ptr);
+}
+
+/*ARGSUSED*/
+static void
+CapitalizeWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CaseProc(w, event, CAPITALIZE);
+}
+
+/*ARGSUSED*/
+static void
+DowncaseWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CaseProc(w, event, DOWNCASE);
+}
+
+/*ARGSUSED*/
+static void
+UpcaseWord(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ CaseProc(w, event, UPCASE);
+}
+#undef CAPITALIZE
+#undef DOWNCASE
+#undef UPCASE
+
+XtActionsRec _XawTextActionsTable[] = {
+ /* motion */
+ {"forward-character", MoveForwardChar},
+ {"backward-character", MoveBackwardChar},
+ {"forward-word", MoveForwardWord},
+ {"backward-word", MoveBackwardWord},
+ {"forward-paragraph", MoveForwardParagraph},
+ {"backward-paragraph", MoveBackwardParagraph},
+ {"beginning-of-line", MoveToLineStart},
+ {"end-of-line", MoveToLineEnd},
+ {"next-line", MoveNextLine},
+ {"previous-line", MovePreviousLine},
+ {"next-page", MoveNextPage},
+ {"previous-page", MovePreviousPage},
+ {"beginning-of-file", MoveBeginningOfFile},
+ {"end-of-file", MoveEndOfFile},
+ {"scroll-one-line-up", ScrollOneLineUp},
+ {"scroll-one-line-down", ScrollOneLineDown},
+
+ /* delete */
+ {"delete-next-character", DeleteForwardChar},
+ {"delete-previous-character", DeleteBackwardChar},
+ {"delete-next-word", DeleteForwardWord},
+ {"delete-previous-word", DeleteBackwardWord},
+ {"delete-selection", DeleteCurrentSelection},
+ {"delete", Delete},
+
+ /* kill */
+ {"kill-word", KillForwardWord},
+ {"backward-kill-word", KillBackwardWord},
+ {"kill-selection", KillCurrentSelection},
+ {"kill-to-end-of-line", KillToEndOfLine},
+ {"kill-to-end-of-paragraph", KillToEndOfParagraph},
+
+ /* new line */
+ {"newline-and-indent", InsertNewLineAndIndent},
+ {"newline-and-backup", InsertNewLineAndBackup},
+ {"newline", InsertNewLine},
+
+ /* selection */
+ {"select-word", SelectWord},
+ {"select-all", SelectAll},
+ {"select-start", SelectStart},
+ {"select-adjust", SelectAdjust},
+ {"select-end", SelectEnd},
+ {"select-save", SelectSave},
+ {"extend-start", ExtendStart},
+ {"extend-adjust", ExtendAdjust},
+ {"extend-end", ExtendEnd},
+ {"insert-selection", InsertSelection},
+
+ /* miscellaneous */
+ {"redraw-display", RedrawDisplay},
+ {"insert-file", _XawTextInsertFile},
+ {"search", _XawTextSearch},
+ {"insert-char", InsertChar},
+ {"insert-string", InsertString},
+ {"focus-in", TextFocusIn},
+ {"focus-out", TextFocusOut},
+ {"enter-window", TextEnterWindow},
+ {"leave-window", TextLeaveWindow},
+ {"display-caret", DisplayCaret},
+ {"multiply", Multiply},
+ {"form-paragraph", FormParagraph},
+ {"transpose-characters", TransposeCharacters},
+ {"set-keyboard-focus", SetKeyboardFocus},
+#ifndef OLDXAW
+ {"numeric", Numeric},
+ {"undo", Undo},
+ {"keyboard-reset", KeyboardReset},
+ {"kill-ring-yank", KillRingYank},
+ {"toggle-overwrite", ToggleOverwrite},
+ {"indent", Indent},
+#endif
+ {"no-op", NoOp},
+
+ /* case transformations */
+ {"capitalize-word", CapitalizeWord},
+ {"downcase-word", DowncaseWord},
+ {"upcase-word", UpcaseWord},
+
+ /* action to bind translations for text dialogs */
+ {"InsertFileAction", _XawTextInsertFileAction},
+ {"DoSearchAction", _XawTextDoSearchAction},
+ {"DoReplaceAction", _XawTextDoReplaceAction},
+ {"SetField", _XawTextSetField},
+ {"PopdownSearchAction", _XawTextPopdownSearchAction},
+
+ /* reconnect to Input Method */
+ {"reconnect-im", Reconnect} /* Li Yuhong, Omron KK, 1991 */
+};
+
+Cardinal _XawTextActionsTableCount = XtNumber(_XawTextActionsTable);
diff --git a/libXaw/src/TextPop.c b/libXaw/src/TextPop.c
index dd67ef4a1..b96752aa0 100644
--- a/libXaw/src/TextPop.c
+++ b/libXaw/src/TextPop.c
@@ -1,1554 +1,1550 @@
-/* $Xorg: TextPop.c,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $ */
-
-/*
-
-Copyright 1989, 1994, 1998 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.
-
-*/
-
-/* $XFree86: xc/lib/Xaw/TextPop.c,v 1.20tsi Exp $ */
-
-/*
- * This file is broken up into three sections one dealing with
- * each of the three popups created here:
- *
- * FileInsert, Search, and Replace.
- *
- * There is also a section at the end for utility functions
- * used by all more than one of these dialogs.
- *
- * The following functions are the only non-static ones defined
- * in this module. They are located at the begining of the
- * section that contains this dialog box that uses them.
- *
- * void _XawTextInsertFileAction(w, event, params, num_params);
- * void _XawTextDoSearchAction(w, event, params, num_params);
- * void _XawTextDoReplaceAction(w, event, params, num_params);
- * void _XawTextInsertFile(w, event, params, num_params);
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <errno.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Shell.h>
-#include <X11/Xos.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/TextP.h>
-#include <X11/Xaw/AsciiText.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/Command.h>
-#include <X11/Xaw/Form.h>
-#include <X11/Xaw/Toggle.h>
-#include "XawI18n.h"
-
-static char* INSERT_FILE = "Enter Filename:";
-static char* SEARCH_LABEL_1 = "Use <Tab> to change fields.";
-static char* SEARCH_LABEL_2 = "Use ^q<Tab> for <Tab>.";
-static char* DISMISS_NAME = "cancel";
-#define DISMISS_NAME_LEN 6
-static char* FORM_NAME = "form";
-static char* LABEL_NAME = "label";
-static char* TEXT_NAME = "text";
-
-#define R_OFFSET 1
-
-typedef void (*AddFunc)(Widget, char*, Widget);
-
-/*
- * Prototypes
- */
-static void _SetField(Widget, Widget);
-static void AddSearchChildren(Widget, char*, Widget);
-static void AddInsertFileChildren(Widget, char*, Widget);
-static void CenterWidgetOnPoint(Widget, XEvent*);
-static Widget CreateDialog(Widget, String, String, AddFunc);
-static void DoInsert(Widget, XtPointer, XtPointer);
-static void DoReplaceAll(Widget, XtPointer, XtPointer);
-static void DoReplaceOne(Widget, XtPointer, XtPointer);
-static Bool DoSearch(struct SearchAndReplace*);
-static Widget GetShell(Widget);
-static String GetString(Widget);
-static String GetStringRaw(Widget);
-static void InitializeSearchWidget(struct SearchAndReplace*,
- XawTextScanDirection, Bool);
-static Bool InParams(String, String*, unsigned int);
-static Bool InsertFileNamed(Widget, char*);
-static void PopdownFileInsert(Widget, XtPointer, XtPointer);
-static void PopdownSearch(Widget, XtPointer, XtPointer);
-static Bool Replace(struct SearchAndReplace*, Bool, Bool);
-static void SearchButton(Widget, XtPointer, XtPointer);
-static void SetResource(Widget, char*, XtArgVal);
-static Bool SetResourceByName(Widget, char*, char*, XtArgVal);
-static void SetSearchLabels(struct SearchAndReplace*, String, String, Bool);
-static void SetWMProtocolTranslations(Widget);
-
-/*
- * Actions
- */
-static void WMProtocols(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * External Actions
- */
-void _XawTextDoReplaceAction(Widget, XEvent*, String*, Cardinal*);
-void _XawTextDoSearchAction(Widget, XEvent*, String*, Cardinal*);
-void _XawTextInsertFile(Widget, XEvent*, String*, Cardinal*);
-void _XawTextInsertFileAction(Widget, XEvent*, String*, Cardinal*);
-void _XawTextPopdownSearchAction(Widget, XEvent*, String*, Cardinal*);
-void _XawTextSearch(Widget, XEvent*, String*, Cardinal*);
-void _XawTextSetField(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * From Text.c
- */
-char *_XawTextGetText(TextWidget, XawTextPosition, XawTextPosition);
-void _XawTextShowPosition(TextWidget);
-
-/*
- * Initialization
- */
-static char radio_trans_string[] =
-"<Btn1Down>,<Btn1Up>:" "set() notify()\n"
-;
-
-static char search_text_trans[] =
-"~s<Key>Return:" "DoSearchAction(Popdown)\n"
-"s<Key>Return:" "DoSearchAction() SetField(Replace)\n"
-"c<Key>c:" "PopdownSearchAction()\n"
-"<Btn1Down>:" "select-start() SetField(Search)\n"
-"<Key>Tab:" "DoSearchAction() SetField(Replace)\n"
-;
-
-static char rep_text_trans[] =
-"~s<Key>Return:" "DoReplaceAction(Popdown)\n"
-"s<Key>Return:" "SetField(Search)\n"
-"c<Key>c:" "PopdownSearchAction()\n"
-"<Btn1Down>:" "select-start() DoSearchAction() SetField(Replace)\n"
-"<Key>Tab:" "SetField(Search)\n"
-;
-
-/*
- * Implementation
- */
-/*
- * This section of the file contains all the functions that
- * the file insert dialog box uses
- */
-
-/*
- * Function:
- * _XawTextInsertFileAction
- *
- * Description:
- * Action routine that can be bound to dialog box's Text Widget
- * that will insert a file into the main Text Widget.
- */
-/*ARGSUSED*/
-void
-_XawTextInsertFileAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- DoInsert(w, (XtPointer)XtParent(XtParent(XtParent(w))), NULL);
-}
-
-/*
- * Function:
- * _XawTextInsertFile
- *
- * Parameters:
- * w - text widget
- * event - X Event (used to get x and y location)
- * params - parameter list
- * num_params - ""
- *
- * Description:
- * Action routine that can be bound to the text widget
- * it will popup the insert file dialog box.
- *
- * Note:
- * The parameter list may contain one entry
- *
- * Entry:
- * This entry is optional and contains the value of the default
- * file to insert
- */
-void
-_XawTextInsertFile(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- char *ptr;
- XawTextEditType edit_mode;
- Arg args[1];
-
- XtSetArg(args[0], XtNeditType, &edit_mode);
- XtGetValues(ctx->text.source, args, 1);
-
- if (edit_mode != XawtextEdit) {
- XBell(XtDisplay(w), 0);
- return;
- }
-
- if (*num_params == 0)
- ptr = "";
- else
- ptr = params[0];
-
- if (!ctx->text.file_insert) {
- ctx->text.file_insert = CreateDialog(w, ptr, "insertFile",
- AddInsertFileChildren);
- XtRealizeWidget(ctx->text.file_insert);
- SetWMProtocolTranslations(ctx->text.file_insert);
- }
-
- CenterWidgetOnPoint(ctx->text.file_insert, event);
- XtPopup(ctx->text.file_insert, XtGrabNone);
-}
-
-/*
- * Function:
- * PopdownFileInsert
- *
- * Parameters:
- * w - widget that caused this action
- * closure - pointer to the main text widget that popped up this dialog
- * call_data - (not used)
- *
- * Description:
- * Pops down the file insert button
- */
-/*ARGSUSED*/
-static void
-PopdownFileInsert(Widget w, XtPointer closure, XtPointer call_data)
-{
- TextWidget ctx = (TextWidget)closure;
-
- XtPopdown(ctx->text.file_insert);
- (void)SetResourceByName(ctx->text.file_insert, LABEL_NAME,
- XtNlabel, (XtArgVal)INSERT_FILE);
-}
-
-/*
- * Function:
- * DoInsert
- *
- * Parameters:
- * w - widget that activated this callback
- * closure - pointer to the text widget to insert the file into
- *
- * Description:
- * Actually insert the file named in the text widget of the file dialog
- */
-/*ARGSUSED*/
-static void
-DoInsert(Widget w, XtPointer closure, XtPointer call_data)
-{
- TextWidget ctx = (TextWidget)closure;
- char buf[BUFSIZ], msg[BUFSIZ];
- Widget temp_widget;
-
- (void)XmuSnprintf(buf, sizeof(buf), "%s.%s", FORM_NAME, TEXT_NAME);
- if ((temp_widget = XtNameToWidget(ctx->text.file_insert, buf)) == NULL) {
- (void)strcpy(msg,
- "Error: Could not get text widget from file insert popup");
- }
- else if (InsertFileNamed((Widget)ctx, GetString(temp_widget))) {
- PopdownFileInsert(w, closure, call_data);
- return;
- }
- else
- (void)XmuSnprintf(msg, sizeof(msg), "Error: %s", strerror(errno));
-
- (void)SetResourceByName(ctx->text.file_insert,
- LABEL_NAME, XtNlabel, (XtArgVal)msg);
- XBell(XtDisplay(w), 0);
-}
-
-/*
- * Function:
- * InsertFileNamed
- *
- * Parameters:
- * tw - text widget to insert this file into
- * str - name of the file to insert
- *
- * Description:
- * Inserts a file into the text widget.
- *
- * Returns:
- * True if the insert was sucessful, False otherwise.
- */
-static Bool
-InsertFileNamed(Widget tw, char *str)
-{
- FILE *file;
- XawTextBlock text;
- XawTextPosition pos;
-
- if (str == NULL || strlen(str) == 0 || (file = fopen(str, "r")) == NULL)
- return (False);
-
- pos = XawTextGetInsertionPoint(tw);
-
- fseek(file, 0L, 2);
-
- text.firstPos = 0;
- text.length = ftell(file);
- text.ptr = XtMalloc(text.length + 1);
- text.format = XawFmt8Bit;
-
- fseek(file, 0L, 0);
- if (fread(text.ptr, 1, text.length, file) != text.length)
- XtErrorMsg("readError", "insertFileNamed", "XawError",
- "fread returned error", NULL, NULL);
-
- if (XawTextReplace(tw, pos, pos, &text) != XawEditDone) {
- XtFree(text.ptr);
- fclose(file);
- return (False);
- }
- pos += text.length;
- XtFree(text.ptr);
- fclose(file);
- XawTextSetInsertionPoint(tw, pos);
- _XawTextShowPosition((TextWidget)tw);
-
- return (True);
-}
-
-/*
- * Function:
- * AddInsertFileChildren
- *
- * Parameters:
- * form - form widget for the insert dialog widget
- * ptr - pointer to the initial string for the Text Widget
- * tw - main text widget
- *
- * Description:
- * Adds all children to the InsertFile dialog widget.
- */
-static void
-AddInsertFileChildren(Widget form, char *ptr, Widget tw)
-{
- Arg args[10];
- Cardinal num_args;
- Widget label, text, cancel, insert;
- XtTranslations trans;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, INSERT_FILE); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNresizable, True); num_args++;
- XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
- label = XtCreateManagedWidget(LABEL_NAME, labelWidgetClass, form,
- args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNfromVert, label); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
- XtSetArg(args[num_args], XtNeditType, XawtextEdit); num_args++;
- XtSetArg(args[num_args], XtNresizable, True); num_args++;
- XtSetArg(args[num_args], XtNstring, ptr); num_args++;
- text = XtCreateManagedWidget(TEXT_NAME, asciiTextWidgetClass, form,
- args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Insert File"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, text); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- insert = XtCreateManagedWidget("insert", commandWidgetClass, form,
- args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Cancel"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, text); num_args++;
- XtSetArg(args[num_args], XtNfromHoriz, insert); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- cancel = XtCreateManagedWidget(DISMISS_NAME, commandWidgetClass, form,
- args, num_args);
-
- XtAddCallback(cancel, XtNcallback, PopdownFileInsert, (XtPointer)tw);
- XtAddCallback(insert, XtNcallback, DoInsert, (XtPointer)tw);
-
- XtSetKeyboardFocus(form, text);
-
- /*
- * Bind <CR> to insert file
- */
- trans = XtParseTranslationTable("<Key>Return:InsertFileAction()");
- XtOverrideTranslations(text, trans);
-}
-
-/*
- * This section of the file contains all the functions that
- * the search dialog box uses
- */
-/*
- * Function:
- * _XawTextDoSearchAction
- *
- * Description:
- * Action routine that can be bound to dialog box's Text Widget that
- * will search for a string in the main Text Widget.
- *
- * Note:
- * If the search was sucessful and the argument popdown is passed to
- * this action routine then the widget will automatically popdown the
- * search widget
- */
-/*ARGSUSED*/
-void
-_XawTextDoSearchAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- TextWidget tw = (TextWidget)XtParent(XtParent(XtParent(w)));
- Bool popdown = False;
-
- if (*num_params == 1 && (params[0][0] == 'p' || params[0][0] == 'P'))
- popdown = True;
-
- if (DoSearch(tw->text.search) && popdown)
- PopdownSearch(w, (XtPointer)tw->text.search, NULL);
-}
-
-/*
- * Function:
- * _XawTextPopdownSearchAction
- *
- * Description:
- * Action routine that can be bound to dialog box's Text Widget that
- * will popdown the search widget.
- */
-/*ARGSUSED*/
-void
-_XawTextPopdownSearchAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- TextWidget tw = (TextWidget)XtParent(XtParent(XtParent(w)));
-
- PopdownSearch(w, (XtPointer)tw->text.search, NULL);
-}
-
-/*
- * Function:
- * PopdownSearch
- *
- * Parameters:
- * w - (not used)
- * closure - pointer to the search structure
- * call_data - (not used)
- *
- * Description:
- * Pops down the search widget and resets it
- */
-/*ARGSUSED*/
-static void
-PopdownSearch(Widget w, XtPointer closure, XtPointer call_data)
-{
- struct SearchAndReplace *search = (struct SearchAndReplace *)closure;
-
- XtPopdown(search->search_popup);
- SetSearchLabels(search, SEARCH_LABEL_1, SEARCH_LABEL_2, False);
-}
-
-/*
- * Function:
- * SearchButton
- *
- * Arguments:
- * w - (not used)
- * closure - pointer to the search info
- * call_data - (not used)
- *
- * Description:
- * Performs a search when the button is clicked.
- */
-/*ARGSUSED*/
-static void
-SearchButton(Widget w, XtPointer closure, XtPointer call_data)
-{
- (void)DoSearch((struct SearchAndReplace *)closure);
-}
-
-/*
- * Function:
- * _XawTextSearch
- *
- * Parameters:
- * w - text widget
- * event - X Event (used to get x and y location)
- * params - parameter list
- * num_params - ""
- *
- * Description:
- * Action routine that can be bound to the text widget
- * it will popup the search dialog box.
- *
- * Note:
- * The parameter list contains one or two entries that may be
- * the following.
- *
- * First Entry:
- * The first entry is the direction to search by default.
- * This arguement must be specified and may have a value of
- * "left" or "right".
- *
- * Second Entry:
- * This entry is optional and contains the value of the default
- * string to search for.
- */
-
-#define SEARCH_HEADER "Text Widget - Search():"
-void
-_XawTextSearch(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)w;
- XawTextScanDirection dir;
- char *ptr, buf[BUFSIZ];
- XawTextEditType edit_mode;
- Arg args[1];
- wchar_t wcs[1];
-
- if (*num_params < 1 || *num_params > 2) {
- (void)XmuSnprintf(buf, sizeof(buf), "%s %s\n%s", SEARCH_HEADER,
- "This action must have only",
- "one or two parameters");
- XtAppWarning(XtWidgetToApplicationContext(w), buf);
- return;
- }
-
- if (*num_params == 2)
- ptr = params[1];
- else if (XawTextFormat(ctx, XawFmtWide)) {
- /* This just does the equivalent of
- ptr = ""L, a waste because params[1] isnt W aligned */
- ptr = (char *)wcs;
- wcs[0] = 0;
- }
- else
- ptr = "";
-
- switch(params[0][0]) {
- case 'b': /* Left */
- case 'B':
- dir = XawsdLeft;
- break;
- case 'f': /* Right */
- case 'F':
- dir = XawsdRight;
- break;
- default:
- (void)XmuSnprintf(buf, sizeof(buf), "%s %s\n%s", SEARCH_HEADER,
- "The first parameter must be",
- "Either 'backward' or 'forward'");
- XtAppWarning(XtWidgetToApplicationContext(w), buf);
- return;
- }
-
- if (ctx->text.search== NULL) {
- ctx->text.search = XtNew(struct SearchAndReplace);
- ctx->text.search->search_popup = CreateDialog(w, ptr, "search",
- AddSearchChildren);
- XtRealizeWidget(ctx->text.search->search_popup);
- SetWMProtocolTranslations(ctx->text.search->search_popup);
- }
- else if (*num_params > 1)
- XtVaSetValues(ctx->text.search->search_text, XtNstring, ptr, NULL);
-
- XtSetArg(args[0], XtNeditType,&edit_mode);
- XtGetValues(ctx->text.source, args, 1);
-
- InitializeSearchWidget(ctx->text.search, dir, (edit_mode == XawtextEdit));
-
- CenterWidgetOnPoint(ctx->text.search->search_popup, event);
- XtPopup(ctx->text.search->search_popup, XtGrabNone);
-}
-
-/*
- * Function:
- * InitializeSearchWidget
- *
- * Parameters:
- * search - search widget structure
- * dir - direction to search
- * replace_active - state of the sensitivity for the replace button
- *
- * Description:
- * This function initializes the search widget and
- * is called each time the search widget is poped up.
- */
-static void
-InitializeSearchWidget(struct SearchAndReplace *search,
- XawTextScanDirection dir, Bool replace_active)
-{
- SetResource(search->rep_one, XtNsensitive, (XtArgVal)replace_active);
- SetResource(search->rep_all, XtNsensitive, (XtArgVal)replace_active);
- SetResource(search->rep_label, XtNsensitive, (XtArgVal)replace_active);
- SetResource(search->rep_text, XtNsensitive, (XtArgVal)replace_active);
-
- switch (dir) {
- case XawsdLeft:
- SetResource(search->left_toggle, XtNstate, (XtArgVal)True);
- break;
- case XawsdRight:
- SetResource(search->right_toggle, XtNstate, (XtArgVal)True);
- break;
- }
-}
-
-/*
- * Function:
- * AddSearchChildren
- *
- * Parameters:
- * form - form widget for the search widget
- * ptr - pointer to the initial string for the Text Widget
- * tw - main text widget
- *
- * Description:
- * Adds all children to the Search Dialog Widget.
- */
-static void
-AddSearchChildren(Widget form, char *ptr, Widget tw)
-{
- Arg args[10];
- Cardinal num_args;
- Widget cancel, search_button, s_label, s_text, r_text;
- XtTranslations trans;
- struct SearchAndReplace *search = ((TextWidget)tw)->text.search;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNresizable, True); num_args++;
- XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
- search->label1 = XtCreateManagedWidget("label1", labelWidgetClass, form,
- args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNfromVert, search->label1); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNresizable, True); num_args++;
- XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
- search->label2 = XtCreateManagedWidget("label2", labelWidgetClass, form,
- args, num_args);
-
- /*
- * We need to add R_OFFSET to the radio_data, because the value zero (0)
- * has special meaning
- */
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Backward"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, search->label2); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNradioData, (XPointer)XawsdLeft + R_OFFSET);
- num_args++;
- search->left_toggle = XtCreateManagedWidget("backwards", toggleWidgetClass,
- form, args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Forward"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, search->label2); num_args++;
- XtSetArg(args[num_args], XtNfromHoriz, search->left_toggle); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNradioGroup, search->left_toggle); num_args++;
- XtSetArg(args[num_args], XtNradioData, (XPointer)XawsdRight + R_OFFSET);
- num_args++;
- search->right_toggle = XtCreateManagedWidget("forwards", toggleWidgetClass,
- form, args, num_args);
-
- {
- XtTranslations radio_translations;
-
- radio_translations = XtParseTranslationTable(radio_trans_string);
- XtOverrideTranslations(search->left_toggle, radio_translations);
- XtOverrideTranslations(search->right_toggle, radio_translations);
- }
-
-#ifndef OLDXAW
- if (XawTextFormat((TextWidget)tw, XawFmt8Bit)) {
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Case Sensitive"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, search->label2); num_args++;
- XtSetArg(args[num_args], XtNfromHoriz, search->right_toggle); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNstate, True); num_args++;
- search->case_sensitive = XtCreateManagedWidget("case", toggleWidgetClass,
- form, args, num_args);
- }
- else
- search->case_sensitive = NULL;
-#endif
-
- num_args = 0;
- XtSetArg(args[num_args], XtNfromVert, search->left_toggle); num_args++;
- XtSetArg(args[num_args], XtNlabel, "Search for: "); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNborderWidth, 0 ); num_args++;
- s_label = XtCreateManagedWidget("searchLabel", labelWidgetClass, form,
- args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNfromVert, search->left_toggle); num_args++;
- XtSetArg(args[num_args], XtNfromHoriz, s_label); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
- XtSetArg(args[num_args], XtNeditType, XawtextEdit); num_args++;
- XtSetArg(args[num_args], XtNresizable, True); num_args++;
- XtSetArg(args[num_args], XtNstring, ptr); num_args++;
- s_text = XtCreateManagedWidget("searchText", asciiTextWidgetClass, form,
- args, num_args);
- search->search_text = s_text;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNfromVert, s_text); num_args++;
- XtSetArg(args[num_args], XtNlabel, "Replace with:"); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
- search->rep_label = XtCreateManagedWidget("replaceLabel", labelWidgetClass,
- form, args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNfromHoriz, s_label); num_args++;
- XtSetArg(args[num_args], XtNfromVert, s_text); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
- XtSetArg(args[num_args], XtNeditType, XawtextEdit); num_args++;
- XtSetArg(args[num_args], XtNresizable, True); num_args++;
- XtSetArg(args[num_args], XtNstring, ""); num_args++;
- r_text = XtCreateManagedWidget("replaceText", asciiTextWidgetClass,
- form, args, num_args);
- search->rep_text = r_text;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Search"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, r_text); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- search_button = XtCreateManagedWidget("search", commandWidgetClass, form,
- args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Replace"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, r_text); num_args++;
- XtSetArg(args[num_args], XtNfromHoriz, search_button); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- search->rep_one = XtCreateManagedWidget("replaceOne", commandWidgetClass,
- form, args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Replace All"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, r_text); num_args++;
- XtSetArg(args[num_args], XtNfromHoriz, search->rep_one); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- search->rep_all = XtCreateManagedWidget("replaceAll", commandWidgetClass,
- form, args, num_args);
-
- num_args = 0;
- XtSetArg(args[num_args], XtNlabel, "Cancel"); num_args++;
- XtSetArg(args[num_args], XtNfromVert, r_text); num_args++;
- XtSetArg(args[num_args], XtNfromHoriz, search->rep_all); num_args++;
- XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
- XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
- cancel = XtCreateManagedWidget(DISMISS_NAME, commandWidgetClass, form,
- args, num_args);
-
- XtAddCallback(search_button, XtNcallback, SearchButton, (XtPointer)search);
- XtAddCallback(search->rep_one, XtNcallback, DoReplaceOne, (XtPointer)search);
- XtAddCallback(search->rep_all, XtNcallback, DoReplaceAll, (XtPointer)search);
- XtAddCallback(cancel, XtNcallback, PopdownSearch, (XtPointer)search);
-
- /*
- * Initialize the text entry fields
- */
- {
- Pixel color;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNbackground, &color); num_args++;
- XtGetValues(search->rep_text, args, num_args);
- num_args = 0;
- XtSetArg(args[num_args], XtNborderColor, color); num_args++;
- XtSetValues(search->rep_text, args, num_args);
- XtSetKeyboardFocus(form, search->search_text);
- }
-
- SetSearchLabels(search, SEARCH_LABEL_1, SEARCH_LABEL_2, False);
-
- /*
- * Bind Extra translations
- */
- trans = XtParseTranslationTable(search_text_trans);
- XtOverrideTranslations(search->search_text, trans);
-
- trans = XtParseTranslationTable(rep_text_trans);
- XtOverrideTranslations(search->rep_text, trans);
-}
-
-/*
- * Function:
- * DoSearch
- *
- * Parameters:
- * search - search structure
- *
- * Description:
- * Performs a search
- *
- * Returns:
- * True if sucessful
- */
-/*ARGSUSED*/
-static Bool
-DoSearch(struct SearchAndReplace *search)
-{
- char msg[37];
- Widget tw = XtParent(search->search_popup);
- XawTextPosition pos;
- XawTextScanDirection dir;
- XawTextBlock text;
- TextWidget ctx = (TextWidget)tw;
-
- text.firstPos = 0;
- text.ptr = GetStringRaw(search->search_text);
- if ((text.format = _XawTextFormat(ctx)) == XawFmtWide)
- text.length = wcslen((wchar_t*)text.ptr);
- else {
- text.length = strlen(text.ptr);
-
-#ifndef OLDXAW
- if (search->case_sensitive) {
- /* text.firstPos isn't useful here, so I'll use it as an
- * options flag.
- */
- Arg args[1];
- Boolean case_sensitive;
-
- XtSetArg(args[0], XtNstate, &case_sensitive);
- XtGetValues(search->case_sensitive, args, 1);
- text.firstPos = !case_sensitive;
- }
-#endif /* OLDXAW */
- }
-
- dir = (XawTextScanDirection)(unsigned long)
- ((XPointer)XawToggleGetCurrent(search->left_toggle) - R_OFFSET);
-
- pos = XawTextSearch(tw, dir, &text);
-
- /* The Raw string in find.ptr may be WC I can't use here, so I re - call
- GetString to get a tame version */
-
- if (pos == XawTextSearchError) {
- char *ptr;
- int len;
-
- ptr = GetString(search->search_text);
- len = strlen(ptr);
- (void)XmuSnprintf(msg, sizeof(msg), "%s", ptr);
-
- ptr = strchr(msg, '\n');
- if (ptr != NULL || sizeof(msg) - 1 < len) {
- if (ptr != NULL)
- len = ptr - msg + 4;
- else
- len = strlen(msg);
-
- if (len < 4)
- strcpy(msg, "...");
- else
- strcpy(msg + len - 4, "...");
- }
- XawTextUnsetSelection(tw);
- SetSearchLabels(search, "Could not find string", msg, True);
-
- return (False);
- }
- XawTextDisableRedisplay(tw);
- XawTextSetSelection(tw, pos, pos + text.length);
- search->selection_changed = False; /* selection is good */
-
- if (dir == XawsdRight)
- XawTextSetInsertionPoint(tw, pos + text.length);
- else
- XawTextSetInsertionPoint(tw, pos);
- _XawTextShowPosition(ctx);
- XawTextEnableRedisplay(tw);
-
- return (True);
-}
-
-/*
- * This section of the file contains all the functions that
- * the replace dialog box uses
- */
-/*
- * Function:
- * _XawTextDoReplaceAction
- *
- * Description:
- * Action routine that can be bound to dialog box's
- * Text Widget that will replace a string in the main Text Widget.
- */
-/*ARGSUSED*/
-void
-_XawTextDoReplaceAction(Widget w, XEvent *event,
- String *params, Cardinal *num_params)
-{
- TextWidget ctx = (TextWidget)XtParent(XtParent(XtParent(w)));
- Bool popdown = False;
-
- if (*num_params == 1 && (params[0][0] == 'p' || params[0][0] == 'P'))
- popdown = True;
-
- if (Replace( ctx->text.search, True, popdown) && popdown)
- PopdownSearch(w, (XtPointer)ctx->text.search, NULL);
-}
-
-/*
- * Function:
- * DoReplaceOne
- *
- * Arguments:
- * w - *** Not Used ***
- * closure - a pointer to the search structure
- * call_data - *** Not Used ***
- *
- * Description:
- * Replaces the first instance of the string in the search
- * dialog's text widget with the one in the replace dialog's text widget.
- */
-/*ARGSUSED*/
-static void
-DoReplaceOne(Widget w, XtPointer closure, XtPointer call_data)
-{
- Replace((struct SearchAndReplace *)closure, True, False);
-}
-
-/*
- * Function:
- * DoReplaceAll
- *
- * Parameters:
- * w - (not used)
- * closure - pointer to the search structure
- * call_data - (not used)
- *
- * Description:
- * Replaces every instance of the string in the search dialog's
- * text widget with the one in the replace dialog's text widget.
- */
-/*ARGSUSED*/
-static void
-DoReplaceAll(Widget w, XtPointer closure, XtPointer call_data)
-{
- Replace((struct SearchAndReplace *)closure, False, False);
-}
-
-/*
- * Function:
- * Replace
- *
- * Parameters:
- * tw - Text Widget to replce the string in
- * once_only - if True then only replace the first one found,
- * else replace all of them
- * show_current - if true then leave the selection on the
- * string that was just replaced, otherwise
- * move it onto the next one
- *
- * Description:
- * This is the function that does the real work of
- * replacing strings in the main text widget.
- */
-static Bool
-Replace(struct SearchAndReplace *search, Bool once_only, Bool show_current)
-{
- XawTextPosition pos, new_pos, end_pos, ipos;
- XawTextScanDirection dir;
- XawTextBlock find, replace;
- Widget tw = XtParent(search->search_popup);
- int count = 0;
- TextWidget ctx = (TextWidget)tw;
- Bool redisplay;
-
- find.ptr = GetStringRaw(search->search_text);
- if ((find.format = _XawTextFormat(ctx)) == XawFmtWide)
- find.length = (XawTextPosition)wcslen((wchar_t*)find.ptr);
- else
- find.length = (XawTextPosition)strlen(find.ptr);
- find.firstPos = 0;
-
- replace.ptr = GetStringRaw(search->rep_text);
- replace.firstPos = 0;
- if ((replace.format = _XawTextFormat(ctx)) == XawFmtWide)
- replace.length = wcslen((wchar_t*)replace.ptr);
- else
- replace.length = strlen(replace.ptr);
-
- dir = (XawTextScanDirection)(unsigned long)
- ((XPointer)XawToggleGetCurrent(search->left_toggle) - R_OFFSET);
-
- redisplay = !once_only || (once_only && !show_current);
- ipos = XawTextGetInsertionPoint(tw);
- if (redisplay)
- XawTextDisableRedisplay(tw);
- /*CONSTCOND*/
- while (True) {
- if (count != 0) {
- new_pos = XawTextSearch(tw, dir, &find);
-
- if (new_pos == XawTextSearchError) {
- if (count == 0) {
- char msg[37];
- char *ptr;
- int len;
-
- ptr = GetString(search->search_text);
- len = strlen(ptr);
- (void)XmuSnprintf(msg, sizeof(msg), "%s", ptr);
- ptr = strchr(msg, '\n');
- if (ptr != NULL || sizeof(msg) - 1 < len) {
- if (ptr != NULL)
- len = ptr - msg + 4;
- else
- len = strlen(msg);
-
- if (len < 4)
- strcpy(msg, "...");
- else
- strcpy(msg + len - 4, "...");
- }
- SetSearchLabels(search, "Could not find string", msg, True);
-
- if (redisplay) {
- XawTextSetInsertionPoint(tw, ipos);
- _XawTextShowPosition(ctx);
- XawTextEnableRedisplay(tw);
- }
-
- return (False);
- }
- else
- break;
- }
- pos = new_pos;
- end_pos = pos + find.length;
- }
- else {
- XawTextGetSelectionPos(tw, &pos, &end_pos);
-
- if (search->selection_changed) {
- SetSearchLabels(search, "Selection modified, aborting.",
- "", True);
- if (redisplay) {
- XawTextSetInsertionPoint(tw, ipos);
- XawTextEnableRedisplay(tw);
- }
-
- return (False);
- }
- if (pos == end_pos) {
- if (redisplay) {
- XawTextSetInsertionPoint(tw, ipos);
- XawTextEnableRedisplay(tw);
- }
-
- return (False);
- }
- }
-
- if (XawTextReplace(tw, pos, end_pos, &replace) != XawEditDone) {
- SetSearchLabels(search, "Error while replacing.", "", True);
- if (redisplay) {
- XawTextSetInsertionPoint(tw, ipos);
- XawTextEnableRedisplay(tw);
- }
-
- return (False);
- }
-
- if (dir == XawsdRight)
- ipos = pos + replace.length;
- else
- ipos = pos;
-
- if (once_only) {
- if (show_current)
- break;
- else {
- DoSearch(search);
- XawTextEnableRedisplay(tw);
-
- return (True);
- }
- }
- else
- ctx->text.insertPos = ipos;
- count++;
- }
-
- if (replace.length == 0)
- XawTextUnsetSelection(tw);
- else
- XawTextSetSelection(tw, pos, pos + replace.length);
-
- XawTextSetInsertionPoint(tw, ipos);
- _XawTextShowPosition(ctx);
- XawTextEnableRedisplay(tw);
-
- return (True);
-}
-
-/*
- * Function:
- * SetSearchLabels
- *
- * Parameters:
- * search - search structure
- * msg1 - message to put in each search label
- * msg2 - ""
- * bell - if True then ring bell
- *
- * Description:
- * Sets both the search labels, and also rings the bell.
- */
-static void
-SetSearchLabels(struct SearchAndReplace *search, String msg1, String msg2,
- Bool bell)
-{
- (void)SetResource(search->label1, XtNlabel, (XtArgVal)msg1);
- (void)SetResource(search->label2, XtNlabel, (XtArgVal)msg2);
- if (bell)
- XBell(XtDisplay(search->search_popup), 0);
-}
-
-/*
- * This section of the file contains utility routines used by
- * other functions in this file
- */
-/*
- * Function:
- * _XawTextSetField
- *
- * Description:
- * Action routine that can be bound to dialog box's
- * Text Widget that will send input to the field specified.
- */
-/*ARGSUSED*/
-void
-_XawTextSetField(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- struct SearchAndReplace *search;
- Widget cnew, old;
-
- search = ((TextWidget)XtParent(XtParent(XtParent(w))))->text.search;
-
- if (*num_params != 1) {
- SetSearchLabels(search, "Error: SetField Action must have",
- "exactly one argument", True);
- return;
- }
- switch (params[0][0]) {
- case 's':
- case 'S':
- cnew = search->search_text;
- old = search->rep_text;
- break;
- case 'r':
- case 'R':
- old = search->search_text;
- cnew = search->rep_text;
- break;
- default:
- SetSearchLabels(search,
- "Error: SetField Action's first Argument must",
- "be either 'Search' or 'Replace'", True);
- return;
- }
- _SetField(cnew, old);
-}
-
-/*
- * Function:
- * _SetField
- *
- * Parameters:
- * cnew - new and old text fields
- * old - ""
- *
- * Description:
- * Sets the current text field.
- */
-static void
-_SetField(Widget cnew, Widget old)
-{
- Arg args[2];
- Pixel new_border, old_border, old_bg;
-
- if (!XtIsSensitive(cnew)) {
- XBell(XtDisplay(old), 0); /* Don't set field to an inactive Widget */
- return;
- }
-
- XtSetKeyboardFocus(XtParent(cnew), cnew);
-
- XtSetArg(args[0], XtNborderColor, &old_border);
- XtSetArg(args[1], XtNbackground, &old_bg);
- XtGetValues(cnew, args, 2);
-
- XtSetArg(args[0], XtNborderColor, &new_border);
- XtGetValues(old, args, 1);
-
- if (old_border != old_bg) /* Colors are already correct, return */
- return;
-
- SetResource(old, XtNborderColor, (XtArgVal)old_border);
- SetResource(cnew, XtNborderColor, (XtArgVal)new_border);
-}
-
-/*
- * Function:
- * SetResourceByName
- *
- * Parameters:
- * shell - shell widget of the popup
- * name - name of the child
- * res_name - name of the resource
- * value - value of the resource
- *
- * Description:
- * Sets a resource in any of the dialog children given
- * name of the child and the shell widget of the dialog.
- *
- * Returns:
- * True if sucessful
- */
-static Bool
-SetResourceByName(Widget shell, char *name, char *res_name, XtArgVal value)
-{
- Widget temp_widget;
- char buf[BUFSIZ];
-
- (void)XmuSnprintf(buf, sizeof(buf), "%s.%s", FORM_NAME, name);
-
- if ((temp_widget = XtNameToWidget(shell, buf)) != NULL) {
- SetResource(temp_widget, res_name, value);
- return (True);
- }
- return (False);
-}
-
-/*
- * Function:
- * SetResource
- *
- * Parameters:
- * w - widget
- * res_name - name of the resource
- * value - value of the resource
- *
- * Description:
- * Sets a resource in a widget
- */
-static void
-SetResource(Widget w, char *res_name, XtArgVal value)
-{
- Arg args[1];
-
- XtSetArg(args[0], res_name, value);
- XtSetValues( w, args, 1);
-}
-
-/*
- * Function:
- * GetString{Raw}
- *
- * Parameters:
- * text - text widget whose string we will get
- *
- * Description:
- * Gets the value for the string in the popup.
- *
- * Returns:
- * GetString: the string as a MB
- * GetStringRaw: the exact buffer contents suitable for a search
- */
-static String
-GetString(Widget text)
-{
- String string;
- Arg args[1];
-
- XtSetArg(args[0], XtNstring, &string);
- XtGetValues(text, args, 1);
-
- return (string);
-}
-
-static String
-GetStringRaw(Widget tw)
-{
- TextWidget ctx = (TextWidget)tw;
- XawTextPosition last;
-
- last = XawTextSourceScan(ctx->text.source, 0, XawstAll, XawsdRight,
- ctx->text.mult, True);
- return (_XawTextGetText(ctx, 0, last));
-}
-
-/*
- * Function:
- * CenterWidgetOnPoint
- *
- * Parameters:
- * w - shell widget
- * event - event containing the location of the point
- *
- * Description:
- * Centers a shell widget on a point relative to the root window.
- *
- * Note:
- * The widget is not allowed to go off the screen
- */
-static void
-CenterWidgetOnPoint(Widget w, XEvent *event)
-{
- Arg args[3];
- Cardinal num_args;
- Dimension width, height, b_width;
- Position x, y, max_x, max_y;
-
- if (event != NULL) {
- switch (event->type) {
- case ButtonPress:
- case ButtonRelease:
- x = event->xbutton.x_root;
- y = event->xbutton.y_root;
- break;
- case KeyPress:
- case KeyRelease:
- x = event->xkey.x_root;
- y = event->xkey.y_root;
- break;
- default:
- return;
- }
- }
- else
- return;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNwidth, &width); num_args++;
- XtSetArg(args[num_args], XtNheight, &height); num_args++;
- XtSetArg(args[num_args], XtNborderWidth, &b_width); num_args++;
- XtGetValues(w, args, num_args);
-
- width += b_width << 1;
- height += b_width << 1;
-
- x -= (Position)(width >> 1);
- if (x < 0)
- x = 0;
- if (x > (max_x = (Position)(XtScreen(w)->width - width)))
- x = max_x;
-
- y -= (Position)(height >> 1);
- if (y < 0)
- y = 0;
- if (y > (max_y = (Position)(XtScreen(w)->height - height)))
- y = max_y;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNx, x); num_args++;
- XtSetArg(args[num_args], XtNy, y); num_args++;
- XtSetValues(w, args, num_args);
-}
-
-/*
- * Function:
- * CreateDialog
- *
- * Parameters:
- * parent - parent of the dialog - the main text widget
- * ptr - initial_string for the dialog
- * name - name of the dialog
- * func - function to create the children of the dialog
- *
- * Returns:
- * Popup shell of the dialog
- *
- * Note:
- * The function argument is passed the following arguments:
- * form - from widget that is the dialog
- * ptr - initial string for the dialog's text widget
- * parent - parent of the dialog - the main text widget
- */
-static Widget
-CreateDialog(Widget parent, String ptr, String name, AddFunc func)
-{
- Widget popup, form;
- Arg args[5];
- Cardinal num_args;
-
- num_args = 0;
- XtSetArg(args[num_args], XtNiconName, name); num_args++;
- XtSetArg(args[num_args], XtNgeometry, NULL); num_args++;
- XtSetArg(args[num_args], XtNallowShellResize, True); num_args++;
- XtSetArg(args[num_args], XtNtransientFor, GetShell(parent));num_args++;
- popup = XtCreatePopupShell(name, transientShellWidgetClass,
- parent, args, num_args);
-
- form = XtCreateManagedWidget(FORM_NAME, formWidgetClass, popup, NULL, 0);
- XtManageChild (form);
-
- (*func)(form, ptr, parent);
-
- return (popup);
-}
-
-/*
- * Function
- * GetShell
- * nearest shell widget.
- *
- * Parameters:
- * w - widget whose parent shell should be returned
- *
- * Returns:
- * The shell widget among the ancestors of w that is the
- * fewest levels up in the widget hierarchy.
- *
- * Description:
- * Walks up the widget hierarchy to find the topmost shell widget.
- */
-static Widget
-GetShell(Widget w)
-{
- while (w != NULL && !XtIsShell(w))
- w = XtParent(w);
-
- return (w);
-}
-
-static Bool
-InParams(String str, String *p, unsigned int n)
-{
- unsigned int i;
-
- for (i = 0; i < n; p++, i++)
- if (!XmuCompareISOLatin1(*p, str))
- return (True);
- return (False);
-}
-
-static char *WM_DELETE_WINDOW = "WM_DELETE_WINDOW";
-
-static void
-WMProtocols(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- Atom wm_delete_window;
- Atom wm_protocols;
-
- wm_delete_window = XInternAtom(XtDisplay(w), WM_DELETE_WINDOW, True);
- wm_protocols = XInternAtom(XtDisplay(w), "WM_PROTOCOLS", True);
-
- /* Respond to a recognized WM protocol request if
- * event type is ClientMessage and no parameters are passed, or
- * event type is ClientMessage and event data is matched to parameters, or
- * event type isn't ClientMessage and parameters make a request
- */
-#define DO_DELETE_WINDOW InParams(WM_DELETE_WINDOW, params, *num_params)
-
- if ((event->type == ClientMessage
- && event->xclient.message_type == wm_protocols
- && event->xclient.data.l[0] == wm_delete_window
- && (*num_params == 0 || DO_DELETE_WINDOW))
- || (event->type != ClientMessage && DO_DELETE_WINDOW)) {
-#undef DO_DELETE_WINDOW
- Widget cancel;
- char descendant[DISMISS_NAME_LEN + 2];
-
- (void)XmuSnprintf(descendant, sizeof(descendant), "*%s", DISMISS_NAME);
- cancel = XtNameToWidget(w, descendant);
- if (cancel)
- XtCallCallbacks(cancel, XtNcallback, NULL);
- }
-}
-
-static void
-SetWMProtocolTranslations(Widget w)
-{
- static XtTranslations compiled_table;
- static XtAppContext *app_context_list;
- static Cardinal list_size;
-
- unsigned int i;
- XtAppContext app_context;
- Atom wm_delete_window;
-
- app_context = XtWidgetToApplicationContext(w);
-
- /* parse translation table once */
- if (!compiled_table)
- compiled_table =
- XtParseTranslationTable("<Message>WM_PROTOCOLS:XawWMProtocols()\n");
-
- /* add actions once per application context */
- for (i = 0; i < list_size && app_context_list[i] != app_context; i++)
- ;
- if (i == list_size) {
- XtActionsRec actions[1];
-
- actions[0].string = "XawWMProtocols";
- actions[0].proc = WMProtocols;
- list_size++;
- app_context_list = (XtAppContext *)XtRealloc
- ((char *)app_context_list, list_size * sizeof(XtAppContext));
- XtAppAddActions(app_context, actions, 1);
- app_context_list[i] = app_context;
- }
-
- /* establish communication between the window manager and each shell */
- XtAugmentTranslations(w, compiled_table);
- wm_delete_window = XInternAtom(XtDisplay(w), WM_DELETE_WINDOW, False);
- (void)XSetWMProtocols(XtDisplay(w), XtWindow(w), &wm_delete_window, 1);
-}
+/*
+
+Copyright 1989, 1994, 1998 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.
+
+*/
+
+/*
+ * This file is broken up into three sections one dealing with
+ * each of the three popups created here:
+ *
+ * FileInsert, Search, and Replace.
+ *
+ * There is also a section at the end for utility functions
+ * used by all more than one of these dialogs.
+ *
+ * The following functions are the only non-static ones defined
+ * in this module. They are located at the begining of the
+ * section that contains this dialog box that uses them.
+ *
+ * void _XawTextInsertFileAction(w, event, params, num_params);
+ * void _XawTextDoSearchAction(w, event, params, num_params);
+ * void _XawTextDoReplaceAction(w, event, params, num_params);
+ * void _XawTextInsertFile(w, event, params, num_params);
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <errno.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#include <X11/Xos.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/TextP.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/Command.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Toggle.h>
+#include "XawI18n.h"
+
+static char* INSERT_FILE = "Enter Filename:";
+static char* SEARCH_LABEL_1 = "Use <Tab> to change fields.";
+static char* SEARCH_LABEL_2 = "Use ^q<Tab> for <Tab>.";
+static char* DISMISS_NAME = "cancel";
+#define DISMISS_NAME_LEN 6
+static char* FORM_NAME = "form";
+static char* LABEL_NAME = "label";
+static char* TEXT_NAME = "text";
+
+#define R_OFFSET 1
+
+typedef void (*AddFunc)(Widget, char*, Widget);
+
+/*
+ * Prototypes
+ */
+static void _SetField(Widget, Widget);
+static void AddSearchChildren(Widget, char*, Widget);
+static void AddInsertFileChildren(Widget, char*, Widget);
+static void CenterWidgetOnPoint(Widget, XEvent*);
+static Widget CreateDialog(Widget, String, String, AddFunc);
+static void DoInsert(Widget, XtPointer, XtPointer);
+static void DoReplaceAll(Widget, XtPointer, XtPointer);
+static void DoReplaceOne(Widget, XtPointer, XtPointer);
+static Bool DoSearch(struct SearchAndReplace*);
+static Widget GetShell(Widget);
+static String GetString(Widget);
+static String GetStringRaw(Widget);
+static void InitializeSearchWidget(struct SearchAndReplace*,
+ XawTextScanDirection, Bool);
+static Bool InParams(String, String*, unsigned int);
+static Bool InsertFileNamed(Widget, char*);
+static void PopdownFileInsert(Widget, XtPointer, XtPointer);
+static void PopdownSearch(Widget, XtPointer, XtPointer);
+static Bool Replace(struct SearchAndReplace*, Bool, Bool);
+static void SearchButton(Widget, XtPointer, XtPointer);
+static void SetResource(Widget, char*, XtArgVal);
+static Bool SetResourceByName(Widget, char*, char*, XtArgVal);
+static void SetSearchLabels(struct SearchAndReplace*, String, String, Bool);
+static void SetWMProtocolTranslations(Widget);
+
+/*
+ * Actions
+ */
+static void WMProtocols(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * External Actions
+ */
+void _XawTextDoReplaceAction(Widget, XEvent*, String*, Cardinal*);
+void _XawTextDoSearchAction(Widget, XEvent*, String*, Cardinal*);
+void _XawTextInsertFile(Widget, XEvent*, String*, Cardinal*);
+void _XawTextInsertFileAction(Widget, XEvent*, String*, Cardinal*);
+void _XawTextPopdownSearchAction(Widget, XEvent*, String*, Cardinal*);
+void _XawTextSearch(Widget, XEvent*, String*, Cardinal*);
+void _XawTextSetField(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * From Text.c
+ */
+char *_XawTextGetText(TextWidget, XawTextPosition, XawTextPosition);
+void _XawTextShowPosition(TextWidget);
+
+/*
+ * Initialization
+ */
+static char radio_trans_string[] =
+"<Btn1Down>,<Btn1Up>:" "set() notify()\n"
+;
+
+static char search_text_trans[] =
+"~s<Key>Return:" "DoSearchAction(Popdown)\n"
+"s<Key>Return:" "DoSearchAction() SetField(Replace)\n"
+"c<Key>c:" "PopdownSearchAction()\n"
+"<Btn1Down>:" "select-start() SetField(Search)\n"
+"<Key>Tab:" "DoSearchAction() SetField(Replace)\n"
+;
+
+static char rep_text_trans[] =
+"~s<Key>Return:" "DoReplaceAction(Popdown)\n"
+"s<Key>Return:" "SetField(Search)\n"
+"c<Key>c:" "PopdownSearchAction()\n"
+"<Btn1Down>:" "select-start() DoSearchAction() SetField(Replace)\n"
+"<Key>Tab:" "SetField(Search)\n"
+;
+
+/*
+ * Implementation
+ */
+/*
+ * This section of the file contains all the functions that
+ * the file insert dialog box uses
+ */
+
+/*
+ * Function:
+ * _XawTextInsertFileAction
+ *
+ * Description:
+ * Action routine that can be bound to dialog box's Text Widget
+ * that will insert a file into the main Text Widget.
+ */
+/*ARGSUSED*/
+void
+_XawTextInsertFileAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ DoInsert(w, (XtPointer)XtParent(XtParent(XtParent(w))), NULL);
+}
+
+/*
+ * Function:
+ * _XawTextInsertFile
+ *
+ * Parameters:
+ * w - text widget
+ * event - X Event (used to get x and y location)
+ * params - parameter list
+ * num_params - ""
+ *
+ * Description:
+ * Action routine that can be bound to the text widget
+ * it will popup the insert file dialog box.
+ *
+ * Note:
+ * The parameter list may contain one entry
+ *
+ * Entry:
+ * This entry is optional and contains the value of the default
+ * file to insert
+ */
+void
+_XawTextInsertFile(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ char *ptr;
+ XawTextEditType edit_mode;
+ Arg args[1];
+
+ XtSetArg(args[0], XtNeditType, &edit_mode);
+ XtGetValues(ctx->text.source, args, 1);
+
+ if (edit_mode != XawtextEdit) {
+ XBell(XtDisplay(w), 0);
+ return;
+ }
+
+ if (*num_params == 0)
+ ptr = "";
+ else
+ ptr = params[0];
+
+ if (!ctx->text.file_insert) {
+ ctx->text.file_insert = CreateDialog(w, ptr, "insertFile",
+ AddInsertFileChildren);
+ XtRealizeWidget(ctx->text.file_insert);
+ SetWMProtocolTranslations(ctx->text.file_insert);
+ }
+
+ CenterWidgetOnPoint(ctx->text.file_insert, event);
+ XtPopup(ctx->text.file_insert, XtGrabNone);
+}
+
+/*
+ * Function:
+ * PopdownFileInsert
+ *
+ * Parameters:
+ * w - widget that caused this action
+ * closure - pointer to the main text widget that popped up this dialog
+ * call_data - (not used)
+ *
+ * Description:
+ * Pops down the file insert button
+ */
+/*ARGSUSED*/
+static void
+PopdownFileInsert(Widget w, XtPointer closure, XtPointer call_data)
+{
+ TextWidget ctx = (TextWidget)closure;
+
+ XtPopdown(ctx->text.file_insert);
+ (void)SetResourceByName(ctx->text.file_insert, LABEL_NAME,
+ XtNlabel, (XtArgVal)INSERT_FILE);
+}
+
+/*
+ * Function:
+ * DoInsert
+ *
+ * Parameters:
+ * w - widget that activated this callback
+ * closure - pointer to the text widget to insert the file into
+ *
+ * Description:
+ * Actually insert the file named in the text widget of the file dialog
+ */
+/*ARGSUSED*/
+static void
+DoInsert(Widget w, XtPointer closure, XtPointer call_data)
+{
+ TextWidget ctx = (TextWidget)closure;
+ char buf[BUFSIZ], msg[BUFSIZ];
+ Widget temp_widget;
+
+ (void)XmuSnprintf(buf, sizeof(buf), "%s.%s", FORM_NAME, TEXT_NAME);
+ if ((temp_widget = XtNameToWidget(ctx->text.file_insert, buf)) == NULL) {
+ (void)strcpy(msg,
+ "Error: Could not get text widget from file insert popup");
+ }
+ else if (InsertFileNamed((Widget)ctx, GetString(temp_widget))) {
+ PopdownFileInsert(w, closure, call_data);
+ return;
+ }
+ else
+ (void)XmuSnprintf(msg, sizeof(msg), "Error: %s", strerror(errno));
+
+ (void)SetResourceByName(ctx->text.file_insert,
+ LABEL_NAME, XtNlabel, (XtArgVal)msg);
+ XBell(XtDisplay(w), 0);
+}
+
+/*
+ * Function:
+ * InsertFileNamed
+ *
+ * Parameters:
+ * tw - text widget to insert this file into
+ * str - name of the file to insert
+ *
+ * Description:
+ * Inserts a file into the text widget.
+ *
+ * Returns:
+ * True if the insert was sucessful, False otherwise.
+ */
+static Bool
+InsertFileNamed(Widget tw, char *str)
+{
+ FILE *file;
+ XawTextBlock text;
+ XawTextPosition pos;
+
+ if (str == NULL || strlen(str) == 0 || (file = fopen(str, "r")) == NULL)
+ return (False);
+
+ pos = XawTextGetInsertionPoint(tw);
+
+ fseek(file, 0L, 2);
+
+ text.firstPos = 0;
+ text.length = ftell(file);
+ text.ptr = XtMalloc(text.length + 1);
+ text.format = XawFmt8Bit;
+
+ fseek(file, 0L, 0);
+ if (fread(text.ptr, 1, text.length, file) != text.length)
+ XtErrorMsg("readError", "insertFileNamed", "XawError",
+ "fread returned error", NULL, NULL);
+
+ if (XawTextReplace(tw, pos, pos, &text) != XawEditDone) {
+ XtFree(text.ptr);
+ fclose(file);
+ return (False);
+ }
+ pos += text.length;
+ XtFree(text.ptr);
+ fclose(file);
+ XawTextSetInsertionPoint(tw, pos);
+ _XawTextShowPosition((TextWidget)tw);
+
+ return (True);
+}
+
+/*
+ * Function:
+ * AddInsertFileChildren
+ *
+ * Parameters:
+ * form - form widget for the insert dialog widget
+ * ptr - pointer to the initial string for the Text Widget
+ * tw - main text widget
+ *
+ * Description:
+ * Adds all children to the InsertFile dialog widget.
+ */
+static void
+AddInsertFileChildren(Widget form, char *ptr, Widget tw)
+{
+ Arg args[10];
+ Cardinal num_args;
+ Widget label, text, cancel, insert;
+ XtTranslations trans;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, INSERT_FILE); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ label = XtCreateManagedWidget(LABEL_NAME, labelWidgetClass, form,
+ args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, label); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNeditType, XawtextEdit); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNstring, ptr); num_args++;
+ text = XtCreateManagedWidget(TEXT_NAME, asciiTextWidgetClass, form,
+ args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Insert File"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, text); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ insert = XtCreateManagedWidget("insert", commandWidgetClass, form,
+ args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Cancel"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, text); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, insert); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ cancel = XtCreateManagedWidget(DISMISS_NAME, commandWidgetClass, form,
+ args, num_args);
+
+ XtAddCallback(cancel, XtNcallback, PopdownFileInsert, (XtPointer)tw);
+ XtAddCallback(insert, XtNcallback, DoInsert, (XtPointer)tw);
+
+ XtSetKeyboardFocus(form, text);
+
+ /*
+ * Bind <CR> to insert file
+ */
+ trans = XtParseTranslationTable("<Key>Return:InsertFileAction()");
+ XtOverrideTranslations(text, trans);
+}
+
+/*
+ * This section of the file contains all the functions that
+ * the search dialog box uses
+ */
+/*
+ * Function:
+ * _XawTextDoSearchAction
+ *
+ * Description:
+ * Action routine that can be bound to dialog box's Text Widget that
+ * will search for a string in the main Text Widget.
+ *
+ * Note:
+ * If the search was sucessful and the argument popdown is passed to
+ * this action routine then the widget will automatically popdown the
+ * search widget
+ */
+/*ARGSUSED*/
+void
+_XawTextDoSearchAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ TextWidget tw = (TextWidget)XtParent(XtParent(XtParent(w)));
+ Bool popdown = False;
+
+ if (*num_params == 1 && (params[0][0] == 'p' || params[0][0] == 'P'))
+ popdown = True;
+
+ if (DoSearch(tw->text.search) && popdown)
+ PopdownSearch(w, (XtPointer)tw->text.search, NULL);
+}
+
+/*
+ * Function:
+ * _XawTextPopdownSearchAction
+ *
+ * Description:
+ * Action routine that can be bound to dialog box's Text Widget that
+ * will popdown the search widget.
+ */
+/*ARGSUSED*/
+void
+_XawTextPopdownSearchAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ TextWidget tw = (TextWidget)XtParent(XtParent(XtParent(w)));
+
+ PopdownSearch(w, (XtPointer)tw->text.search, NULL);
+}
+
+/*
+ * Function:
+ * PopdownSearch
+ *
+ * Parameters:
+ * w - (not used)
+ * closure - pointer to the search structure
+ * call_data - (not used)
+ *
+ * Description:
+ * Pops down the search widget and resets it
+ */
+/*ARGSUSED*/
+static void
+PopdownSearch(Widget w, XtPointer closure, XtPointer call_data)
+{
+ struct SearchAndReplace *search = (struct SearchAndReplace *)closure;
+
+ XtPopdown(search->search_popup);
+ SetSearchLabels(search, SEARCH_LABEL_1, SEARCH_LABEL_2, False);
+}
+
+/*
+ * Function:
+ * SearchButton
+ *
+ * Arguments:
+ * w - (not used)
+ * closure - pointer to the search info
+ * call_data - (not used)
+ *
+ * Description:
+ * Performs a search when the button is clicked.
+ */
+/*ARGSUSED*/
+static void
+SearchButton(Widget w, XtPointer closure, XtPointer call_data)
+{
+ (void)DoSearch((struct SearchAndReplace *)closure);
+}
+
+/*
+ * Function:
+ * _XawTextSearch
+ *
+ * Parameters:
+ * w - text widget
+ * event - X Event (used to get x and y location)
+ * params - parameter list
+ * num_params - ""
+ *
+ * Description:
+ * Action routine that can be bound to the text widget
+ * it will popup the search dialog box.
+ *
+ * Note:
+ * The parameter list contains one or two entries that may be
+ * the following.
+ *
+ * First Entry:
+ * The first entry is the direction to search by default.
+ * This arguement must be specified and may have a value of
+ * "left" or "right".
+ *
+ * Second Entry:
+ * This entry is optional and contains the value of the default
+ * string to search for.
+ */
+
+#define SEARCH_HEADER "Text Widget - Search():"
+void
+_XawTextSearch(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)w;
+ XawTextScanDirection dir;
+ char *ptr, buf[BUFSIZ];
+ XawTextEditType edit_mode;
+ Arg args[1];
+ wchar_t wcs[1];
+
+ if (*num_params < 1 || *num_params > 2) {
+ (void)XmuSnprintf(buf, sizeof(buf), "%s %s\n%s", SEARCH_HEADER,
+ "This action must have only",
+ "one or two parameters");
+ XtAppWarning(XtWidgetToApplicationContext(w), buf);
+ return;
+ }
+
+ if (*num_params == 2)
+ ptr = params[1];
+ else if (XawTextFormat(ctx, XawFmtWide)) {
+ /* This just does the equivalent of
+ ptr = ""L, a waste because params[1] isnt W aligned */
+ ptr = (char *)wcs;
+ wcs[0] = 0;
+ }
+ else
+ ptr = "";
+
+ switch(params[0][0]) {
+ case 'b': /* Left */
+ case 'B':
+ dir = XawsdLeft;
+ break;
+ case 'f': /* Right */
+ case 'F':
+ dir = XawsdRight;
+ break;
+ default:
+ (void)XmuSnprintf(buf, sizeof(buf), "%s %s\n%s", SEARCH_HEADER,
+ "The first parameter must be",
+ "Either 'backward' or 'forward'");
+ XtAppWarning(XtWidgetToApplicationContext(w), buf);
+ return;
+ }
+
+ if (ctx->text.search== NULL) {
+ ctx->text.search = XtNew(struct SearchAndReplace);
+ ctx->text.search->search_popup = CreateDialog(w, ptr, "search",
+ AddSearchChildren);
+ XtRealizeWidget(ctx->text.search->search_popup);
+ SetWMProtocolTranslations(ctx->text.search->search_popup);
+ }
+ else if (*num_params > 1)
+ XtVaSetValues(ctx->text.search->search_text, XtNstring, ptr, NULL);
+
+ XtSetArg(args[0], XtNeditType,&edit_mode);
+ XtGetValues(ctx->text.source, args, 1);
+
+ InitializeSearchWidget(ctx->text.search, dir, (edit_mode == XawtextEdit));
+
+ CenterWidgetOnPoint(ctx->text.search->search_popup, event);
+ XtPopup(ctx->text.search->search_popup, XtGrabNone);
+}
+
+/*
+ * Function:
+ * InitializeSearchWidget
+ *
+ * Parameters:
+ * search - search widget structure
+ * dir - direction to search
+ * replace_active - state of the sensitivity for the replace button
+ *
+ * Description:
+ * This function initializes the search widget and
+ * is called each time the search widget is poped up.
+ */
+static void
+InitializeSearchWidget(struct SearchAndReplace *search,
+ XawTextScanDirection dir, Bool replace_active)
+{
+ SetResource(search->rep_one, XtNsensitive, (XtArgVal)replace_active);
+ SetResource(search->rep_all, XtNsensitive, (XtArgVal)replace_active);
+ SetResource(search->rep_label, XtNsensitive, (XtArgVal)replace_active);
+ SetResource(search->rep_text, XtNsensitive, (XtArgVal)replace_active);
+
+ switch (dir) {
+ case XawsdLeft:
+ SetResource(search->left_toggle, XtNstate, (XtArgVal)True);
+ break;
+ case XawsdRight:
+ SetResource(search->right_toggle, XtNstate, (XtArgVal)True);
+ break;
+ }
+}
+
+/*
+ * Function:
+ * AddSearchChildren
+ *
+ * Parameters:
+ * form - form widget for the search widget
+ * ptr - pointer to the initial string for the Text Widget
+ * tw - main text widget
+ *
+ * Description:
+ * Adds all children to the Search Dialog Widget.
+ */
+static void
+AddSearchChildren(Widget form, char *ptr, Widget tw)
+{
+ Arg args[10];
+ Cardinal num_args;
+ Widget cancel, search_button, s_label, s_text, r_text;
+ XtTranslations trans;
+ struct SearchAndReplace *search = ((TextWidget)tw)->text.search;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ search->label1 = XtCreateManagedWidget("label1", labelWidgetClass, form,
+ args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, search->label1); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ search->label2 = XtCreateManagedWidget("label2", labelWidgetClass, form,
+ args, num_args);
+
+ /*
+ * We need to add R_OFFSET to the radio_data, because the value zero (0)
+ * has special meaning
+ */
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Backward"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, search->label2); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNradioData, (XPointer)XawsdLeft + R_OFFSET);
+ num_args++;
+ search->left_toggle = XtCreateManagedWidget("backwards", toggleWidgetClass,
+ form, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Forward"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, search->label2); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, search->left_toggle); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNradioGroup, search->left_toggle); num_args++;
+ XtSetArg(args[num_args], XtNradioData, (XPointer)XawsdRight + R_OFFSET);
+ num_args++;
+ search->right_toggle = XtCreateManagedWidget("forwards", toggleWidgetClass,
+ form, args, num_args);
+
+ {
+ XtTranslations radio_translations;
+
+ radio_translations = XtParseTranslationTable(radio_trans_string);
+ XtOverrideTranslations(search->left_toggle, radio_translations);
+ XtOverrideTranslations(search->right_toggle, radio_translations);
+ }
+
+#ifndef OLDXAW
+ if (XawTextFormat((TextWidget)tw, XawFmt8Bit)) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Case Sensitive"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, search->label2); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, search->right_toggle); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNstate, True); num_args++;
+ search->case_sensitive = XtCreateManagedWidget("case", toggleWidgetClass,
+ form, args, num_args);
+ }
+ else
+ search->case_sensitive = NULL;
+#endif
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, search->left_toggle); num_args++;
+ XtSetArg(args[num_args], XtNlabel, "Search for: "); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0 ); num_args++;
+ s_label = XtCreateManagedWidget("searchLabel", labelWidgetClass, form,
+ args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, search->left_toggle); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, s_label); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNeditType, XawtextEdit); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNstring, ptr); num_args++;
+ s_text = XtCreateManagedWidget("searchText", asciiTextWidgetClass, form,
+ args, num_args);
+ search->search_text = s_text;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, s_text); num_args++;
+ XtSetArg(args[num_args], XtNlabel, "Replace with:"); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ search->rep_label = XtCreateManagedWidget("replaceLabel", labelWidgetClass,
+ form, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromHoriz, s_label); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, s_text); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNeditType, XawtextEdit); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNstring, ""); num_args++;
+ r_text = XtCreateManagedWidget("replaceText", asciiTextWidgetClass,
+ form, args, num_args);
+ search->rep_text = r_text;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Search"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, r_text); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ search_button = XtCreateManagedWidget("search", commandWidgetClass, form,
+ args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Replace"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, r_text); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, search_button); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ search->rep_one = XtCreateManagedWidget("replaceOne", commandWidgetClass,
+ form, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Replace All"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, r_text); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, search->rep_one); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ search->rep_all = XtCreateManagedWidget("replaceAll", commandWidgetClass,
+ form, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, "Cancel"); num_args++;
+ XtSetArg(args[num_args], XtNfromVert, r_text); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, search->rep_all); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ cancel = XtCreateManagedWidget(DISMISS_NAME, commandWidgetClass, form,
+ args, num_args);
+
+ XtAddCallback(search_button, XtNcallback, SearchButton, (XtPointer)search);
+ XtAddCallback(search->rep_one, XtNcallback, DoReplaceOne, (XtPointer)search);
+ XtAddCallback(search->rep_all, XtNcallback, DoReplaceAll, (XtPointer)search);
+ XtAddCallback(cancel, XtNcallback, PopdownSearch, (XtPointer)search);
+
+ /*
+ * Initialize the text entry fields
+ */
+ {
+ Pixel color;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNbackground, &color); num_args++;
+ XtGetValues(search->rep_text, args, num_args);
+ num_args = 0;
+ XtSetArg(args[num_args], XtNborderColor, color); num_args++;
+ XtSetValues(search->rep_text, args, num_args);
+ XtSetKeyboardFocus(form, search->search_text);
+ }
+
+ SetSearchLabels(search, SEARCH_LABEL_1, SEARCH_LABEL_2, False);
+
+ /*
+ * Bind Extra translations
+ */
+ trans = XtParseTranslationTable(search_text_trans);
+ XtOverrideTranslations(search->search_text, trans);
+
+ trans = XtParseTranslationTable(rep_text_trans);
+ XtOverrideTranslations(search->rep_text, trans);
+}
+
+/*
+ * Function:
+ * DoSearch
+ *
+ * Parameters:
+ * search - search structure
+ *
+ * Description:
+ * Performs a search
+ *
+ * Returns:
+ * True if sucessful
+ */
+/*ARGSUSED*/
+static Bool
+DoSearch(struct SearchAndReplace *search)
+{
+ char msg[37];
+ Widget tw = XtParent(search->search_popup);
+ XawTextPosition pos;
+ XawTextScanDirection dir;
+ XawTextBlock text;
+ TextWidget ctx = (TextWidget)tw;
+
+ text.firstPos = 0;
+ text.ptr = GetStringRaw(search->search_text);
+ if ((text.format = _XawTextFormat(ctx)) == XawFmtWide)
+ text.length = wcslen((wchar_t*)text.ptr);
+ else {
+ text.length = strlen(text.ptr);
+
+#ifndef OLDXAW
+ if (search->case_sensitive) {
+ /* text.firstPos isn't useful here, so I'll use it as an
+ * options flag.
+ */
+ Arg args[1];
+ Boolean case_sensitive;
+
+ XtSetArg(args[0], XtNstate, &case_sensitive);
+ XtGetValues(search->case_sensitive, args, 1);
+ text.firstPos = !case_sensitive;
+ }
+#endif /* OLDXAW */
+ }
+
+ dir = (XawTextScanDirection)(unsigned long)
+ ((XPointer)XawToggleGetCurrent(search->left_toggle) - R_OFFSET);
+
+ pos = XawTextSearch(tw, dir, &text);
+
+ /* The Raw string in find.ptr may be WC I can't use here, so I re - call
+ GetString to get a tame version */
+
+ if (pos == XawTextSearchError) {
+ char *ptr;
+ int len;
+
+ ptr = GetString(search->search_text);
+ len = strlen(ptr);
+ (void)XmuSnprintf(msg, sizeof(msg), "%s", ptr);
+
+ ptr = strchr(msg, '\n');
+ if (ptr != NULL || sizeof(msg) - 1 < len) {
+ if (ptr != NULL)
+ len = ptr - msg + 4;
+ else
+ len = strlen(msg);
+
+ if (len < 4)
+ strcpy(msg, "...");
+ else
+ strcpy(msg + len - 4, "...");
+ }
+ XawTextUnsetSelection(tw);
+ SetSearchLabels(search, "Could not find string", msg, True);
+
+ return (False);
+ }
+ XawTextDisableRedisplay(tw);
+ XawTextSetSelection(tw, pos, pos + text.length);
+ search->selection_changed = False; /* selection is good */
+
+ if (dir == XawsdRight)
+ XawTextSetInsertionPoint(tw, pos + text.length);
+ else
+ XawTextSetInsertionPoint(tw, pos);
+ _XawTextShowPosition(ctx);
+ XawTextEnableRedisplay(tw);
+
+ return (True);
+}
+
+/*
+ * This section of the file contains all the functions that
+ * the replace dialog box uses
+ */
+/*
+ * Function:
+ * _XawTextDoReplaceAction
+ *
+ * Description:
+ * Action routine that can be bound to dialog box's
+ * Text Widget that will replace a string in the main Text Widget.
+ */
+/*ARGSUSED*/
+void
+_XawTextDoReplaceAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ TextWidget ctx = (TextWidget)XtParent(XtParent(XtParent(w)));
+ Bool popdown = False;
+
+ if (*num_params == 1 && (params[0][0] == 'p' || params[0][0] == 'P'))
+ popdown = True;
+
+ if (Replace( ctx->text.search, True, popdown) && popdown)
+ PopdownSearch(w, (XtPointer)ctx->text.search, NULL);
+}
+
+/*
+ * Function:
+ * DoReplaceOne
+ *
+ * Arguments:
+ * w - *** Not Used ***
+ * closure - a pointer to the search structure
+ * call_data - *** Not Used ***
+ *
+ * Description:
+ * Replaces the first instance of the string in the search
+ * dialog's text widget with the one in the replace dialog's text widget.
+ */
+/*ARGSUSED*/
+static void
+DoReplaceOne(Widget w, XtPointer closure, XtPointer call_data)
+{
+ Replace((struct SearchAndReplace *)closure, True, False);
+}
+
+/*
+ * Function:
+ * DoReplaceAll
+ *
+ * Parameters:
+ * w - (not used)
+ * closure - pointer to the search structure
+ * call_data - (not used)
+ *
+ * Description:
+ * Replaces every instance of the string in the search dialog's
+ * text widget with the one in the replace dialog's text widget.
+ */
+/*ARGSUSED*/
+static void
+DoReplaceAll(Widget w, XtPointer closure, XtPointer call_data)
+{
+ Replace((struct SearchAndReplace *)closure, False, False);
+}
+
+/*
+ * Function:
+ * Replace
+ *
+ * Parameters:
+ * tw - Text Widget to replce the string in
+ * once_only - if True then only replace the first one found,
+ * else replace all of them
+ * show_current - if true then leave the selection on the
+ * string that was just replaced, otherwise
+ * move it onto the next one
+ *
+ * Description:
+ * This is the function that does the real work of
+ * replacing strings in the main text widget.
+ */
+static Bool
+Replace(struct SearchAndReplace *search, Bool once_only, Bool show_current)
+{
+ XawTextPosition pos, new_pos, end_pos, ipos;
+ XawTextScanDirection dir;
+ XawTextBlock find, replace;
+ Widget tw = XtParent(search->search_popup);
+ int count = 0;
+ TextWidget ctx = (TextWidget)tw;
+ Bool redisplay;
+
+ find.ptr = GetStringRaw(search->search_text);
+ if ((find.format = _XawTextFormat(ctx)) == XawFmtWide)
+ find.length = (XawTextPosition)wcslen((wchar_t*)find.ptr);
+ else
+ find.length = (XawTextPosition)strlen(find.ptr);
+ find.firstPos = 0;
+
+ replace.ptr = GetStringRaw(search->rep_text);
+ replace.firstPos = 0;
+ if ((replace.format = _XawTextFormat(ctx)) == XawFmtWide)
+ replace.length = wcslen((wchar_t*)replace.ptr);
+ else
+ replace.length = strlen(replace.ptr);
+
+ dir = (XawTextScanDirection)(unsigned long)
+ ((XPointer)XawToggleGetCurrent(search->left_toggle) - R_OFFSET);
+
+ redisplay = !once_only || (once_only && !show_current);
+ ipos = XawTextGetInsertionPoint(tw);
+ if (redisplay)
+ XawTextDisableRedisplay(tw);
+ /*CONSTCOND*/
+ while (True) {
+ if (count != 0) {
+ new_pos = XawTextSearch(tw, dir, &find);
+
+ if (new_pos == XawTextSearchError) {
+ if (count == 0) {
+ char msg[37];
+ char *ptr;
+ int len;
+
+ ptr = GetString(search->search_text);
+ len = strlen(ptr);
+ (void)XmuSnprintf(msg, sizeof(msg), "%s", ptr);
+ ptr = strchr(msg, '\n');
+ if (ptr != NULL || sizeof(msg) - 1 < len) {
+ if (ptr != NULL)
+ len = ptr - msg + 4;
+ else
+ len = strlen(msg);
+
+ if (len < 4)
+ strcpy(msg, "...");
+ else
+ strcpy(msg + len - 4, "...");
+ }
+ SetSearchLabels(search, "Could not find string", msg, True);
+
+ if (redisplay) {
+ XawTextSetInsertionPoint(tw, ipos);
+ _XawTextShowPosition(ctx);
+ XawTextEnableRedisplay(tw);
+ }
+
+ return (False);
+ }
+ else
+ break;
+ }
+ pos = new_pos;
+ end_pos = pos + find.length;
+ }
+ else {
+ XawTextGetSelectionPos(tw, &pos, &end_pos);
+
+ if (search->selection_changed) {
+ SetSearchLabels(search, "Selection modified, aborting.",
+ "", True);
+ if (redisplay) {
+ XawTextSetInsertionPoint(tw, ipos);
+ XawTextEnableRedisplay(tw);
+ }
+
+ return (False);
+ }
+ if (pos == end_pos) {
+ if (redisplay) {
+ XawTextSetInsertionPoint(tw, ipos);
+ XawTextEnableRedisplay(tw);
+ }
+
+ return (False);
+ }
+ }
+
+ if (XawTextReplace(tw, pos, end_pos, &replace) != XawEditDone) {
+ SetSearchLabels(search, "Error while replacing.", "", True);
+ if (redisplay) {
+ XawTextSetInsertionPoint(tw, ipos);
+ XawTextEnableRedisplay(tw);
+ }
+
+ return (False);
+ }
+
+ if (dir == XawsdRight)
+ ipos = pos + replace.length;
+ else
+ ipos = pos;
+
+ if (once_only) {
+ if (show_current)
+ break;
+ else {
+ DoSearch(search);
+ XawTextEnableRedisplay(tw);
+
+ return (True);
+ }
+ }
+ else
+ ctx->text.insertPos = ipos;
+ count++;
+ }
+
+ if (replace.length == 0)
+ XawTextUnsetSelection(tw);
+ else
+ XawTextSetSelection(tw, pos, pos + replace.length);
+
+ XawTextSetInsertionPoint(tw, ipos);
+ _XawTextShowPosition(ctx);
+ XawTextEnableRedisplay(tw);
+
+ return (True);
+}
+
+/*
+ * Function:
+ * SetSearchLabels
+ *
+ * Parameters:
+ * search - search structure
+ * msg1 - message to put in each search label
+ * msg2 - ""
+ * bell - if True then ring bell
+ *
+ * Description:
+ * Sets both the search labels, and also rings the bell.
+ */
+static void
+SetSearchLabels(struct SearchAndReplace *search, String msg1, String msg2,
+ Bool bell)
+{
+ (void)SetResource(search->label1, XtNlabel, (XtArgVal)msg1);
+ (void)SetResource(search->label2, XtNlabel, (XtArgVal)msg2);
+ if (bell)
+ XBell(XtDisplay(search->search_popup), 0);
+}
+
+/*
+ * This section of the file contains utility routines used by
+ * other functions in this file
+ */
+/*
+ * Function:
+ * _XawTextSetField
+ *
+ * Description:
+ * Action routine that can be bound to dialog box's
+ * Text Widget that will send input to the field specified.
+ */
+/*ARGSUSED*/
+void
+_XawTextSetField(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ struct SearchAndReplace *search;
+ Widget cnew, old;
+
+ search = ((TextWidget)XtParent(XtParent(XtParent(w))))->text.search;
+
+ if (*num_params != 1) {
+ SetSearchLabels(search, "Error: SetField Action must have",
+ "exactly one argument", True);
+ return;
+ }
+ switch (params[0][0]) {
+ case 's':
+ case 'S':
+ cnew = search->search_text;
+ old = search->rep_text;
+ break;
+ case 'r':
+ case 'R':
+ old = search->search_text;
+ cnew = search->rep_text;
+ break;
+ default:
+ SetSearchLabels(search,
+ "Error: SetField Action's first Argument must",
+ "be either 'Search' or 'Replace'", True);
+ return;
+ }
+ _SetField(cnew, old);
+}
+
+/*
+ * Function:
+ * _SetField
+ *
+ * Parameters:
+ * cnew - new and old text fields
+ * old - ""
+ *
+ * Description:
+ * Sets the current text field.
+ */
+static void
+_SetField(Widget cnew, Widget old)
+{
+ Arg args[2];
+ Pixel new_border, old_border, old_bg;
+
+ if (!XtIsSensitive(cnew)) {
+ XBell(XtDisplay(old), 0); /* Don't set field to an inactive Widget */
+ return;
+ }
+
+ XtSetKeyboardFocus(XtParent(cnew), cnew);
+
+ XtSetArg(args[0], XtNborderColor, &old_border);
+ XtSetArg(args[1], XtNbackground, &old_bg);
+ XtGetValues(cnew, args, 2);
+
+ XtSetArg(args[0], XtNborderColor, &new_border);
+ XtGetValues(old, args, 1);
+
+ if (old_border != old_bg) /* Colors are already correct, return */
+ return;
+
+ SetResource(old, XtNborderColor, (XtArgVal)old_border);
+ SetResource(cnew, XtNborderColor, (XtArgVal)new_border);
+}
+
+/*
+ * Function:
+ * SetResourceByName
+ *
+ * Parameters:
+ * shell - shell widget of the popup
+ * name - name of the child
+ * res_name - name of the resource
+ * value - value of the resource
+ *
+ * Description:
+ * Sets a resource in any of the dialog children given
+ * name of the child and the shell widget of the dialog.
+ *
+ * Returns:
+ * True if sucessful
+ */
+static Bool
+SetResourceByName(Widget shell, char *name, char *res_name, XtArgVal value)
+{
+ Widget temp_widget;
+ char buf[BUFSIZ];
+
+ (void)XmuSnprintf(buf, sizeof(buf), "%s.%s", FORM_NAME, name);
+
+ if ((temp_widget = XtNameToWidget(shell, buf)) != NULL) {
+ SetResource(temp_widget, res_name, value);
+ return (True);
+ }
+ return (False);
+}
+
+/*
+ * Function:
+ * SetResource
+ *
+ * Parameters:
+ * w - widget
+ * res_name - name of the resource
+ * value - value of the resource
+ *
+ * Description:
+ * Sets a resource in a widget
+ */
+static void
+SetResource(Widget w, char *res_name, XtArgVal value)
+{
+ Arg args[1];
+
+ XtSetArg(args[0], res_name, value);
+ XtSetValues( w, args, 1);
+}
+
+/*
+ * Function:
+ * GetString{Raw}
+ *
+ * Parameters:
+ * text - text widget whose string we will get
+ *
+ * Description:
+ * Gets the value for the string in the popup.
+ *
+ * Returns:
+ * GetString: the string as a MB
+ * GetStringRaw: the exact buffer contents suitable for a search
+ */
+static String
+GetString(Widget text)
+{
+ String string;
+ Arg args[1];
+
+ XtSetArg(args[0], XtNstring, &string);
+ XtGetValues(text, args, 1);
+
+ return (string);
+}
+
+static String
+GetStringRaw(Widget tw)
+{
+ TextWidget ctx = (TextWidget)tw;
+ XawTextPosition last;
+
+ last = XawTextSourceScan(ctx->text.source, 0, XawstAll, XawsdRight,
+ ctx->text.mult, True);
+ return (_XawTextGetText(ctx, 0, last));
+}
+
+/*
+ * Function:
+ * CenterWidgetOnPoint
+ *
+ * Parameters:
+ * w - shell widget
+ * event - event containing the location of the point
+ *
+ * Description:
+ * Centers a shell widget on a point relative to the root window.
+ *
+ * Note:
+ * The widget is not allowed to go off the screen
+ */
+static void
+CenterWidgetOnPoint(Widget w, XEvent *event)
+{
+ Arg args[3];
+ Cardinal num_args;
+ Dimension width, height, b_width;
+ Position x, y, max_x, max_y;
+
+ if (event != NULL) {
+ switch (event->type) {
+ case ButtonPress:
+ case ButtonRelease:
+ x = event->xbutton.x_root;
+ y = event->xbutton.y_root;
+ break;
+ case KeyPress:
+ case KeyRelease:
+ x = event->xkey.x_root;
+ y = event->xkey.y_root;
+ break;
+ default:
+ return;
+ }
+ }
+ else
+ return;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNwidth, &width); num_args++;
+ XtSetArg(args[num_args], XtNheight, &height); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, &b_width); num_args++;
+ XtGetValues(w, args, num_args);
+
+ width += b_width << 1;
+ height += b_width << 1;
+
+ x -= (Position)(width >> 1);
+ if (x < 0)
+ x = 0;
+ if (x > (max_x = (Position)(XtScreen(w)->width - width)))
+ x = max_x;
+
+ y -= (Position)(height >> 1);
+ if (y < 0)
+ y = 0;
+ if (y > (max_y = (Position)(XtScreen(w)->height - height)))
+ y = max_y;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNx, x); num_args++;
+ XtSetArg(args[num_args], XtNy, y); num_args++;
+ XtSetValues(w, args, num_args);
+}
+
+/*
+ * Function:
+ * CreateDialog
+ *
+ * Parameters:
+ * parent - parent of the dialog - the main text widget
+ * ptr - initial_string for the dialog
+ * name - name of the dialog
+ * func - function to create the children of the dialog
+ *
+ * Returns:
+ * Popup shell of the dialog
+ *
+ * Note:
+ * The function argument is passed the following arguments:
+ * form - from widget that is the dialog
+ * ptr - initial string for the dialog's text widget
+ * parent - parent of the dialog - the main text widget
+ */
+static Widget
+CreateDialog(Widget parent, String ptr, String name, AddFunc func)
+{
+ Widget popup, form;
+ Arg args[5];
+ Cardinal num_args;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNiconName, name); num_args++;
+ XtSetArg(args[num_args], XtNgeometry, NULL); num_args++;
+ XtSetArg(args[num_args], XtNallowShellResize, True); num_args++;
+ XtSetArg(args[num_args], XtNtransientFor, GetShell(parent));num_args++;
+ popup = XtCreatePopupShell(name, transientShellWidgetClass,
+ parent, args, num_args);
+
+ form = XtCreateManagedWidget(FORM_NAME, formWidgetClass, popup, NULL, 0);
+ XtManageChild (form);
+
+ (*func)(form, ptr, parent);
+
+ return (popup);
+}
+
+/*
+ * Function
+ * GetShell
+ * nearest shell widget.
+ *
+ * Parameters:
+ * w - widget whose parent shell should be returned
+ *
+ * Returns:
+ * The shell widget among the ancestors of w that is the
+ * fewest levels up in the widget hierarchy.
+ *
+ * Description:
+ * Walks up the widget hierarchy to find the topmost shell widget.
+ */
+static Widget
+GetShell(Widget w)
+{
+ while (w != NULL && !XtIsShell(w))
+ w = XtParent(w);
+
+ return (w);
+}
+
+static Bool
+InParams(String str, String *p, unsigned int n)
+{
+ unsigned int i;
+
+ for (i = 0; i < n; p++, i++)
+ if (!XmuCompareISOLatin1(*p, str))
+ return (True);
+ return (False);
+}
+
+static char *WM_DELETE_WINDOW = "WM_DELETE_WINDOW";
+
+static void
+WMProtocols(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ Atom wm_delete_window;
+ Atom wm_protocols;
+
+ wm_delete_window = XInternAtom(XtDisplay(w), WM_DELETE_WINDOW, True);
+ wm_protocols = XInternAtom(XtDisplay(w), "WM_PROTOCOLS", True);
+
+ /* Respond to a recognized WM protocol request if
+ * event type is ClientMessage and no parameters are passed, or
+ * event type is ClientMessage and event data is matched to parameters, or
+ * event type isn't ClientMessage and parameters make a request
+ */
+#define DO_DELETE_WINDOW InParams(WM_DELETE_WINDOW, params, *num_params)
+
+ if ((event->type == ClientMessage
+ && event->xclient.message_type == wm_protocols
+ && event->xclient.data.l[0] == wm_delete_window
+ && (*num_params == 0 || DO_DELETE_WINDOW))
+ || (event->type != ClientMessage && DO_DELETE_WINDOW)) {
+#undef DO_DELETE_WINDOW
+ Widget cancel;
+ char descendant[DISMISS_NAME_LEN + 2];
+
+ (void)XmuSnprintf(descendant, sizeof(descendant), "*%s", DISMISS_NAME);
+ cancel = XtNameToWidget(w, descendant);
+ if (cancel)
+ XtCallCallbacks(cancel, XtNcallback, NULL);
+ }
+}
+
+static void
+SetWMProtocolTranslations(Widget w)
+{
+ static XtTranslations compiled_table;
+ static XtAppContext *app_context_list;
+ static Cardinal list_size;
+
+ unsigned int i;
+ XtAppContext app_context;
+ Atom wm_delete_window;
+
+ app_context = XtWidgetToApplicationContext(w);
+
+ /* parse translation table once */
+ if (!compiled_table)
+ compiled_table =
+ XtParseTranslationTable("<Message>WM_PROTOCOLS:XawWMProtocols()\n");
+
+ /* add actions once per application context */
+ for (i = 0; i < list_size && app_context_list[i] != app_context; i++)
+ ;
+ if (i == list_size) {
+ XtActionsRec actions[1];
+
+ actions[0].string = "XawWMProtocols";
+ actions[0].proc = WMProtocols;
+ list_size++;
+ app_context_list = (XtAppContext *)XtRealloc
+ ((char *)app_context_list, list_size * sizeof(XtAppContext));
+ XtAppAddActions(app_context, actions, 1);
+ app_context_list[i] = app_context;
+ }
+
+ /* establish communication between the window manager and each shell */
+ XtAugmentTranslations(w, compiled_table);
+ wm_delete_window = XInternAtom(XtDisplay(w), WM_DELETE_WINDOW, False);
+ (void)XSetWMProtocols(XtDisplay(w), XtWindow(w), &wm_delete_window, 1);
+}
diff --git a/libXaw/src/TextSink.c b/libXaw/src/TextSink.c
index 75f952fff..424e4cf3c 100644
--- a/libXaw/src/TextSink.c
+++ b/libXaw/src/TextSink.c
@@ -1,1829 +1,1827 @@
-/* $Xorg: TextSink.c,v 1.4 2001/02/09 02:03:46 xorgcvs Exp $ */
-/*
-
-Copyright 1989, 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/TextSink.c,v 1.21 2002/06/03 21:39:24 paulo Exp $ */
-
-/*
- * Author: Chris Peterson, MIT X Consortium.
- *
- * Much code taken from X11R3 AsciiSink.
- */
-
-/*
- * TextSink.c - TextSink object. (For use with the text widget).
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xaw/TextP.h>
-#include <X11/Xaw/TextSinkP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Prototypes
- */
-static void XawTextSinkClassPartInitialize(WidgetClass);
-static void XawTextSinkInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawTextSinkDestroy(Widget);
-static Boolean XawTextSinkSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-static int MaxLines(Widget, unsigned int);
-static int MaxHeight(Widget, int);
-static void DisplayText(Widget, int, int, XawTextPosition, XawTextPosition,
- Bool);
-static void InsertCursor(Widget, int, int, XawTextInsertState);
-static void ClearToBackground(Widget, int, int, unsigned int, unsigned int);
-static void FindPosition(Widget, XawTextPosition, int, int, Bool,
- XawTextPosition*, int*, int*);
-static void FindDistance(Widget, XawTextPosition, int, XawTextPosition, int*,
- XawTextPosition*, int*);
-static void Resolve(Widget, XawTextPosition, int, int, XawTextPosition*);
-static void SetTabs(Widget, int, short*);
-static void GetCursorBounds(Widget, XRectangle*);
-
-#ifndef OLDXAW
-static Boolean CvtStringToPropertyList(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Boolean CvtPropertyListToString(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static Bool BeginPaint(Widget);
-static Bool EndPaint(Widget);
-static void SetXlfdDefaults(Display*, XawTextProperty*);
-#endif
-
-/*
- * External
- */
-void _XawTextSinkClearToBackground(Widget, int, int, unsigned, unsigned);
-void _XawTextSinkDisplayText(Widget, int, int, XawTextPosition, XawTextPosition,
- Bool);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(TextSinkRec, text_sink.field)
-static XtResource resources[] = {
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(foreground),
- XtRString,
- XtDefaultForeground
- },
- {
- XtNbackground,
- XtCBackground,
- XtRPixel,
- sizeof(Pixel),
- offset(background),
- XtRString,
- XtDefaultBackground
- },
-#ifndef OLDXAW
- {
- XtNcursorColor,
- XtCColor,
- XtRPixel,
- sizeof(Pixel),
- offset(cursor_color),
- XtRString,
- XtDefaultForeground
- },
- {
- XawNtextProperties,
- XawCTextProperties,
- XawRTextProperties,
- sizeof(XawTextPropertyList*),
- offset(properties),
- XtRImmediate,
- NULL
- },
-#endif
-};
-#undef offset
-
-#ifndef OLDXAW
-static TextSinkExtRec extension_rec = {
- NULL, /* next_extension */
- NULLQUARK, /* record_type */
- 1, /* version */
- sizeof(TextSinkExtRec), /* record_size */
- BeginPaint,
- NULL,
- NULL,
- EndPaint
-};
-
-static XrmQuark Qdefault;
-#endif
-
-#define Superclass (&objectClassRec)
-TextSinkClassRec textSinkClassRec = {
- /* object */
- {
- (WidgetClass)Superclass, /* superclass */
- "TextSink", /* class_name */
- sizeof(TextSinkRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- XawTextSinkClassPartInitialize, /* class_part_initialize */
- False, /* class_inited */
- XawTextSinkInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* obj1 */
- NULL, /* obj2 */
- 0, /* obj3 */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* obj4 */
- False, /* obj5 */
- False, /* obj6 */
- False, /* obj7 */
- XawTextSinkDestroy, /* destroy */
- NULL, /* obj8 */
- NULL, /* obj9 */
- XawTextSinkSetValues, /* set_values */
- NULL, /* set_values_hook */
- NULL, /* obj10 */
- NULL, /* get_values_hook */
- NULL, /* obj11 */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* obj12 */
- NULL, /* obj13 */
- NULL, /* obj14 */
- NULL, /* extension */
- },
- /* text_sink */
- {
- DisplayText, /* DisplayText */
- InsertCursor, /* InsertCursor */
- ClearToBackground, /* ClearToBackground */
- FindPosition, /* FindPosition */
- FindDistance, /* FindDistance */
- Resolve, /* Resolve */
- MaxLines, /* MaxLines */
- MaxHeight, /* MaxHeight */
- SetTabs, /* SetTabs */
- GetCursorBounds, /* GetCursorBounds */
- },
-};
-
-WidgetClass textSinkObjectClass = (WidgetClass)&textSinkClassRec;
-
-/*
- * Implementation
- */
-static void
-XawTextSinkClassPartInitialize(WidgetClass wc)
-{
- TextSinkObjectClass t_src, superC;
-#ifndef OLDXAW
- static XtConvertArgRec CvtArgs[] = {
- {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.self),
- sizeof(Widget)},
- };
-#endif
-
- t_src = (TextSinkObjectClass) wc;
- superC = (TextSinkObjectClass) t_src->object_class.superclass;
-
-#ifndef OLDXAW
- extension_rec.record_type = XrmPermStringToQuark("TextSink");
- extension_rec.next_extension = (XtPointer)t_src->text_sink_class.extension;
- t_src->text_sink_class.extension = &extension_rec;
-
- Qdefault = XrmPermStringToQuark("default");
-#endif
-
- /*
- * We don't need to check for null super since we'll get to TextSink
- * eventually.
- */
- if (t_src->text_sink_class.DisplayText == XtInheritDisplayText)
- t_src->text_sink_class.DisplayText =
- superC->text_sink_class.DisplayText;
-
- if (t_src->text_sink_class.InsertCursor == XtInheritInsertCursor)
- t_src->text_sink_class.InsertCursor =
- superC->text_sink_class.InsertCursor;
-
- if (t_src->text_sink_class.ClearToBackground== XtInheritClearToBackground)
- t_src->text_sink_class.ClearToBackground =
- superC->text_sink_class.ClearToBackground;
-
- if (t_src->text_sink_class.FindPosition == XtInheritFindPosition)
- t_src->text_sink_class.FindPosition =
- superC->text_sink_class.FindPosition;
-
- if (t_src->text_sink_class.FindDistance == XtInheritFindDistance)
- t_src->text_sink_class.FindDistance =
- superC->text_sink_class.FindDistance;
-
- if (t_src->text_sink_class.Resolve == XtInheritResolve)
- t_src->text_sink_class.Resolve =
- superC->text_sink_class.Resolve;
-
- if (t_src->text_sink_class.MaxLines == XtInheritMaxLines)
- t_src->text_sink_class.MaxLines =
- superC->text_sink_class.MaxLines;
-
- if (t_src->text_sink_class.MaxHeight == XtInheritMaxHeight)
- t_src->text_sink_class.MaxHeight =
- superC->text_sink_class.MaxHeight;
-
- if (t_src->text_sink_class.SetTabs == XtInheritSetTabs)
- t_src->text_sink_class.SetTabs =
- superC->text_sink_class.SetTabs;
-
- if (t_src->text_sink_class.GetCursorBounds == XtInheritGetCursorBounds)
- t_src->text_sink_class.GetCursorBounds =
- superC->text_sink_class.GetCursorBounds;
-
-#ifndef OLDXAW
- XtSetTypeConverter(XtRString, XawRTextProperties, CvtStringToPropertyList,
- &CvtArgs[0], XtNumber(CvtArgs), XtCacheNone, NULL);
- XtSetTypeConverter(XawRTextProperties, XtRString, CvtPropertyListToString,
- NULL, 0, XtCacheNone, NULL);
-#endif
-}
-
-/*
- * Function:
- * XawTextSinkInitialize
- *
- * Parameters:
- * request - requested and new values for the object instance
- * cnew - ""
- *
- * Description:
- * Initializes the TextSink Object.
- */
-/*ARGSUSED*/
-static void
-XawTextSinkInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- TextSinkObject sink = (TextSinkObject)cnew;
-
- sink->text_sink.tab_count = 0; /* Initialize the tab stops. */
- sink->text_sink.tabs = NULL;
- sink->text_sink.char_tabs = NULL;
-#ifndef OLDXAW
- sink->text_sink.paint = NULL;
-#endif
-}
-
-/*
- * Function:
- * XawTextSinkDestroy
- *
- * Parameters:
- * w - TextSink Object
- *
- * Description:
- * This function cleans up when the object is destroyed.
- */
-static void
-XawTextSinkDestroy(Widget w)
-{
- TextSinkObject sink = (TextSinkObject) w;
-
- XtFree((char *)sink->text_sink.tabs);
- XtFree((char *)sink->text_sink.char_tabs);
-}
-
-/*
- * Function:
- * XawTextSinkSetValues
- *
- * Parameters:
- * current - current state of the object
- * request - what was requested
- * cnew - what the object will become
- *
- * Description:
- * Sets the values for the TextSink.
- *
- * Returns:
- * True if redisplay is needed
- */
-/*ARGSUSED*/
-static Boolean
-XawTextSinkSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- TextSinkObject w = (TextSinkObject)cnew;
- TextSinkObject old_w = (TextSinkObject)current;
-
- if (w->text_sink.foreground != old_w->text_sink.foreground)
- ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
-
- return (False);
-}
-
-/*
- * Function:
- * DisplayText
- *
- * Parameters:
- * w - TextSink Object
- * x - location to start drawing text
- * y - ""
- * pos1 - location of starting and ending points in the text buffer
- * pos2 - ""
- * highlight - hightlight this text?
- *
- * Description:
- * Stub function that in subclasses will display text.
- */
-/*ARGSUSED*/
-static void
-DisplayText(Widget w, int x, int y,
- XawTextPosition pos1, XawTextPosition pos2, Bool highlight)
-{
- return;
-}
-
-/*
- * Function:
- * InsertCursor
- *
- * Parameters:
- * w - TextSink Object
- * x - location for the cursor
- * y - ""
- * state - whether to turn the cursor on, or off
- *
- * Description:
- * Places the InsertCursor.
- */
-/*ARGSUSED*/
-static void
-InsertCursor(Widget w, int x, int y, XawTextInsertState state)
-{
- return;
-}
-
-/*
- * Function:
- * ClearToBackground
- *
- * Parameters:
- * w - TextSink Object
- * x - location of area to clear
- * y - ""
- * width - size of area to clear
- * height - ""
- *
- * Description:
- * Clears a region of the sink to the background color.
- */
-/*ARGSUSED*/
-static void
-ClearToBackground(Widget w, int x, int y,
- unsigned int width, unsigned int height)
-{
- /*
- * Don't clear in height or width are zero
- * XClearArea() has special semantic for these values
- */
- TextWidget xaw = (TextWidget)XtParent(w);
- Position x1, y1, x2, y2;
-
- x1 = XawMax(x, xaw->text.r_margin.left);
- y1 = XawMax(y, xaw->text.r_margin.top);
- x2 = XawMin(x + (int)width, (int)XtWidth(xaw) - xaw->text.r_margin.right);
- y2 = XawMin(y + (int)height, (int)XtHeight(xaw) - xaw->text.r_margin.bottom);
-
- x = x1;
- y = y1;
- width = XawMax(0, x2 - x1);
- height = XawMax(0, y2 - y1);
-
- if (height != 0 && width != 0)
- XClearArea(XtDisplayOfObject(w), XtWindowOfObject(w),
- x, y, width, height, False);
-}
-
-/*
- * Function:
- * FindPosition
- *
- * Parameters:
- * w - TextSink Object
- * fromPos - reference position
- * fromX - reference location
- * width - width of section to paint text
- * stopAtWordBreak - returned position is a word break?
- * resPos - position found (return)
- * resWidth - Width actually used (return)
- * resHeight - Height actually used (return)
- *
- * Description:
- * Finds a position in the text.
- */
-/*ARGSUSED*/
-static void
-FindPosition(Widget w, XawTextPosition fromPos, int fromx, int width,
- Bool stopAtWordBreak, XawTextPosition *resPos,
- int *resWidth, int *resHeight)
-{
- *resPos = fromPos;
- *resHeight = *resWidth = 0;
-}
-
-/*
- * Function:
- * FindDistance
- *
- * Parameters:
- * w - TextSink Object
- * fromPos - starting Position
- * fromX - x location of starting Position
- * toPos - end Position
- * resWidth - Distance between fromPos and toPos
- * resPos - Acutal toPos used
- * resHeight - Height required by this text
- *
- * Description:
- * Find the Pixel Distance between two text Positions.
- */
-/*ARGSUSED*/
-static void
-FindDistance(Widget w, XawTextPosition fromPos, int fromx,
- XawTextPosition toPos, int *resWidth,
- XawTextPosition *resPos, int *resHeight)
-{
- *resWidth = *resHeight = 0;
- *resPos = fromPos;
-}
-
-/*
- * Function:
- * Resolve
- *
- * Parameters:
- * w - TextSink Object
- * pos - reference Position
- * fromx - reference Location
- * width - width to move
- * resPos - resulting position
- *
- * Description:
- * Resloves a location to a position.
- */
-/*ARGSUSED*/
-static void
-Resolve(Widget w, XawTextPosition pos, int fromx, int width,
- XawTextPosition *resPos)
-{
- *resPos = pos;
-}
-
-/*
- * Function:
- * MaxLines
- *
- * Parameters:
- * w - TextSink Object
- * height - height to fit lines into
- *
- * Description:
- * Finds the Maximum number of lines that will fit in a given height.
- *
- * Returns:
- * Number of lines that will fit
- */
-/*ARGSUSED*/
-static int
-MaxLines(Widget w, unsigned int height)
-{
- /*
- * The fontset has gone down to descent Sink Widget, so
- * the functions such MaxLines, SetTabs... are bound to the descent.
- *
- * by Li Yuhong, Jan. 15, 1991
- */
- return (0);
-}
-
-/*
- * Function:
- * MaxHeight
- *
- * Parameters:
- * w - TextSink Object
- * lines - number of lines
- *
- * Description:
- * Finds the Minium height that will contain a given number lines.
- *
- * Returns:
- * the height
- */
-/*ARGSUSED*/
-static int
-MaxHeight(Widget w, int lines)
-{
- return (0);
-}
-
-/*
- * Function:
- * SetTabs
- *
- * Parameters:
- * w - TextSink Object
- * tab_count - the number of tabs in the list
- * tabs - text positions of the tabs
- * Description:
- * Sets the Tab stops.
- */
-/*ARGSUSED*/
-static void
-SetTabs(Widget w, int tab_count, short *tabs)
-{
- return;
-}
-
-/*
- * Function:
- * GetCursorBounds
- *
- * Parameters:
- * w - TextSinkObject.
- * rect - X rectangle containing the cursor bounds
- *
- * Description:
- * Finds the bounding box for the insert cursor (caret)
- */
-/*ARGSUSED*/
-static void
-GetCursorBounds(Widget w, XRectangle *rect)
-{
- rect->x = rect->y = rect->width = rect->height = 0;
-}
-
-/*
- * Public Functions
- */
-/*
- * Function:
- * XawTextSinkDisplayText
- *
- * Parameters:
- * w - TextSink Object
- * x - location to start drawing text
- * y - ""
- * pos1 - location of starting and ending points in the text buffer
- * pos2 - ""
- * highlight - hightlight this text?
- */
-/*ARGSUSED*/
-void
-XawTextSinkDisplayText(Widget w,
-#if NeedWidePrototypes
- int x, int y,
-#else
- Position x, Position y,
-#endif
- XawTextPosition pos1, XawTextPosition pos2,
-#if NeedWidePrototypes
- int highlight
-#else
- Boolean highlight
-#endif
-)
-{
- _XawTextSinkDisplayText(w, x, y, pos1, pos2, highlight);
-}
-
-void
-_XawTextSinkDisplayText(Widget w, int x, int y,
- XawTextPosition pos1, XawTextPosition pos2,
- Bool highlight)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- (*cclass->text_sink_class.DisplayText)(w, x, y, pos1, pos2, highlight);
-}
-
-/*
- * Function:
- * XawTextSinkInsertCursor
- *
- * Parameters:
- * w - TextSink Object
- * x - location for the cursor
- * y - ""
- * state - whether to turn the cursor on, or off
- *
- * Description:
- * Places the InsertCursor.
- */
-/*ARGSUSED*/
-void
-#if NeedWidePrototypes
-XawTextSinkInsertCursor(Widget w, int x, int y, int state)
-#else
-XawTextSinkInsertCursor(Widget w, Position x, Position y, XawTextInsertState state)
-#endif
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- (*cclass->text_sink_class.InsertCursor)(w, x, y, state);
-}
-
-/*
- * Function:
- * XawTextSinkClearToBackground
- *
- * Parameters:
- * w - TextSink Object
- * x - location of area to clear
- * y - ""
- * width - size of area to clear
- * height - ""
- *
- * Description:
- * Clears a region of the sink to the background color.
- */
-/*ARGSUSED*/
-void
-XawTextSinkClearToBackground(Widget w,
-#if NeedWidePrototypes
- int x, int y,
- unsigned int width, unsigned int height
-#else
- Position x, Position y,
- Dimension width, Dimension height
-#endif
-)
-{
- _XawTextSinkClearToBackground(w, x, y, width, height);
-}
-
-void
-_XawTextSinkClearToBackground(Widget w,
- int x, int y,
- unsigned int width, unsigned int height)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- (*cclass->text_sink_class.ClearToBackground)(w, x, y, width, height);
-}
-
-/*
- * Function:
- * XawTextSinkFindPosition
- *
- * Parameters:
- * w - TextSink Object
- * fromPos - reference position
- * fromX - reference location
- * width - width of section to paint text
- * stopAtWordBreak - returned position is a word break?
- * resPos - position found (return)
- * resWidth - Width actually used (return)
- * resHeight - Height actually used (return)
- *
- * Description:
- * Finds a position in the text.
- */
-/*ARGSUSED*/
-void
-XawTextSinkFindPosition(Widget w, XawTextPosition fromPos, int fromx, int width,
-#if NeedWidePrototypes
- int stopAtWordBreak,
-#else
- Boolean stopAtWordBreak,
-#endif
- XawTextPosition *resPos, int *resWidth, int *resHeight)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- (*cclass->text_sink_class.FindPosition)(w, fromPos, fromx, width,
- stopAtWordBreak,
- resPos, resWidth, resHeight);
-}
-
-/*
- * Function:
- * XawTextSinkFindDistance
- *
- * Parameters:
- * w - TextSink Object
- * fromPos - starting Position
- * fromX - x location of starting Position
- * toPos - end Position
- * resWidth - Distance between fromPos and toPos
- * resPos - Acutal toPos used
- * resHeight - Height required by this text
- *
- * Description:
- * Find the Pixel Distance between two text Positions.
- */
-/*ARGSUSED*/
-void
-XawTextSinkFindDistance(Widget w, XawTextPosition fromPos, int fromx,
- XawTextPosition toPos, int *resWidth,
- XawTextPosition *resPos, int *resHeight)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- (*cclass->text_sink_class.FindDistance)(w, fromPos, fromx, toPos,
- resWidth, resPos, resHeight);
-}
-
-/*
- * Function:
- * XawTextSinkResolve
- *
- * Parameters:
- * w - TextSink Object
- * pos - reference Position
- * fromx - reference Location
- * width - width to move
- * resPos - resulting position
- *
- * Description:
- * Resloves a location to a position.
- */
-/*ARGSUSED*/
-void
-XawTextSinkResolve(Widget w, XawTextPosition pos, int fromx, int width,
- XawTextPosition *resPos)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass) w->core.widget_class;
-
- (*cclass->text_sink_class.Resolve)(w, pos, fromx, width, resPos);
-}
-
-/*
- * Function:
- * XawTextSinkMaxLines
- *
- * Parameters:
- * w - TextSink Object
- * height - height to fit lines into
- *
- * Description:
- * Finds the Maximum number of lines that will fit in a given height.
- *
- * Returns:
- * Number of lines that will fit
- */
-/*ARGSUSED*/
-int
-#if NeedWidePrototypes
-XawTextSinkMaxLines(Widget w, unsigned int height)
-#else
-XawTextSinkMaxLines(Widget w, Dimension height)
-#endif
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- return((*cclass->text_sink_class.MaxLines)(w, height));
-}
-
-/*
- * Function:
- * XawTextSinkMaxHeight
- *
- * Parameters:
- * w - TextSink Object
- * lines - number of lines
- *
- * Description:
- * Finds the Minium height that will contain a given number lines.
- *
- * Returns:
- * the height
- */
-/*ARGSUSED*/
-int
-XawTextSinkMaxHeight(Widget w, int lines)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- return((*cclass->text_sink_class.MaxHeight)(w, lines));
-}
-
-/*
- * Function:
- * XawTextSinkSetTabs
- *
- * Parameters:
- * w - TextSink Object
- * tab_count - the number of tabs in the list
- * tabs - text positions of the tabs
- * Description:
- * Sets the Tab stops.
- */
-void
-XawTextSinkSetTabs(Widget w, int tab_count, int *tabs)
-{
- if (tab_count > 0) {
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
- short *char_tabs = (short*)XtMalloc((unsigned)tab_count * sizeof(short));
- short *tab, len = 0;
- int i;
-
- for (i = tab_count, tab = char_tabs; i; i--) {
- if ((short)*tabs > len)
- *tab++ = (len = (short)*tabs++);
- else {
- tabs++;
- --tab_count;
- }
- }
-
- if (tab_count > 0)
- (*cclass->text_sink_class.SetTabs)(w, tab_count, char_tabs);
- XtFree((char *)char_tabs);
- }
-}
-
-/*
- * Function:
- * XawTextSinkGetCursorBounds
- *
- * Parameters:
- * w - TextSinkObject
- * rect - X rectance containing the cursor bounds
- *
- * Description:
- * Finds the bounding box for the insert cursor (caret).
- */
-/*ARGSUSED*/
-void
-XawTextSinkGetCursorBounds(Widget w, XRectangle *rect)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- (*cclass->text_sink_class.GetCursorBounds)(w, rect);
-}
-
-#ifndef OLDXAW
-Bool
-XawTextSinkBeginPaint(Widget w)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- if (cclass->text_sink_class.extension->BeginPaint == NULL ||
- cclass->text_sink_class.extension->PreparePaint == NULL ||
- cclass->text_sink_class.extension->DoPaint == NULL ||
- cclass->text_sink_class.extension->EndPaint == NULL)
- return (False);
-
- return ((*cclass->text_sink_class.extension->BeginPaint)(w));
-}
-
-static Bool
-BeginPaint(Widget w)
-{
- TextSinkObject sink = (TextSinkObject)w;
-
- if (sink->text_sink.paint != NULL)
- return (False);
-
- sink->text_sink.paint = XtNew(XawTextPaintList);
- sink->text_sink.paint->clip = XmuCreateArea();
- sink->text_sink.paint->hightabs = NULL;
- sink->text_sink.paint->paint = NULL;
- sink->text_sink.paint->bearings = NULL;
-
- return (True);
-}
-
-void
-XawTextSinkPreparePaint(Widget w, int y, int line, XawTextPosition from,
- XawTextPosition to, Bool highlight)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- (*cclass->text_sink_class.extension->PreparePaint)
- (w, y, line, from, to, highlight);
-}
-
-#if 0
-/*ARGSUSED*/
-static void
-PreparePaint(Widget w, int y, int line, XawTextPosition from, XawTextPosition to,
- Bool highlight)
-{
-}
-#endif
-
-void
-XawTextSinkDoPaint(Widget w)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- (*cclass->text_sink_class.extension->DoPaint)(w);
-}
-
-#if 0
-/*ARGSUSED*/
-static void
-DoPaint(Widget w)
-{
-}
-#endif
-
-Bool
-XawTextSinkEndPaint(Widget w)
-{
- TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
-
- return ((*cclass->text_sink_class.extension->EndPaint)(w));
-}
-
-static Bool
-EndPaint(Widget w)
-{
- TextSinkObject sink = (TextSinkObject)w;
- XawTextPaintStruct *paint, *next;
-
- if (sink->text_sink.paint == NULL)
- return (False);
-
- XmuDestroyArea(sink->text_sink.paint->clip);
- if (sink->text_sink.paint->hightabs)
- XmuDestroyArea(sink->text_sink.paint->hightabs);
- paint = sink->text_sink.paint->paint;
- while (paint) {
- next = paint->next;
- if (paint->text)
- XtFree((XtPointer)paint->text);
- if (paint->backtabs)
- XmuDestroyArea(paint->backtabs);
- XtFree((XtPointer)paint);
- paint = next;
- }
-
- paint = sink->text_sink.paint->bearings;
- while (paint) {
- next = paint->next;
- if (paint->text)
- XtFree((XtPointer)paint->text);
- XtFree((XtPointer)paint);
- paint = next;
- }
-
- XtFree((XtPointer)sink->text_sink.paint);
- sink->text_sink.paint = NULL;
- return (True);
-}
-
-static XawTextPropertyList **prop_lists;
-static Cardinal num_prop_lists;
-
-static int
-bcmp_qident(_Xconst void *left, _Xconst void *right)
-{
- return ((long)left - (*(XawTextProperty**)right)->identifier);
-}
-
-static int
-qcmp_qident(_Xconst void *left, _Xconst void *right)
-{
- return ((*(XawTextProperty**)left)->identifier -
- (*(XawTextProperty**)right)->identifier);
-}
-
-static void
-SetXlfdDefaults(Display *display, XawTextProperty *property)
-{
- Atom atom = XInternAtom(display, "FONT", True);
- unsigned long value;
- char *str;
-
- if (XGetFontProperty(property->font, atom, &value)) {
- char *xlfd = XGetAtomName(display, value);
-
- if (xlfd) {
- char *sep = xlfd + 1;
- char *name = sep;
-
- property->xlfd = XrmStringToQuark(xlfd);
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->foundry = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->family = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->weight = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->slant = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->setwidth = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->addstyle = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->pixel_size = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->point_size = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->res_x = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->res_y = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->spacing = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->avgwidth = XrmStringToQuark(name);
- name = sep;
-
- sep = strchr(sep, '-'); *sep++ = '\0';
- property->registry = XrmStringToQuark(name);
- name = sep;
-
- property->encoding = XrmStringToQuark(name);
-
- XFree(xlfd);
- }
- }
-
- atom = XInternAtom(display, "UNDERLINE_THICKNESS", True);
- if (XGetFontProperty(property->font, atom, &value) &&
- (str = XGetAtomName(display, value)) != NULL) {
- property->underline_thickness = atoi(str);
- XFree(str);
- }
- else {
- /* XLFD says:
- * CapStemWidth = average width of the stems of capitals
- * if (UNDERLINE_THICKNESS undefined) then
- * UNDERLINE_THICKNESS = CapStemWidth
- *
- * How do I know the value of CapStemWidth??
- */
- if (property->pixel_size != NULLQUARK) {
- property->underline_thickness =
- atoi(XrmQuarkToString(property->pixel_size)) / 10;
- property->underline_thickness =
- XawMax(1, property->underline_thickness);
- }
- else
- property->underline_thickness = 1;
- }
-
- atom = XInternAtom(display, "UNDERLINE_POSITION", True);
- if (XGetFontProperty(property->font, atom, &value) &&
- (str = XGetAtomName(display, value)) != NULL) {
- property->underline_position = atoi(str);
- XFree(str);
- }
- else
- /* XLFD says:
- * if (UNDERLINE_POSITION undefined) then
- * UNDERLINE_POSITION = ROUND((maximum_descent) / 2)
- */
- property->underline_position =
- property->font->max_bounds.descent >> 1;
-
- /* I am assuming xlfd does not consider that lines are
- * centered in the path */
- property->underline_position += property->underline_thickness >> 1;
-
-}
-
-static void
-DestroyTextPropertyList(XawTextPropertyList *list)
-{
- int i;
-
- for (i = 0; i < list->num_properties; i++) {
- if (list->properties[i]->font)
- XFreeFont(DisplayOfScreen(list->screen), list->properties[i]->font);
- XtFree((char*)list->properties[i]);
- }
- if (list->properties)
- XtFree((char*)list->properties);
- XtFree((char*)list);
-}
-
-static XawTextProperty *
-_XawTextSinkGetProperty(XawTextPropertyList *list, XrmQuark property)
-{
- if (property != NULLQUARK && list && list->properties) {
- XawTextProperty **ptr = (XawTextProperty**)
- bsearch((void*)(long)property,
- list->properties, list->num_properties,
- sizeof(XawTextProperty*), bcmp_qident);
-
- if (ptr)
- return (*ptr);
- }
-
- return (NULL);
-}
-
-XawTextProperty *
-XawTextSinkGetProperty(Widget w, XrmQuark property)
-{
- TextSinkObject sink = (TextSinkObject)w;
- XawTextPropertyList *list = sink->text_sink.properties;
-
- return (_XawTextSinkGetProperty(list, property));
-}
-
-XawTextProperty *
-XawTextSinkCopyProperty(Widget w, XrmQuark property)
-{
- XawTextProperty *cur, *ret;
-
- if ((cur = XawTextSinkGetProperty(w, property)) == NULL)
- cur = XawTextSinkGetProperty(w, Qdefault);
- ret = (XawTextProperty*)XtCalloc(1, sizeof(XawTextProperty));
- if (cur)
- memcpy(ret, cur, sizeof(XawTextProperty));
- ret->identifier = NULLQUARK;
- ret->mask &= ~XAW_TPROP_FONT;
-
- return (ret);
-}
-
-static XawTextProperty *
-_XawTextSinkAddProperty(XawTextPropertyList *list, XawTextProperty *property,
- Bool replace)
-{
- XawTextProperty *result;
- XColor color;
- char identifier[1024];
- char foreground[16];
- char background[16];
- char *foundry, *family, *weight, *slant, *setwidth, *addstyle, *pixel_size,
- *point_size, *res_x, *res_y, *spacing, *avgwidth, *registry, *encoding;
- char *xlfd;
- static char *asterisk = "*", *null = "";
- XrmQuark quark;
-
- if (list == NULL || property == NULL)
- return (NULL);
-
- if (property->mask & XAW_TPROP_FOREGROUND) {
- color.pixel = property->foreground;
- XQueryColor(DisplayOfScreen(list->screen), list->colormap, &color);
- XmuSnprintf(foreground, sizeof(foreground), "%04x%04x%04x",
- color.red, color.green, color.blue);
- }
- else
- strcpy(foreground, asterisk);
- if (property->mask & XAW_TPROP_BACKGROUND) {
- color.pixel = property->background;
- XQueryColor(DisplayOfScreen(list->screen), list->colormap, &color);
- XmuSnprintf(background, sizeof(background), "%04x%04x%04x",
- color.red, color.green, color.blue);
- }
- else
- strcpy(background, asterisk);
-
- if (property->xlfd_mask & XAW_TPROP_FOUNDRY)
- foundry = XrmQuarkToString(property->foundry);
- else
- foundry = asterisk;
-
- /* use default, or what was requested */
- if (property->family != NULLQUARK)
- family = XrmQuarkToString(property->family);
- else
- family = asterisk;
- if (property->weight != NULLQUARK)
- weight = XrmQuarkToString(property->weight);
- else
- weight = asterisk;
- if (property->slant != NULLQUARK) {
- slant = XrmQuarkToString(property->slant);
- if (toupper(*slant) != 'R')
- slant = asterisk; /* X defaults to italics, so, don't
- care in resolving between `I' and `O' */
- }
- else
- slant = asterisk;
-
- if (property->xlfd_mask & XAW_TPROP_SETWIDTH)
- setwidth = XrmQuarkToString(property->setwidth);
- else
- setwidth = asterisk;
- if (property->xlfd_mask & XAW_TPROP_ADDSTYLE)
- addstyle = XrmQuarkToString(property->addstyle);
- else
- addstyle = null;
-
- /* use default, or what was requested */
- if (!(property->mask & XAW_TPROP_POINTSIZE) &&
- property->pixel_size != NULLQUARK)
- pixel_size = XrmQuarkToString(property->pixel_size);
- else
- pixel_size = asterisk;
-
- if (property->xlfd_mask & XAW_TPROP_POINTSIZE)
- point_size = XrmQuarkToString(property->point_size);
- else
- point_size = asterisk;
- if (property->xlfd_mask & XAW_TPROP_RESX)
- res_x = XrmQuarkToString(property->res_x);
- else
- res_x = asterisk;
- if (property->xlfd_mask & XAW_TPROP_RESY)
- res_y = XrmQuarkToString(property->res_y);
- else
- res_y = asterisk;
- if (property->xlfd_mask & XAW_TPROP_SPACING)
- spacing = XrmQuarkToString(property->spacing);
- else
- spacing = asterisk;
- if (property->xlfd_mask & XAW_TPROP_AVGWIDTH)
- avgwidth = XrmQuarkToString(property->avgwidth);
- else
- avgwidth = asterisk;
-
- /* use default, or what that was requested */
- if (property->registry != NULLQUARK)
- registry = XrmQuarkToString(property->registry);
- else
- registry = asterisk;
- if (property->encoding != NULLQUARK)
- encoding = XrmQuarkToString(property->encoding);
- else
- encoding = asterisk;
-
- if (replace) {
- result = XtNew(XawTextProperty);
- memcpy(result, property, sizeof(XawTextProperty));
- }
- else
- result = property;
-
- /* XXX should do the best to load a suitable font here */
- if (!(result->mask & XAW_TPROP_FONT)) {
- XmuSnprintf(identifier, sizeof(identifier),
- "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s",
- foundry, family, weight, slant, setwidth, addstyle, pixel_size,
- point_size, res_x, res_y, spacing, avgwidth, registry, encoding);
- if ((result->font = XLoadQueryFont(DisplayOfScreen(list->screen),
- identifier)) != NULL) {
- result->mask |= XAW_TPROP_FONT;
- SetXlfdDefaults(DisplayOfScreen(list->screen), result);
- }
- else
- result->mask &= ~XAW_TPROP_FONT;
- }
-
- if (result->font)
- xlfd = XrmQuarkToString(result->xlfd);
- else
- xlfd = null;
-
- XmuSnprintf(identifier, sizeof(identifier), "%08lx%08lx%s%s%d%d%d%d%s",
- property->mask, property->xlfd_mask,
- foreground, background,
- (result->mask & XAW_TPROP_UNDERLINE) != 0,
- (result->mask & XAW_TPROP_OVERSTRIKE) != 0,
- (result->mask & XAW_TPROP_SUBSCRIPT) != 0,
- (result->mask & XAW_TPROP_SUPERSCRIPT) != 0,
- xlfd);
-
- quark = XrmStringToQuark(identifier);
- if (result->identifier == NULLQUARK)
- result->identifier = quark;
- result->code = quark;
-
- if ((property = _XawTextSinkGetProperty(list, result->identifier)) != NULL) {
- if (result->font)
- XFreeFont(DisplayOfScreen(list->screen), result->font);
- if (replace)
- XtFree((XtPointer)result);
-
- return (property);
- }
-
- list->properties = (XawTextProperty**)
- XtRealloc((XtPointer)list->properties, sizeof(XawTextProperty*) *
- (list->num_properties + 1));
- list->properties[list->num_properties++] = result;
- qsort((void*)list->properties, list->num_properties,
- sizeof(XawTextProperty*), qcmp_qident);
-
- return (result);
-}
-
-XawTextProperty *
-XawTextSinkAddProperty(Widget w, XawTextProperty *property)
-{
- TextSinkObject sink = (TextSinkObject)w;
- XawTextPropertyList *list = sink->text_sink.properties;
-
- return (_XawTextSinkAddProperty(list, property, True));
-}
-
-XawTextProperty *
-XawTextSinkCombineProperty(Widget w,
- XawTextProperty *property, XawTextProperty *combine,
- Bool override)
-{
- if (property == NULL || combine == NULL)
- return (property);
-
- if ((override || !(property->mask & XAW_TPROP_FOREGROUND)) &&
- (combine->mask & XAW_TPROP_FOREGROUND)) {
- property->mask |= XAW_TPROP_FOREGROUND;
- property->foreground = combine->foreground;
- }
- if ((override || !(property->mask & XAW_TPROP_BACKGROUND)) &&
- (combine->mask & XAW_TPROP_BACKGROUND)) {
- property->mask |= XAW_TPROP_BACKGROUND;
- property->background = combine->background;
- }
- if ((override || !(property->mask & XAW_TPROP_FPIXMAP)) &&
- (combine->mask & XAW_TPROP_FPIXMAP)) {
- property->mask |= XAW_TPROP_FPIXMAP;
- property->foreground_pixmap = combine->foreground_pixmap;
- }
- if ((override || !(property->mask & XAW_TPROP_BPIXMAP)) &&
- (combine->mask & XAW_TPROP_BPIXMAP)) {
- property->mask |= XAW_TPROP_BPIXMAP;
- property->background_pixmap = combine->background_pixmap;
- }
- if (combine->mask & XAW_TPROP_UNDERLINE)
- property->mask |= XAW_TPROP_UNDERLINE;
- if (combine->mask & XAW_TPROP_OVERSTRIKE)
- property->mask |= XAW_TPROP_OVERSTRIKE;
- if ((override || !(property->mask & XAW_TPROP_SUPERSCRIPT)) &&
- (combine->mask & XAW_TPROP_SUBSCRIPT))
- property->mask |= XAW_TPROP_SUBSCRIPT;
- if ((property->mask & XAW_TPROP_SUBSCRIPT) &&
- (combine->mask & XAW_TPROP_SUPERSCRIPT))
- property->mask |= XAW_TPROP_SUPERSCRIPT;
- if ((override || !(property->xlfd_mask & XAW_TPROP_FOUNDRY)) &&
- (combine->xlfd_mask & XAW_TPROP_FOUNDRY)) {
- property->xlfd_mask |= XAW_TPROP_FOUNDRY;
- property->foundry = combine->foundry;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_FAMILY)) &&
- (combine->xlfd_mask & XAW_TPROP_FAMILY)) {
- property->xlfd_mask |= XAW_TPROP_FAMILY;
- property->family = combine->family;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_WEIGHT)) &&
- (combine->xlfd_mask & XAW_TPROP_WEIGHT)) {
- property->xlfd_mask |= XAW_TPROP_WEIGHT;
- property->weight = combine->weight;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_SLANT)) &&
- (combine->xlfd_mask & XAW_TPROP_SLANT)) {
- property->xlfd_mask |= XAW_TPROP_SLANT;
- property->slant = combine->slant;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_SETWIDTH)) &&
- (combine->xlfd_mask & XAW_TPROP_SETWIDTH)) {
- property->xlfd_mask |= XAW_TPROP_SETWIDTH;
- property->setwidth = combine->setwidth;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_ADDSTYLE)) &&
- (combine->xlfd_mask & XAW_TPROP_ADDSTYLE)) {
- property->xlfd_mask |= XAW_TPROP_ADDSTYLE;
- property->addstyle = combine->addstyle;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_PIXELSIZE)) &&
- (combine->xlfd_mask & XAW_TPROP_PIXELSIZE)) {
- property->xlfd_mask |= XAW_TPROP_PIXELSIZE;
- property->pixel_size = combine->pixel_size;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_POINTSIZE)) &&
- (combine->xlfd_mask & XAW_TPROP_POINTSIZE)) {
- property->xlfd_mask |= XAW_TPROP_POINTSIZE;
- property->point_size = combine->point_size;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_RESX)) &&
- (combine->xlfd_mask & XAW_TPROP_RESX)) {
- property->xlfd_mask |= XAW_TPROP_RESX;
- property->res_x = combine->res_x;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_RESY)) &&
- (combine->xlfd_mask & XAW_TPROP_RESY)) {
- property->xlfd_mask |= XAW_TPROP_RESY;
- property->res_y = combine->res_y;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_SPACING)) &&
- (combine->xlfd_mask & XAW_TPROP_SPACING)) {
- property->xlfd_mask |= XAW_TPROP_SPACING;
- property->spacing = combine->spacing;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_AVGWIDTH)) &&
- (combine->xlfd_mask & XAW_TPROP_AVGWIDTH)) {
- property->xlfd_mask |= XAW_TPROP_AVGWIDTH;
- property->avgwidth = combine->avgwidth;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_REGISTRY)) &&
- (combine->xlfd_mask & XAW_TPROP_REGISTRY)) {
- property->xlfd_mask |= XAW_TPROP_REGISTRY;
- property->registry = combine->registry;
- }
- if ((override || !(property->xlfd_mask & XAW_TPROP_ENCODING)) &&
- (combine->xlfd_mask & XAW_TPROP_ENCODING)) {
- property->xlfd_mask |= XAW_TPROP_ENCODING;
- property->encoding = combine->encoding;
- }
-
- return (property);
-}
-
-/*
- * The default property must be defined first, if the code is willing to
- * combine properties.
- */
-XawTextPropertyList *
-XawTextSinkConvertPropertyList(String name, String spec, Screen *screen,
- Colormap colormap, int depth)
-{
- XrmQuark qname = XrmStringToQuark(name);
- XawTextPropertyList **ptr = NULL;
- XawTextPropertyList *propl, *prev = NULL;
- XawTextProperty *def_prop = NULL;
- String str, tok, tmp;
- char buffer[BUFSIZ];
-
- if (prop_lists) ptr = (XawTextPropertyList**)
- bsearch((void*)(long)qname, prop_lists, num_prop_lists,
- sizeof(XawTextPropertyList*), bcmp_qident);
- if (ptr) {
- propl = *ptr;
- while (propl) {
- prev = propl;
- if (propl->screen == screen &&
- propl->colormap == colormap &&
- propl->depth == depth)
- return (propl);
- propl = propl->next;
- }
- }
-
- propl = XtNew(XawTextPropertyList);
- propl->identifier = qname;
- propl->screen = screen;
- propl->colormap = colormap;
- propl->depth = depth;
- propl->next = NULL;
-
- if (prev)
- prev->next = propl;
-
- propl->properties = NULL;
- propl->num_properties = 0;
-
- str = XtNewString(spec);
- for (tok = str; tok; tok = tmp) {
- XawTextProperty *prop;
- XawParams *params;
- XrmQuark ident;
- XawArgVal *argval;
- XColor color, exact;
-
- if (def_prop == NULL && propl->num_properties)
- def_prop = _XawTextSinkGetProperty(propl, Qdefault);
- tmp = strchr(tok, ',');
- if (tmp) {
- *tmp = '\0';
- if (*++tmp == '\0')
- tmp = NULL;
- }
- params = XawParseParamsString(tok);
- ident = XrmStringToQuark(params->name);
- if (ident == NULLQUARK) {
- XmuSnprintf(buffer, sizeof(buffer),
- "Bad text property name \"%s\".", params->name);
- XtAppWarning(XtDisplayToApplicationContext
- (DisplayOfScreen(screen)), buffer);
- DestroyTextPropertyList(propl);
- if (prev)
- prev->next = NULL;
- XawFreeParamsStruct(params);
- return (NULL);
- }
- else if (_XawTextSinkGetProperty(propl, ident) != NULL) {
- XawFreeParamsStruct(params);
- continue;
- }
-
- prop = (XawTextProperty*)XtCalloc(1, sizeof(XawTextProperty));
- prop->identifier = ident;
-
- if ((argval = XawFindArgVal(params, "font")) != NULL &&
- argval->value) {
-
- if ((prop->font = XLoadQueryFont(DisplayOfScreen(screen),
- argval->value)) == NULL) {
- XmuSnprintf(buffer, sizeof(buffer),
- "Cannot load font \"%s\".", argval->value);
- XtAppWarning(XtDisplayToApplicationContext
- (DisplayOfScreen(screen)), buffer);
- DestroyTextPropertyList(propl);
- if (prev)
- prev->next = NULL;
- XawFreeParamsStruct(params);
- return (NULL);
- }
- prop->mask |= XAW_TPROP_FONT;
- SetXlfdDefaults(DisplayOfScreen(screen), prop);
- }
- /* fontset processing here */
-
- if ((argval = XawFindArgVal(params, "foreground")) != NULL &&
- argval->value) {
- if (!XAllocNamedColor(DisplayOfScreen(screen), colormap,
- argval->value, &color, &exact)) {
- XmuSnprintf(buffer, sizeof(buffer),
- "Cannot allocate color \"%s\".", argval->value);
- XtAppWarning(XtDisplayToApplicationContext
- (DisplayOfScreen(screen)), buffer);
- DestroyTextPropertyList(propl);
- if (prev)
- prev->next = NULL;
- XawFreeParamsStruct(params);
- return (NULL);
- }
- prop->foreground = color.pixel;
- prop->mask |= XAW_TPROP_FOREGROUND;
- }
- if ((argval = XawFindArgVal(params, "background")) != NULL &&
- argval->value) {
- if (!XAllocNamedColor(DisplayOfScreen(screen), colormap,
- argval->value, &color, &exact)) {
- XmuSnprintf(buffer, sizeof(buffer),
- "Cannot allocate color \"%s\".", argval->value);
- XtAppWarning(XtDisplayToApplicationContext
- (DisplayOfScreen(screen)), buffer);
- DestroyTextPropertyList(propl);
- if (prev)
- prev->next = NULL;
- XawFreeParamsStruct(params);
- return (NULL);
- }
- prop->background = color.pixel;
- prop->mask |= XAW_TPROP_BACKGROUND;
- }
- /* foreground_pixmap and background_pixmap processing here */
-
- if (XawFindArgVal(params, "underline"))
- prop->mask |= XAW_TPROP_UNDERLINE;
- if (XawFindArgVal(params, "overstrike"))
- prop->mask |= XAW_TPROP_OVERSTRIKE;
-
- if (XawFindArgVal(params, "subscript"))
- prop->mask |= XAW_TPROP_SUBSCRIPT;
- else if (XawFindArgVal(params, "superscript"))
- prop->mask |= XAW_TPROP_SUPERSCRIPT;
-
- /* xlfd */
- if ((argval = XawFindArgVal(params, "foundry")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_FOUNDRY;
- prop->foundry = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "family")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_FAMILY;
- prop->family = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "weight")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_WEIGHT;
- prop->weight = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "slant")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_SLANT;
- prop->slant = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "setwidth")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_SETWIDTH;
- prop->setwidth = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "addstyle")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_ADDSTYLE;
- prop->addstyle = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "pixelsize")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_PIXELSIZE;
- prop->pixel_size = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "pointsize")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_POINTSIZE;
- prop->point_size = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "resx")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_RESX;
- prop->res_x = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "resy")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_RESY;
- prop->res_y = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "spacing")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_SPACING;
- prop->spacing = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "avgwidth")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_AVGWIDTH;
- prop->avgwidth = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "registry")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_REGISTRY;
- prop->registry = XrmStringToQuark(argval->value);
- }
- if ((argval = XawFindArgVal(params, "encoding")) != NULL &&
- argval->value) {
- prop->xlfd_mask |= XAW_TPROP_ENCODING;
- prop->encoding = XrmStringToQuark(argval->value);
- }
-
- if (def_prop)
- (void)XawTextSinkCombineProperty(NULL, prop, def_prop, False);
- (void)_XawTextSinkAddProperty(propl, prop, False);
-
- XawFreeParamsStruct(params);
- }
-
- prop_lists = (XawTextPropertyList**)
- XtRealloc((XtPointer)prop_lists, sizeof(XawTextPropertyList*) *
- (num_prop_lists + 1));
- prop_lists[num_prop_lists++] = propl;
- qsort((void*)prop_lists, num_prop_lists, sizeof(XawTextPropertyList*),
- qcmp_qident);
-
- XtFree(str);
-
- return (propl);
-}
-
-/*ARGSUSED*/
-static Boolean
-CvtStringToPropertyList(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- XawTextPropertyList *propl = NULL;
- String name;
- Widget w;
-
- if (*num_args != 1) {
- XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
- "wrongParameters", "cvtStringToTextProperties",
- "ToolkitError",
- "String to textProperties conversion needs widget argument",
- NULL, NULL);
- return (False);
- }
-
- w = *(Widget*)args[0].addr;
- while (w && !XtIsWidget(w))
- w = XtParent(w);
-
- name = (String)(fromVal[0].addr);
-
- if (w) {
- XawTextPropertyList **ptr = NULL;
- if (prop_lists) ptr = (XawTextPropertyList**)
- bsearch((void*)(long)XrmStringToQuark(name),
- prop_lists, num_prop_lists,
- sizeof(XawTextPropertyList*), bcmp_qident);
-
- if (ptr) {
- Screen *screen = w->core.screen;
- Colormap colormap = w->core.colormap;
- int depth = w->core.depth;
-
- propl = *ptr;
- while (propl) {
- if (propl->screen == screen &&
- propl->colormap == colormap &&
- propl->depth == depth)
- break;
- propl = propl->next;
- }
- }
- }
-
- if (!propl) {
- XtDisplayStringConversionWarning(dpy, (String)fromVal->addr,
- XawRTextProperties);
- toVal->addr = NULL;
- toVal->size = sizeof(XawTextPropertyList*);
- return (False);
- }
-
- if (toVal->addr != NULL) {
- if (toVal->size < sizeof(XawTextPropertyList*)) {
- toVal->size = sizeof(XawTextPropertyList*);
- return (False);
- }
- *(XawTextPropertyList**)(toVal->addr) = propl;
- }
- else {
- static XawTextPropertyList *static_val;
-
- static_val = propl;
- toVal->addr = (XPointer)&static_val;
- }
- toVal->size = sizeof(XawTextProperty*);
-
- return (True);
-}
-
-/*ARGSUSED*/
-static Boolean
-CvtPropertyListToString(Display *dpy, XrmValue *args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *converter_data)
-{
- static char *buffer;
- Cardinal size;
- XawTextPropertyList *propl;
-
- propl = *(XawTextPropertyList**)fromVal[0].addr;
-
- buffer = XrmQuarkToString(propl->identifier);
- size = strlen(buffer) + 1;
-
- if (toVal->addr != NULL) {
- if (toVal->size < size) {
- toVal->size = size;
- return (False);
- }
- strcpy((char *)toVal->addr, buffer);
- }
- else
- toVal->addr = buffer;
- toVal->size = size;
-
- return (True);
-}
-#endif
+/*
+
+Copyright 1989, 1994, 1998 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.
+
+*/
+
+/*
+ * Author: Chris Peterson, MIT X Consortium.
+ *
+ * Much code taken from X11R3 AsciiSink.
+ */
+
+/*
+ * TextSink.c - TextSink object. (For use with the text widget).
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/TextP.h>
+#include <X11/Xaw/TextSinkP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Prototypes
+ */
+static void XawTextSinkClassPartInitialize(WidgetClass);
+static void XawTextSinkInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawTextSinkDestroy(Widget);
+static Boolean XawTextSinkSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+static int MaxLines(Widget, unsigned int);
+static int MaxHeight(Widget, int);
+static void DisplayText(Widget, int, int, XawTextPosition, XawTextPosition,
+ Bool);
+static void InsertCursor(Widget, int, int, XawTextInsertState);
+static void ClearToBackground(Widget, int, int, unsigned int, unsigned int);
+static void FindPosition(Widget, XawTextPosition, int, int, Bool,
+ XawTextPosition*, int*, int*);
+static void FindDistance(Widget, XawTextPosition, int, XawTextPosition, int*,
+ XawTextPosition*, int*);
+static void Resolve(Widget, XawTextPosition, int, int, XawTextPosition*);
+static void SetTabs(Widget, int, short*);
+static void GetCursorBounds(Widget, XRectangle*);
+
+#ifndef OLDXAW
+static Boolean CvtStringToPropertyList(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Boolean CvtPropertyListToString(Display*, XrmValue*, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static Bool BeginPaint(Widget);
+static Bool EndPaint(Widget);
+static void SetXlfdDefaults(Display*, XawTextProperty*);
+#endif
+
+/*
+ * External
+ */
+void _XawTextSinkClearToBackground(Widget, int, int, unsigned, unsigned);
+void _XawTextSinkDisplayText(Widget, int, int, XawTextPosition, XawTextPosition,
+ Bool);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(TextSinkRec, text_sink.field)
+static XtResource resources[] = {
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(foreground),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XtNbackground,
+ XtCBackground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(background),
+ XtRString,
+ XtDefaultBackground
+ },
+#ifndef OLDXAW
+ {
+ XtNcursorColor,
+ XtCColor,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(cursor_color),
+ XtRString,
+ XtDefaultForeground
+ },
+ {
+ XawNtextProperties,
+ XawCTextProperties,
+ XawRTextProperties,
+ sizeof(XawTextPropertyList*),
+ offset(properties),
+ XtRImmediate,
+ NULL
+ },
+#endif
+};
+#undef offset
+
+#ifndef OLDXAW
+static TextSinkExtRec extension_rec = {
+ NULL, /* next_extension */
+ NULLQUARK, /* record_type */
+ 1, /* version */
+ sizeof(TextSinkExtRec), /* record_size */
+ BeginPaint,
+ NULL,
+ NULL,
+ EndPaint
+};
+
+static XrmQuark Qdefault;
+#endif
+
+#define Superclass (&objectClassRec)
+TextSinkClassRec textSinkClassRec = {
+ /* object */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "TextSink", /* class_name */
+ sizeof(TextSinkRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ XawTextSinkClassPartInitialize, /* class_part_initialize */
+ False, /* class_inited */
+ XawTextSinkInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* obj1 */
+ NULL, /* obj2 */
+ 0, /* obj3 */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* obj4 */
+ False, /* obj5 */
+ False, /* obj6 */
+ False, /* obj7 */
+ XawTextSinkDestroy, /* destroy */
+ NULL, /* obj8 */
+ NULL, /* obj9 */
+ XawTextSinkSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ NULL, /* obj10 */
+ NULL, /* get_values_hook */
+ NULL, /* obj11 */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* obj12 */
+ NULL, /* obj13 */
+ NULL, /* obj14 */
+ NULL, /* extension */
+ },
+ /* text_sink */
+ {
+ DisplayText, /* DisplayText */
+ InsertCursor, /* InsertCursor */
+ ClearToBackground, /* ClearToBackground */
+ FindPosition, /* FindPosition */
+ FindDistance, /* FindDistance */
+ Resolve, /* Resolve */
+ MaxLines, /* MaxLines */
+ MaxHeight, /* MaxHeight */
+ SetTabs, /* SetTabs */
+ GetCursorBounds, /* GetCursorBounds */
+ },
+};
+
+WidgetClass textSinkObjectClass = (WidgetClass)&textSinkClassRec;
+
+/*
+ * Implementation
+ */
+static void
+XawTextSinkClassPartInitialize(WidgetClass wc)
+{
+ TextSinkObjectClass t_src, superC;
+#ifndef OLDXAW
+ static XtConvertArgRec CvtArgs[] = {
+ {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.self),
+ sizeof(Widget)},
+ };
+#endif
+
+ t_src = (TextSinkObjectClass) wc;
+ superC = (TextSinkObjectClass) t_src->object_class.superclass;
+
+#ifndef OLDXAW
+ extension_rec.record_type = XrmPermStringToQuark("TextSink");
+ extension_rec.next_extension = (XtPointer)t_src->text_sink_class.extension;
+ t_src->text_sink_class.extension = &extension_rec;
+
+ Qdefault = XrmPermStringToQuark("default");
+#endif
+
+ /*
+ * We don't need to check for null super since we'll get to TextSink
+ * eventually.
+ */
+ if (t_src->text_sink_class.DisplayText == XtInheritDisplayText)
+ t_src->text_sink_class.DisplayText =
+ superC->text_sink_class.DisplayText;
+
+ if (t_src->text_sink_class.InsertCursor == XtInheritInsertCursor)
+ t_src->text_sink_class.InsertCursor =
+ superC->text_sink_class.InsertCursor;
+
+ if (t_src->text_sink_class.ClearToBackground== XtInheritClearToBackground)
+ t_src->text_sink_class.ClearToBackground =
+ superC->text_sink_class.ClearToBackground;
+
+ if (t_src->text_sink_class.FindPosition == XtInheritFindPosition)
+ t_src->text_sink_class.FindPosition =
+ superC->text_sink_class.FindPosition;
+
+ if (t_src->text_sink_class.FindDistance == XtInheritFindDistance)
+ t_src->text_sink_class.FindDistance =
+ superC->text_sink_class.FindDistance;
+
+ if (t_src->text_sink_class.Resolve == XtInheritResolve)
+ t_src->text_sink_class.Resolve =
+ superC->text_sink_class.Resolve;
+
+ if (t_src->text_sink_class.MaxLines == XtInheritMaxLines)
+ t_src->text_sink_class.MaxLines =
+ superC->text_sink_class.MaxLines;
+
+ if (t_src->text_sink_class.MaxHeight == XtInheritMaxHeight)
+ t_src->text_sink_class.MaxHeight =
+ superC->text_sink_class.MaxHeight;
+
+ if (t_src->text_sink_class.SetTabs == XtInheritSetTabs)
+ t_src->text_sink_class.SetTabs =
+ superC->text_sink_class.SetTabs;
+
+ if (t_src->text_sink_class.GetCursorBounds == XtInheritGetCursorBounds)
+ t_src->text_sink_class.GetCursorBounds =
+ superC->text_sink_class.GetCursorBounds;
+
+#ifndef OLDXAW
+ XtSetTypeConverter(XtRString, XawRTextProperties, CvtStringToPropertyList,
+ &CvtArgs[0], XtNumber(CvtArgs), XtCacheNone, NULL);
+ XtSetTypeConverter(XawRTextProperties, XtRString, CvtPropertyListToString,
+ NULL, 0, XtCacheNone, NULL);
+#endif
+}
+
+/*
+ * Function:
+ * XawTextSinkInitialize
+ *
+ * Parameters:
+ * request - requested and new values for the object instance
+ * cnew - ""
+ *
+ * Description:
+ * Initializes the TextSink Object.
+ */
+/*ARGSUSED*/
+static void
+XawTextSinkInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ TextSinkObject sink = (TextSinkObject)cnew;
+
+ sink->text_sink.tab_count = 0; /* Initialize the tab stops. */
+ sink->text_sink.tabs = NULL;
+ sink->text_sink.char_tabs = NULL;
+#ifndef OLDXAW
+ sink->text_sink.paint = NULL;
+#endif
+}
+
+/*
+ * Function:
+ * XawTextSinkDestroy
+ *
+ * Parameters:
+ * w - TextSink Object
+ *
+ * Description:
+ * This function cleans up when the object is destroyed.
+ */
+static void
+XawTextSinkDestroy(Widget w)
+{
+ TextSinkObject sink = (TextSinkObject) w;
+
+ XtFree((char *)sink->text_sink.tabs);
+ XtFree((char *)sink->text_sink.char_tabs);
+}
+
+/*
+ * Function:
+ * XawTextSinkSetValues
+ *
+ * Parameters:
+ * current - current state of the object
+ * request - what was requested
+ * cnew - what the object will become
+ *
+ * Description:
+ * Sets the values for the TextSink.
+ *
+ * Returns:
+ * True if redisplay is needed
+ */
+/*ARGSUSED*/
+static Boolean
+XawTextSinkSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ TextSinkObject w = (TextSinkObject)cnew;
+ TextSinkObject old_w = (TextSinkObject)current;
+
+ if (w->text_sink.foreground != old_w->text_sink.foreground)
+ ((TextWidget)XtParent(cnew))->text.redisplay_needed = True;
+
+ return (False);
+}
+
+/*
+ * Function:
+ * DisplayText
+ *
+ * Parameters:
+ * w - TextSink Object
+ * x - location to start drawing text
+ * y - ""
+ * pos1 - location of starting and ending points in the text buffer
+ * pos2 - ""
+ * highlight - hightlight this text?
+ *
+ * Description:
+ * Stub function that in subclasses will display text.
+ */
+/*ARGSUSED*/
+static void
+DisplayText(Widget w, int x, int y,
+ XawTextPosition pos1, XawTextPosition pos2, Bool highlight)
+{
+ return;
+}
+
+/*
+ * Function:
+ * InsertCursor
+ *
+ * Parameters:
+ * w - TextSink Object
+ * x - location for the cursor
+ * y - ""
+ * state - whether to turn the cursor on, or off
+ *
+ * Description:
+ * Places the InsertCursor.
+ */
+/*ARGSUSED*/
+static void
+InsertCursor(Widget w, int x, int y, XawTextInsertState state)
+{
+ return;
+}
+
+/*
+ * Function:
+ * ClearToBackground
+ *
+ * Parameters:
+ * w - TextSink Object
+ * x - location of area to clear
+ * y - ""
+ * width - size of area to clear
+ * height - ""
+ *
+ * Description:
+ * Clears a region of the sink to the background color.
+ */
+/*ARGSUSED*/
+static void
+ClearToBackground(Widget w, int x, int y,
+ unsigned int width, unsigned int height)
+{
+ /*
+ * Don't clear in height or width are zero
+ * XClearArea() has special semantic for these values
+ */
+ TextWidget xaw = (TextWidget)XtParent(w);
+ Position x1, y1, x2, y2;
+
+ x1 = XawMax(x, xaw->text.r_margin.left);
+ y1 = XawMax(y, xaw->text.r_margin.top);
+ x2 = XawMin(x + (int)width, (int)XtWidth(xaw) - xaw->text.r_margin.right);
+ y2 = XawMin(y + (int)height, (int)XtHeight(xaw) - xaw->text.r_margin.bottom);
+
+ x = x1;
+ y = y1;
+ width = XawMax(0, x2 - x1);
+ height = XawMax(0, y2 - y1);
+
+ if (height != 0 && width != 0)
+ XClearArea(XtDisplayOfObject(w), XtWindowOfObject(w),
+ x, y, width, height, False);
+}
+
+/*
+ * Function:
+ * FindPosition
+ *
+ * Parameters:
+ * w - TextSink Object
+ * fromPos - reference position
+ * fromX - reference location
+ * width - width of section to paint text
+ * stopAtWordBreak - returned position is a word break?
+ * resPos - position found (return)
+ * resWidth - Width actually used (return)
+ * resHeight - Height actually used (return)
+ *
+ * Description:
+ * Finds a position in the text.
+ */
+/*ARGSUSED*/
+static void
+FindPosition(Widget w, XawTextPosition fromPos, int fromx, int width,
+ Bool stopAtWordBreak, XawTextPosition *resPos,
+ int *resWidth, int *resHeight)
+{
+ *resPos = fromPos;
+ *resHeight = *resWidth = 0;
+}
+
+/*
+ * Function:
+ * FindDistance
+ *
+ * Parameters:
+ * w - TextSink Object
+ * fromPos - starting Position
+ * fromX - x location of starting Position
+ * toPos - end Position
+ * resWidth - Distance between fromPos and toPos
+ * resPos - Acutal toPos used
+ * resHeight - Height required by this text
+ *
+ * Description:
+ * Find the Pixel Distance between two text Positions.
+ */
+/*ARGSUSED*/
+static void
+FindDistance(Widget w, XawTextPosition fromPos, int fromx,
+ XawTextPosition toPos, int *resWidth,
+ XawTextPosition *resPos, int *resHeight)
+{
+ *resWidth = *resHeight = 0;
+ *resPos = fromPos;
+}
+
+/*
+ * Function:
+ * Resolve
+ *
+ * Parameters:
+ * w - TextSink Object
+ * pos - reference Position
+ * fromx - reference Location
+ * width - width to move
+ * resPos - resulting position
+ *
+ * Description:
+ * Resloves a location to a position.
+ */
+/*ARGSUSED*/
+static void
+Resolve(Widget w, XawTextPosition pos, int fromx, int width,
+ XawTextPosition *resPos)
+{
+ *resPos = pos;
+}
+
+/*
+ * Function:
+ * MaxLines
+ *
+ * Parameters:
+ * w - TextSink Object
+ * height - height to fit lines into
+ *
+ * Description:
+ * Finds the Maximum number of lines that will fit in a given height.
+ *
+ * Returns:
+ * Number of lines that will fit
+ */
+/*ARGSUSED*/
+static int
+MaxLines(Widget w, unsigned int height)
+{
+ /*
+ * The fontset has gone down to descent Sink Widget, so
+ * the functions such MaxLines, SetTabs... are bound to the descent.
+ *
+ * by Li Yuhong, Jan. 15, 1991
+ */
+ return (0);
+}
+
+/*
+ * Function:
+ * MaxHeight
+ *
+ * Parameters:
+ * w - TextSink Object
+ * lines - number of lines
+ *
+ * Description:
+ * Finds the Minium height that will contain a given number lines.
+ *
+ * Returns:
+ * the height
+ */
+/*ARGSUSED*/
+static int
+MaxHeight(Widget w, int lines)
+{
+ return (0);
+}
+
+/*
+ * Function:
+ * SetTabs
+ *
+ * Parameters:
+ * w - TextSink Object
+ * tab_count - the number of tabs in the list
+ * tabs - text positions of the tabs
+ * Description:
+ * Sets the Tab stops.
+ */
+/*ARGSUSED*/
+static void
+SetTabs(Widget w, int tab_count, short *tabs)
+{
+ return;
+}
+
+/*
+ * Function:
+ * GetCursorBounds
+ *
+ * Parameters:
+ * w - TextSinkObject.
+ * rect - X rectangle containing the cursor bounds
+ *
+ * Description:
+ * Finds the bounding box for the insert cursor (caret)
+ */
+/*ARGSUSED*/
+static void
+GetCursorBounds(Widget w, XRectangle *rect)
+{
+ rect->x = rect->y = rect->width = rect->height = 0;
+}
+
+/*
+ * Public Functions
+ */
+/*
+ * Function:
+ * XawTextSinkDisplayText
+ *
+ * Parameters:
+ * w - TextSink Object
+ * x - location to start drawing text
+ * y - ""
+ * pos1 - location of starting and ending points in the text buffer
+ * pos2 - ""
+ * highlight - hightlight this text?
+ */
+/*ARGSUSED*/
+void
+XawTextSinkDisplayText(Widget w,
+#if NeedWidePrototypes
+ int x, int y,
+#else
+ Position x, Position y,
+#endif
+ XawTextPosition pos1, XawTextPosition pos2,
+#if NeedWidePrototypes
+ int highlight
+#else
+ Boolean highlight
+#endif
+)
+{
+ _XawTextSinkDisplayText(w, x, y, pos1, pos2, highlight);
+}
+
+void
+_XawTextSinkDisplayText(Widget w, int x, int y,
+ XawTextPosition pos1, XawTextPosition pos2,
+ Bool highlight)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ (*cclass->text_sink_class.DisplayText)(w, x, y, pos1, pos2, highlight);
+}
+
+/*
+ * Function:
+ * XawTextSinkInsertCursor
+ *
+ * Parameters:
+ * w - TextSink Object
+ * x - location for the cursor
+ * y - ""
+ * state - whether to turn the cursor on, or off
+ *
+ * Description:
+ * Places the InsertCursor.
+ */
+/*ARGSUSED*/
+void
+#if NeedWidePrototypes
+XawTextSinkInsertCursor(Widget w, int x, int y, int state)
+#else
+XawTextSinkInsertCursor(Widget w, Position x, Position y, XawTextInsertState state)
+#endif
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ (*cclass->text_sink_class.InsertCursor)(w, x, y, state);
+}
+
+/*
+ * Function:
+ * XawTextSinkClearToBackground
+ *
+ * Parameters:
+ * w - TextSink Object
+ * x - location of area to clear
+ * y - ""
+ * width - size of area to clear
+ * height - ""
+ *
+ * Description:
+ * Clears a region of the sink to the background color.
+ */
+/*ARGSUSED*/
+void
+XawTextSinkClearToBackground(Widget w,
+#if NeedWidePrototypes
+ int x, int y,
+ unsigned int width, unsigned int height
+#else
+ Position x, Position y,
+ Dimension width, Dimension height
+#endif
+)
+{
+ _XawTextSinkClearToBackground(w, x, y, width, height);
+}
+
+void
+_XawTextSinkClearToBackground(Widget w,
+ int x, int y,
+ unsigned int width, unsigned int height)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ (*cclass->text_sink_class.ClearToBackground)(w, x, y, width, height);
+}
+
+/*
+ * Function:
+ * XawTextSinkFindPosition
+ *
+ * Parameters:
+ * w - TextSink Object
+ * fromPos - reference position
+ * fromX - reference location
+ * width - width of section to paint text
+ * stopAtWordBreak - returned position is a word break?
+ * resPos - position found (return)
+ * resWidth - Width actually used (return)
+ * resHeight - Height actually used (return)
+ *
+ * Description:
+ * Finds a position in the text.
+ */
+/*ARGSUSED*/
+void
+XawTextSinkFindPosition(Widget w, XawTextPosition fromPos, int fromx, int width,
+#if NeedWidePrototypes
+ int stopAtWordBreak,
+#else
+ Boolean stopAtWordBreak,
+#endif
+ XawTextPosition *resPos, int *resWidth, int *resHeight)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ (*cclass->text_sink_class.FindPosition)(w, fromPos, fromx, width,
+ stopAtWordBreak,
+ resPos, resWidth, resHeight);
+}
+
+/*
+ * Function:
+ * XawTextSinkFindDistance
+ *
+ * Parameters:
+ * w - TextSink Object
+ * fromPos - starting Position
+ * fromX - x location of starting Position
+ * toPos - end Position
+ * resWidth - Distance between fromPos and toPos
+ * resPos - Acutal toPos used
+ * resHeight - Height required by this text
+ *
+ * Description:
+ * Find the Pixel Distance between two text Positions.
+ */
+/*ARGSUSED*/
+void
+XawTextSinkFindDistance(Widget w, XawTextPosition fromPos, int fromx,
+ XawTextPosition toPos, int *resWidth,
+ XawTextPosition *resPos, int *resHeight)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ (*cclass->text_sink_class.FindDistance)(w, fromPos, fromx, toPos,
+ resWidth, resPos, resHeight);
+}
+
+/*
+ * Function:
+ * XawTextSinkResolve
+ *
+ * Parameters:
+ * w - TextSink Object
+ * pos - reference Position
+ * fromx - reference Location
+ * width - width to move
+ * resPos - resulting position
+ *
+ * Description:
+ * Resloves a location to a position.
+ */
+/*ARGSUSED*/
+void
+XawTextSinkResolve(Widget w, XawTextPosition pos, int fromx, int width,
+ XawTextPosition *resPos)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass) w->core.widget_class;
+
+ (*cclass->text_sink_class.Resolve)(w, pos, fromx, width, resPos);
+}
+
+/*
+ * Function:
+ * XawTextSinkMaxLines
+ *
+ * Parameters:
+ * w - TextSink Object
+ * height - height to fit lines into
+ *
+ * Description:
+ * Finds the Maximum number of lines that will fit in a given height.
+ *
+ * Returns:
+ * Number of lines that will fit
+ */
+/*ARGSUSED*/
+int
+#if NeedWidePrototypes
+XawTextSinkMaxLines(Widget w, unsigned int height)
+#else
+XawTextSinkMaxLines(Widget w, Dimension height)
+#endif
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ return((*cclass->text_sink_class.MaxLines)(w, height));
+}
+
+/*
+ * Function:
+ * XawTextSinkMaxHeight
+ *
+ * Parameters:
+ * w - TextSink Object
+ * lines - number of lines
+ *
+ * Description:
+ * Finds the Minium height that will contain a given number lines.
+ *
+ * Returns:
+ * the height
+ */
+/*ARGSUSED*/
+int
+XawTextSinkMaxHeight(Widget w, int lines)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ return((*cclass->text_sink_class.MaxHeight)(w, lines));
+}
+
+/*
+ * Function:
+ * XawTextSinkSetTabs
+ *
+ * Parameters:
+ * w - TextSink Object
+ * tab_count - the number of tabs in the list
+ * tabs - text positions of the tabs
+ * Description:
+ * Sets the Tab stops.
+ */
+void
+XawTextSinkSetTabs(Widget w, int tab_count, int *tabs)
+{
+ if (tab_count > 0) {
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+ short *char_tabs = (short*)XtMalloc((unsigned)tab_count * sizeof(short));
+ short *tab, len = 0;
+ int i;
+
+ for (i = tab_count, tab = char_tabs; i; i--) {
+ if ((short)*tabs > len)
+ *tab++ = (len = (short)*tabs++);
+ else {
+ tabs++;
+ --tab_count;
+ }
+ }
+
+ if (tab_count > 0)
+ (*cclass->text_sink_class.SetTabs)(w, tab_count, char_tabs);
+ XtFree((char *)char_tabs);
+ }
+}
+
+/*
+ * Function:
+ * XawTextSinkGetCursorBounds
+ *
+ * Parameters:
+ * w - TextSinkObject
+ * rect - X rectance containing the cursor bounds
+ *
+ * Description:
+ * Finds the bounding box for the insert cursor (caret).
+ */
+/*ARGSUSED*/
+void
+XawTextSinkGetCursorBounds(Widget w, XRectangle *rect)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ (*cclass->text_sink_class.GetCursorBounds)(w, rect);
+}
+
+#ifndef OLDXAW
+Bool
+XawTextSinkBeginPaint(Widget w)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ if (cclass->text_sink_class.extension->BeginPaint == NULL ||
+ cclass->text_sink_class.extension->PreparePaint == NULL ||
+ cclass->text_sink_class.extension->DoPaint == NULL ||
+ cclass->text_sink_class.extension->EndPaint == NULL)
+ return (False);
+
+ return ((*cclass->text_sink_class.extension->BeginPaint)(w));
+}
+
+static Bool
+BeginPaint(Widget w)
+{
+ TextSinkObject sink = (TextSinkObject)w;
+
+ if (sink->text_sink.paint != NULL)
+ return (False);
+
+ sink->text_sink.paint = XtNew(XawTextPaintList);
+ sink->text_sink.paint->clip = XmuCreateArea();
+ sink->text_sink.paint->hightabs = NULL;
+ sink->text_sink.paint->paint = NULL;
+ sink->text_sink.paint->bearings = NULL;
+
+ return (True);
+}
+
+void
+XawTextSinkPreparePaint(Widget w, int y, int line, XawTextPosition from,
+ XawTextPosition to, Bool highlight)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ (*cclass->text_sink_class.extension->PreparePaint)
+ (w, y, line, from, to, highlight);
+}
+
+#if 0
+/*ARGSUSED*/
+static void
+PreparePaint(Widget w, int y, int line, XawTextPosition from, XawTextPosition to,
+ Bool highlight)
+{
+}
+#endif
+
+void
+XawTextSinkDoPaint(Widget w)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ (*cclass->text_sink_class.extension->DoPaint)(w);
+}
+
+#if 0
+/*ARGSUSED*/
+static void
+DoPaint(Widget w)
+{
+}
+#endif
+
+Bool
+XawTextSinkEndPaint(Widget w)
+{
+ TextSinkObjectClass cclass = (TextSinkObjectClass)w->core.widget_class;
+
+ return ((*cclass->text_sink_class.extension->EndPaint)(w));
+}
+
+static Bool
+EndPaint(Widget w)
+{
+ TextSinkObject sink = (TextSinkObject)w;
+ XawTextPaintStruct *paint, *next;
+
+ if (sink->text_sink.paint == NULL)
+ return (False);
+
+ XmuDestroyArea(sink->text_sink.paint->clip);
+ if (sink->text_sink.paint->hightabs)
+ XmuDestroyArea(sink->text_sink.paint->hightabs);
+ paint = sink->text_sink.paint->paint;
+ while (paint) {
+ next = paint->next;
+ if (paint->text)
+ XtFree((XtPointer)paint->text);
+ if (paint->backtabs)
+ XmuDestroyArea(paint->backtabs);
+ XtFree((XtPointer)paint);
+ paint = next;
+ }
+
+ paint = sink->text_sink.paint->bearings;
+ while (paint) {
+ next = paint->next;
+ if (paint->text)
+ XtFree((XtPointer)paint->text);
+ XtFree((XtPointer)paint);
+ paint = next;
+ }
+
+ XtFree((XtPointer)sink->text_sink.paint);
+ sink->text_sink.paint = NULL;
+ return (True);
+}
+
+static XawTextPropertyList **prop_lists;
+static Cardinal num_prop_lists;
+
+static int
+bcmp_qident(_Xconst void *left, _Xconst void *right)
+{
+ return ((long)left - (*(XawTextProperty**)right)->identifier);
+}
+
+static int
+qcmp_qident(_Xconst void *left, _Xconst void *right)
+{
+ return ((*(XawTextProperty**)left)->identifier -
+ (*(XawTextProperty**)right)->identifier);
+}
+
+static void
+SetXlfdDefaults(Display *display, XawTextProperty *property)
+{
+ Atom atom = XInternAtom(display, "FONT", True);
+ unsigned long value;
+ char *str;
+
+ if (XGetFontProperty(property->font, atom, &value)) {
+ char *xlfd = XGetAtomName(display, value);
+
+ if (xlfd) {
+ char *sep = xlfd + 1;
+ char *name = sep;
+
+ property->xlfd = XrmStringToQuark(xlfd);
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->foundry = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->family = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->weight = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->slant = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->setwidth = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->addstyle = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->pixel_size = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->point_size = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->res_x = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->res_y = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->spacing = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->avgwidth = XrmStringToQuark(name);
+ name = sep;
+
+ sep = strchr(sep, '-'); *sep++ = '\0';
+ property->registry = XrmStringToQuark(name);
+ name = sep;
+
+ property->encoding = XrmStringToQuark(name);
+
+ XFree(xlfd);
+ }
+ }
+
+ atom = XInternAtom(display, "UNDERLINE_THICKNESS", True);
+ if (XGetFontProperty(property->font, atom, &value) &&
+ (str = XGetAtomName(display, value)) != NULL) {
+ property->underline_thickness = atoi(str);
+ XFree(str);
+ }
+ else {
+ /* XLFD says:
+ * CapStemWidth = average width of the stems of capitals
+ * if (UNDERLINE_THICKNESS undefined) then
+ * UNDERLINE_THICKNESS = CapStemWidth
+ *
+ * How do I know the value of CapStemWidth??
+ */
+ if (property->pixel_size != NULLQUARK) {
+ property->underline_thickness =
+ atoi(XrmQuarkToString(property->pixel_size)) / 10;
+ property->underline_thickness =
+ XawMax(1, property->underline_thickness);
+ }
+ else
+ property->underline_thickness = 1;
+ }
+
+ atom = XInternAtom(display, "UNDERLINE_POSITION", True);
+ if (XGetFontProperty(property->font, atom, &value) &&
+ (str = XGetAtomName(display, value)) != NULL) {
+ property->underline_position = atoi(str);
+ XFree(str);
+ }
+ else
+ /* XLFD says:
+ * if (UNDERLINE_POSITION undefined) then
+ * UNDERLINE_POSITION = ROUND((maximum_descent) / 2)
+ */
+ property->underline_position =
+ property->font->max_bounds.descent >> 1;
+
+ /* I am assuming xlfd does not consider that lines are
+ * centered in the path */
+ property->underline_position += property->underline_thickness >> 1;
+
+}
+
+static void
+DestroyTextPropertyList(XawTextPropertyList *list)
+{
+ int i;
+
+ for (i = 0; i < list->num_properties; i++) {
+ if (list->properties[i]->font)
+ XFreeFont(DisplayOfScreen(list->screen), list->properties[i]->font);
+ XtFree((char*)list->properties[i]);
+ }
+ if (list->properties)
+ XtFree((char*)list->properties);
+ XtFree((char*)list);
+}
+
+static XawTextProperty *
+_XawTextSinkGetProperty(XawTextPropertyList *list, XrmQuark property)
+{
+ if (property != NULLQUARK && list && list->properties) {
+ XawTextProperty **ptr = (XawTextProperty**)
+ bsearch((void*)(long)property,
+ list->properties, list->num_properties,
+ sizeof(XawTextProperty*), bcmp_qident);
+
+ if (ptr)
+ return (*ptr);
+ }
+
+ return (NULL);
+}
+
+XawTextProperty *
+XawTextSinkGetProperty(Widget w, XrmQuark property)
+{
+ TextSinkObject sink = (TextSinkObject)w;
+ XawTextPropertyList *list = sink->text_sink.properties;
+
+ return (_XawTextSinkGetProperty(list, property));
+}
+
+XawTextProperty *
+XawTextSinkCopyProperty(Widget w, XrmQuark property)
+{
+ XawTextProperty *cur, *ret;
+
+ if ((cur = XawTextSinkGetProperty(w, property)) == NULL)
+ cur = XawTextSinkGetProperty(w, Qdefault);
+ ret = (XawTextProperty*)XtCalloc(1, sizeof(XawTextProperty));
+ if (cur)
+ memcpy(ret, cur, sizeof(XawTextProperty));
+ ret->identifier = NULLQUARK;
+ ret->mask &= ~XAW_TPROP_FONT;
+
+ return (ret);
+}
+
+static XawTextProperty *
+_XawTextSinkAddProperty(XawTextPropertyList *list, XawTextProperty *property,
+ Bool replace)
+{
+ XawTextProperty *result;
+ XColor color;
+ char identifier[1024];
+ char foreground[16];
+ char background[16];
+ char *foundry, *family, *weight, *slant, *setwidth, *addstyle, *pixel_size,
+ *point_size, *res_x, *res_y, *spacing, *avgwidth, *registry, *encoding;
+ char *xlfd;
+ static char *asterisk = "*", *null = "";
+ XrmQuark quark;
+
+ if (list == NULL || property == NULL)
+ return (NULL);
+
+ if (property->mask & XAW_TPROP_FOREGROUND) {
+ color.pixel = property->foreground;
+ XQueryColor(DisplayOfScreen(list->screen), list->colormap, &color);
+ XmuSnprintf(foreground, sizeof(foreground), "%04x%04x%04x",
+ color.red, color.green, color.blue);
+ }
+ else
+ strcpy(foreground, asterisk);
+ if (property->mask & XAW_TPROP_BACKGROUND) {
+ color.pixel = property->background;
+ XQueryColor(DisplayOfScreen(list->screen), list->colormap, &color);
+ XmuSnprintf(background, sizeof(background), "%04x%04x%04x",
+ color.red, color.green, color.blue);
+ }
+ else
+ strcpy(background, asterisk);
+
+ if (property->xlfd_mask & XAW_TPROP_FOUNDRY)
+ foundry = XrmQuarkToString(property->foundry);
+ else
+ foundry = asterisk;
+
+ /* use default, or what was requested */
+ if (property->family != NULLQUARK)
+ family = XrmQuarkToString(property->family);
+ else
+ family = asterisk;
+ if (property->weight != NULLQUARK)
+ weight = XrmQuarkToString(property->weight);
+ else
+ weight = asterisk;
+ if (property->slant != NULLQUARK) {
+ slant = XrmQuarkToString(property->slant);
+ if (toupper(*slant) != 'R')
+ slant = asterisk; /* X defaults to italics, so, don't
+ care in resolving between `I' and `O' */
+ }
+ else
+ slant = asterisk;
+
+ if (property->xlfd_mask & XAW_TPROP_SETWIDTH)
+ setwidth = XrmQuarkToString(property->setwidth);
+ else
+ setwidth = asterisk;
+ if (property->xlfd_mask & XAW_TPROP_ADDSTYLE)
+ addstyle = XrmQuarkToString(property->addstyle);
+ else
+ addstyle = null;
+
+ /* use default, or what was requested */
+ if (!(property->mask & XAW_TPROP_POINTSIZE) &&
+ property->pixel_size != NULLQUARK)
+ pixel_size = XrmQuarkToString(property->pixel_size);
+ else
+ pixel_size = asterisk;
+
+ if (property->xlfd_mask & XAW_TPROP_POINTSIZE)
+ point_size = XrmQuarkToString(property->point_size);
+ else
+ point_size = asterisk;
+ if (property->xlfd_mask & XAW_TPROP_RESX)
+ res_x = XrmQuarkToString(property->res_x);
+ else
+ res_x = asterisk;
+ if (property->xlfd_mask & XAW_TPROP_RESY)
+ res_y = XrmQuarkToString(property->res_y);
+ else
+ res_y = asterisk;
+ if (property->xlfd_mask & XAW_TPROP_SPACING)
+ spacing = XrmQuarkToString(property->spacing);
+ else
+ spacing = asterisk;
+ if (property->xlfd_mask & XAW_TPROP_AVGWIDTH)
+ avgwidth = XrmQuarkToString(property->avgwidth);
+ else
+ avgwidth = asterisk;
+
+ /* use default, or what that was requested */
+ if (property->registry != NULLQUARK)
+ registry = XrmQuarkToString(property->registry);
+ else
+ registry = asterisk;
+ if (property->encoding != NULLQUARK)
+ encoding = XrmQuarkToString(property->encoding);
+ else
+ encoding = asterisk;
+
+ if (replace) {
+ result = XtNew(XawTextProperty);
+ memcpy(result, property, sizeof(XawTextProperty));
+ }
+ else
+ result = property;
+
+ /* XXX should do the best to load a suitable font here */
+ if (!(result->mask & XAW_TPROP_FONT)) {
+ XmuSnprintf(identifier, sizeof(identifier),
+ "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s",
+ foundry, family, weight, slant, setwidth, addstyle, pixel_size,
+ point_size, res_x, res_y, spacing, avgwidth, registry, encoding);
+ if ((result->font = XLoadQueryFont(DisplayOfScreen(list->screen),
+ identifier)) != NULL) {
+ result->mask |= XAW_TPROP_FONT;
+ SetXlfdDefaults(DisplayOfScreen(list->screen), result);
+ }
+ else
+ result->mask &= ~XAW_TPROP_FONT;
+ }
+
+ if (result->font)
+ xlfd = XrmQuarkToString(result->xlfd);
+ else
+ xlfd = null;
+
+ XmuSnprintf(identifier, sizeof(identifier), "%08lx%08lx%s%s%d%d%d%d%s",
+ property->mask, property->xlfd_mask,
+ foreground, background,
+ (result->mask & XAW_TPROP_UNDERLINE) != 0,
+ (result->mask & XAW_TPROP_OVERSTRIKE) != 0,
+ (result->mask & XAW_TPROP_SUBSCRIPT) != 0,
+ (result->mask & XAW_TPROP_SUPERSCRIPT) != 0,
+ xlfd);
+
+ quark = XrmStringToQuark(identifier);
+ if (result->identifier == NULLQUARK)
+ result->identifier = quark;
+ result->code = quark;
+
+ if ((property = _XawTextSinkGetProperty(list, result->identifier)) != NULL) {
+ if (result->font)
+ XFreeFont(DisplayOfScreen(list->screen), result->font);
+ if (replace)
+ XtFree((XtPointer)result);
+
+ return (property);
+ }
+
+ list->properties = (XawTextProperty**)
+ XtRealloc((XtPointer)list->properties, sizeof(XawTextProperty*) *
+ (list->num_properties + 1));
+ list->properties[list->num_properties++] = result;
+ qsort((void*)list->properties, list->num_properties,
+ sizeof(XawTextProperty*), qcmp_qident);
+
+ return (result);
+}
+
+XawTextProperty *
+XawTextSinkAddProperty(Widget w, XawTextProperty *property)
+{
+ TextSinkObject sink = (TextSinkObject)w;
+ XawTextPropertyList *list = sink->text_sink.properties;
+
+ return (_XawTextSinkAddProperty(list, property, True));
+}
+
+XawTextProperty *
+XawTextSinkCombineProperty(Widget w,
+ XawTextProperty *property, XawTextProperty *combine,
+ Bool override)
+{
+ if (property == NULL || combine == NULL)
+ return (property);
+
+ if ((override || !(property->mask & XAW_TPROP_FOREGROUND)) &&
+ (combine->mask & XAW_TPROP_FOREGROUND)) {
+ property->mask |= XAW_TPROP_FOREGROUND;
+ property->foreground = combine->foreground;
+ }
+ if ((override || !(property->mask & XAW_TPROP_BACKGROUND)) &&
+ (combine->mask & XAW_TPROP_BACKGROUND)) {
+ property->mask |= XAW_TPROP_BACKGROUND;
+ property->background = combine->background;
+ }
+ if ((override || !(property->mask & XAW_TPROP_FPIXMAP)) &&
+ (combine->mask & XAW_TPROP_FPIXMAP)) {
+ property->mask |= XAW_TPROP_FPIXMAP;
+ property->foreground_pixmap = combine->foreground_pixmap;
+ }
+ if ((override || !(property->mask & XAW_TPROP_BPIXMAP)) &&
+ (combine->mask & XAW_TPROP_BPIXMAP)) {
+ property->mask |= XAW_TPROP_BPIXMAP;
+ property->background_pixmap = combine->background_pixmap;
+ }
+ if (combine->mask & XAW_TPROP_UNDERLINE)
+ property->mask |= XAW_TPROP_UNDERLINE;
+ if (combine->mask & XAW_TPROP_OVERSTRIKE)
+ property->mask |= XAW_TPROP_OVERSTRIKE;
+ if ((override || !(property->mask & XAW_TPROP_SUPERSCRIPT)) &&
+ (combine->mask & XAW_TPROP_SUBSCRIPT))
+ property->mask |= XAW_TPROP_SUBSCRIPT;
+ if ((property->mask & XAW_TPROP_SUBSCRIPT) &&
+ (combine->mask & XAW_TPROP_SUPERSCRIPT))
+ property->mask |= XAW_TPROP_SUPERSCRIPT;
+ if ((override || !(property->xlfd_mask & XAW_TPROP_FOUNDRY)) &&
+ (combine->xlfd_mask & XAW_TPROP_FOUNDRY)) {
+ property->xlfd_mask |= XAW_TPROP_FOUNDRY;
+ property->foundry = combine->foundry;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_FAMILY)) &&
+ (combine->xlfd_mask & XAW_TPROP_FAMILY)) {
+ property->xlfd_mask |= XAW_TPROP_FAMILY;
+ property->family = combine->family;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_WEIGHT)) &&
+ (combine->xlfd_mask & XAW_TPROP_WEIGHT)) {
+ property->xlfd_mask |= XAW_TPROP_WEIGHT;
+ property->weight = combine->weight;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_SLANT)) &&
+ (combine->xlfd_mask & XAW_TPROP_SLANT)) {
+ property->xlfd_mask |= XAW_TPROP_SLANT;
+ property->slant = combine->slant;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_SETWIDTH)) &&
+ (combine->xlfd_mask & XAW_TPROP_SETWIDTH)) {
+ property->xlfd_mask |= XAW_TPROP_SETWIDTH;
+ property->setwidth = combine->setwidth;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_ADDSTYLE)) &&
+ (combine->xlfd_mask & XAW_TPROP_ADDSTYLE)) {
+ property->xlfd_mask |= XAW_TPROP_ADDSTYLE;
+ property->addstyle = combine->addstyle;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_PIXELSIZE)) &&
+ (combine->xlfd_mask & XAW_TPROP_PIXELSIZE)) {
+ property->xlfd_mask |= XAW_TPROP_PIXELSIZE;
+ property->pixel_size = combine->pixel_size;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_POINTSIZE)) &&
+ (combine->xlfd_mask & XAW_TPROP_POINTSIZE)) {
+ property->xlfd_mask |= XAW_TPROP_POINTSIZE;
+ property->point_size = combine->point_size;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_RESX)) &&
+ (combine->xlfd_mask & XAW_TPROP_RESX)) {
+ property->xlfd_mask |= XAW_TPROP_RESX;
+ property->res_x = combine->res_x;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_RESY)) &&
+ (combine->xlfd_mask & XAW_TPROP_RESY)) {
+ property->xlfd_mask |= XAW_TPROP_RESY;
+ property->res_y = combine->res_y;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_SPACING)) &&
+ (combine->xlfd_mask & XAW_TPROP_SPACING)) {
+ property->xlfd_mask |= XAW_TPROP_SPACING;
+ property->spacing = combine->spacing;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_AVGWIDTH)) &&
+ (combine->xlfd_mask & XAW_TPROP_AVGWIDTH)) {
+ property->xlfd_mask |= XAW_TPROP_AVGWIDTH;
+ property->avgwidth = combine->avgwidth;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_REGISTRY)) &&
+ (combine->xlfd_mask & XAW_TPROP_REGISTRY)) {
+ property->xlfd_mask |= XAW_TPROP_REGISTRY;
+ property->registry = combine->registry;
+ }
+ if ((override || !(property->xlfd_mask & XAW_TPROP_ENCODING)) &&
+ (combine->xlfd_mask & XAW_TPROP_ENCODING)) {
+ property->xlfd_mask |= XAW_TPROP_ENCODING;
+ property->encoding = combine->encoding;
+ }
+
+ return (property);
+}
+
+/*
+ * The default property must be defined first, if the code is willing to
+ * combine properties.
+ */
+XawTextPropertyList *
+XawTextSinkConvertPropertyList(String name, String spec, Screen *screen,
+ Colormap colormap, int depth)
+{
+ XrmQuark qname = XrmStringToQuark(name);
+ XawTextPropertyList **ptr = NULL;
+ XawTextPropertyList *propl, *prev = NULL;
+ XawTextProperty *def_prop = NULL;
+ String str, tok, tmp;
+ char buffer[BUFSIZ];
+
+ if (prop_lists) ptr = (XawTextPropertyList**)
+ bsearch((void*)(long)qname, prop_lists, num_prop_lists,
+ sizeof(XawTextPropertyList*), bcmp_qident);
+ if (ptr) {
+ propl = *ptr;
+ while (propl) {
+ prev = propl;
+ if (propl->screen == screen &&
+ propl->colormap == colormap &&
+ propl->depth == depth)
+ return (propl);
+ propl = propl->next;
+ }
+ }
+
+ propl = XtNew(XawTextPropertyList);
+ propl->identifier = qname;
+ propl->screen = screen;
+ propl->colormap = colormap;
+ propl->depth = depth;
+ propl->next = NULL;
+
+ if (prev)
+ prev->next = propl;
+
+ propl->properties = NULL;
+ propl->num_properties = 0;
+
+ str = XtNewString(spec);
+ for (tok = str; tok; tok = tmp) {
+ XawTextProperty *prop;
+ XawParams *params;
+ XrmQuark ident;
+ XawArgVal *argval;
+ XColor color, exact;
+
+ if (def_prop == NULL && propl->num_properties)
+ def_prop = _XawTextSinkGetProperty(propl, Qdefault);
+ tmp = strchr(tok, ',');
+ if (tmp) {
+ *tmp = '\0';
+ if (*++tmp == '\0')
+ tmp = NULL;
+ }
+ params = XawParseParamsString(tok);
+ ident = XrmStringToQuark(params->name);
+ if (ident == NULLQUARK) {
+ XmuSnprintf(buffer, sizeof(buffer),
+ "Bad text property name \"%s\".", params->name);
+ XtAppWarning(XtDisplayToApplicationContext
+ (DisplayOfScreen(screen)), buffer);
+ DestroyTextPropertyList(propl);
+ if (prev)
+ prev->next = NULL;
+ XawFreeParamsStruct(params);
+ return (NULL);
+ }
+ else if (_XawTextSinkGetProperty(propl, ident) != NULL) {
+ XawFreeParamsStruct(params);
+ continue;
+ }
+
+ prop = (XawTextProperty*)XtCalloc(1, sizeof(XawTextProperty));
+ prop->identifier = ident;
+
+ if ((argval = XawFindArgVal(params, "font")) != NULL &&
+ argval->value) {
+
+ if ((prop->font = XLoadQueryFont(DisplayOfScreen(screen),
+ argval->value)) == NULL) {
+ XmuSnprintf(buffer, sizeof(buffer),
+ "Cannot load font \"%s\".", argval->value);
+ XtAppWarning(XtDisplayToApplicationContext
+ (DisplayOfScreen(screen)), buffer);
+ DestroyTextPropertyList(propl);
+ if (prev)
+ prev->next = NULL;
+ XawFreeParamsStruct(params);
+ return (NULL);
+ }
+ prop->mask |= XAW_TPROP_FONT;
+ SetXlfdDefaults(DisplayOfScreen(screen), prop);
+ }
+ /* fontset processing here */
+
+ if ((argval = XawFindArgVal(params, "foreground")) != NULL &&
+ argval->value) {
+ if (!XAllocNamedColor(DisplayOfScreen(screen), colormap,
+ argval->value, &color, &exact)) {
+ XmuSnprintf(buffer, sizeof(buffer),
+ "Cannot allocate color \"%s\".", argval->value);
+ XtAppWarning(XtDisplayToApplicationContext
+ (DisplayOfScreen(screen)), buffer);
+ DestroyTextPropertyList(propl);
+ if (prev)
+ prev->next = NULL;
+ XawFreeParamsStruct(params);
+ return (NULL);
+ }
+ prop->foreground = color.pixel;
+ prop->mask |= XAW_TPROP_FOREGROUND;
+ }
+ if ((argval = XawFindArgVal(params, "background")) != NULL &&
+ argval->value) {
+ if (!XAllocNamedColor(DisplayOfScreen(screen), colormap,
+ argval->value, &color, &exact)) {
+ XmuSnprintf(buffer, sizeof(buffer),
+ "Cannot allocate color \"%s\".", argval->value);
+ XtAppWarning(XtDisplayToApplicationContext
+ (DisplayOfScreen(screen)), buffer);
+ DestroyTextPropertyList(propl);
+ if (prev)
+ prev->next = NULL;
+ XawFreeParamsStruct(params);
+ return (NULL);
+ }
+ prop->background = color.pixel;
+ prop->mask |= XAW_TPROP_BACKGROUND;
+ }
+ /* foreground_pixmap and background_pixmap processing here */
+
+ if (XawFindArgVal(params, "underline"))
+ prop->mask |= XAW_TPROP_UNDERLINE;
+ if (XawFindArgVal(params, "overstrike"))
+ prop->mask |= XAW_TPROP_OVERSTRIKE;
+
+ if (XawFindArgVal(params, "subscript"))
+ prop->mask |= XAW_TPROP_SUBSCRIPT;
+ else if (XawFindArgVal(params, "superscript"))
+ prop->mask |= XAW_TPROP_SUPERSCRIPT;
+
+ /* xlfd */
+ if ((argval = XawFindArgVal(params, "foundry")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_FOUNDRY;
+ prop->foundry = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "family")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_FAMILY;
+ prop->family = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "weight")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_WEIGHT;
+ prop->weight = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "slant")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_SLANT;
+ prop->slant = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "setwidth")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_SETWIDTH;
+ prop->setwidth = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "addstyle")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_ADDSTYLE;
+ prop->addstyle = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "pixelsize")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_PIXELSIZE;
+ prop->pixel_size = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "pointsize")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_POINTSIZE;
+ prop->point_size = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "resx")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_RESX;
+ prop->res_x = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "resy")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_RESY;
+ prop->res_y = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "spacing")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_SPACING;
+ prop->spacing = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "avgwidth")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_AVGWIDTH;
+ prop->avgwidth = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "registry")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_REGISTRY;
+ prop->registry = XrmStringToQuark(argval->value);
+ }
+ if ((argval = XawFindArgVal(params, "encoding")) != NULL &&
+ argval->value) {
+ prop->xlfd_mask |= XAW_TPROP_ENCODING;
+ prop->encoding = XrmStringToQuark(argval->value);
+ }
+
+ if (def_prop)
+ (void)XawTextSinkCombineProperty(NULL, prop, def_prop, False);
+ (void)_XawTextSinkAddProperty(propl, prop, False);
+
+ XawFreeParamsStruct(params);
+ }
+
+ prop_lists = (XawTextPropertyList**)
+ XtRealloc((XtPointer)prop_lists, sizeof(XawTextPropertyList*) *
+ (num_prop_lists + 1));
+ prop_lists[num_prop_lists++] = propl;
+ qsort((void*)prop_lists, num_prop_lists, sizeof(XawTextPropertyList*),
+ qcmp_qident);
+
+ XtFree(str);
+
+ return (propl);
+}
+
+/*ARGSUSED*/
+static Boolean
+CvtStringToPropertyList(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ XawTextPropertyList *propl = NULL;
+ String name;
+ Widget w;
+
+ if (*num_args != 1) {
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ "wrongParameters", "cvtStringToTextProperties",
+ "ToolkitError",
+ "String to textProperties conversion needs widget argument",
+ NULL, NULL);
+ return (False);
+ }
+
+ w = *(Widget*)args[0].addr;
+ while (w && !XtIsWidget(w))
+ w = XtParent(w);
+
+ name = (String)(fromVal[0].addr);
+
+ if (w) {
+ XawTextPropertyList **ptr = NULL;
+ if (prop_lists) ptr = (XawTextPropertyList**)
+ bsearch((void*)(long)XrmStringToQuark(name),
+ prop_lists, num_prop_lists,
+ sizeof(XawTextPropertyList*), bcmp_qident);
+
+ if (ptr) {
+ Screen *screen = w->core.screen;
+ Colormap colormap = w->core.colormap;
+ int depth = w->core.depth;
+
+ propl = *ptr;
+ while (propl) {
+ if (propl->screen == screen &&
+ propl->colormap == colormap &&
+ propl->depth == depth)
+ break;
+ propl = propl->next;
+ }
+ }
+ }
+
+ if (!propl) {
+ XtDisplayStringConversionWarning(dpy, (String)fromVal->addr,
+ XawRTextProperties);
+ toVal->addr = NULL;
+ toVal->size = sizeof(XawTextPropertyList*);
+ return (False);
+ }
+
+ if (toVal->addr != NULL) {
+ if (toVal->size < sizeof(XawTextPropertyList*)) {
+ toVal->size = sizeof(XawTextPropertyList*);
+ return (False);
+ }
+ *(XawTextPropertyList**)(toVal->addr) = propl;
+ }
+ else {
+ static XawTextPropertyList *static_val;
+
+ static_val = propl;
+ toVal->addr = (XPointer)&static_val;
+ }
+ toVal->size = sizeof(XawTextProperty*);
+
+ return (True);
+}
+
+/*ARGSUSED*/
+static Boolean
+CvtPropertyListToString(Display *dpy, XrmValue *args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *converter_data)
+{
+ static char *buffer;
+ Cardinal size;
+ XawTextPropertyList *propl;
+
+ propl = *(XawTextPropertyList**)fromVal[0].addr;
+
+ buffer = XrmQuarkToString(propl->identifier);
+ size = strlen(buffer) + 1;
+
+ if (toVal->addr != NULL) {
+ if (toVal->size < size) {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = buffer;
+ toVal->size = size;
+
+ return (True);
+}
+#endif
diff --git a/libXaw/src/TextSrc.c b/libXaw/src/TextSrc.c
index 10e819cda..bc055aaca 100644
--- a/libXaw/src/TextSrc.c
+++ b/libXaw/src/TextSrc.c
@@ -1,2011 +1,2008 @@
-/* $Xorg: TextSrc.c,v 1.5 2001/02/09 02:03:47 xorgcvs Exp $ */
-/*
-
-Copyright 1989, 1994, 1998 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.
-
-*/
-
-/* $XFree86: xc/lib/Xaw/TextSrc.c,v 1.33 2002/09/08 02:29:47 paulo Exp $ */
-
-/*
- * Author: Chris Peterson, MIT X Consortium.
- * Much code taken from X11R3 String and Disk Sources.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <ctype.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xfuncs.h>
-#include <X11/Xutil.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xaw/TextSrcP.h>
-#include <X11/Xaw/XawInit.h>
-#include "XawI18n.h"
-#include "Private.h"
-
-#ifndef OLDXAW
-#define UNDO_DEPTH 16384
-
-#define ANCHORS_DIST 4096 /* default distance between anchors */
-
-/*
- * Types
- */
-typedef struct {
- XawTextPosition position;
- char *buffer;
- unsigned length;
- unsigned refcount;
- unsigned long format;
-} XawTextUndoBuffer;
-
-typedef struct _XawTextUndoList XawTextUndoList;
-struct _XawTextUndoList {
- XawTextUndoBuffer *left, *right;
- XawTextUndoList *undo, *redo;
-};
-
-struct _XawTextUndo {
- XawTextUndoBuffer **undo;
- unsigned num_undo;
- XawTextUndoList *list, *pointer, *end_mark, *head;
- unsigned num_list;
- XawTextScanDirection dir;
- XawTextUndoBuffer *l_save, *r_save;
- XawTextUndoList *u_save;
- XawTextUndoBuffer *l_no_change, *r_no_change;
- int merge;
- int erase; /* there are two types of erases */
-};
-#endif /* OLDXAW */
-
-/*
- * Class Methods
- */
-static Boolean ConvertSelection(Widget, Atom*, Atom*, Atom*, XtPointer*,
- unsigned long*, int*);
-static XawTextPosition Read(Widget, XawTextPosition, XawTextBlock*, int);
-static int Replace(Widget, XawTextPosition, XawTextPosition, XawTextBlock*);
-static XawTextPosition Scan(Widget, XawTextPosition, XawTextScanType,
- XawTextScanDirection, int, Bool);
-static XawTextPosition Search(Widget, XawTextPosition, XawTextScanDirection,
- XawTextBlock*);
-static void SetSelection(Widget, XawTextPosition, XawTextPosition, Atom);
-static void XawTextSrcClassInitialize(void);
-static void XawTextSrcClassPartInitialize(WidgetClass);
-static void XawTextSrcInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawTextSrcDestroy(Widget);
-static Boolean XawTextSrcSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-/*
- * Prototypes
- */
-static void CvtStringToEditMode(XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr);
-static Boolean CvtEditModeToString(Display*, XrmValuePtr, Cardinal*,
- XrmValuePtr, XrmValuePtr, XtPointer*);
-#ifndef OLDXAW
-static void FreeUndoBuffer(XawTextUndo*);
-static void UndoGC(XawTextUndo*);
-static void TellSourceChanged(TextSrcObject, XawTextPosition, XawTextPosition,
- XawTextBlock*, int);
-Bool _XawTextSrcUndo(TextSrcObject, XawTextPosition*);
-Bool _XawTextSrcToggleUndo(TextSrcObject);
-XawTextAnchor *_XawTextSourceFindAnchor(Widget, XawTextPosition);
-
-/*
- * External
- */
-void _XawSourceAddText(Widget, Widget);
-void _XawSourceRemoveText(Widget, Widget, Bool);
-Bool _XawTextSourceNewLineAtEOF(Widget);
-void _XawSourceSetUndoErase(TextSrcObject, int);
-void _XawSourceSetUndoMerge(TextSrcObject, Bool);
-#endif /* OLDXAW */
-
-/*
- * Defined in Text.c
- */
-char *_XawTextGetText(TextWidget, XawTextPosition, XawTextPosition);
-void _XawTextSourceChanged(Widget, XawTextPosition, XawTextPosition,
- XawTextBlock*, int);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(TextSrcRec, textSrc.field)
-static XtResource resources[] = {
- {
- XtNeditType,
- XtCEditType,
- XtREditMode,
- sizeof(XawTextEditType),
- offset(edit_mode),
- XtRString,
- "read"
- },
-#ifndef OLDXAW
- {
- XtNcallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(callback),
- XtRCallback,
- NULL
- },
- {
- XtNsourceChanged,
- XtCChanged,
- XtRBoolean,
- sizeof(Boolean),
- offset(changed),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNenableUndo,
- XtCUndo,
- XtRBoolean,
- sizeof(Boolean),
- offset(enable_undo),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNpropertyCallback,
- XtCCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(property_callback),
- XtRCallback,
- NULL
- },
-#endif /* OLDXAW */
-};
-#undef offset
-
-#define Superclass (&objectClassRec)
-TextSrcClassRec textSrcClassRec = {
- /* object */
- {
- (WidgetClass)Superclass, /* superclass */
- "TextSrc", /* class_name */
- sizeof(TextSrcRec), /* widget_size */
- XawTextSrcClassInitialize, /* class_initialize */
- XawTextSrcClassPartInitialize, /* class_part_initialize */
- False, /* class_inited */
- XawTextSrcInitialize, /* initialize */
- NULL, /* initialize_hook */
- NULL, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- False, /* compress_motion */
- False, /* compress_exposure */
- False, /* compress_enterleave */
- False, /* visible_interest */
- XawTextSrcDestroy, /* destroy */
- NULL, /* resize */
- NULL, /* expose */
- XawTextSrcSetValues, /* set_values */
- NULL, /* set_values_hook */
- NULL, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- NULL, /* query_geometry */
- NULL, /* display_accelerator */
- NULL, /* extension */
- },
- /* text_src */
- {
- Read, /* Read */
- Replace, /* Replace */
- Scan, /* Scan */
- Search, /* Search */
- SetSelection, /* SetSelection */
- ConvertSelection, /* ConvertSelection */
- },
-};
-
-WidgetClass textSrcObjectClass = (WidgetClass)&textSrcClassRec;
-
-static XrmQuark QRead, QAppend, QEdit;
-#ifndef OLDXAW
-static char *SrcNL = "\n";
-static wchar_t SrcWNL[2];
-#endif
-
-/*
- * Implementation
- */
-static void
-XawTextSrcClassInitialize(void)
-{
- XawInitializeWidgetSet();
-
-#ifndef OLDXAW
- SrcWNL[0] = _Xaw_atowc(XawLF);
- SrcWNL[1] = 0;
-#endif
- QRead = XrmPermStringToQuark(XtEtextRead);
- QAppend = XrmPermStringToQuark(XtEtextAppend);
- QEdit = XrmPermStringToQuark(XtEtextEdit);
- XtAddConverter(XtRString, XtREditMode, CvtStringToEditMode, NULL, 0);
- XtSetTypeConverter(XtREditMode, XtRString, CvtEditModeToString, NULL, 0,
- XtCacheNone, NULL);
-}
-
-static void
-XawTextSrcClassPartInitialize(WidgetClass wc)
-{
- TextSrcObjectClass t_src, superC;
-
- t_src = (TextSrcObjectClass)wc;
- superC = (TextSrcObjectClass)t_src->object_class.superclass;
-
- /*
- * We don't need to check for null super since we'll get to TextSrc
- * eventually
- */
- if (t_src->textSrc_class.Read == XtInheritRead)
- t_src->textSrc_class.Read = superC->textSrc_class.Read;
-
- if (t_src->textSrc_class.Replace == XtInheritReplace)
- t_src->textSrc_class.Replace = superC->textSrc_class.Replace;
-
- if (t_src->textSrc_class.Scan == XtInheritScan)
- t_src->textSrc_class.Scan = superC->textSrc_class.Scan;
-
- if (t_src->textSrc_class.Search == XtInheritSearch)
- t_src->textSrc_class.Search = superC->textSrc_class.Search;
-
- if (t_src->textSrc_class.SetSelection == XtInheritSetSelection)
- t_src->textSrc_class.SetSelection = superC->textSrc_class.SetSelection;
-
- if (t_src->textSrc_class.ConvertSelection == XtInheritConvertSelection)
- t_src->textSrc_class.ConvertSelection =
- superC->textSrc_class.ConvertSelection;
-}
-
-/*ARGSUSED*/
-static void
-XawTextSrcInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
-#ifndef OLDXAW
- TextSrcObject src = (TextSrcObject)cnew;
-
- if (src->textSrc.enable_undo) {
- src->textSrc.undo = (XawTextUndo*)XtCalloc(1, sizeof(XawTextUndo));
- src->textSrc.undo->dir = XawsdLeft;
- }
- else
- src->textSrc.undo = NULL;
- src->textSrc.undo_state = False;
- if (XtIsSubclass(XtParent(cnew), textWidgetClass)) {
- src->textSrc.text = (WidgetList)XtMalloc(sizeof(Widget*));
- src->textSrc.text[0] = XtParent(cnew);
- src->textSrc.num_text = 1;
- }
- else {
- src->textSrc.text = NULL;
- src->textSrc.num_text = 0;
- }
-
- src->textSrc.anchors = NULL;
- src->textSrc.num_anchors = 0;
- (void)XawTextSourceAddAnchor(cnew, 0);
-#endif /* OLDXAW */
-}
-
-static void
-XawTextSrcDestroy(Widget w)
-{
-#ifndef OLDXAW
- TextSrcObject src = (TextSrcObject)w;
-
- if (src->textSrc.enable_undo) {
- FreeUndoBuffer(src->textSrc.undo);
- XtFree((char*)src->textSrc.undo);
- }
- XtFree((char*)src->textSrc.text);
-
- if (src->textSrc.num_anchors) {
- XawTextEntity *entity, *enext;
- int i;
-
- for (i = 0; i < src->textSrc.num_anchors; i++) {
- entity = src->textSrc.anchors[i]->entities;
- while (entity) {
- enext = entity->next;
- XtFree((XtPointer)entity);
- entity = enext;
- }
- XtFree((XtPointer)src->textSrc.anchors[i]);
- }
- XtFree((XtPointer)src->textSrc.anchors);
- }
-#endif /* OLDXAW */
-}
-
-/*ARGSUSED*/
-static Boolean
-XawTextSrcSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
-#ifndef OLDXAW
- TextSrcObject oldtw = (TextSrcObject)current;
- TextSrcObject newtw = (TextSrcObject)cnew;
-
- if (oldtw->textSrc.enable_undo != newtw->textSrc.enable_undo) {
- if (newtw->textSrc.enable_undo) {
- newtw->textSrc.undo = (XawTextUndo*)
- XtCalloc(1, sizeof(XawTextUndo));
- newtw->textSrc.undo->dir = XawsdLeft;
- }
- else {
- FreeUndoBuffer(newtw->textSrc.undo);
- XtFree((char*)newtw->textSrc.undo);
- newtw->textSrc.undo = NULL;
- }
- }
- if (oldtw->textSrc.changed != newtw->textSrc.changed) {
- if (newtw->textSrc.enable_undo) {
- if (newtw->textSrc.undo->list) {
- newtw->textSrc.undo->l_no_change =
- newtw->textSrc.undo->list->left;
- newtw->textSrc.undo->r_no_change =
- newtw->textSrc.undo->list->right;
- }
- else
- newtw->textSrc.undo->l_no_change =
- newtw->textSrc.undo->r_no_change = NULL;
- }
- }
-#endif /* OLDXAW */
- return (False);
-}
-
-/*
- * Function:
- * Read
- *
- * Parameters:
- * w - TextSrc Object
- * pos - position of the text to retreive
- * text - text block that will contain returned text
- * length - maximum number of characters to read
- *
- * Description:
- * This function reads the source.
- *
- * Returns:
- * The character position following the retrieved text.
- */
-/*ARGSUSED*/
-static XawTextPosition
-Read(Widget w, XawTextPosition pos, XawTextBlock *text, int length)
-{
- return ((XawTextPosition)0);
-}
-
-/*
- * Function:
- * Replace
- *
- * Parameters:
- * src - Text Source Object
- * startPos - ends of text that will be removed
- * endPos - ""
- * text - new text to be inserted into buffer at startPos
- *
- * Description:
- * Replaces a block of text with new text.
- */
-/*ARGSUSED*/
-static int
-Replace(Widget w, XawTextPosition startPos, XawTextPosition endPos,
- XawTextBlock *text)
-{
- return (XawEditError);
-}
-
-/*
- * Function:
- * Scan
- *
- * Parameters:
- * w - TextSrc Object
- * position - position to start scanning
- * type - type of thing to scan for
- * dir - direction to scan
- * count - which occurance if this thing to search for
- * include - whether or not to include the character found in
- * the position that is returned
- *
- * Description:
- * Scans the text source for the number and type of item specified.
- */
-/*ARGSUSED*/
-static XawTextPosition
-Scan(Widget w, XawTextPosition position, XawTextScanType type,
- XawTextScanDirection dir, int count, Bool include)
-{
- return ((XawTextPosition)0);
-}
-
-/*
- * Function:
- * Search
- *
- * Parameters:
- * w - TextSource Object
- * position - position to start searching
- * dir - direction to search
- * text - the text block to search for
- *
- * Description:
- * Searchs the text source for the text block passed
- */
-/*ARGSUSED*/
-static XawTextPosition
-Search(Widget w, XawTextPosition position, XawTextScanDirection dir,
- XawTextBlock *text)
-{
- return (XawTextSearchError);
-}
-
-/*ARGSUSED*/
-static Boolean
-ConvertSelection(Widget w, Atom *selection, Atom *target, Atom *type,
- XtPointer *value, unsigned long *length, int *format)
-{
- return (False);
-}
-
-/*ARGSUSED*/
-static void
-SetSelection(Widget w, XawTextPosition left, XawTextPosition right,
- Atom selection)
-{
-}
-
-/*ARGSUSED*/
-static void
-CvtStringToEditMode(XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal)
-{
- static XawTextEditType editType;
- XrmQuark q;
- char name[7];
-
- XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
- q = XrmStringToQuark(name);
-
- if (q == QRead)
- editType = XawtextRead;
- else if (q == QAppend)
- editType = XawtextAppend;
- else if (q == QEdit)
- editType = XawtextEdit;
- else {
- toVal->size = 0;
- toVal->addr = NULL;
- XtStringConversionWarning((char *)fromVal->addr, XtREditMode);
- }
- toVal->size = sizeof(XawTextEditType);
- toVal->addr = (XPointer)&editType;
-}
-
-/*ARGSUSED*/
-static Boolean
-CvtEditModeToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
- XrmValuePtr fromVal, XrmValuePtr toVal,
- XtPointer *data)
-{
- static String buffer;
- Cardinal size;
-
- switch (*(XawTextEditType *)fromVal->addr) {
- case XawtextAppend:
- case XawtextRead:
- buffer = XtEtextRead;
- break;
- buffer = XtEtextAppend;
- break;
- case XawtextEdit:
- buffer = XtEtextEdit;
- break;
- default:
- XawTypeToStringWarning(dpy, XtREditMode);
- toVal->addr = NULL;
- toVal->size = 0;
- return (False);
- }
-
- size = strlen(buffer) + 1;
- if (toVal->addr != NULL) {
- if (toVal->size < size) {
- toVal->size = size;
- return (False);
- }
- strcpy((char *)toVal->addr, buffer);
- }
- else
- toVal->addr = (XPointer)buffer;
- toVal->size = sizeof(String);
-
- return (True);
-}
-
-#ifndef OLDXAW
-Bool
-_XawTextSourceNewLineAtEOF(Widget w)
-{
- TextSrcObject src = (TextSrcObject)w;
- XawTextBlock text;
-
- text.firstPos = 0;
- if ((text.format = src->textSrc.text_format) == XawFmt8Bit)
- text.ptr = SrcNL;
- else
- text.ptr = (char*)SrcWNL;
- text.length = 1;
-
- return (XawTextSourceSearch(w, XawTextSourceScan(w, 0, XawstAll,
- XawsdRight, 1, True) - 1,
- XawsdRight, &text) != XawTextSearchError);
-}
-
-void
-_XawSourceAddText(Widget source, Widget text)
-{
- TextSrcObject src = (TextSrcObject)source;
- Bool found = False;
- Cardinal i;
-
- for (i = 0; i < src->textSrc.num_text; i++)
- if (src->textSrc.text[i] == text) {
- found = True;
- break;
- }
-
- if (!found) {
- src->textSrc.text = (WidgetList)
- XtRealloc((char*)src->textSrc.text,
- sizeof(Widget) * (src->textSrc.num_text + 1));
- src->textSrc.text[src->textSrc.num_text++] = text;
- }
-}
-
-void
-_XawSourceRemoveText(Widget source, Widget text, Bool destroy)
-{
- TextSrcObject src = (TextSrcObject)source;
- Bool found = False;
- Cardinal i;
-
- if (src == NULL)
- return;
-
- for (i = 0; i < src->textSrc.num_text; i++)
- if (src->textSrc.text[i] == text) {
- found = True;
- break;
- }
-
- if (found) {
- if (--src->textSrc.num_text == 0) {
- if (destroy) {
- XtDestroyWidget(source);
- return;
- }
- else {
- XtFree((char*)src->textSrc.text);
- src->textSrc.text = NULL; /* for realloc "magic" */
- }
- }
- else if (i < src->textSrc.num_text)
- memmove(&src->textSrc.text[i], &src->textSrc.text[i + 1],
- sizeof(Widget) * (src->textSrc.num_text - i));
- }
-}
-#endif /* OLDXAW */
-
-/*
- * Function:
- * XawTextSourceRead
- *
- * Parameters:
- * w - TextSrc Object
- * pos - position of the text to retrieve
- * text - text block that will contain returned text (return)
- * length - maximum number of characters to read
- *
- * Description:
- * This function reads the source.
- *
- * Returns:
- * The number of characters read into the buffer
- */
-XawTextPosition
-XawTextSourceRead(Widget w, XawTextPosition pos, XawTextBlock *text,
- int length)
-{
- TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
-
- return ((*cclass->textSrc_class.Read)(w, pos, text, length));
-}
-
-#ifndef OLDXAW
-static void
-TellSourceChanged(TextSrcObject src, XawTextPosition left,
- XawTextPosition right, XawTextBlock *block, int lines)
-{
- Cardinal i;
-
- for (i = 0; i < src->textSrc.num_text; i++)
- _XawTextSourceChanged(src->textSrc.text[i], left, right, block, lines);
-}
-
-/*
- * This function is required because there is no way to diferentiate
- * if the first erase was generated by a backward-kill-char and the
- * second by a forward-kill-char (or vice-versa) from XawTextSourceReplace.
- * It is only possible to diferentiate after the second character is
- * killed, but then, it is too late.
- */
-void
-_XawSourceSetUndoErase(TextSrcObject src, int value)
-{
- if (src && src->textSrc.enable_undo)
- src->textSrc.undo->erase = value;
-}
-
-/*
- * To diferentiate insert-char's separeted by cursor movements.
- */
-void
-_XawSourceSetUndoMerge(TextSrcObject src, Bool state)
-{
- if (src && src->textSrc.enable_undo)
- src->textSrc.undo->merge += state ? 1 : -1;
-}
-#endif /* OLDXAW */
-
-/*
- * Public Functions
- */
-/*
- * Function:
- * XawTextSourceReplace
- *
- * Parameters:
- * src - Text Source Object
- * startPos - ends of text that will be removed
- * endPos - ""
- * text - new text to be inserted into buffer at startPos
- *
- * Description:
- * Replaces a block of text with new text.
- *
- * Returns:
- * XawEditError or XawEditDone.
- */
-/*ARGSUSED*/
-int
-XawTextSourceReplace(Widget w, XawTextPosition left,
- XawTextPosition right, XawTextBlock *block)
-{
- TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
-#ifndef OLDXAW
- TextSrcObject src = (TextSrcObject)w;
- XawTextUndoBuffer *l_state, *r_state;
- XawTextUndoList *undo;
- Bool enable_undo;
- XawTextPosition start, end;
- int i, error, lines = 0;
-
- if (src->textSrc.edit_mode == XawtextRead)
- return (XawEditError);
-
- enable_undo = src->textSrc.enable_undo && src->textSrc.undo_state == False;
- if (enable_undo) {
- unsigned size, total;
-
- if (src->textSrc.undo->l_save) {
- l_state = src->textSrc.undo->l_save;
- src->textSrc.undo->l_save = NULL;
- }
- else
- l_state = XtNew(XawTextUndoBuffer);
- l_state->refcount = 1;
- l_state->position = left;
- if (left < right) {
- Widget ctx = NULL;
-
- for (i = 0; i < src->textSrc.num_text; i++)
- if (XtIsSubclass(src->textSrc.text[i], textWidgetClass)) {
- ctx = src->textSrc.text[i];
- break;
- }
- l_state->buffer = _XawTextGetText((TextWidget)ctx, left, right);
- l_state->length = right - left;
- }
- else {
- l_state->length = 0;
- l_state->buffer = NULL;
- }
- l_state->format = src->textSrc.text_format;
- if (l_state->length == 1) {
- if (l_state->format == XawFmtWide &&
- *(wchar_t*)l_state->buffer == *SrcWNL) {
- XtFree(l_state->buffer);
- l_state->buffer = (char*)SrcWNL;
- }
- else if (*l_state->buffer == '\n') {
- XtFree(l_state->buffer);
- l_state->buffer = SrcNL;
- }
- }
-
- if (src->textSrc.undo->r_save) {
- r_state = src->textSrc.undo->r_save;
- src->textSrc.undo->r_save = NULL;
- }
- else
- r_state = XtNew(XawTextUndoBuffer);
- r_state->refcount = 1;
- r_state->position = left;
- r_state->format = block->format;
- size = block->format == XawFmtWide ? sizeof(wchar_t) : sizeof(char);
- total = size * block->length;
- r_state->length = block->length;
- r_state->buffer = NULL;
- if (total == size) {
- if (r_state->format == XawFmtWide &&
- *(wchar_t*)block->ptr == *SrcWNL)
- r_state->buffer = (char*)SrcWNL;
- else if (*block->ptr == '\n')
- r_state->buffer = SrcNL;
- }
- if (total && !r_state->buffer) {
- r_state->buffer = XtMalloc(total);
- memcpy(r_state->buffer, block->ptr, total);
- }
-
- if (src->textSrc.undo->u_save) {
- undo = src->textSrc.undo->u_save;
- src->textSrc.undo->u_save = NULL;
- }
- else
- undo = XtNew(XawTextUndoList);
- undo->left = l_state;
- undo->right = r_state;
- undo->undo = src->textSrc.undo->list;
- undo->redo = NULL;
- }
- else {
- undo = NULL;
- l_state = r_state = NULL;
- }
-
-#define LARGE_VALUE 262144 /* 256 K */
- /* optimization, to avoid long delays recalculating the line number
- * when editing huge files
- */
- if (left > LARGE_VALUE) {
- start = XawTextSourceScan(w, left, XawstEOL, XawsdLeft, 2, False);
- for (i = 0; i < src->textSrc.num_text; i++) {
- TextWidget tw = (TextWidget)src->textSrc.text[i];
-
- if (left <= tw->text.lt.top &&
- left + block->length - (right - left) > tw->text.lt.top)
- _XawTextBuildLineTable(tw, start, False);
- }
- }
-#undef LARGE_VALUE
-
- start = left;
- end = right;
- while (start < end) {
- start = XawTextSourceScan(w, start, XawstEOL, XawsdRight, 1, True);
- if (start <= end) {
- --lines;
- if (start == XawTextSourceScan(w, 0, XawstAll, XawsdRight, 1, True)) {
- lines += !_XawTextSourceNewLineAtEOF(w);
- break;
- }
- }
- }
-#else
- int error;
-#endif /* OLDXAW */
-
- error = (*cclass->textSrc_class.Replace)(w, left, right, block);
-
-#ifndef OLDXAW
- if (error != XawEditDone) {
- if (enable_undo) {
- if (l_state->buffer) {
- if (l_state->buffer != SrcNL && l_state->buffer != (char*)SrcWNL)
- XtFree(l_state->buffer);
- l_state->buffer = NULL;
- }
- src->textSrc.undo->l_save = l_state;
- if (r_state->buffer) {
- if (r_state->buffer != SrcNL && r_state->buffer != (char*)SrcWNL)
- XtFree(r_state->buffer);
- r_state->buffer = NULL;
- }
- src->textSrc.undo->r_save = r_state;
-
- src->textSrc.undo->u_save = undo;
- }
- }
- else if (enable_undo) {
- XawTextUndoList *list = src->textSrc.undo->list;
- XawTextUndoBuffer *unl, *lnl;
- int erase = undo->right->length == 0 && undo->left->length == 1 && list
- && list->right->length == 0;
-
- if (erase) {
- erase = list->left->position - 1 == undo->left->position ? -1 :
- list->left->position == undo->left->position ? 1 : 0;
- if (src->textSrc.undo->erase && erase != src->textSrc.undo->erase)
- erase = 0;
- else
- src->textSrc.undo->erase = erase;
- }
-
- if (erase) {
- unl = l_state;
- lnl = list->left;
- }
- else {
- unl = r_state;
- lnl = list ? list->right : NULL;
- }
-
- /* Try to merge the undo buffers */
- if (src->textSrc.undo->merge > 0 && ((erase ||
- (list && ((list->left->length == 0 && undo->left->length == 0) ||
- (list->left->length == list->right->length &&
- undo->left->length == 1)) &&
- undo->right->length == 1 &&
- list->right->position + list->right->length
- == undo->right->position))
- && src->textSrc.undo->pointer == list
- && unl->format == list->right->format
- && ((unl->format == XawFmt8Bit && unl->buffer[0] != XawLF) ||
- (unl->format == XawFmtWide &&
- *(wchar_t*)(unl->buffer) != _Xaw_atowc(XawLF)))
- && ((lnl->format == XawFmt8Bit && lnl->buffer[0] != XawLF) ||
- (lnl->format == XawFmtWide &&
- *(wchar_t*)(lnl->buffer) != _Xaw_atowc(XawLF))))) {
- unsigned size = lnl->format == XawFmtWide ?
- sizeof(wchar_t) : sizeof(char);
-
- if (!erase) {
- list->right->buffer = XtRealloc(list->right->buffer,
- (list->right->length + 1) * size);
- memcpy(list->right->buffer + list->right->length * size,
- undo->right->buffer, size);
- ++list->right->length;
- XtFree(r_state->buffer);
- }
- else if (erase < 0) {
- --list->left->position;
- --list->right->position;
- }
-
- src->textSrc.undo->l_save = l_state;
- src->textSrc.undo->r_save = r_state;
- src->textSrc.undo->u_save = undo;
-
- if (list->left->length) {
- list->left->buffer = XtRealloc(list->left->buffer,
- (list->left->length + 1) * size);
- if (erase >= 0)
- memcpy(list->left->buffer + list->left->length * size,
- undo->left->buffer, size);
- else {
- /* use memmove, since strings overlap */
- memmove(list->left->buffer + size, list->left->buffer,
- list->left->length * size);
- memcpy(list->left->buffer, undo->left->buffer, size);
- }
- ++list->left->length;
- if (l_state->buffer != SrcNL && l_state->buffer != (char*)SrcWNL)
- XtFree(l_state->buffer);
- }
-
- if (src->textSrc.undo->num_list >= UNDO_DEPTH)
- UndoGC(src->textSrc.undo);
- }
- else {
- src->textSrc.undo->undo = (XawTextUndoBuffer**)
- XtRealloc((char*)src->textSrc.undo->undo,
- (2 + src->textSrc.undo->num_undo)
- * sizeof(XawTextUndoBuffer));
- src->textSrc.undo->undo[src->textSrc.undo->num_undo++] = l_state;
- src->textSrc.undo->undo[src->textSrc.undo->num_undo++] = r_state;
-
- if (src->textSrc.undo->list)
- src->textSrc.undo->list->redo = undo;
- else
- src->textSrc.undo->head = undo;
-
- src->textSrc.undo->merge = l_state->length <= 1 &&
- r_state->length <= 1;
-
- src->textSrc.undo->list = src->textSrc.undo->pointer =
- src->textSrc.undo->end_mark = undo;
-
- if (++src->textSrc.undo->num_list >= UNDO_DEPTH)
- UndoGC(src->textSrc.undo);
- }
- src->textSrc.undo->dir = XawsdLeft;
- if (!src->textSrc.changed) {
- src->textSrc.undo->l_no_change = src->textSrc.undo->list->right;
- src->textSrc.undo->r_no_change = src->textSrc.undo->list->left;
- src->textSrc.changed = True;
- }
- }
- else if (!src->textSrc.enable_undo)
- src->textSrc.changed = True;
-
- if (error == XawEditDone) {
- XawTextPropertyInfo info;
- XawTextAnchor *anchor;
-
- /* find anchor and index */
- /* XXX index (i) could be returned by XawTextSourceFindAnchor
- * or similar function, to speed up */
- if ((anchor = XawTextSourceFindAnchor(w, left))) {
- XawTextEntity *eprev, *entity, *enext;
- XawTextPosition offset = 0, diff = block->length - (right - left);
-
- for (i = 0; i < src->textSrc.num_anchors; i++)
- if (src->textSrc.anchors[i] == anchor)
- break;
- if (anchor->cache && anchor->position + anchor->cache->offset +
- anchor->cache->length <= left)
- eprev = entity = anchor->cache;
- else
- eprev = entity = anchor->entities;
- while (entity) {
- offset = anchor->position + entity->offset;
-
- if (offset > left)
- break;
- if (offset + entity->length > left)
- break;
-
- eprev = entity;
- entity = entity->next;
- }
-
- /* try to do the right thing here (and most likely correct), but
- * other code needs to check what was done */
-
- /* adjust entity length */
- if (entity && offset <= left) {
- if (offset + entity->length < right)
- entity->length = left - offset + block->length;
- else
- entity->length += diff;
-
- if (entity->length == 0) {
- enext = entity->next;
- eprev->next = enext;
- anchor->cache = NULL;
- XtFree((XtPointer)entity);
- if (entity == anchor->entities) {
- if ((anchor->entities = enext) == NULL) {
- eprev = NULL;
- anchor = XawTextSourceRemoveAnchor(w, anchor);
- entity = anchor ? anchor->entities : NULL;
- }
- else
- eprev = entity = enext;
- }
- else
- entity = enext;
- }
- else {
- eprev = entity;
- entity = entity->next;
- }
- }
-
- while (anchor) {
- while (entity) {
- offset = anchor->position + entity->offset + entity->length;
-
- if (offset > right) {
- entity->length = XawMin(entity->length, offset - right);
- goto exit_anchor_loop;
- }
-
- enext = entity->next;
- if (eprev)
- eprev->next = enext;
- XtFree((XtPointer)entity);
- anchor->cache = NULL;
- if (entity == anchor->entities) {
- eprev = NULL;
- if ((anchor->entities = enext) == NULL) {
- if (i == 0)
- ++i;
- else if (i < --src->textSrc.num_anchors) {
- memmove(&src->textSrc.anchors[i],
- &src->textSrc.anchors[i + 1],
- (src->textSrc.num_anchors - i) *
- sizeof(XawTextAnchor*));
- XtFree((XtPointer)anchor);
- }
- if (i >= src->textSrc.num_anchors) {
- anchor = NULL;
- entity = NULL;
- break;
- }
- anchor = src->textSrc.anchors[i];
- entity = anchor->entities;
- continue;
- }
- }
- entity = enext;
- }
- if (i + 1 < src->textSrc.num_anchors) {
- anchor = src->textSrc.anchors[++i];
- entity = anchor->entities;
- eprev = NULL;
- }
- else {
- anchor = NULL;
- break;
- }
- eprev = NULL;
- }
-
-exit_anchor_loop:
- if (anchor) {
- XawTextAnchor *aprev;
-
- if (anchor->position >= XawMax(right, left + block->length))
- anchor->position += diff;
- else if (anchor->position > left &&
- (aprev = XawTextSourcePrevAnchor(w, anchor))) {
- XawTextPosition tmp = anchor->position - aprev->position;
-
- if (diff) {
- while (entity) {
- entity->offset += diff;
- entity = entity->next;
- }
- }
- entity = anchor->entities;
- while (entity) {
- entity->offset += tmp;
- entity = entity->next;
- }
- if ((entity = aprev->entities) == NULL)
- aprev->entities = anchor->entities;
- else {
- while (entity->next)
- entity = entity->next;
- entity->next = anchor->entities;
- }
- anchor->entities = NULL;
- (void)XawTextSourceRemoveAnchor(w, anchor);
- --i;
- }
- else if (diff) {
- while (entity) {
- entity->offset += diff;
- entity = entity->next;
- }
- }
- }
-
- if (diff) {
- /* The first anchor is never removed, and should
- * have position 0.
- * i should be -1 if attempted to removed the first
- * anchor, what can be caused when removing a chunk
- * of text of the first entity.
- * */
- if (++i == 0) {
- anchor = src->textSrc.anchors[0];
- eprev = entity = anchor->entities;
- while (entity) {
- enext = entity->next;
- if (entity->offset + entity->length <= -diff)
- XtFree((XtPointer)entity);
- else
- break;
- entity = enext;
- }
- if (eprev != entity) {
- anchor->cache = NULL;
- if ((anchor->entities = entity) != NULL) {
- if ((entity->offset += diff) < 0) {
- entity->length += entity->offset;
- entity->offset = 0;
- }
- }
- }
- ++i;
- }
- for (; i < src->textSrc.num_anchors; i++)
- src->textSrc.anchors[i]->position += diff;
- }
- }
-
- start = left;
- end = start + block->length;
- while (start < end) {
- start = XawTextSourceScan(w, start, XawstEOL, XawsdRight, 1, True);
- if (start <= end) {
- ++lines;
- if (start == XawTextSourceScan(w, 0, XawstAll, XawsdRight, 1, True)) {
- lines -= !_XawTextSourceNewLineAtEOF(w);
- break;
- }
- }
- }
-
- info.left = left;
- info.right = right;
- info.block = block;
- XtCallCallbacks(w, XtNpropertyCallback, &info);
-
- TellSourceChanged(src, left, right, block, lines);
- /* Call callbacks, we have changed the buffer */
- XtCallCallbacks(w, XtNcallback,
- (XtPointer)((long)src->textSrc.changed));
- }
-
-#endif /* OLDXAW */
- return (error);
-}
-
-#ifndef OLDXAW
-Bool
-_XawTextSrcUndo(TextSrcObject src, XawTextPosition *insert_pos)
-{
- static wchar_t wnull = 0;
- XawTextBlock block;
- XawTextUndoList *list, *nlist;
- XawTextUndoBuffer *l_state, *r_state;
- Boolean changed = src->textSrc.changed;
-
- if (!src->textSrc.enable_undo || !src->textSrc.undo->num_undo)
- return (False);
-
- list = src->textSrc.undo->pointer;
-
- if (src->textSrc.undo->dir == XawsdLeft) {
- l_state = list->right;
- r_state = list->left;
- }
- else {
- l_state = list->left;
- r_state = list->right;
- }
-
- if (src->textSrc.undo->l_no_change == l_state
- && src->textSrc.undo->r_no_change == r_state)
- src->textSrc.changed = False;
- else
- src->textSrc.changed = True;
-
- block.firstPos = 0;
- block.length = r_state->length;
- block.ptr = r_state->buffer ? r_state->buffer : (char*)&wnull;
- block.format = r_state->format;
-
- src->textSrc.undo_state = True;
- if (XawTextSourceReplace((Widget)src, l_state->position, l_state->position
- + l_state->length, &block) != XawEditDone) {
- src->textSrc.undo_state = False;
- src->textSrc.changed = changed;
- return (False);
- }
- src->textSrc.undo_state = False;
-
- ++l_state->refcount;
- ++r_state->refcount;
- nlist = XtNew(XawTextUndoList);
- nlist->left = l_state;
- nlist->right = r_state;
- nlist->undo = src->textSrc.undo->list;
- nlist->redo = NULL;
-
- if (list == src->textSrc.undo->list)
- src->textSrc.undo->end_mark = nlist;
-
- if (src->textSrc.undo->dir == XawsdLeft) {
- if (list->undo == NULL)
- src->textSrc.undo->dir = XawsdRight;
- else
- list = list->undo;
- }
- else {
- if (list->redo == NULL || list->redo == src->textSrc.undo->end_mark)
- src->textSrc.undo->dir = XawsdLeft;
- else
- list = list->redo;
- }
- *insert_pos = r_state->position + r_state->length;
- src->textSrc.undo->pointer = list;
- src->textSrc.undo->list->redo = nlist;
- src->textSrc.undo->list = nlist;
- src->textSrc.undo->merge = src->textSrc.undo->erase = 0;
-
- if (++src->textSrc.undo->num_list >= UNDO_DEPTH)
- UndoGC(src->textSrc.undo);
-
- return (True);
-}
-
-Bool
-_XawTextSrcToggleUndo(TextSrcObject src)
-{
- if (!src->textSrc.enable_undo || !src->textSrc.undo->num_undo)
- return (False);
-
- if (src->textSrc.undo->pointer != src->textSrc.undo->list) {
- if (src->textSrc.undo->dir == XawsdLeft) {
- if (src->textSrc.undo->pointer->redo
- && (src->textSrc.undo->pointer->redo
- != src->textSrc.undo->end_mark)) {
- src->textSrc.undo->pointer = src->textSrc.undo->pointer->redo;
- src->textSrc.undo->dir = XawsdRight;
- }
- }
- else {
- if (src->textSrc.undo->pointer->undo
- && (src->textSrc.undo->pointer != src->textSrc.undo->head)) {
- src->textSrc.undo->pointer = src->textSrc.undo->pointer->undo;
- src->textSrc.undo->dir = XawsdLeft;
- }
- }
- }
-
- return (True);
-}
-
-static void
-FreeUndoBuffer(XawTextUndo *undo)
-{
- unsigned i;
- XawTextUndoList *head, *del;
-
- for (i = 0; i < undo->num_undo; i++) {
- if (undo->undo[i]->buffer && undo->undo[i]->buffer != SrcNL &&
- undo->undo[i]->buffer != (char*)SrcWNL)
- XtFree(undo->undo[i]->buffer);
- XtFree((char*)undo->undo[i]);
- }
- XtFree((char*)undo->undo);
- head = undo->head;
-
- del = head;
- while (head) {
- head = head->redo;
- XtFree((char*)del);
- del = head;
- }
-
- if (undo->l_save) {
- XtFree((char*)undo->l_save);
- undo->l_save = NULL;
- }
- if (undo->r_save) {
- XtFree((char*)undo->r_save);
- undo->r_save = NULL;
- }
- if (undo->u_save) {
- XtFree((char*)undo->u_save);
- undo->u_save = NULL;
- }
-
- undo->list = undo->pointer = undo->head = undo->end_mark = NULL;
- undo->l_no_change = undo->r_no_change = NULL;
- undo->undo = NULL;
- undo->dir = XawsdLeft;
- undo->num_undo = undo->num_list = undo->erase = undo->merge = 0;
-}
-
-static void
-UndoGC(XawTextUndo *undo)
-{
- unsigned i;
- XawTextUndoList *head = undo->head, *redo = head->redo;
-
- if (head == undo->pointer || head == undo->end_mark
- || undo->l_no_change == NULL
- || head->left == undo->l_no_change || head->right == undo->l_no_change)
- return;
-
- undo->head = redo;
- redo->undo = NULL;
-
- --head->left->refcount;
- if (--head->right->refcount == 0) {
- for (i = 0; i < undo->num_undo; i+= 2)
- if (head->left == undo->undo[i] || head->left == undo->undo[i+1]) {
- if (head->left == undo->undo[i+1]) {
- XawTextUndoBuffer *tmp = redo->left;
-
- redo->left = redo->right;
- redo->right = tmp;
- }
- if (head->left->buffer && head->left->buffer != SrcNL &&
- head->left->buffer != (char*)SrcWNL)
- XtFree(head->left->buffer);
- XtFree((char*)head->left);
- if (head->right->buffer && head->right->buffer != SrcNL &&
- head->right->buffer != (char*)SrcWNL)
- XtFree(head->right->buffer);
- XtFree((char*)head->right);
-
- undo->num_undo -= 2;
- memmove(&undo->undo[i], &undo->undo[i + 2],
- (undo->num_undo - i) * sizeof(XawTextUndoBuffer*));
- break;
- }
- }
- XtFree((char*)head);
- --undo->num_list;
-}
-#endif /* OLDXAW */
-
-/*
- * Function:
- * XawTextSourceScan
- *
- * Parameters:
- * w - TextSrc Object
- * position - position to start scanning
- * type - type of thing to scan for
- * dir - direction to scan
- * count - which occurance if this thing to search for
- * include - whether or not to include the character found in
- * the position that is returned.
- *
- * Description:
- * Scans the text source for the number and type of item specified.
- *
- * Returns:
- * The position of the text
- */
-XawTextPosition
-XawTextSourceScan(Widget w, XawTextPosition position,
-#if NeedWidePrototypes
- int type, int dir, int count, int include
-#else
- XawTextScanType type, XawTextScanDirection dir,
- int count, Boolean include
-#endif
-)
-{
- TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
-
- return ((*cclass->textSrc_class.Scan)
- (w, position, type, dir, count, include));
-}
-
-/*
- * Function:
- * XawTextSourceSearch
- *
- * Parameters:
- * w - TextSource Object
- * position - position to start scanning
- * dir - direction to scan
- * text - the text block to search for.
- *
- * Returns:
- * The position of the text we are searching for or XawTextSearchError.
- *
- * Description:
- * Searchs the text source for the text block passed
- */
-XawTextPosition
-XawTextSourceSearch(Widget w, XawTextPosition position,
-#if NeedWidePrototypes
- int dir,
-#else
- XawTextScanDirection dir,
-#endif
- XawTextBlock *text)
-{
- TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
-
- return ((*cclass->textSrc_class.Search)(w, position, dir, text));
-}
-
-/*
- * Function:
- * XawTextSourceConvertSelection
- *
- * Parameters:
- * w - TextSrc object
- * selection - current selection atom
- * target - current target atom
- * type - type to conver the selection to
- * value - return value that has been converted
- * length - ""
- * format - format of the returned value
- *
- * Returns:
- * True if the selection has been converted
- */
-Boolean
-XawTextSourceConvertSelection(Widget w, Atom *selection, Atom *target,
- Atom *type, XtPointer *value,
- unsigned long *length, int *format)
-{
- TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
-
- return((*cclass->textSrc_class.ConvertSelection)
- (w, selection, target, type, value, length, format));
-}
-
-/*
- * Function:
- * XawTextSourceSetSelection
- *
- * Parameters:
- * w - TextSrc object
- * left - bounds of the selection
- * rigth - ""
- * selection - selection atom
- *
- * Description:
- * Allows special setting of the selection.
- */
-void
-XawTextSourceSetSelection(Widget w, XawTextPosition left,
- XawTextPosition right, Atom selection)
-{
- TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
-
- (*cclass->textSrc_class.SetSelection)(w, left, right, selection);
-}
-
-/*
- * External Functions for Multi Text
- */
-/*
- * TextFormat():
- * returns the format of text: FMT8BIT or FMTWIDE
- */
-XrmQuark
-_XawTextFormat(TextWidget tw)
-{
- return (((TextSrcObject)(tw->text.source))->textSrc.text_format);
-}
-
-/* _XawTextWCToMB():
- * Convert the wchar string to external encoding
- * The caller is responsible for freeing both the source and ret string
- *
- * wstr - source wchar string
- * len_in_out - lengh of string.
- * As In, length of source wchar string, measured in wchar
- * As Out, length of returned string
- */
-char *
-_XawTextWCToMB(Display *d, wchar_t *wstr, int *len_in_out)
-{
- XTextProperty textprop;
-
- if (XwcTextListToTextProperty(d, (wchar_t**)&wstr, 1,
- XTextStyle, &textprop) < Success) {
- XtWarningMsg("convertError", "textSource", "XawError",
- "Non-character code(s) in buffer.", NULL, NULL);
- *len_in_out = 0;
- return (NULL);
- }
- *len_in_out = textprop.nitems;
-
- return ((char *)textprop.value);
-}
-
-/* _XawTextMBToWC():
- * Convert the string to internal processing codeset WC.
- * The caller is responsible for freeing both the source and ret string.
- *
- * str - source string
- * len_in_out - lengh of string
- * As In, it is length of source string
- * As Out, it is length of returned string, measured in wchar
- */
-wchar_t *
-_XawTextMBToWC(Display *d, char *str, int *len_in_out)
-{
- XTextProperty textprop;
- char *buf;
- wchar_t **wlist, *wstr;
- int count;
-
- if (*len_in_out == 0)
- return (NULL);
-
- buf = XtMalloc(*len_in_out + 1);
-
- strncpy(buf, str, *len_in_out);
- *(buf + *len_in_out) = '\0';
- if (XmbTextListToTextProperty(d, &buf, 1, XTextStyle, &textprop) != Success) {
- XtWarningMsg("convertError", "textSource", "XawError",
- "No Memory, or Locale not supported.", NULL, NULL);
- XtFree(buf);
- *len_in_out = 0;
- return (NULL);
- }
-
- XtFree(buf);
- if (XwcTextPropertyToTextList(d, &textprop,
- (wchar_t***)&wlist, &count) != Success) {
- XtWarningMsg("convertError", "multiSourceCreate", "XawError",
- "Non-character code(s) in source.", NULL, NULL);
- *len_in_out = 0;
- return (NULL);
- }
- wstr = wlist[0];
- *len_in_out = wcslen(wstr);
- XtFree((XtPointer)wlist);
-
- return (wstr);
-}
-
-#ifndef OLDXAW
-static int
-qcmp_anchors(_Xconst void *left, _Xconst void *right)
-{
- return ((*(XawTextAnchor**)left)->position -
- (*(XawTextAnchor**)right)->position);
-}
-
-XawTextAnchor *
-XawTextSourceAddAnchor(Widget w, XawTextPosition position)
-{
- TextSrcObject src = (TextSrcObject)w;
- XawTextAnchor *anchor, *panchor;
-
- if ((panchor = XawTextSourceFindAnchor(w, position)) != NULL) {
- XawTextEntity *pentity, *entity;
-
- if (position - panchor->position < ANCHORS_DIST)
- return (panchor);
-
- if (panchor->cache && panchor->position + panchor->cache->offset +
- panchor->cache->length < position)
- pentity = entity = panchor->cache;
- else
- pentity = entity = panchor->entities;
-
- while (entity && panchor->position + entity->offset +
- entity->length < position) {
- pentity = entity;
- entity = entity->next;
- }
- if (entity) {
- XawTextPosition diff;
-
- if (panchor->position + entity->offset < position)
- position = panchor->position + entity->offset;
-
- if (position == panchor->position)
- return (panchor);
-
- anchor = XtNew(XawTextAnchor);
- diff = position - panchor->position;
-
- panchor->cache = NULL;
- anchor->entities = entity;
- if (pentity != entity)
- pentity->next = NULL;
- else
- panchor->entities = NULL;
- while (entity) {
- entity->offset -= diff;
- entity = entity->next;
- }
- }
- else {
- anchor = XtNew(XawTextAnchor);
- anchor->entities = NULL;
- }
- }
- else {
- anchor = XtNew(XawTextAnchor);
- anchor->entities = NULL;
- }
-
- anchor->position = position;
- anchor->cache = NULL;
-
- src->textSrc.anchors = (XawTextAnchor**)
- XtRealloc((XtPointer)src->textSrc.anchors, sizeof(XawTextAnchor*) *
- (src->textSrc.num_anchors + 1));
- src->textSrc.anchors[src->textSrc.num_anchors++] = anchor;
- qsort((void*)src->textSrc.anchors, src->textSrc.num_anchors,
- sizeof(XawTextAnchor*), qcmp_anchors);
-
- return (anchor);
-}
-
-XawTextAnchor *
-XawTextSourceFindAnchor(Widget w, XawTextPosition position)
-{
- TextSrcObject src = (TextSrcObject)w;
- int i = 0, left, right, nmemb = src->textSrc.num_anchors;
- XawTextAnchor *anchor, **anchors = src->textSrc.anchors;
-
- left = 0;
- right = nmemb - 1;
- while (left <= right) {
- anchor = anchors[i = (left + right) >> 1];
- if (anchor->position == position)
- return (anchor);
- else if (position < anchor->position)
- right = i - 1;
- else
- left = i + 1;
- }
-
- if (nmemb)
- return (right < 0 ? anchors[0] : anchors[right]);
-
- return (NULL);
-}
-
-Bool
-XawTextSourceAnchorAndEntity(Widget w, XawTextPosition position,
- XawTextAnchor **anchor_return,
- XawTextEntity **entity_return)
-{
- XawTextAnchor *anchor = XawTextSourceFindAnchor(w, position);
- XawTextEntity *pentity, *entity;
- XawTextPosition offset;
- Bool next_anchor = True, retval = False;
-
- if (anchor->cache && anchor->position + anchor->cache->offset +
- anchor->cache->length <= position)
- pentity = entity = anchor->cache;
- else
- pentity = entity = anchor->entities;
- while (entity) {
- offset = anchor->position + entity->offset;
-
- if (offset > position) {
- retval = next_anchor = False;
- break;
- }
- if (offset + entity->length > position) {
- retval = True;
- next_anchor = False;
- break;
- }
- pentity = entity;
- entity = entity->next;
- }
-
- if (next_anchor) {
- *anchor_return = anchor = XawTextSourceNextAnchor(w, anchor);
- *entity_return = anchor ? anchor->entities : NULL;
- }
- else {
- *anchor_return = anchor;
- *entity_return = retval ? entity : pentity;
- }
-
- if (*anchor_return)
- (*anchor_return)->cache = *entity_return;
-
- return (retval);
-}
-
-XawTextAnchor *
-XawTextSourceNextAnchor(Widget w, XawTextAnchor *anchor)
-{
- int i;
- TextSrcObject src = (TextSrcObject)w;
-
- for (i = 0; i < src->textSrc.num_anchors - 1; i++)
- if (src->textSrc.anchors[i] == anchor)
- return (src->textSrc.anchors[i + 1]);
-
- return (NULL);
-}
-
-XawTextAnchor *
-XawTextSourcePrevAnchor(Widget w, XawTextAnchor *anchor)
-{
- int i;
- TextSrcObject src = (TextSrcObject)w;
-
- for (i = src->textSrc.num_anchors - 1; i > 0; i--)
- if (src->textSrc.anchors[i] == anchor)
- return (src->textSrc.anchors[i - 1]);
-
- return (NULL);
-}
-
-XawTextAnchor *
-XawTextSourceRemoveAnchor(Widget w, XawTextAnchor *anchor)
-{
- int i;
- TextSrcObject src = (TextSrcObject)w;
-
- for (i = 0; i < src->textSrc.num_anchors; i++)
- if (src->textSrc.anchors[i] == anchor)
- break;
-
- if (i == 0)
- return (src->textSrc.num_anchors > 1 ? src->textSrc.anchors[1] : NULL);
-
- if (i < src->textSrc.num_anchors) {
- XtFree((XtPointer)anchor);
- if (i < --src->textSrc.num_anchors) {
- memmove(&src->textSrc.anchors[i],
- &src->textSrc.anchors[i + 1],
- (src->textSrc.num_anchors - i) *
- sizeof(XawTextAnchor*));
-
- return (src->textSrc.anchors[i]);
- }
- }
-
- return (NULL);
-}
-
-XawTextEntity *
-XawTextSourceAddEntity(Widget w, int type, int flags, XtPointer data,
- XawTextPosition position, Cardinal length,
- XrmQuark property)
-{
- XawTextAnchor *next, *anchor = _XawTextSourceFindAnchor(w, position);
- XawTextEntity *entity, *eprev;
-
- /* There is no support for zero length entities for now */
- if (length == 0)
- return (NULL);
-
- if (anchor->cache && anchor->position + anchor->cache->offset +
- anchor->cache->length <= position)
- eprev = entity = anchor->cache;
- else
- eprev = entity = anchor->entities;
-
- while (entity && anchor->position + entity->offset + entity->length <=
- position) {
- eprev = entity;
- entity = entity->next;
- }
- if (entity && anchor->position + entity->offset < position + length) {
- fprintf(stderr, "Cannot (yet) add more than one entity to same region.\n");
- return (NULL);
- }
-
- next = XawTextSourceFindAnchor(w, position + length);
- if (next && next != anchor) {
- if ((entity = next->entities) != NULL) {
- if (next->position + entity->offset < position + length) {
- fprintf(stderr, "Cannot (yet) add more than one entity to same region.\n");
- return (NULL);
- }
- }
- if (position + length > next->position) {
- XawTextPosition diff = position + length - next->position;
-
- next->position += diff;
- entity = next->entities;
- while (entity) {
- entity->offset -= diff;
- entity = entity->next;
- }
- entity = anchor->entities;
- while (entity && entity->offset < 0)
- entity = entity->next;
- if (entity && entity->offset < 0) {
- if (eprev)
- eprev->next = next->entities;
- else
- anchor->entities = next->entities;
- if ((next->entities = entity->next) == NULL)
- (void)XawTextSourceRemoveAnchor(w, next);
- entity->next = NULL;
-
- return (XawTextSourceAddEntity(w, type, flags, data, position,
- length, property));
- }
- }
- }
-
- /* Automatically join sequential entities if possible */
- if (eprev &&
- anchor->position + eprev->offset + eprev->length == position &&
- eprev->property == property && eprev->type == type &&
- eprev->flags == flags && eprev->data == data) {
- eprev->length += length;
- return (eprev);
- }
-
- entity = XtNew(XawTextEntity);
- entity->type = type;
- entity->flags = flags;
- entity->data = data;
- entity->offset = position - anchor->position;
- entity->length = length;
- entity->property = property;
-
- if (eprev == NULL) {
- anchor->entities = entity;
- entity->next = NULL;
- anchor->cache = NULL;
- }
- else if (eprev->offset > entity->offset) {
- anchor->cache = NULL;
- anchor->entities = entity;
- entity->next = eprev;
- }
- else {
- anchor->cache = eprev;
- entity->next = eprev->next;
- eprev->next = entity;
- }
-
- return (entity);
-}
-
-void
-XawTextSourceClearEntities(Widget w, XawTextPosition left, XawTextPosition right)
-{
- XawTextAnchor *anchor = XawTextSourceFindAnchor(w, left);
- XawTextEntity *entity, *eprev, *enext;
- XawTextPosition offset;
- int length;
-
- while (anchor && anchor->entities == NULL)
- anchor = XawTextSourceRemoveAnchor(w, anchor);
-
- if (anchor == NULL || left >= right)
- return;
-
- if (anchor->cache && anchor->position + anchor->cache->offset +
- anchor->cache->length < left)
- eprev = entity = anchor->cache;
- else
- eprev = entity = anchor->entities;
-
- /* find first entity before left position */
- while (anchor->position + entity->offset + entity->length < left) {
- eprev = entity;
- if ((entity = entity->next) == NULL) {
- if ((anchor = XawTextSourceNextAnchor(w, anchor)) == NULL)
- return;
- if ((eprev = entity = anchor->entities) == NULL) {
- fprintf(stderr, "Bad anchor found!\n");
- return;
- }
- }
- }
-
- offset = anchor->position + entity->offset;
- if (offset <= left) {
- length = XawMin(entity->length, left - offset);
-
- if (length <= 0) {
- enext = entity->next;
- eprev->next = enext;
- XtFree((XtPointer)entity);
- anchor->cache = NULL;
- if (entity == anchor->entities) {
- eprev = NULL;
- if ((anchor->entities = enext) == NULL) {
- if ((anchor = XawTextSourceRemoveAnchor(w, anchor)) == NULL)
- return;
- entity = anchor->entities;
- }
- else
- entity = enext;
- }
- else
- entity = enext;
- }
- else {
- entity->length = length;
- eprev = entity;
- entity = entity->next;
- }
- }
-
- /* clean everything until right position is reached */
- while (anchor) {
- while (entity) {
- offset = anchor->position + entity->offset + entity->length;
-
- if (offset > right) {
- anchor->cache = NULL;
- entity->offset = XawMax(entity->offset, right - anchor->position);
- entity->length = XawMin(entity->length, offset - right);
- return;
- }
-
- enext = entity->next;
- if (eprev)
- eprev->next = enext;
- XtFree((XtPointer)entity);
- if (entity == anchor->entities) {
- eprev = anchor->cache = NULL;
- if ((anchor->entities = enext) == NULL) {
- if ((anchor = XawTextSourceRemoveAnchor(w, anchor)) == NULL)
- return;
- entity = anchor->entities;
- continue;
- }
- }
- entity = enext;
- }
- if (anchor)
- anchor->cache = NULL;
- if ((anchor = XawTextSourceNextAnchor(w, anchor)) != NULL)
- entity = anchor->entities;
- eprev = NULL;
- }
-}
-
-/* checks the anchors up to position, and create an appropriate anchor
- * at position, if required.
- */
-XawTextAnchor *
-_XawTextSourceFindAnchor(Widget w, XawTextPosition position)
-{
- XawTextAnchor *anchor;
-
- anchor = XawTextSourceFindAnchor(w, position);
-
- position -= position % ANCHORS_DIST;
-
- if (position - anchor->position >= ANCHORS_DIST)
- return (XawTextSourceAddAnchor(w, position));
-
- return (anchor);
-}
-#endif
+/*
+
+Copyright 1989, 1994, 1998 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.
+
+*/
+
+/*
+ * Author: Chris Peterson, MIT X Consortium.
+ * Much code taken from X11R3 String and Disk Sources.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <ctype.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xfuncs.h>
+#include <X11/Xutil.h>
+#include <X11/Xmu/Atoms.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xaw/TextSrcP.h>
+#include <X11/Xaw/XawInit.h>
+#include "XawI18n.h"
+#include "Private.h"
+
+#ifndef OLDXAW
+#define UNDO_DEPTH 16384
+
+#define ANCHORS_DIST 4096 /* default distance between anchors */
+
+/*
+ * Types
+ */
+typedef struct {
+ XawTextPosition position;
+ char *buffer;
+ unsigned length;
+ unsigned refcount;
+ unsigned long format;
+} XawTextUndoBuffer;
+
+typedef struct _XawTextUndoList XawTextUndoList;
+struct _XawTextUndoList {
+ XawTextUndoBuffer *left, *right;
+ XawTextUndoList *undo, *redo;
+};
+
+struct _XawTextUndo {
+ XawTextUndoBuffer **undo;
+ unsigned num_undo;
+ XawTextUndoList *list, *pointer, *end_mark, *head;
+ unsigned num_list;
+ XawTextScanDirection dir;
+ XawTextUndoBuffer *l_save, *r_save;
+ XawTextUndoList *u_save;
+ XawTextUndoBuffer *l_no_change, *r_no_change;
+ int merge;
+ int erase; /* there are two types of erases */
+};
+#endif /* OLDXAW */
+
+/*
+ * Class Methods
+ */
+static Boolean ConvertSelection(Widget, Atom*, Atom*, Atom*, XtPointer*,
+ unsigned long*, int*);
+static XawTextPosition Read(Widget, XawTextPosition, XawTextBlock*, int);
+static int Replace(Widget, XawTextPosition, XawTextPosition, XawTextBlock*);
+static XawTextPosition Scan(Widget, XawTextPosition, XawTextScanType,
+ XawTextScanDirection, int, Bool);
+static XawTextPosition Search(Widget, XawTextPosition, XawTextScanDirection,
+ XawTextBlock*);
+static void SetSelection(Widget, XawTextPosition, XawTextPosition, Atom);
+static void XawTextSrcClassInitialize(void);
+static void XawTextSrcClassPartInitialize(WidgetClass);
+static void XawTextSrcInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawTextSrcDestroy(Widget);
+static Boolean XawTextSrcSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+/*
+ * Prototypes
+ */
+static void CvtStringToEditMode(XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr);
+static Boolean CvtEditModeToString(Display*, XrmValuePtr, Cardinal*,
+ XrmValuePtr, XrmValuePtr, XtPointer*);
+#ifndef OLDXAW
+static void FreeUndoBuffer(XawTextUndo*);
+static void UndoGC(XawTextUndo*);
+static void TellSourceChanged(TextSrcObject, XawTextPosition, XawTextPosition,
+ XawTextBlock*, int);
+Bool _XawTextSrcUndo(TextSrcObject, XawTextPosition*);
+Bool _XawTextSrcToggleUndo(TextSrcObject);
+XawTextAnchor *_XawTextSourceFindAnchor(Widget, XawTextPosition);
+
+/*
+ * External
+ */
+void _XawSourceAddText(Widget, Widget);
+void _XawSourceRemoveText(Widget, Widget, Bool);
+Bool _XawTextSourceNewLineAtEOF(Widget);
+void _XawSourceSetUndoErase(TextSrcObject, int);
+void _XawSourceSetUndoMerge(TextSrcObject, Bool);
+#endif /* OLDXAW */
+
+/*
+ * Defined in Text.c
+ */
+char *_XawTextGetText(TextWidget, XawTextPosition, XawTextPosition);
+void _XawTextSourceChanged(Widget, XawTextPosition, XawTextPosition,
+ XawTextBlock*, int);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(TextSrcRec, textSrc.field)
+static XtResource resources[] = {
+ {
+ XtNeditType,
+ XtCEditType,
+ XtREditMode,
+ sizeof(XawTextEditType),
+ offset(edit_mode),
+ XtRString,
+ "read"
+ },
+#ifndef OLDXAW
+ {
+ XtNcallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(callback),
+ XtRCallback,
+ NULL
+ },
+ {
+ XtNsourceChanged,
+ XtCChanged,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(changed),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNenableUndo,
+ XtCUndo,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(enable_undo),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNpropertyCallback,
+ XtCCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(property_callback),
+ XtRCallback,
+ NULL
+ },
+#endif /* OLDXAW */
+};
+#undef offset
+
+#define Superclass (&objectClassRec)
+TextSrcClassRec textSrcClassRec = {
+ /* object */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "TextSrc", /* class_name */
+ sizeof(TextSrcRec), /* widget_size */
+ XawTextSrcClassInitialize, /* class_initialize */
+ XawTextSrcClassPartInitialize, /* class_part_initialize */
+ False, /* class_inited */
+ XawTextSrcInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ NULL, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ False, /* compress_motion */
+ False, /* compress_exposure */
+ False, /* compress_enterleave */
+ False, /* visible_interest */
+ XawTextSrcDestroy, /* destroy */
+ NULL, /* resize */
+ NULL, /* expose */
+ XawTextSrcSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ NULL, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ NULL, /* query_geometry */
+ NULL, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* text_src */
+ {
+ Read, /* Read */
+ Replace, /* Replace */
+ Scan, /* Scan */
+ Search, /* Search */
+ SetSelection, /* SetSelection */
+ ConvertSelection, /* ConvertSelection */
+ },
+};
+
+WidgetClass textSrcObjectClass = (WidgetClass)&textSrcClassRec;
+
+static XrmQuark QRead, QAppend, QEdit;
+#ifndef OLDXAW
+static char *SrcNL = "\n";
+static wchar_t SrcWNL[2];
+#endif
+
+/*
+ * Implementation
+ */
+static void
+XawTextSrcClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+
+#ifndef OLDXAW
+ SrcWNL[0] = _Xaw_atowc(XawLF);
+ SrcWNL[1] = 0;
+#endif
+ QRead = XrmPermStringToQuark(XtEtextRead);
+ QAppend = XrmPermStringToQuark(XtEtextAppend);
+ QEdit = XrmPermStringToQuark(XtEtextEdit);
+ XtAddConverter(XtRString, XtREditMode, CvtStringToEditMode, NULL, 0);
+ XtSetTypeConverter(XtREditMode, XtRString, CvtEditModeToString, NULL, 0,
+ XtCacheNone, NULL);
+}
+
+static void
+XawTextSrcClassPartInitialize(WidgetClass wc)
+{
+ TextSrcObjectClass t_src, superC;
+
+ t_src = (TextSrcObjectClass)wc;
+ superC = (TextSrcObjectClass)t_src->object_class.superclass;
+
+ /*
+ * We don't need to check for null super since we'll get to TextSrc
+ * eventually
+ */
+ if (t_src->textSrc_class.Read == XtInheritRead)
+ t_src->textSrc_class.Read = superC->textSrc_class.Read;
+
+ if (t_src->textSrc_class.Replace == XtInheritReplace)
+ t_src->textSrc_class.Replace = superC->textSrc_class.Replace;
+
+ if (t_src->textSrc_class.Scan == XtInheritScan)
+ t_src->textSrc_class.Scan = superC->textSrc_class.Scan;
+
+ if (t_src->textSrc_class.Search == XtInheritSearch)
+ t_src->textSrc_class.Search = superC->textSrc_class.Search;
+
+ if (t_src->textSrc_class.SetSelection == XtInheritSetSelection)
+ t_src->textSrc_class.SetSelection = superC->textSrc_class.SetSelection;
+
+ if (t_src->textSrc_class.ConvertSelection == XtInheritConvertSelection)
+ t_src->textSrc_class.ConvertSelection =
+ superC->textSrc_class.ConvertSelection;
+}
+
+/*ARGSUSED*/
+static void
+XawTextSrcInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+#ifndef OLDXAW
+ TextSrcObject src = (TextSrcObject)cnew;
+
+ if (src->textSrc.enable_undo) {
+ src->textSrc.undo = (XawTextUndo*)XtCalloc(1, sizeof(XawTextUndo));
+ src->textSrc.undo->dir = XawsdLeft;
+ }
+ else
+ src->textSrc.undo = NULL;
+ src->textSrc.undo_state = False;
+ if (XtIsSubclass(XtParent(cnew), textWidgetClass)) {
+ src->textSrc.text = (WidgetList)XtMalloc(sizeof(Widget*));
+ src->textSrc.text[0] = XtParent(cnew);
+ src->textSrc.num_text = 1;
+ }
+ else {
+ src->textSrc.text = NULL;
+ src->textSrc.num_text = 0;
+ }
+
+ src->textSrc.anchors = NULL;
+ src->textSrc.num_anchors = 0;
+ (void)XawTextSourceAddAnchor(cnew, 0);
+#endif /* OLDXAW */
+}
+
+static void
+XawTextSrcDestroy(Widget w)
+{
+#ifndef OLDXAW
+ TextSrcObject src = (TextSrcObject)w;
+
+ if (src->textSrc.enable_undo) {
+ FreeUndoBuffer(src->textSrc.undo);
+ XtFree((char*)src->textSrc.undo);
+ }
+ XtFree((char*)src->textSrc.text);
+
+ if (src->textSrc.num_anchors) {
+ XawTextEntity *entity, *enext;
+ int i;
+
+ for (i = 0; i < src->textSrc.num_anchors; i++) {
+ entity = src->textSrc.anchors[i]->entities;
+ while (entity) {
+ enext = entity->next;
+ XtFree((XtPointer)entity);
+ entity = enext;
+ }
+ XtFree((XtPointer)src->textSrc.anchors[i]);
+ }
+ XtFree((XtPointer)src->textSrc.anchors);
+ }
+#endif /* OLDXAW */
+}
+
+/*ARGSUSED*/
+static Boolean
+XawTextSrcSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+#ifndef OLDXAW
+ TextSrcObject oldtw = (TextSrcObject)current;
+ TextSrcObject newtw = (TextSrcObject)cnew;
+
+ if (oldtw->textSrc.enable_undo != newtw->textSrc.enable_undo) {
+ if (newtw->textSrc.enable_undo) {
+ newtw->textSrc.undo = (XawTextUndo*)
+ XtCalloc(1, sizeof(XawTextUndo));
+ newtw->textSrc.undo->dir = XawsdLeft;
+ }
+ else {
+ FreeUndoBuffer(newtw->textSrc.undo);
+ XtFree((char*)newtw->textSrc.undo);
+ newtw->textSrc.undo = NULL;
+ }
+ }
+ if (oldtw->textSrc.changed != newtw->textSrc.changed) {
+ if (newtw->textSrc.enable_undo) {
+ if (newtw->textSrc.undo->list) {
+ newtw->textSrc.undo->l_no_change =
+ newtw->textSrc.undo->list->left;
+ newtw->textSrc.undo->r_no_change =
+ newtw->textSrc.undo->list->right;
+ }
+ else
+ newtw->textSrc.undo->l_no_change =
+ newtw->textSrc.undo->r_no_change = NULL;
+ }
+ }
+#endif /* OLDXAW */
+ return (False);
+}
+
+/*
+ * Function:
+ * Read
+ *
+ * Parameters:
+ * w - TextSrc Object
+ * pos - position of the text to retreive
+ * text - text block that will contain returned text
+ * length - maximum number of characters to read
+ *
+ * Description:
+ * This function reads the source.
+ *
+ * Returns:
+ * The character position following the retrieved text.
+ */
+/*ARGSUSED*/
+static XawTextPosition
+Read(Widget w, XawTextPosition pos, XawTextBlock *text, int length)
+{
+ return ((XawTextPosition)0);
+}
+
+/*
+ * Function:
+ * Replace
+ *
+ * Parameters:
+ * src - Text Source Object
+ * startPos - ends of text that will be removed
+ * endPos - ""
+ * text - new text to be inserted into buffer at startPos
+ *
+ * Description:
+ * Replaces a block of text with new text.
+ */
+/*ARGSUSED*/
+static int
+Replace(Widget w, XawTextPosition startPos, XawTextPosition endPos,
+ XawTextBlock *text)
+{
+ return (XawEditError);
+}
+
+/*
+ * Function:
+ * Scan
+ *
+ * Parameters:
+ * w - TextSrc Object
+ * position - position to start scanning
+ * type - type of thing to scan for
+ * dir - direction to scan
+ * count - which occurance if this thing to search for
+ * include - whether or not to include the character found in
+ * the position that is returned
+ *
+ * Description:
+ * Scans the text source for the number and type of item specified.
+ */
+/*ARGSUSED*/
+static XawTextPosition
+Scan(Widget w, XawTextPosition position, XawTextScanType type,
+ XawTextScanDirection dir, int count, Bool include)
+{
+ return ((XawTextPosition)0);
+}
+
+/*
+ * Function:
+ * Search
+ *
+ * Parameters:
+ * w - TextSource Object
+ * position - position to start searching
+ * dir - direction to search
+ * text - the text block to search for
+ *
+ * Description:
+ * Searchs the text source for the text block passed
+ */
+/*ARGSUSED*/
+static XawTextPosition
+Search(Widget w, XawTextPosition position, XawTextScanDirection dir,
+ XawTextBlock *text)
+{
+ return (XawTextSearchError);
+}
+
+/*ARGSUSED*/
+static Boolean
+ConvertSelection(Widget w, Atom *selection, Atom *target, Atom *type,
+ XtPointer *value, unsigned long *length, int *format)
+{
+ return (False);
+}
+
+/*ARGSUSED*/
+static void
+SetSelection(Widget w, XawTextPosition left, XawTextPosition right,
+ Atom selection)
+{
+}
+
+/*ARGSUSED*/
+static void
+CvtStringToEditMode(XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal)
+{
+ static XawTextEditType editType;
+ XrmQuark q;
+ char name[7];
+
+ XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
+ q = XrmStringToQuark(name);
+
+ if (q == QRead)
+ editType = XawtextRead;
+ else if (q == QAppend)
+ editType = XawtextAppend;
+ else if (q == QEdit)
+ editType = XawtextEdit;
+ else {
+ toVal->size = 0;
+ toVal->addr = NULL;
+ XtStringConversionWarning((char *)fromVal->addr, XtREditMode);
+ }
+ toVal->size = sizeof(XawTextEditType);
+ toVal->addr = (XPointer)&editType;
+}
+
+/*ARGSUSED*/
+static Boolean
+CvtEditModeToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal,
+ XtPointer *data)
+{
+ static String buffer;
+ Cardinal size;
+
+ switch (*(XawTextEditType *)fromVal->addr) {
+ case XawtextRead:
+ buffer = XtEtextRead;
+ break;
+ case XawtextAppend:
+ buffer = XtEtextAppend;
+ break;
+ case XawtextEdit:
+ buffer = XtEtextEdit;
+ break;
+ default:
+ XawTypeToStringWarning(dpy, XtREditMode);
+ toVal->addr = NULL;
+ toVal->size = 0;
+ return (False);
+ }
+
+ size = strlen(buffer) + 1;
+ if (toVal->addr != NULL) {
+ if (toVal->size < size) {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = (XPointer)buffer;
+ toVal->size = sizeof(String);
+
+ return (True);
+}
+
+#ifndef OLDXAW
+Bool
+_XawTextSourceNewLineAtEOF(Widget w)
+{
+ TextSrcObject src = (TextSrcObject)w;
+ XawTextBlock text;
+
+ text.firstPos = 0;
+ if ((text.format = src->textSrc.text_format) == XawFmt8Bit)
+ text.ptr = SrcNL;
+ else
+ text.ptr = (char*)SrcWNL;
+ text.length = 1;
+
+ return (XawTextSourceSearch(w, XawTextSourceScan(w, 0, XawstAll,
+ XawsdRight, 1, True) - 1,
+ XawsdRight, &text) != XawTextSearchError);
+}
+
+void
+_XawSourceAddText(Widget source, Widget text)
+{
+ TextSrcObject src = (TextSrcObject)source;
+ Bool found = False;
+ Cardinal i;
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ if (src->textSrc.text[i] == text) {
+ found = True;
+ break;
+ }
+
+ if (!found) {
+ src->textSrc.text = (WidgetList)
+ XtRealloc((char*)src->textSrc.text,
+ sizeof(Widget) * (src->textSrc.num_text + 1));
+ src->textSrc.text[src->textSrc.num_text++] = text;
+ }
+}
+
+void
+_XawSourceRemoveText(Widget source, Widget text, Bool destroy)
+{
+ TextSrcObject src = (TextSrcObject)source;
+ Bool found = False;
+ Cardinal i;
+
+ if (src == NULL)
+ return;
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ if (src->textSrc.text[i] == text) {
+ found = True;
+ break;
+ }
+
+ if (found) {
+ if (--src->textSrc.num_text == 0) {
+ if (destroy) {
+ XtDestroyWidget(source);
+ return;
+ }
+ else {
+ XtFree((char*)src->textSrc.text);
+ src->textSrc.text = NULL; /* for realloc "magic" */
+ }
+ }
+ else if (i < src->textSrc.num_text)
+ memmove(&src->textSrc.text[i], &src->textSrc.text[i + 1],
+ sizeof(Widget) * (src->textSrc.num_text - i));
+ }
+}
+#endif /* OLDXAW */
+
+/*
+ * Function:
+ * XawTextSourceRead
+ *
+ * Parameters:
+ * w - TextSrc Object
+ * pos - position of the text to retrieve
+ * text - text block that will contain returned text (return)
+ * length - maximum number of characters to read
+ *
+ * Description:
+ * This function reads the source.
+ *
+ * Returns:
+ * The number of characters read into the buffer
+ */
+XawTextPosition
+XawTextSourceRead(Widget w, XawTextPosition pos, XawTextBlock *text,
+ int length)
+{
+ TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
+
+ return ((*cclass->textSrc_class.Read)(w, pos, text, length));
+}
+
+#ifndef OLDXAW
+static void
+TellSourceChanged(TextSrcObject src, XawTextPosition left,
+ XawTextPosition right, XawTextBlock *block, int lines)
+{
+ Cardinal i;
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ _XawTextSourceChanged(src->textSrc.text[i], left, right, block, lines);
+}
+
+/*
+ * This function is required because there is no way to diferentiate
+ * if the first erase was generated by a backward-kill-char and the
+ * second by a forward-kill-char (or vice-versa) from XawTextSourceReplace.
+ * It is only possible to diferentiate after the second character is
+ * killed, but then, it is too late.
+ */
+void
+_XawSourceSetUndoErase(TextSrcObject src, int value)
+{
+ if (src && src->textSrc.enable_undo)
+ src->textSrc.undo->erase = value;
+}
+
+/*
+ * To diferentiate insert-char's separeted by cursor movements.
+ */
+void
+_XawSourceSetUndoMerge(TextSrcObject src, Bool state)
+{
+ if (src && src->textSrc.enable_undo)
+ src->textSrc.undo->merge += state ? 1 : -1;
+}
+#endif /* OLDXAW */
+
+/*
+ * Public Functions
+ */
+/*
+ * Function:
+ * XawTextSourceReplace
+ *
+ * Parameters:
+ * src - Text Source Object
+ * startPos - ends of text that will be removed
+ * endPos - ""
+ * text - new text to be inserted into buffer at startPos
+ *
+ * Description:
+ * Replaces a block of text with new text.
+ *
+ * Returns:
+ * XawEditError or XawEditDone.
+ */
+/*ARGSUSED*/
+int
+XawTextSourceReplace(Widget w, XawTextPosition left,
+ XawTextPosition right, XawTextBlock *block)
+{
+ TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
+#ifndef OLDXAW
+ TextSrcObject src = (TextSrcObject)w;
+ XawTextUndoBuffer *l_state, *r_state;
+ XawTextUndoList *undo;
+ Bool enable_undo;
+ XawTextPosition start, end;
+ int i, error, lines = 0;
+
+ if (src->textSrc.edit_mode == XawtextRead)
+ return (XawEditError);
+
+ enable_undo = src->textSrc.enable_undo && src->textSrc.undo_state == False;
+ if (enable_undo) {
+ unsigned size, total;
+
+ if (src->textSrc.undo->l_save) {
+ l_state = src->textSrc.undo->l_save;
+ src->textSrc.undo->l_save = NULL;
+ }
+ else
+ l_state = XtNew(XawTextUndoBuffer);
+ l_state->refcount = 1;
+ l_state->position = left;
+ if (left < right) {
+ Widget ctx = NULL;
+
+ for (i = 0; i < src->textSrc.num_text; i++)
+ if (XtIsSubclass(src->textSrc.text[i], textWidgetClass)) {
+ ctx = src->textSrc.text[i];
+ break;
+ }
+ l_state->buffer = _XawTextGetText((TextWidget)ctx, left, right);
+ l_state->length = right - left;
+ }
+ else {
+ l_state->length = 0;
+ l_state->buffer = NULL;
+ }
+ l_state->format = src->textSrc.text_format;
+ if (l_state->length == 1) {
+ if (l_state->format == XawFmtWide &&
+ *(wchar_t*)l_state->buffer == *SrcWNL) {
+ XtFree(l_state->buffer);
+ l_state->buffer = (char*)SrcWNL;
+ }
+ else if (*l_state->buffer == '\n') {
+ XtFree(l_state->buffer);
+ l_state->buffer = SrcNL;
+ }
+ }
+
+ if (src->textSrc.undo->r_save) {
+ r_state = src->textSrc.undo->r_save;
+ src->textSrc.undo->r_save = NULL;
+ }
+ else
+ r_state = XtNew(XawTextUndoBuffer);
+ r_state->refcount = 1;
+ r_state->position = left;
+ r_state->format = block->format;
+ size = block->format == XawFmtWide ? sizeof(wchar_t) : sizeof(char);
+ total = size * block->length;
+ r_state->length = block->length;
+ r_state->buffer = NULL;
+ if (total == size) {
+ if (r_state->format == XawFmtWide &&
+ *(wchar_t*)block->ptr == *SrcWNL)
+ r_state->buffer = (char*)SrcWNL;
+ else if (*block->ptr == '\n')
+ r_state->buffer = SrcNL;
+ }
+ if (total && !r_state->buffer) {
+ r_state->buffer = XtMalloc(total);
+ memcpy(r_state->buffer, block->ptr, total);
+ }
+
+ if (src->textSrc.undo->u_save) {
+ undo = src->textSrc.undo->u_save;
+ src->textSrc.undo->u_save = NULL;
+ }
+ else
+ undo = XtNew(XawTextUndoList);
+ undo->left = l_state;
+ undo->right = r_state;
+ undo->undo = src->textSrc.undo->list;
+ undo->redo = NULL;
+ }
+ else {
+ undo = NULL;
+ l_state = r_state = NULL;
+ }
+
+#define LARGE_VALUE 262144 /* 256 K */
+ /* optimization, to avoid long delays recalculating the line number
+ * when editing huge files
+ */
+ if (left > LARGE_VALUE) {
+ start = XawTextSourceScan(w, left, XawstEOL, XawsdLeft, 2, False);
+ for (i = 0; i < src->textSrc.num_text; i++) {
+ TextWidget tw = (TextWidget)src->textSrc.text[i];
+
+ if (left <= tw->text.lt.top &&
+ left + block->length - (right - left) > tw->text.lt.top)
+ _XawTextBuildLineTable(tw, start, False);
+ }
+ }
+#undef LARGE_VALUE
+
+ start = left;
+ end = right;
+ while (start < end) {
+ start = XawTextSourceScan(w, start, XawstEOL, XawsdRight, 1, True);
+ if (start <= end) {
+ --lines;
+ if (start == XawTextSourceScan(w, 0, XawstAll, XawsdRight, 1, True)) {
+ lines += !_XawTextSourceNewLineAtEOF(w);
+ break;
+ }
+ }
+ }
+#else
+ int error;
+#endif /* OLDXAW */
+
+ error = (*cclass->textSrc_class.Replace)(w, left, right, block);
+
+#ifndef OLDXAW
+ if (error != XawEditDone) {
+ if (enable_undo) {
+ if (l_state->buffer) {
+ if (l_state->buffer != SrcNL && l_state->buffer != (char*)SrcWNL)
+ XtFree(l_state->buffer);
+ l_state->buffer = NULL;
+ }
+ src->textSrc.undo->l_save = l_state;
+ if (r_state->buffer) {
+ if (r_state->buffer != SrcNL && r_state->buffer != (char*)SrcWNL)
+ XtFree(r_state->buffer);
+ r_state->buffer = NULL;
+ }
+ src->textSrc.undo->r_save = r_state;
+
+ src->textSrc.undo->u_save = undo;
+ }
+ }
+ else if (enable_undo) {
+ XawTextUndoList *list = src->textSrc.undo->list;
+ XawTextUndoBuffer *unl, *lnl;
+ int erase = undo->right->length == 0 && undo->left->length == 1 && list
+ && list->right->length == 0;
+
+ if (erase) {
+ erase = list->left->position - 1 == undo->left->position ? -1 :
+ list->left->position == undo->left->position ? 1 : 0;
+ if (src->textSrc.undo->erase && erase != src->textSrc.undo->erase)
+ erase = 0;
+ else
+ src->textSrc.undo->erase = erase;
+ }
+
+ if (erase) {
+ unl = l_state;
+ lnl = list->left;
+ }
+ else {
+ unl = r_state;
+ lnl = list ? list->right : NULL;
+ }
+
+ /* Try to merge the undo buffers */
+ if (src->textSrc.undo->merge > 0 && ((erase ||
+ (list && ((list->left->length == 0 && undo->left->length == 0) ||
+ (list->left->length == list->right->length &&
+ undo->left->length == 1)) &&
+ undo->right->length == 1 &&
+ list->right->position + list->right->length
+ == undo->right->position))
+ && src->textSrc.undo->pointer == list
+ && unl->format == list->right->format
+ && ((unl->format == XawFmt8Bit && unl->buffer[0] != XawLF) ||
+ (unl->format == XawFmtWide &&
+ *(wchar_t*)(unl->buffer) != _Xaw_atowc(XawLF)))
+ && ((lnl->format == XawFmt8Bit && lnl->buffer[0] != XawLF) ||
+ (lnl->format == XawFmtWide &&
+ *(wchar_t*)(lnl->buffer) != _Xaw_atowc(XawLF))))) {
+ unsigned size = lnl->format == XawFmtWide ?
+ sizeof(wchar_t) : sizeof(char);
+
+ if (!erase) {
+ list->right->buffer = XtRealloc(list->right->buffer,
+ (list->right->length + 1) * size);
+ memcpy(list->right->buffer + list->right->length * size,
+ undo->right->buffer, size);
+ ++list->right->length;
+ XtFree(r_state->buffer);
+ }
+ else if (erase < 0) {
+ --list->left->position;
+ --list->right->position;
+ }
+
+ src->textSrc.undo->l_save = l_state;
+ src->textSrc.undo->r_save = r_state;
+ src->textSrc.undo->u_save = undo;
+
+ if (list->left->length) {
+ list->left->buffer = XtRealloc(list->left->buffer,
+ (list->left->length + 1) * size);
+ if (erase >= 0)
+ memcpy(list->left->buffer + list->left->length * size,
+ undo->left->buffer, size);
+ else {
+ /* use memmove, since strings overlap */
+ memmove(list->left->buffer + size, list->left->buffer,
+ list->left->length * size);
+ memcpy(list->left->buffer, undo->left->buffer, size);
+ }
+ ++list->left->length;
+ if (l_state->buffer != SrcNL && l_state->buffer != (char*)SrcWNL)
+ XtFree(l_state->buffer);
+ }
+
+ if (src->textSrc.undo->num_list >= UNDO_DEPTH)
+ UndoGC(src->textSrc.undo);
+ }
+ else {
+ src->textSrc.undo->undo = (XawTextUndoBuffer**)
+ XtRealloc((char*)src->textSrc.undo->undo,
+ (2 + src->textSrc.undo->num_undo)
+ * sizeof(XawTextUndoBuffer));
+ src->textSrc.undo->undo[src->textSrc.undo->num_undo++] = l_state;
+ src->textSrc.undo->undo[src->textSrc.undo->num_undo++] = r_state;
+
+ if (src->textSrc.undo->list)
+ src->textSrc.undo->list->redo = undo;
+ else
+ src->textSrc.undo->head = undo;
+
+ src->textSrc.undo->merge = l_state->length <= 1 &&
+ r_state->length <= 1;
+
+ src->textSrc.undo->list = src->textSrc.undo->pointer =
+ src->textSrc.undo->end_mark = undo;
+
+ if (++src->textSrc.undo->num_list >= UNDO_DEPTH)
+ UndoGC(src->textSrc.undo);
+ }
+ src->textSrc.undo->dir = XawsdLeft;
+ if (!src->textSrc.changed) {
+ src->textSrc.undo->l_no_change = src->textSrc.undo->list->right;
+ src->textSrc.undo->r_no_change = src->textSrc.undo->list->left;
+ src->textSrc.changed = True;
+ }
+ }
+ else if (!src->textSrc.enable_undo)
+ src->textSrc.changed = True;
+
+ if (error == XawEditDone) {
+ XawTextPropertyInfo info;
+ XawTextAnchor *anchor;
+
+ /* find anchor and index */
+ /* XXX index (i) could be returned by XawTextSourceFindAnchor
+ * or similar function, to speed up */
+ if ((anchor = XawTextSourceFindAnchor(w, left))) {
+ XawTextEntity *eprev, *entity, *enext;
+ XawTextPosition offset = 0, diff = block->length - (right - left);
+
+ for (i = 0; i < src->textSrc.num_anchors; i++)
+ if (src->textSrc.anchors[i] == anchor)
+ break;
+ if (anchor->cache && anchor->position + anchor->cache->offset +
+ anchor->cache->length <= left)
+ eprev = entity = anchor->cache;
+ else
+ eprev = entity = anchor->entities;
+ while (entity) {
+ offset = anchor->position + entity->offset;
+
+ if (offset > left)
+ break;
+ if (offset + entity->length > left)
+ break;
+
+ eprev = entity;
+ entity = entity->next;
+ }
+
+ /* try to do the right thing here (and most likely correct), but
+ * other code needs to check what was done */
+
+ /* adjust entity length */
+ if (entity && offset <= left) {
+ if (offset + entity->length < right)
+ entity->length = left - offset + block->length;
+ else
+ entity->length += diff;
+
+ if (entity->length == 0) {
+ enext = entity->next;
+ eprev->next = enext;
+ anchor->cache = NULL;
+ XtFree((XtPointer)entity);
+ if (entity == anchor->entities) {
+ if ((anchor->entities = enext) == NULL) {
+ eprev = NULL;
+ anchor = XawTextSourceRemoveAnchor(w, anchor);
+ entity = anchor ? anchor->entities : NULL;
+ }
+ else
+ eprev = entity = enext;
+ }
+ else
+ entity = enext;
+ }
+ else {
+ eprev = entity;
+ entity = entity->next;
+ }
+ }
+
+ while (anchor) {
+ while (entity) {
+ offset = anchor->position + entity->offset + entity->length;
+
+ if (offset > right) {
+ entity->length = XawMin(entity->length, offset - right);
+ goto exit_anchor_loop;
+ }
+
+ enext = entity->next;
+ if (eprev)
+ eprev->next = enext;
+ XtFree((XtPointer)entity);
+ anchor->cache = NULL;
+ if (entity == anchor->entities) {
+ eprev = NULL;
+ if ((anchor->entities = enext) == NULL) {
+ if (i == 0)
+ ++i;
+ else if (i < --src->textSrc.num_anchors) {
+ memmove(&src->textSrc.anchors[i],
+ &src->textSrc.anchors[i + 1],
+ (src->textSrc.num_anchors - i) *
+ sizeof(XawTextAnchor*));
+ XtFree((XtPointer)anchor);
+ }
+ if (i >= src->textSrc.num_anchors) {
+ anchor = NULL;
+ entity = NULL;
+ break;
+ }
+ anchor = src->textSrc.anchors[i];
+ entity = anchor->entities;
+ continue;
+ }
+ }
+ entity = enext;
+ }
+ if (i + 1 < src->textSrc.num_anchors) {
+ anchor = src->textSrc.anchors[++i];
+ entity = anchor->entities;
+ eprev = NULL;
+ }
+ else {
+ anchor = NULL;
+ break;
+ }
+ eprev = NULL;
+ }
+
+exit_anchor_loop:
+ if (anchor) {
+ XawTextAnchor *aprev;
+
+ if (anchor->position >= XawMax(right, left + block->length))
+ anchor->position += diff;
+ else if (anchor->position > left &&
+ (aprev = XawTextSourcePrevAnchor(w, anchor))) {
+ XawTextPosition tmp = anchor->position - aprev->position;
+
+ if (diff) {
+ while (entity) {
+ entity->offset += diff;
+ entity = entity->next;
+ }
+ }
+ entity = anchor->entities;
+ while (entity) {
+ entity->offset += tmp;
+ entity = entity->next;
+ }
+ if ((entity = aprev->entities) == NULL)
+ aprev->entities = anchor->entities;
+ else {
+ while (entity->next)
+ entity = entity->next;
+ entity->next = anchor->entities;
+ }
+ anchor->entities = NULL;
+ (void)XawTextSourceRemoveAnchor(w, anchor);
+ --i;
+ }
+ else if (diff) {
+ while (entity) {
+ entity->offset += diff;
+ entity = entity->next;
+ }
+ }
+ }
+
+ if (diff) {
+ /* The first anchor is never removed, and should
+ * have position 0.
+ * i should be -1 if attempted to removed the first
+ * anchor, what can be caused when removing a chunk
+ * of text of the first entity.
+ * */
+ if (++i == 0) {
+ anchor = src->textSrc.anchors[0];
+ eprev = entity = anchor->entities;
+ while (entity) {
+ enext = entity->next;
+ if (entity->offset + entity->length <= -diff)
+ XtFree((XtPointer)entity);
+ else
+ break;
+ entity = enext;
+ }
+ if (eprev != entity) {
+ anchor->cache = NULL;
+ if ((anchor->entities = entity) != NULL) {
+ if ((entity->offset += diff) < 0) {
+ entity->length += entity->offset;
+ entity->offset = 0;
+ }
+ }
+ }
+ ++i;
+ }
+ for (; i < src->textSrc.num_anchors; i++)
+ src->textSrc.anchors[i]->position += diff;
+ }
+ }
+
+ start = left;
+ end = start + block->length;
+ while (start < end) {
+ start = XawTextSourceScan(w, start, XawstEOL, XawsdRight, 1, True);
+ if (start <= end) {
+ ++lines;
+ if (start == XawTextSourceScan(w, 0, XawstAll, XawsdRight, 1, True)) {
+ lines -= !_XawTextSourceNewLineAtEOF(w);
+ break;
+ }
+ }
+ }
+
+ info.left = left;
+ info.right = right;
+ info.block = block;
+ XtCallCallbacks(w, XtNpropertyCallback, &info);
+
+ TellSourceChanged(src, left, right, block, lines);
+ /* Call callbacks, we have changed the buffer */
+ XtCallCallbacks(w, XtNcallback,
+ (XtPointer)((long)src->textSrc.changed));
+ }
+
+#endif /* OLDXAW */
+ return (error);
+}
+
+#ifndef OLDXAW
+Bool
+_XawTextSrcUndo(TextSrcObject src, XawTextPosition *insert_pos)
+{
+ static wchar_t wnull = 0;
+ XawTextBlock block;
+ XawTextUndoList *list, *nlist;
+ XawTextUndoBuffer *l_state, *r_state;
+ Boolean changed = src->textSrc.changed;
+
+ if (!src->textSrc.enable_undo || !src->textSrc.undo->num_undo)
+ return (False);
+
+ list = src->textSrc.undo->pointer;
+
+ if (src->textSrc.undo->dir == XawsdLeft) {
+ l_state = list->right;
+ r_state = list->left;
+ }
+ else {
+ l_state = list->left;
+ r_state = list->right;
+ }
+
+ if (src->textSrc.undo->l_no_change == l_state
+ && src->textSrc.undo->r_no_change == r_state)
+ src->textSrc.changed = False;
+ else
+ src->textSrc.changed = True;
+
+ block.firstPos = 0;
+ block.length = r_state->length;
+ block.ptr = r_state->buffer ? r_state->buffer : (char*)&wnull;
+ block.format = r_state->format;
+
+ src->textSrc.undo_state = True;
+ if (XawTextSourceReplace((Widget)src, l_state->position, l_state->position
+ + l_state->length, &block) != XawEditDone) {
+ src->textSrc.undo_state = False;
+ src->textSrc.changed = changed;
+ return (False);
+ }
+ src->textSrc.undo_state = False;
+
+ ++l_state->refcount;
+ ++r_state->refcount;
+ nlist = XtNew(XawTextUndoList);
+ nlist->left = l_state;
+ nlist->right = r_state;
+ nlist->undo = src->textSrc.undo->list;
+ nlist->redo = NULL;
+
+ if (list == src->textSrc.undo->list)
+ src->textSrc.undo->end_mark = nlist;
+
+ if (src->textSrc.undo->dir == XawsdLeft) {
+ if (list->undo == NULL)
+ src->textSrc.undo->dir = XawsdRight;
+ else
+ list = list->undo;
+ }
+ else {
+ if (list->redo == NULL || list->redo == src->textSrc.undo->end_mark)
+ src->textSrc.undo->dir = XawsdLeft;
+ else
+ list = list->redo;
+ }
+ *insert_pos = r_state->position + r_state->length;
+ src->textSrc.undo->pointer = list;
+ src->textSrc.undo->list->redo = nlist;
+ src->textSrc.undo->list = nlist;
+ src->textSrc.undo->merge = src->textSrc.undo->erase = 0;
+
+ if (++src->textSrc.undo->num_list >= UNDO_DEPTH)
+ UndoGC(src->textSrc.undo);
+
+ return (True);
+}
+
+Bool
+_XawTextSrcToggleUndo(TextSrcObject src)
+{
+ if (!src->textSrc.enable_undo || !src->textSrc.undo->num_undo)
+ return (False);
+
+ if (src->textSrc.undo->pointer != src->textSrc.undo->list) {
+ if (src->textSrc.undo->dir == XawsdLeft) {
+ if (src->textSrc.undo->pointer->redo
+ && (src->textSrc.undo->pointer->redo
+ != src->textSrc.undo->end_mark)) {
+ src->textSrc.undo->pointer = src->textSrc.undo->pointer->redo;
+ src->textSrc.undo->dir = XawsdRight;
+ }
+ }
+ else {
+ if (src->textSrc.undo->pointer->undo
+ && (src->textSrc.undo->pointer != src->textSrc.undo->head)) {
+ src->textSrc.undo->pointer = src->textSrc.undo->pointer->undo;
+ src->textSrc.undo->dir = XawsdLeft;
+ }
+ }
+ }
+
+ return (True);
+}
+
+static void
+FreeUndoBuffer(XawTextUndo *undo)
+{
+ unsigned i;
+ XawTextUndoList *head, *del;
+
+ for (i = 0; i < undo->num_undo; i++) {
+ if (undo->undo[i]->buffer && undo->undo[i]->buffer != SrcNL &&
+ undo->undo[i]->buffer != (char*)SrcWNL)
+ XtFree(undo->undo[i]->buffer);
+ XtFree((char*)undo->undo[i]);
+ }
+ XtFree((char*)undo->undo);
+ head = undo->head;
+
+ del = head;
+ while (head) {
+ head = head->redo;
+ XtFree((char*)del);
+ del = head;
+ }
+
+ if (undo->l_save) {
+ XtFree((char*)undo->l_save);
+ undo->l_save = NULL;
+ }
+ if (undo->r_save) {
+ XtFree((char*)undo->r_save);
+ undo->r_save = NULL;
+ }
+ if (undo->u_save) {
+ XtFree((char*)undo->u_save);
+ undo->u_save = NULL;
+ }
+
+ undo->list = undo->pointer = undo->head = undo->end_mark = NULL;
+ undo->l_no_change = undo->r_no_change = NULL;
+ undo->undo = NULL;
+ undo->dir = XawsdLeft;
+ undo->num_undo = undo->num_list = undo->erase = undo->merge = 0;
+}
+
+static void
+UndoGC(XawTextUndo *undo)
+{
+ unsigned i;
+ XawTextUndoList *head = undo->head, *redo = head->redo;
+
+ if (head == undo->pointer || head == undo->end_mark
+ || undo->l_no_change == NULL
+ || head->left == undo->l_no_change || head->right == undo->l_no_change)
+ return;
+
+ undo->head = redo;
+ redo->undo = NULL;
+
+ --head->left->refcount;
+ if (--head->right->refcount == 0) {
+ for (i = 0; i < undo->num_undo; i+= 2)
+ if (head->left == undo->undo[i] || head->left == undo->undo[i+1]) {
+ if (head->left == undo->undo[i+1]) {
+ XawTextUndoBuffer *tmp = redo->left;
+
+ redo->left = redo->right;
+ redo->right = tmp;
+ }
+ if (head->left->buffer && head->left->buffer != SrcNL &&
+ head->left->buffer != (char*)SrcWNL)
+ XtFree(head->left->buffer);
+ XtFree((char*)head->left);
+ if (head->right->buffer && head->right->buffer != SrcNL &&
+ head->right->buffer != (char*)SrcWNL)
+ XtFree(head->right->buffer);
+ XtFree((char*)head->right);
+
+ undo->num_undo -= 2;
+ memmove(&undo->undo[i], &undo->undo[i + 2],
+ (undo->num_undo - i) * sizeof(XawTextUndoBuffer*));
+ break;
+ }
+ }
+ XtFree((char*)head);
+ --undo->num_list;
+}
+#endif /* OLDXAW */
+
+/*
+ * Function:
+ * XawTextSourceScan
+ *
+ * Parameters:
+ * w - TextSrc Object
+ * position - position to start scanning
+ * type - type of thing to scan for
+ * dir - direction to scan
+ * count - which occurance if this thing to search for
+ * include - whether or not to include the character found in
+ * the position that is returned.
+ *
+ * Description:
+ * Scans the text source for the number and type of item specified.
+ *
+ * Returns:
+ * The position of the text
+ */
+XawTextPosition
+XawTextSourceScan(Widget w, XawTextPosition position,
+#if NeedWidePrototypes
+ int type, int dir, int count, int include
+#else
+ XawTextScanType type, XawTextScanDirection dir,
+ int count, Boolean include
+#endif
+)
+{
+ TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
+
+ return ((*cclass->textSrc_class.Scan)
+ (w, position, type, dir, count, include));
+}
+
+/*
+ * Function:
+ * XawTextSourceSearch
+ *
+ * Parameters:
+ * w - TextSource Object
+ * position - position to start scanning
+ * dir - direction to scan
+ * text - the text block to search for.
+ *
+ * Returns:
+ * The position of the text we are searching for or XawTextSearchError.
+ *
+ * Description:
+ * Searchs the text source for the text block passed
+ */
+XawTextPosition
+XawTextSourceSearch(Widget w, XawTextPosition position,
+#if NeedWidePrototypes
+ int dir,
+#else
+ XawTextScanDirection dir,
+#endif
+ XawTextBlock *text)
+{
+ TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
+
+ return ((*cclass->textSrc_class.Search)(w, position, dir, text));
+}
+
+/*
+ * Function:
+ * XawTextSourceConvertSelection
+ *
+ * Parameters:
+ * w - TextSrc object
+ * selection - current selection atom
+ * target - current target atom
+ * type - type to conver the selection to
+ * value - return value that has been converted
+ * length - ""
+ * format - format of the returned value
+ *
+ * Returns:
+ * True if the selection has been converted
+ */
+Boolean
+XawTextSourceConvertSelection(Widget w, Atom *selection, Atom *target,
+ Atom *type, XtPointer *value,
+ unsigned long *length, int *format)
+{
+ TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
+
+ return((*cclass->textSrc_class.ConvertSelection)
+ (w, selection, target, type, value, length, format));
+}
+
+/*
+ * Function:
+ * XawTextSourceSetSelection
+ *
+ * Parameters:
+ * w - TextSrc object
+ * left - bounds of the selection
+ * rigth - ""
+ * selection - selection atom
+ *
+ * Description:
+ * Allows special setting of the selection.
+ */
+void
+XawTextSourceSetSelection(Widget w, XawTextPosition left,
+ XawTextPosition right, Atom selection)
+{
+ TextSrcObjectClass cclass = (TextSrcObjectClass)w->core.widget_class;
+
+ (*cclass->textSrc_class.SetSelection)(w, left, right, selection);
+}
+
+/*
+ * External Functions for Multi Text
+ */
+/*
+ * TextFormat():
+ * returns the format of text: FMT8BIT or FMTWIDE
+ */
+XrmQuark
+_XawTextFormat(TextWidget tw)
+{
+ return (((TextSrcObject)(tw->text.source))->textSrc.text_format);
+}
+
+/* _XawTextWCToMB():
+ * Convert the wchar string to external encoding
+ * The caller is responsible for freeing both the source and ret string
+ *
+ * wstr - source wchar string
+ * len_in_out - lengh of string.
+ * As In, length of source wchar string, measured in wchar
+ * As Out, length of returned string
+ */
+char *
+_XawTextWCToMB(Display *d, wchar_t *wstr, int *len_in_out)
+{
+ XTextProperty textprop;
+
+ if (XwcTextListToTextProperty(d, (wchar_t**)&wstr, 1,
+ XTextStyle, &textprop) < Success) {
+ XtWarningMsg("convertError", "textSource", "XawError",
+ "Non-character code(s) in buffer.", NULL, NULL);
+ *len_in_out = 0;
+ return (NULL);
+ }
+ *len_in_out = textprop.nitems;
+
+ return ((char *)textprop.value);
+}
+
+/* _XawTextMBToWC():
+ * Convert the string to internal processing codeset WC.
+ * The caller is responsible for freeing both the source and ret string.
+ *
+ * str - source string
+ * len_in_out - lengh of string
+ * As In, it is length of source string
+ * As Out, it is length of returned string, measured in wchar
+ */
+wchar_t *
+_XawTextMBToWC(Display *d, char *str, int *len_in_out)
+{
+ XTextProperty textprop;
+ char *buf;
+ wchar_t **wlist, *wstr;
+ int count;
+
+ if (*len_in_out == 0)
+ return (NULL);
+
+ buf = XtMalloc(*len_in_out + 1);
+
+ strncpy(buf, str, *len_in_out);
+ *(buf + *len_in_out) = '\0';
+ if (XmbTextListToTextProperty(d, &buf, 1, XTextStyle, &textprop) != Success) {
+ XtWarningMsg("convertError", "textSource", "XawError",
+ "No Memory, or Locale not supported.", NULL, NULL);
+ XtFree(buf);
+ *len_in_out = 0;
+ return (NULL);
+ }
+
+ XtFree(buf);
+ if (XwcTextPropertyToTextList(d, &textprop,
+ (wchar_t***)&wlist, &count) != Success) {
+ XtWarningMsg("convertError", "multiSourceCreate", "XawError",
+ "Non-character code(s) in source.", NULL, NULL);
+ *len_in_out = 0;
+ return (NULL);
+ }
+ wstr = wlist[0];
+ *len_in_out = wcslen(wstr);
+ XtFree((XtPointer)wlist);
+
+ return (wstr);
+}
+
+#ifndef OLDXAW
+static int
+qcmp_anchors(_Xconst void *left, _Xconst void *right)
+{
+ return ((*(XawTextAnchor**)left)->position -
+ (*(XawTextAnchor**)right)->position);
+}
+
+XawTextAnchor *
+XawTextSourceAddAnchor(Widget w, XawTextPosition position)
+{
+ TextSrcObject src = (TextSrcObject)w;
+ XawTextAnchor *anchor, *panchor;
+
+ if ((panchor = XawTextSourceFindAnchor(w, position)) != NULL) {
+ XawTextEntity *pentity, *entity;
+
+ if (position - panchor->position < ANCHORS_DIST)
+ return (panchor);
+
+ if (panchor->cache && panchor->position + panchor->cache->offset +
+ panchor->cache->length < position)
+ pentity = entity = panchor->cache;
+ else
+ pentity = entity = panchor->entities;
+
+ while (entity && panchor->position + entity->offset +
+ entity->length < position) {
+ pentity = entity;
+ entity = entity->next;
+ }
+ if (entity) {
+ XawTextPosition diff;
+
+ if (panchor->position + entity->offset < position)
+ position = panchor->position + entity->offset;
+
+ if (position == panchor->position)
+ return (panchor);
+
+ anchor = XtNew(XawTextAnchor);
+ diff = position - panchor->position;
+
+ panchor->cache = NULL;
+ anchor->entities = entity;
+ if (pentity != entity)
+ pentity->next = NULL;
+ else
+ panchor->entities = NULL;
+ while (entity) {
+ entity->offset -= diff;
+ entity = entity->next;
+ }
+ }
+ else {
+ anchor = XtNew(XawTextAnchor);
+ anchor->entities = NULL;
+ }
+ }
+ else {
+ anchor = XtNew(XawTextAnchor);
+ anchor->entities = NULL;
+ }
+
+ anchor->position = position;
+ anchor->cache = NULL;
+
+ src->textSrc.anchors = (XawTextAnchor**)
+ XtRealloc((XtPointer)src->textSrc.anchors, sizeof(XawTextAnchor*) *
+ (src->textSrc.num_anchors + 1));
+ src->textSrc.anchors[src->textSrc.num_anchors++] = anchor;
+ qsort((void*)src->textSrc.anchors, src->textSrc.num_anchors,
+ sizeof(XawTextAnchor*), qcmp_anchors);
+
+ return (anchor);
+}
+
+XawTextAnchor *
+XawTextSourceFindAnchor(Widget w, XawTextPosition position)
+{
+ TextSrcObject src = (TextSrcObject)w;
+ int i = 0, left, right, nmemb = src->textSrc.num_anchors;
+ XawTextAnchor *anchor, **anchors = src->textSrc.anchors;
+
+ left = 0;
+ right = nmemb - 1;
+ while (left <= right) {
+ anchor = anchors[i = (left + right) >> 1];
+ if (anchor->position == position)
+ return (anchor);
+ else if (position < anchor->position)
+ right = i - 1;
+ else
+ left = i + 1;
+ }
+
+ if (nmemb)
+ return (right < 0 ? anchors[0] : anchors[right]);
+
+ return (NULL);
+}
+
+Bool
+XawTextSourceAnchorAndEntity(Widget w, XawTextPosition position,
+ XawTextAnchor **anchor_return,
+ XawTextEntity **entity_return)
+{
+ XawTextAnchor *anchor = XawTextSourceFindAnchor(w, position);
+ XawTextEntity *pentity, *entity;
+ XawTextPosition offset;
+ Bool next_anchor = True, retval = False;
+
+ if (anchor->cache && anchor->position + anchor->cache->offset +
+ anchor->cache->length <= position)
+ pentity = entity = anchor->cache;
+ else
+ pentity = entity = anchor->entities;
+ while (entity) {
+ offset = anchor->position + entity->offset;
+
+ if (offset > position) {
+ retval = next_anchor = False;
+ break;
+ }
+ if (offset + entity->length > position) {
+ retval = True;
+ next_anchor = False;
+ break;
+ }
+ pentity = entity;
+ entity = entity->next;
+ }
+
+ if (next_anchor) {
+ *anchor_return = anchor = XawTextSourceNextAnchor(w, anchor);
+ *entity_return = anchor ? anchor->entities : NULL;
+ }
+ else {
+ *anchor_return = anchor;
+ *entity_return = retval ? entity : pentity;
+ }
+
+ if (*anchor_return)
+ (*anchor_return)->cache = *entity_return;
+
+ return (retval);
+}
+
+XawTextAnchor *
+XawTextSourceNextAnchor(Widget w, XawTextAnchor *anchor)
+{
+ int i;
+ TextSrcObject src = (TextSrcObject)w;
+
+ for (i = 0; i < src->textSrc.num_anchors - 1; i++)
+ if (src->textSrc.anchors[i] == anchor)
+ return (src->textSrc.anchors[i + 1]);
+
+ return (NULL);
+}
+
+XawTextAnchor *
+XawTextSourcePrevAnchor(Widget w, XawTextAnchor *anchor)
+{
+ int i;
+ TextSrcObject src = (TextSrcObject)w;
+
+ for (i = src->textSrc.num_anchors - 1; i > 0; i--)
+ if (src->textSrc.anchors[i] == anchor)
+ return (src->textSrc.anchors[i - 1]);
+
+ return (NULL);
+}
+
+XawTextAnchor *
+XawTextSourceRemoveAnchor(Widget w, XawTextAnchor *anchor)
+{
+ int i;
+ TextSrcObject src = (TextSrcObject)w;
+
+ for (i = 0; i < src->textSrc.num_anchors; i++)
+ if (src->textSrc.anchors[i] == anchor)
+ break;
+
+ if (i == 0)
+ return (src->textSrc.num_anchors > 1 ? src->textSrc.anchors[1] : NULL);
+
+ if (i < src->textSrc.num_anchors) {
+ XtFree((XtPointer)anchor);
+ if (i < --src->textSrc.num_anchors) {
+ memmove(&src->textSrc.anchors[i],
+ &src->textSrc.anchors[i + 1],
+ (src->textSrc.num_anchors - i) *
+ sizeof(XawTextAnchor*));
+
+ return (src->textSrc.anchors[i]);
+ }
+ }
+
+ return (NULL);
+}
+
+XawTextEntity *
+XawTextSourceAddEntity(Widget w, int type, int flags, XtPointer data,
+ XawTextPosition position, Cardinal length,
+ XrmQuark property)
+{
+ XawTextAnchor *next, *anchor = _XawTextSourceFindAnchor(w, position);
+ XawTextEntity *entity, *eprev;
+
+ /* There is no support for zero length entities for now */
+ if (length == 0)
+ return (NULL);
+
+ if (anchor->cache && anchor->position + anchor->cache->offset +
+ anchor->cache->length <= position)
+ eprev = entity = anchor->cache;
+ else
+ eprev = entity = anchor->entities;
+
+ while (entity && anchor->position + entity->offset + entity->length <=
+ position) {
+ eprev = entity;
+ entity = entity->next;
+ }
+ if (entity && anchor->position + entity->offset < position + length) {
+ fprintf(stderr, "Cannot (yet) add more than one entity to same region.\n");
+ return (NULL);
+ }
+
+ next = XawTextSourceFindAnchor(w, position + length);
+ if (next && next != anchor) {
+ if ((entity = next->entities) != NULL) {
+ if (next->position + entity->offset < position + length) {
+ fprintf(stderr, "Cannot (yet) add more than one entity to same region.\n");
+ return (NULL);
+ }
+ }
+ if (position + length > next->position) {
+ XawTextPosition diff = position + length - next->position;
+
+ next->position += diff;
+ entity = next->entities;
+ while (entity) {
+ entity->offset -= diff;
+ entity = entity->next;
+ }
+ entity = anchor->entities;
+ while (entity && entity->offset < 0)
+ entity = entity->next;
+ if (entity && entity->offset < 0) {
+ if (eprev)
+ eprev->next = next->entities;
+ else
+ anchor->entities = next->entities;
+ if ((next->entities = entity->next) == NULL)
+ (void)XawTextSourceRemoveAnchor(w, next);
+ entity->next = NULL;
+
+ return (XawTextSourceAddEntity(w, type, flags, data, position,
+ length, property));
+ }
+ }
+ }
+
+ /* Automatically join sequential entities if possible */
+ if (eprev &&
+ anchor->position + eprev->offset + eprev->length == position &&
+ eprev->property == property && eprev->type == type &&
+ eprev->flags == flags && eprev->data == data) {
+ eprev->length += length;
+ return (eprev);
+ }
+
+ entity = XtNew(XawTextEntity);
+ entity->type = type;
+ entity->flags = flags;
+ entity->data = data;
+ entity->offset = position - anchor->position;
+ entity->length = length;
+ entity->property = property;
+
+ if (eprev == NULL) {
+ anchor->entities = entity;
+ entity->next = NULL;
+ anchor->cache = NULL;
+ }
+ else if (eprev->offset > entity->offset) {
+ anchor->cache = NULL;
+ anchor->entities = entity;
+ entity->next = eprev;
+ }
+ else {
+ anchor->cache = eprev;
+ entity->next = eprev->next;
+ eprev->next = entity;
+ }
+
+ return (entity);
+}
+
+void
+XawTextSourceClearEntities(Widget w, XawTextPosition left, XawTextPosition right)
+{
+ XawTextAnchor *anchor = XawTextSourceFindAnchor(w, left);
+ XawTextEntity *entity, *eprev, *enext;
+ XawTextPosition offset;
+ int length;
+
+ while (anchor && anchor->entities == NULL)
+ anchor = XawTextSourceRemoveAnchor(w, anchor);
+
+ if (anchor == NULL || left >= right)
+ return;
+
+ if (anchor->cache && anchor->position + anchor->cache->offset +
+ anchor->cache->length < left)
+ eprev = entity = anchor->cache;
+ else
+ eprev = entity = anchor->entities;
+
+ /* find first entity before left position */
+ while (anchor->position + entity->offset + entity->length < left) {
+ eprev = entity;
+ if ((entity = entity->next) == NULL) {
+ if ((anchor = XawTextSourceNextAnchor(w, anchor)) == NULL)
+ return;
+ if ((eprev = entity = anchor->entities) == NULL) {
+ fprintf(stderr, "Bad anchor found!\n");
+ return;
+ }
+ }
+ }
+
+ offset = anchor->position + entity->offset;
+ if (offset <= left) {
+ length = XawMin(entity->length, left - offset);
+
+ if (length <= 0) {
+ enext = entity->next;
+ eprev->next = enext;
+ XtFree((XtPointer)entity);
+ anchor->cache = NULL;
+ if (entity == anchor->entities) {
+ eprev = NULL;
+ if ((anchor->entities = enext) == NULL) {
+ if ((anchor = XawTextSourceRemoveAnchor(w, anchor)) == NULL)
+ return;
+ entity = anchor->entities;
+ }
+ else
+ entity = enext;
+ }
+ else
+ entity = enext;
+ }
+ else {
+ entity->length = length;
+ eprev = entity;
+ entity = entity->next;
+ }
+ }
+
+ /* clean everything until right position is reached */
+ while (anchor) {
+ while (entity) {
+ offset = anchor->position + entity->offset + entity->length;
+
+ if (offset > right) {
+ anchor->cache = NULL;
+ entity->offset = XawMax(entity->offset, right - anchor->position);
+ entity->length = XawMin(entity->length, offset - right);
+ return;
+ }
+
+ enext = entity->next;
+ if (eprev)
+ eprev->next = enext;
+ XtFree((XtPointer)entity);
+ if (entity == anchor->entities) {
+ eprev = anchor->cache = NULL;
+ if ((anchor->entities = enext) == NULL) {
+ if ((anchor = XawTextSourceRemoveAnchor(w, anchor)) == NULL)
+ return;
+ entity = anchor->entities;
+ continue;
+ }
+ }
+ entity = enext;
+ }
+ if (anchor)
+ anchor->cache = NULL;
+ if ((anchor = XawTextSourceNextAnchor(w, anchor)) != NULL)
+ entity = anchor->entities;
+ eprev = NULL;
+ }
+}
+
+/* checks the anchors up to position, and create an appropriate anchor
+ * at position, if required.
+ */
+XawTextAnchor *
+_XawTextSourceFindAnchor(Widget w, XawTextPosition position)
+{
+ XawTextAnchor *anchor;
+
+ anchor = XawTextSourceFindAnchor(w, position);
+
+ position -= position % ANCHORS_DIST;
+
+ if (position - anchor->position >= ANCHORS_DIST)
+ return (XawTextSourceAddAnchor(w, position));
+
+ return (anchor);
+}
+#endif
diff --git a/libXaw/src/TextTr.c b/libXaw/src/TextTr.c
index 059a79201..5c524196a 100644
--- a/libXaw/src/TextTr.c
+++ b/libXaw/src/TextTr.c
@@ -1,161 +1,158 @@
-/* $Xorg: TextTr.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/TextTr.c,v 3.15 2001/01/17 19:42:35 dawes Exp $ */
-
-/* INTERNATIONALIZATION:
-
-The OMRON R5 contrib added the following action to the old TextTr:
-
- Ctrl<Key>backslash: reconnect-im()
-
-This is needed when the im is killed or otherwise becomes unreachable.
-This keystroke is evil (inconvenient, hard-to-remember, not obvious)
-so I am adding one more translation:
-
- <Key>Kanji: reconnect-im()
-
-The Japanese user typically hits their Kanji key when they want to do
-input. This merely makes sure the input is connected.
-*/
-
-#include <X11/Xaw/Text.h>
-
-char _XawDefaultTextTranslations[] =
-"c<Key>A:" "beginning-of-line()\n"
-"c<Key>B:" "backward-character()\n"
-"c<Key>C:" "insert-selection(CUT_BUFFER0)\n"
-"c<Key>D:" "delete-next-character()\n"
-"c<Key>E:" "end-of-line()\n"
-"c<Key>F:" "forward-character()\n"
-#ifndef OLDXAW
-"c<Key>G:" "keyboard-reset()\n"
-#else
-"c<Key>G:" "multiply(Reset)\n"
-#endif
-"c<Key>H:" "delete-previous-character()\n"
-"c<Key>J:" "newline-and-indent()\n"
-"c<Key>K:" "kill-to-end-of-line()\n"
-"c<Key>L:" "redraw-display()\n"
-"c<Key>M:" "newline()\n"
-"c<Key>N:" "next-line()\n"
-"c<Key>O:" "newline-and-backup()\n"
-"c<Key>P:" "previous-line()\n"
-"c<Key>R:" "search(backward)\n"
-"c<Key>S:" "search(forward)\n"
-"c<Key>T:" "transpose-characters()\n"
-#ifndef OLDXAW
-"c<Key>U:" "multiply(Start)\n"
-#else
-"c<Key>U:" "multiply(4)\n"
-#endif
-"c<Key>V:" "next-page()\n"
-"c<Key>W:" "kill-selection()\n"
-"c<Key>Y:" "insert-selection(SECONDARY)\n"
-"c<Key>Z:" "scroll-one-line-up()\n"
-"m<Key>B:" "backward-word()\n"
-"m<Key>C:" "capitalize-word()\n"
-"m<Key>F:" "forward-word()\n"
-"m<Key>I:" "insert-file()\n"
-"m<Key>K:" "kill-to-end-of-paragraph()\n"
-"m<Key>L:" "downcase-word()\n"
-"m<Key>Q:" "form-paragraph()\n"
-"m<Key>U:" "upcase-word()\n"
-"m<Key>V:" "previous-page()\n"
-#ifndef OLDXAW
-"m<Key>Y:" "kill-ring-yank()\n"
-#endif
-"m<Key>Z:" "scroll-one-line-down()\n"
-"~s m<Key>d:" "kill-word(alnum)\n"
-"s m<Key>d:" "delete-next-word(alnum)\n"
-"~s m<Key>h:" "backward-kill-word(alnum)\n"
-"s m<Key>h:" "delete-previous-word(alnum)\n"
-":m<Key>\\<:" "beginning-of-file()\n"
-":m<Key>\\>:" "end-of-file()\n"
-":m<Key>]:" "forward-paragraph()\n"
-":m<Key>[:" "backward-paragraph()\n"
-"~s m<Key>Delete:" "backward-kill-word(alnum)\n"
-"s m<Key>Delete:" "delete-previous-word(alnum)\n"
-"~s m<Key>BackSpace:" "backward-kill-word(alnum)\n"
-"s m<Key>BackSpace:" "delete-previous-word(alnum)\n"
-"c<Key>Left:" "backward-word(alnum)\n"
-"c<Key>Right:" "forward-word(alnum)\n"
-"c<Key>Up:" "backward-paragraph()\n"
-"c<Key>Down:" "forward-paragraph()\n"
-"<Key>Home:" "beginning-of-file()\n"
-":<Key>KP_Home:" "beginning-of-file()\n"
-"<Key>End:" "end-of-file()\n"
-":<Key>KP_End:" "end-of-file()\n"
-"<Key>Next:" "next-page()\n"
-":<Key>KP_Next:" "next-page()\n"
-"<Key>Prior:" "previous-page()\n"
-":<Key>KP_Prior:" "previous-page()\n"
-"<Key>Right:" "forward-character()\n"
-":<Key>KP_Right:" "forward-character()\n"
-"<Key>Left:" "backward-character()\n"
-":<Key>KP_Left:" "backward-character()\n"
-"<Key>Down:" "next-line()\n"
-":<Key>KP_Down:" "next-line()\n"
-"<Key>Up:" "previous-line()\n"
-":<Key>KP_Up:" "previous-line()\n"
-"<Key>Delete:" "delete()\n"
-":<Key>KP_Delete:" "delete()\n"
-"<Key>BackSpace:" "delete-previous-character()\n"
-"<Key>Linefeed:" "newline-and-indent()\n"
-"<Key>Return:" "newline()\n"
-":<Key>KP_Enter:" "newline()\n"
-"c<Key>backslash:" "reconnect-im()\n"
-"<Key>Kanji:" "reconnect-im()\n"
-#ifndef OLDXAW
-":<Key>0:" "numeric(0)\n"
-":<Key>1:" "numeric(1)\n"
-":<Key>2:" "numeric(2)\n"
-":<Key>3:" "numeric(3)\n"
-":<Key>4:" "numeric(4)\n"
-":<Key>5:" "numeric(5)\n"
-":<Key>6:" "numeric(6)\n"
-":<Key>7:" "numeric(7)\n"
-":<Key>8:" "numeric(8)\n"
-":<Key>9:" "numeric(9)\n"
-":<Key>-:" "numeric(-)\n"
-":c<Key>_:" "undo()\n"
-#endif
-"s <Key>Insert:" "insert-selection(PRIMARY, CUT_BUFFER0)\n"
-"<Ctrl>Q,<Key>:" "insert-char()\n"
-"<Key>:" "insert-char()\n"
-"<Enter>:" "enter-window()\n"
-"<Leave>:" "leave-window()\n"
-"<FocusIn>:" "focus-in()\n"
-"<FocusOut>:" "focus-out()\n"
-"<Btn1Down>:" "select-start()\n"
-"<Btn1Motion>:" "extend-adjust()\n"
-"<Btn1Up>:" "extend-end(PRIMARY, CUT_BUFFER0)\n"
-"<Btn2Down>:" "insert-selection(PRIMARY, CUT_BUFFER0)\n"
-"<Btn3Down>:" "extend-start()\n"
-"<Btn3Motion>:" "extend-adjust()\n"
-"<Btn3Up>:" "extend-end(PRIMARY, CUT_BUFFER0)\n"
-;
+/*
+
+Copyright 1991, 1994, 1998 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.
+
+*/
+
+/* INTERNATIONALIZATION:
+
+The OMRON R5 contrib added the following action to the old TextTr:
+
+ Ctrl<Key>backslash: reconnect-im()
+
+This is needed when the im is killed or otherwise becomes unreachable.
+This keystroke is evil (inconvenient, hard-to-remember, not obvious)
+so I am adding one more translation:
+
+ <Key>Kanji: reconnect-im()
+
+The Japanese user typically hits their Kanji key when they want to do
+input. This merely makes sure the input is connected.
+*/
+
+#include <X11/Xaw/Text.h>
+
+char _XawDefaultTextTranslations[] =
+"c<Key>A:" "beginning-of-line()\n"
+"c<Key>B:" "backward-character()\n"
+"c<Key>C:" "insert-selection(CUT_BUFFER0)\n"
+"c<Key>D:" "delete-next-character()\n"
+"c<Key>E:" "end-of-line()\n"
+"c<Key>F:" "forward-character()\n"
+#ifndef OLDXAW
+"c<Key>G:" "keyboard-reset()\n"
+#else
+"c<Key>G:" "multiply(Reset)\n"
+#endif
+"c<Key>H:" "delete-previous-character()\n"
+"c<Key>J:" "newline-and-indent()\n"
+"c<Key>K:" "kill-to-end-of-line()\n"
+"c<Key>L:" "redraw-display()\n"
+"c<Key>M:" "newline()\n"
+"c<Key>N:" "next-line()\n"
+"c<Key>O:" "newline-and-backup()\n"
+"c<Key>P:" "previous-line()\n"
+"c<Key>R:" "search(backward)\n"
+"c<Key>S:" "search(forward)\n"
+"c<Key>T:" "transpose-characters()\n"
+#ifndef OLDXAW
+"c<Key>U:" "multiply(Start)\n"
+#else
+"c<Key>U:" "multiply(4)\n"
+#endif
+"c<Key>V:" "next-page()\n"
+"c<Key>W:" "kill-selection()\n"
+"c<Key>Y:" "insert-selection(SECONDARY)\n"
+"c<Key>Z:" "scroll-one-line-up()\n"
+"m<Key>B:" "backward-word()\n"
+"m<Key>C:" "capitalize-word()\n"
+"m<Key>F:" "forward-word()\n"
+"m<Key>I:" "insert-file()\n"
+"m<Key>K:" "kill-to-end-of-paragraph()\n"
+"m<Key>L:" "downcase-word()\n"
+"m<Key>Q:" "form-paragraph()\n"
+"m<Key>U:" "upcase-word()\n"
+"m<Key>V:" "previous-page()\n"
+#ifndef OLDXAW
+"m<Key>Y:" "kill-ring-yank()\n"
+#endif
+"m<Key>Z:" "scroll-one-line-down()\n"
+"~s m<Key>d:" "kill-word(alnum)\n"
+"s m<Key>d:" "delete-next-word(alnum)\n"
+"~s m<Key>h:" "backward-kill-word(alnum)\n"
+"s m<Key>h:" "delete-previous-word(alnum)\n"
+":m<Key>\\<:" "beginning-of-file()\n"
+":m<Key>\\>:" "end-of-file()\n"
+":m<Key>]:" "forward-paragraph()\n"
+":m<Key>[:" "backward-paragraph()\n"
+"~s m<Key>Delete:" "backward-kill-word(alnum)\n"
+"s m<Key>Delete:" "delete-previous-word(alnum)\n"
+"~s m<Key>BackSpace:" "backward-kill-word(alnum)\n"
+"s m<Key>BackSpace:" "delete-previous-word(alnum)\n"
+"c<Key>Left:" "backward-word(alnum)\n"
+"c<Key>Right:" "forward-word(alnum)\n"
+"c<Key>Up:" "backward-paragraph()\n"
+"c<Key>Down:" "forward-paragraph()\n"
+"<Key>Home:" "beginning-of-file()\n"
+":<Key>KP_Home:" "beginning-of-file()\n"
+"<Key>End:" "end-of-file()\n"
+":<Key>KP_End:" "end-of-file()\n"
+"<Key>Next:" "next-page()\n"
+":<Key>KP_Next:" "next-page()\n"
+"<Key>Prior:" "previous-page()\n"
+":<Key>KP_Prior:" "previous-page()\n"
+"<Key>Right:" "forward-character()\n"
+":<Key>KP_Right:" "forward-character()\n"
+"<Key>Left:" "backward-character()\n"
+":<Key>KP_Left:" "backward-character()\n"
+"<Key>Down:" "next-line()\n"
+":<Key>KP_Down:" "next-line()\n"
+"<Key>Up:" "previous-line()\n"
+":<Key>KP_Up:" "previous-line()\n"
+"<Key>Delete:" "delete()\n"
+":<Key>KP_Delete:" "delete()\n"
+"<Key>BackSpace:" "delete-previous-character()\n"
+"<Key>Linefeed:" "newline-and-indent()\n"
+"<Key>Return:" "newline()\n"
+":<Key>KP_Enter:" "newline()\n"
+"c<Key>backslash:" "reconnect-im()\n"
+"<Key>Kanji:" "reconnect-im()\n"
+#ifndef OLDXAW
+":<Key>0:" "numeric(0)\n"
+":<Key>1:" "numeric(1)\n"
+":<Key>2:" "numeric(2)\n"
+":<Key>3:" "numeric(3)\n"
+":<Key>4:" "numeric(4)\n"
+":<Key>5:" "numeric(5)\n"
+":<Key>6:" "numeric(6)\n"
+":<Key>7:" "numeric(7)\n"
+":<Key>8:" "numeric(8)\n"
+":<Key>9:" "numeric(9)\n"
+":<Key>-:" "numeric(-)\n"
+":c<Key>_:" "undo()\n"
+#endif
+"s <Key>Insert:" "insert-selection(PRIMARY, CUT_BUFFER0)\n"
+"<Ctrl>Q,<Key>:" "insert-char()\n"
+"<Key>:" "insert-char()\n"
+"<Enter>:" "enter-window()\n"
+"<Leave>:" "leave-window()\n"
+"<FocusIn>:" "focus-in()\n"
+"<FocusOut>:" "focus-out()\n"
+"<Btn1Down>:" "select-start()\n"
+"<Btn1Motion>:" "extend-adjust()\n"
+"<Btn1Up>:" "extend-end(PRIMARY, CUT_BUFFER0)\n"
+"<Btn2Down>:" "insert-selection(PRIMARY, CUT_BUFFER0)\n"
+"<Btn3Down>:" "extend-start()\n"
+"<Btn3Motion>:" "extend-adjust()\n"
+"<Btn3Up>:" "extend-end(PRIMARY, CUT_BUFFER0)\n"
+;
diff --git a/libXaw/src/Tip.c b/libXaw/src/Tip.c
index 11f4c2661..bca994ca5 100644
--- a/libXaw/src/Tip.c
+++ b/libXaw/src/Tip.c
@@ -1,639 +1,637 @@
-/*
- * Copyright (c) 1999 by The XFree86 Project, 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 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.
- *
- * Author: Paulo César Pereira de Andrade
- */
-
-/* $XFree86: xc/lib/Xaw/Tip.c,v 1.4 1999/07/11 08:49:16 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xos.h>
-#include <X11/Xaw/TipP.h>
-#include <X11/Xaw/XawInit.h>
-#include <X11/Xmu/Converters.h>
-#include "Private.h"
-
-#define TIP_EVENT_MASK (ButtonPressMask | \
- ButtonReleaseMask | \
- PointerMotionMask | \
- ButtonMotionMask | \
- KeyPressMask | \
- KeyReleaseMask | \
- EnterWindowMask | \
- LeaveWindowMask)
-
-/*
- * Types
- */
-typedef struct _XawTipInfo {
- Screen *screen;
- TipWidget tip;
- Widget widget;
- Bool mapped;
- struct _XawTipInfo *next;
-} XawTipInfo;
-
-/*
- * Class Methods
- */
-static void XawTipClassInitialize(void);
-static void XawTipInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawTipDestroy(Widget);
-static void XawTipExpose(Widget, XEvent*, Region);
-static void XawTipRealize(Widget, Mask*, XSetWindowAttributes*);
-static Boolean XawTipSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void TipEventHandler(Widget, XtPointer, XEvent*, Boolean*);
-static void TipShellEventHandler(Widget, XtPointer, XEvent*, Boolean*);
-static XawTipInfo *CreateTipInfo(Widget);
-static XawTipInfo *FindTipInfo(Widget);
-static void ResetTip(XawTipInfo*, Bool);
-static void TipTimeoutCallback(XtPointer, XtIntervalId*);
-static void TipLayout(XawTipInfo*);
-static void TipPosition(XawTipInfo*);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(TipRec, tip.field)
-static XtResource resources[] = {
- {
- XtNforeground,
- XtCForeground,
- XtRPixel,
- sizeof(Pixel),
- offset(foreground),
- XtRString,
- XtDefaultForeground,
- },
- {
- XtNfont,
- XtCFont,
- XtRFontStruct,
- sizeof(XFontStruct*),
- offset(font),
- XtRString,
- XtDefaultFont
- },
- {
- XtNfontSet,
- XtCFontSet,
- XtRFontSet,
- sizeof(XFontSet),
- offset(fontset),
- XtRString,
- XtDefaultFontSet
- },
- {
- XtNtopMargin,
- XtCVerticalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(top_margin),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNbottomMargin,
- XtCVerticalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(bottom_margin),
- XtRImmediate,
- (XtPointer)2
- },
- {
- XtNleftMargin,
- XtCHorizontalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(left_margin),
- XtRImmediate,
- (XtPointer)6
- },
- {
- XtNrightMargin,
- XtCHorizontalMargins,
- XtRDimension,
- sizeof(Dimension),
- offset(right_margin),
- XtRImmediate,
- (XtPointer)6
- },
- {
- XtNbackingStore,
- XtCBackingStore,
- XtRBackingStore,
- sizeof(int),
- offset(backing_store),
- XtRImmediate,
- (XtPointer)(Always + WhenMapped + NotUseful)
- },
- {
- XtNtimeout,
- XtCTimeout,
- XtRInt,
- sizeof(int),
- offset(timeout),
- XtRImmediate,
- (XtPointer)500
- },
- {
- XawNdisplayList,
- XawCDisplayList,
- XawRDisplayList,
- sizeof(XawDisplayList*),
- offset(display_list),
- XtRImmediate,
- NULL
- },
-};
-#undef offset
-
-TipClassRec tipClassRec = {
- /* core */
- {
- (WidgetClass)&widgetClassRec, /* superclass */
- "Tip", /* class_name */
- sizeof(TipRec), /* widget_size */
- XawTipClassInitialize, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawTipInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawTipRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- XawTipDestroy, /* destroy */
- NULL, /* resize */
- XawTipExpose, /* expose */
- XawTipSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* tip */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass tipWidgetClass = (WidgetClass)&tipClassRec;
-
-static XawTipInfo *first_tip;
-
-/*
- * Implementation
- */
-static void
-XawTipClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtAddConverter(XtRString, XtRBackingStore, XmuCvtStringToBackingStore,
- NULL, 0);
- XtSetTypeConverter(XtRBackingStore, XtRString, XmuCvtBackingStoreToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-/*ARGSUSED*/
-static void
-XawTipInitialize(Widget req, Widget w, ArgList args, Cardinal *num_args)
-{
- TipWidget tip = (TipWidget)w;
- XGCValues values;
-
- if (!tip->tip.font) XtError("Aborting: no font found\n");
- if (tip->tip.international && !tip->tip.fontset)
- XtError("Aborting: no fontset found\n");
-
- tip->tip.timer = 0;
-
- values.foreground = tip->tip.foreground;
- values.background = tip->core.background_pixel;
- values.font = tip->tip.font->fid;
- values.graphics_exposures = False;
-
- tip->tip.gc = XtAllocateGC(w, 0, GCForeground | GCBackground | GCFont |
- GCGraphicsExposures, &values, GCFont, 0);
-}
-
-static void
-XawTipDestroy(Widget w)
-{
- XawTipInfo *info = FindTipInfo(w);
- TipWidget tip = (TipWidget)w;
-
- if (tip->tip.timer)
- XtRemoveTimeOut(tip->tip.timer);
-
- XtReleaseGC(w, tip->tip.gc);
-
- XtRemoveEventHandler(XtParent(w), KeyPressMask, False, TipShellEventHandler,
- (XtPointer)NULL);
- if (info == first_tip)
- first_tip = first_tip->next;
- else {
- XawTipInfo *p = first_tip;
-
- while (p && p->next != info)
- p = p->next;
- if (p)
- p->next = info->next;
- }
- XtFree((char*)info);
-}
-
-static void
-XawTipRealize(Widget w, Mask *mask, XSetWindowAttributes *attr)
-{
- TipWidget tip = (TipWidget)w;
-
- if (tip->tip.backing_store == Always ||
- tip->tip.backing_store == NotUseful ||
- tip->tip.backing_store == WhenMapped) {
- *mask |= CWBackingStore;
- attr->backing_store = tip->tip.backing_store;
- }
- else
- *mask &= ~CWBackingStore;
- *mask |= CWOverrideRedirect;
- attr->override_redirect = True;
-
- XtWindow(w) = XCreateWindow(DisplayOfScreen(XtScreen(w)),
- RootWindowOfScreen(XtScreen(w)),
- XtX(w), XtY(w),
- XtWidth(w) ? XtWidth(w) : 1,
- XtHeight(w) ? XtHeight(w) : 1,
- XtBorderWidth(w),
- DefaultDepthOfScreen(XtScreen(w)),
- InputOutput,
- (Visual *)CopyFromParent,
- *mask, attr);
-}
-
-static void
-XawTipExpose(Widget w, XEvent *event, Region region)
-{
- TipWidget tip = (TipWidget)w;
- GC gc = tip->tip.gc;
- char *nl, *label = tip->tip.label;
- Position y = tip->tip.top_margin + tip->tip.font->max_bounds.ascent;
- int len;
-
- if (tip->tip.display_list)
- XawRunDisplayList(w, tip->tip.display_list, event, region);
-
- if (tip->tip.international == True) {
- Position ksy = tip->tip.top_margin;
- XFontSetExtents *ext = XExtentsOfFontSet(tip->tip.fontset);
-
- ksy += XawAbs(ext->max_ink_extent.y);
-
- while ((nl = index(label, '\n')) != NULL) {
- XmbDrawString(XtDisplay(w), XtWindow(w), tip->tip.fontset,
- gc, tip->tip.left_margin, ksy, label,
- (int)(nl - label));
- ksy += ext->max_ink_extent.height;
- label = nl + 1;
- }
- len = strlen(label);
- if (len)
- XmbDrawString(XtDisplay(w), XtWindow(w), tip->tip.fontset, gc,
- tip->tip.left_margin, ksy, label, len);
- }
- else {
- while ((nl = index(label, '\n')) != NULL) {
- if (tip->tip.encoding)
- XDrawString16(XtDisplay(w), XtWindow(w), gc,
- tip->tip.left_margin, y,
- (XChar2b*)label, (int)(nl - label) >> 1);
- else
- XDrawString(XtDisplay(w), XtWindow(w), gc,
- tip->tip.left_margin, y, label, (int)(nl - label));
- y += tip->tip.font->max_bounds.ascent +
- tip->tip.font->max_bounds.descent;
- label = nl + 1;
- }
- len = strlen(label);
- if (len) {
- if (tip->tip.encoding)
- XDrawString16(XtDisplay(w), XtWindow(w), gc,
- tip->tip.left_margin, y, (XChar2b*)label, len >> 1);
- else
- XDrawString(XtDisplay(w), XtWindow(w), gc,
- tip->tip.left_margin, y, label, len);
- }
- }
-}
-
-/*ARGSUSED*/
-static Boolean
-XawTipSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- TipWidget curtip = (TipWidget)current;
- TipWidget newtip = (TipWidget)cnew;
- Boolean redisplay = False;
-
- if (curtip->tip.font->fid != newtip->tip.font->fid ||
- curtip->tip.foreground != newtip->tip.foreground) {
- XGCValues values;
-
- values.foreground = newtip->tip.foreground;
- values.background = newtip->core.background_pixel;
- values.font = newtip->tip.font->fid;
- values.graphics_exposures = False;
- XtReleaseGC(cnew, curtip->tip.gc);
- newtip->tip.gc = XtAllocateGC(cnew, 0, GCForeground | GCBackground |
- GCFont | GCGraphicsExposures, &values,
- GCFont, 0);
- redisplay = True;
- }
- if (curtip->tip.display_list != newtip->tip.display_list)
- redisplay = True;
-
- return (redisplay);
-}
-
-static void
-TipLayout(XawTipInfo *info)
-{
- XFontStruct *fs = info->tip->tip.font;
- int width = 0, height;
- char *nl, *label = info->tip->tip.label;
-
- if (info->tip->tip.international == True) {
- XFontSet fset = info->tip->tip.fontset;
- XFontSetExtents *ext = XExtentsOfFontSet(fset);
-
- height = ext->max_ink_extent.height;
- if ((nl = index(label, '\n')) != NULL) {
- /*CONSTCOND*/
- while (True) {
- int w = XmbTextEscapement(fset, label, (int)(nl - label));
-
- if (w > width)
- width = w;
- if (*nl == '\0')
- break;
- label = nl + 1;
- if (*label)
- height += ext->max_ink_extent.height;
- if ((nl = index(label, '\n')) == NULL)
- nl = index(label, '\0');
- }
- }
- else
- width = XmbTextEscapement(fset, label, strlen(label));
- }
- else {
- height = fs->max_bounds.ascent + fs->max_bounds.descent;
- if ((nl = index(label, '\n')) != NULL) {
- /*CONSTCOND*/
- while (True) {
- int w = info->tip->tip.encoding ?
- XTextWidth16(fs, (XChar2b*)label, (int)(nl - label) >> 1) :
- XTextWidth(fs, label, (int)(nl - label));
- if (w > width)
- width = w;
- if (*nl == '\0')
- break;
- label = nl + 1;
- if (*label)
- height += fs->max_bounds.ascent + fs->max_bounds.descent;
- if ((nl = index(label, '\n')) == NULL)
- nl = index(label, '\0');
- }
- }
- else
- width = info->tip->tip.encoding ?
- XTextWidth16(fs, (XChar2b*)label, strlen(label) >> 1) :
- XTextWidth(fs, label, strlen(label));
- }
- XtWidth(info->tip) = width + info->tip->tip.left_margin +
- info->tip->tip.right_margin;
- XtHeight(info->tip) = height + info->tip->tip.top_margin +
- info->tip->tip.bottom_margin;
-}
-
-#define DEFAULT_TIP_Y_OFFSET 12
-static void
-TipPosition(XawTipInfo *info)
-{
- Window r, c;
- int rx, ry, wx, wy;
- unsigned mask;
- Position x, y;
-
- XQueryPointer(XtDisplay((Widget)info->tip), XtWindow((Widget)info->tip),
- &r, &c, &rx, &ry, &wx, &wy, &mask);
- x = rx - (XtWidth(info->tip) >> 1);
- y = ry + DEFAULT_TIP_Y_OFFSET;
-
- if (x >= 0) {
- int scr_width = WidthOfScreen(XtScreen(info->tip));
-
- if (x + XtWidth(info->tip) + XtBorderWidth(info->tip) > scr_width)
- x = scr_width - XtWidth(info->tip) - XtBorderWidth(info->tip);
- }
- if (x < 0)
- x = 0;
- if (y >= 0) {
- int scr_height = HeightOfScreen(XtScreen(info->tip));
-
- if (y + XtHeight(info->tip) + XtBorderWidth(info->tip) > scr_height)
- y -= XtHeight(info->tip) + XtBorderWidth(info->tip) +
- (DEFAULT_TIP_Y_OFFSET << 1);
- }
- if (y < 0)
- y = 0;
-
- XMoveResizeWindow(XtDisplay(info->tip), XtWindow(info->tip),
- (int)(XtX(info->tip) = x), (int)(XtY(info->tip) = y),
- (unsigned)XtWidth(info->tip), (unsigned)XtHeight(info->tip));
-}
-
-static XawTipInfo *
-CreateTipInfo(Widget w)
-{
- XawTipInfo *info = XtNew(XawTipInfo);
- Widget shell = w;
-
- info->screen = XtScreen(w);
-
- while (XtParent(shell))
- shell = XtParent(shell);
-
- info->tip = (TipWidget)XtCreateWidget("tip", tipWidgetClass, shell, NULL, 0);
- XtRealizeWidget((Widget)info->tip);
- info->widget = NULL;
- info->mapped = False;
- info->next = NULL;
- XtAddEventHandler(shell, KeyPressMask, False, TipShellEventHandler,
- (XtPointer)NULL);
-
- return (info);
-}
-
-static XawTipInfo *
-FindTipInfo(Widget w)
-{
- XawTipInfo *ptip, *tip = first_tip;
- Screen *screen = XtScreenOfObject(w);
-
- if (tip == NULL)
- return (first_tip = tip = CreateTipInfo(w));
-
- for (ptip = tip; tip; ptip = tip, tip = tip->next)
- if (tip->screen == screen)
- return (tip);
-
- return (ptip->next = CreateTipInfo(w));
-}
-
-static void
-ResetTip(XawTipInfo *info, Bool add_timeout)
-{
- if (info->tip->tip.timer) {
- XtRemoveTimeOut(info->tip->tip.timer);
- info->tip->tip.timer = 0;
- }
- if (info->mapped) {
- XtRemoveGrab(XtParent((Widget)info->tip));
- XUnmapWindow(XtDisplay((Widget)info->tip), XtWindow((Widget)info->tip));
- info->mapped = False;
- }
- if (add_timeout) {
- info->tip->tip.timer =
- XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)info->tip),
- info->tip->tip.timeout, TipTimeoutCallback,
- (XtPointer)info);
- }
-}
-
-static void
-TipTimeoutCallback(XtPointer closure, XtIntervalId *id)
-{
- XawTipInfo *info = (XawTipInfo*)closure;
- Arg args[3];
-
- info->tip->tip.label = NULL;
- info->tip->tip.international = False;
- info->tip->tip.encoding = 0;
- info->tip->tip.timer = 0;
- XtSetArg(args[0], XtNtip, &info->tip->tip.label);
- XtSetArg(args[1], XtNinternational, &info->tip->tip.international);
- XtSetArg(args[2], XtNencoding, &info->tip->tip.encoding);
- XtGetValues(info->widget, args, 3);
-
- if (info->tip->tip.label) {
- TipLayout(info);
- TipPosition(info);
- XMapRaised(XtDisplay((Widget)info->tip), XtWindow((Widget)info->tip));
- XtAddGrab(XtParent((Widget)info->tip), True, True);
- info->mapped = True;
- }
-}
-
-/*ARGSUSED*/
-static void
-TipShellEventHandler(Widget w, XtPointer client_data, XEvent *event,
- Boolean *continue_to_dispatch)
-{
- ResetTip(FindTipInfo(w), False);
-}
-
-/*ARGSUSED*/
-static void
-TipEventHandler(Widget w, XtPointer client_data, XEvent *event,
- Boolean *continue_to_dispatch)
-{
- XawTipInfo *info = FindTipInfo(w);
- Boolean add_timeout;
-
- if (info->widget != w) {
- ResetTip(info, False);
- info->widget = w;
- }
-
- switch (event->type) {
- case EnterNotify:
- add_timeout = True;
- break;
- case MotionNotify:
- /* If any button is pressed, timer is 0 */
- if (info->mapped)
- return;
- add_timeout = info->tip->tip.timer != 0;
- break;
- default:
- add_timeout = False;
- break;
- }
- ResetTip(info, add_timeout);
-}
-
-/*
- * Public routines
- */
-void
-XawTipEnable(Widget w)
-{
- XtAddEventHandler(w, TIP_EVENT_MASK, False, TipEventHandler,
- (XtPointer)NULL);
-}
-
-void
-XawTipDisable(Widget w)
-{
- XawTipInfo *info = FindTipInfo(w);
-
- XtRemoveEventHandler(w, TIP_EVENT_MASK, False, TipEventHandler,
- (XtPointer)NULL);
- if (info->widget == w)
- ResetTip(info, False);
-}
+/*
+ * Copyright (c) 1999 by The XFree86 Project, 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 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.
+ *
+ * Author: Paulo César Pereira de Andrade
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xaw/TipP.h>
+#include <X11/Xaw/XawInit.h>
+#include <X11/Xmu/Converters.h>
+#include "Private.h"
+
+#define TIP_EVENT_MASK (ButtonPressMask | \
+ ButtonReleaseMask | \
+ PointerMotionMask | \
+ ButtonMotionMask | \
+ KeyPressMask | \
+ KeyReleaseMask | \
+ EnterWindowMask | \
+ LeaveWindowMask)
+
+/*
+ * Types
+ */
+typedef struct _XawTipInfo {
+ Screen *screen;
+ TipWidget tip;
+ Widget widget;
+ Bool mapped;
+ struct _XawTipInfo *next;
+} XawTipInfo;
+
+/*
+ * Class Methods
+ */
+static void XawTipClassInitialize(void);
+static void XawTipInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawTipDestroy(Widget);
+static void XawTipExpose(Widget, XEvent*, Region);
+static void XawTipRealize(Widget, Mask*, XSetWindowAttributes*);
+static Boolean XawTipSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void TipEventHandler(Widget, XtPointer, XEvent*, Boolean*);
+static void TipShellEventHandler(Widget, XtPointer, XEvent*, Boolean*);
+static XawTipInfo *CreateTipInfo(Widget);
+static XawTipInfo *FindTipInfo(Widget);
+static void ResetTip(XawTipInfo*, Bool);
+static void TipTimeoutCallback(XtPointer, XtIntervalId*);
+static void TipLayout(XawTipInfo*);
+static void TipPosition(XawTipInfo*);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(TipRec, tip.field)
+static XtResource resources[] = {
+ {
+ XtNforeground,
+ XtCForeground,
+ XtRPixel,
+ sizeof(Pixel),
+ offset(foreground),
+ XtRString,
+ XtDefaultForeground,
+ },
+ {
+ XtNfont,
+ XtCFont,
+ XtRFontStruct,
+ sizeof(XFontStruct*),
+ offset(font),
+ XtRString,
+ XtDefaultFont
+ },
+ {
+ XtNfontSet,
+ XtCFontSet,
+ XtRFontSet,
+ sizeof(XFontSet),
+ offset(fontset),
+ XtRString,
+ XtDefaultFontSet
+ },
+ {
+ XtNtopMargin,
+ XtCVerticalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(top_margin),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNbottomMargin,
+ XtCVerticalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(bottom_margin),
+ XtRImmediate,
+ (XtPointer)2
+ },
+ {
+ XtNleftMargin,
+ XtCHorizontalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(left_margin),
+ XtRImmediate,
+ (XtPointer)6
+ },
+ {
+ XtNrightMargin,
+ XtCHorizontalMargins,
+ XtRDimension,
+ sizeof(Dimension),
+ offset(right_margin),
+ XtRImmediate,
+ (XtPointer)6
+ },
+ {
+ XtNbackingStore,
+ XtCBackingStore,
+ XtRBackingStore,
+ sizeof(int),
+ offset(backing_store),
+ XtRImmediate,
+ (XtPointer)(Always + WhenMapped + NotUseful)
+ },
+ {
+ XtNtimeout,
+ XtCTimeout,
+ XtRInt,
+ sizeof(int),
+ offset(timeout),
+ XtRImmediate,
+ (XtPointer)500
+ },
+ {
+ XawNdisplayList,
+ XawCDisplayList,
+ XawRDisplayList,
+ sizeof(XawDisplayList*),
+ offset(display_list),
+ XtRImmediate,
+ NULL
+ },
+};
+#undef offset
+
+TipClassRec tipClassRec = {
+ /* core */
+ {
+ (WidgetClass)&widgetClassRec, /* superclass */
+ "Tip", /* class_name */
+ sizeof(TipRec), /* widget_size */
+ XawTipClassInitialize, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawTipInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawTipRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ XawTipDestroy, /* destroy */
+ NULL, /* resize */
+ XawTipExpose, /* expose */
+ XawTipSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* tip */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass tipWidgetClass = (WidgetClass)&tipClassRec;
+
+static XawTipInfo *first_tip;
+
+/*
+ * Implementation
+ */
+static void
+XawTipClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtAddConverter(XtRString, XtRBackingStore, XmuCvtStringToBackingStore,
+ NULL, 0);
+ XtSetTypeConverter(XtRBackingStore, XtRString, XmuCvtBackingStoreToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+/*ARGSUSED*/
+static void
+XawTipInitialize(Widget req, Widget w, ArgList args, Cardinal *num_args)
+{
+ TipWidget tip = (TipWidget)w;
+ XGCValues values;
+
+ if (!tip->tip.font) XtError("Aborting: no font found\n");
+ if (tip->tip.international && !tip->tip.fontset)
+ XtError("Aborting: no fontset found\n");
+
+ tip->tip.timer = 0;
+
+ values.foreground = tip->tip.foreground;
+ values.background = tip->core.background_pixel;
+ values.font = tip->tip.font->fid;
+ values.graphics_exposures = False;
+
+ tip->tip.gc = XtAllocateGC(w, 0, GCForeground | GCBackground | GCFont |
+ GCGraphicsExposures, &values, GCFont, 0);
+}
+
+static void
+XawTipDestroy(Widget w)
+{
+ XawTipInfo *info = FindTipInfo(w);
+ TipWidget tip = (TipWidget)w;
+
+ if (tip->tip.timer)
+ XtRemoveTimeOut(tip->tip.timer);
+
+ XtReleaseGC(w, tip->tip.gc);
+
+ XtRemoveEventHandler(XtParent(w), KeyPressMask, False, TipShellEventHandler,
+ (XtPointer)NULL);
+ if (info == first_tip)
+ first_tip = first_tip->next;
+ else {
+ XawTipInfo *p = first_tip;
+
+ while (p && p->next != info)
+ p = p->next;
+ if (p)
+ p->next = info->next;
+ }
+ XtFree((char*)info);
+}
+
+static void
+XawTipRealize(Widget w, Mask *mask, XSetWindowAttributes *attr)
+{
+ TipWidget tip = (TipWidget)w;
+
+ if (tip->tip.backing_store == Always ||
+ tip->tip.backing_store == NotUseful ||
+ tip->tip.backing_store == WhenMapped) {
+ *mask |= CWBackingStore;
+ attr->backing_store = tip->tip.backing_store;
+ }
+ else
+ *mask &= ~CWBackingStore;
+ *mask |= CWOverrideRedirect;
+ attr->override_redirect = True;
+
+ XtWindow(w) = XCreateWindow(DisplayOfScreen(XtScreen(w)),
+ RootWindowOfScreen(XtScreen(w)),
+ XtX(w), XtY(w),
+ XtWidth(w) ? XtWidth(w) : 1,
+ XtHeight(w) ? XtHeight(w) : 1,
+ XtBorderWidth(w),
+ DefaultDepthOfScreen(XtScreen(w)),
+ InputOutput,
+ (Visual *)CopyFromParent,
+ *mask, attr);
+}
+
+static void
+XawTipExpose(Widget w, XEvent *event, Region region)
+{
+ TipWidget tip = (TipWidget)w;
+ GC gc = tip->tip.gc;
+ char *nl, *label = tip->tip.label;
+ Position y = tip->tip.top_margin + tip->tip.font->max_bounds.ascent;
+ int len;
+
+ if (tip->tip.display_list)
+ XawRunDisplayList(w, tip->tip.display_list, event, region);
+
+ if (tip->tip.international == True) {
+ Position ksy = tip->tip.top_margin;
+ XFontSetExtents *ext = XExtentsOfFontSet(tip->tip.fontset);
+
+ ksy += XawAbs(ext->max_ink_extent.y);
+
+ while ((nl = index(label, '\n')) != NULL) {
+ XmbDrawString(XtDisplay(w), XtWindow(w), tip->tip.fontset,
+ gc, tip->tip.left_margin, ksy, label,
+ (int)(nl - label));
+ ksy += ext->max_ink_extent.height;
+ label = nl + 1;
+ }
+ len = strlen(label);
+ if (len)
+ XmbDrawString(XtDisplay(w), XtWindow(w), tip->tip.fontset, gc,
+ tip->tip.left_margin, ksy, label, len);
+ }
+ else {
+ while ((nl = index(label, '\n')) != NULL) {
+ if (tip->tip.encoding)
+ XDrawString16(XtDisplay(w), XtWindow(w), gc,
+ tip->tip.left_margin, y,
+ (XChar2b*)label, (int)(nl - label) >> 1);
+ else
+ XDrawString(XtDisplay(w), XtWindow(w), gc,
+ tip->tip.left_margin, y, label, (int)(nl - label));
+ y += tip->tip.font->max_bounds.ascent +
+ tip->tip.font->max_bounds.descent;
+ label = nl + 1;
+ }
+ len = strlen(label);
+ if (len) {
+ if (tip->tip.encoding)
+ XDrawString16(XtDisplay(w), XtWindow(w), gc,
+ tip->tip.left_margin, y, (XChar2b*)label, len >> 1);
+ else
+ XDrawString(XtDisplay(w), XtWindow(w), gc,
+ tip->tip.left_margin, y, label, len);
+ }
+ }
+}
+
+/*ARGSUSED*/
+static Boolean
+XawTipSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ TipWidget curtip = (TipWidget)current;
+ TipWidget newtip = (TipWidget)cnew;
+ Boolean redisplay = False;
+
+ if (curtip->tip.font->fid != newtip->tip.font->fid ||
+ curtip->tip.foreground != newtip->tip.foreground) {
+ XGCValues values;
+
+ values.foreground = newtip->tip.foreground;
+ values.background = newtip->core.background_pixel;
+ values.font = newtip->tip.font->fid;
+ values.graphics_exposures = False;
+ XtReleaseGC(cnew, curtip->tip.gc);
+ newtip->tip.gc = XtAllocateGC(cnew, 0, GCForeground | GCBackground |
+ GCFont | GCGraphicsExposures, &values,
+ GCFont, 0);
+ redisplay = True;
+ }
+ if (curtip->tip.display_list != newtip->tip.display_list)
+ redisplay = True;
+
+ return (redisplay);
+}
+
+static void
+TipLayout(XawTipInfo *info)
+{
+ XFontStruct *fs = info->tip->tip.font;
+ int width = 0, height;
+ char *nl, *label = info->tip->tip.label;
+
+ if (info->tip->tip.international == True) {
+ XFontSet fset = info->tip->tip.fontset;
+ XFontSetExtents *ext = XExtentsOfFontSet(fset);
+
+ height = ext->max_ink_extent.height;
+ if ((nl = index(label, '\n')) != NULL) {
+ /*CONSTCOND*/
+ while (True) {
+ int w = XmbTextEscapement(fset, label, (int)(nl - label));
+
+ if (w > width)
+ width = w;
+ if (*nl == '\0')
+ break;
+ label = nl + 1;
+ if (*label)
+ height += ext->max_ink_extent.height;
+ if ((nl = index(label, '\n')) == NULL)
+ nl = index(label, '\0');
+ }
+ }
+ else
+ width = XmbTextEscapement(fset, label, strlen(label));
+ }
+ else {
+ height = fs->max_bounds.ascent + fs->max_bounds.descent;
+ if ((nl = index(label, '\n')) != NULL) {
+ /*CONSTCOND*/
+ while (True) {
+ int w = info->tip->tip.encoding ?
+ XTextWidth16(fs, (XChar2b*)label, (int)(nl - label) >> 1) :
+ XTextWidth(fs, label, (int)(nl - label));
+ if (w > width)
+ width = w;
+ if (*nl == '\0')
+ break;
+ label = nl + 1;
+ if (*label)
+ height += fs->max_bounds.ascent + fs->max_bounds.descent;
+ if ((nl = index(label, '\n')) == NULL)
+ nl = index(label, '\0');
+ }
+ }
+ else
+ width = info->tip->tip.encoding ?
+ XTextWidth16(fs, (XChar2b*)label, strlen(label) >> 1) :
+ XTextWidth(fs, label, strlen(label));
+ }
+ XtWidth(info->tip) = width + info->tip->tip.left_margin +
+ info->tip->tip.right_margin;
+ XtHeight(info->tip) = height + info->tip->tip.top_margin +
+ info->tip->tip.bottom_margin;
+}
+
+#define DEFAULT_TIP_Y_OFFSET 12
+static void
+TipPosition(XawTipInfo *info)
+{
+ Window r, c;
+ int rx, ry, wx, wy;
+ unsigned mask;
+ Position x, y;
+
+ XQueryPointer(XtDisplay((Widget)info->tip), XtWindow((Widget)info->tip),
+ &r, &c, &rx, &ry, &wx, &wy, &mask);
+ x = rx - (XtWidth(info->tip) >> 1);
+ y = ry + DEFAULT_TIP_Y_OFFSET;
+
+ if (x >= 0) {
+ int scr_width = WidthOfScreen(XtScreen(info->tip));
+
+ if (x + XtWidth(info->tip) + XtBorderWidth(info->tip) > scr_width)
+ x = scr_width - XtWidth(info->tip) - XtBorderWidth(info->tip);
+ }
+ if (x < 0)
+ x = 0;
+ if (y >= 0) {
+ int scr_height = HeightOfScreen(XtScreen(info->tip));
+
+ if (y + XtHeight(info->tip) + XtBorderWidth(info->tip) > scr_height)
+ y -= XtHeight(info->tip) + XtBorderWidth(info->tip) +
+ (DEFAULT_TIP_Y_OFFSET << 1);
+ }
+ if (y < 0)
+ y = 0;
+
+ XMoveResizeWindow(XtDisplay(info->tip), XtWindow(info->tip),
+ (int)(XtX(info->tip) = x), (int)(XtY(info->tip) = y),
+ (unsigned)XtWidth(info->tip), (unsigned)XtHeight(info->tip));
+}
+
+static XawTipInfo *
+CreateTipInfo(Widget w)
+{
+ XawTipInfo *info = XtNew(XawTipInfo);
+ Widget shell = w;
+
+ info->screen = XtScreen(w);
+
+ while (XtParent(shell))
+ shell = XtParent(shell);
+
+ info->tip = (TipWidget)XtCreateWidget("tip", tipWidgetClass, shell, NULL, 0);
+ XtRealizeWidget((Widget)info->tip);
+ info->widget = NULL;
+ info->mapped = False;
+ info->next = NULL;
+ XtAddEventHandler(shell, KeyPressMask, False, TipShellEventHandler,
+ (XtPointer)NULL);
+
+ return (info);
+}
+
+static XawTipInfo *
+FindTipInfo(Widget w)
+{
+ XawTipInfo *ptip, *tip = first_tip;
+ Screen *screen = XtScreenOfObject(w);
+
+ if (tip == NULL)
+ return (first_tip = tip = CreateTipInfo(w));
+
+ for (ptip = tip; tip; ptip = tip, tip = tip->next)
+ if (tip->screen == screen)
+ return (tip);
+
+ return (ptip->next = CreateTipInfo(w));
+}
+
+static void
+ResetTip(XawTipInfo *info, Bool add_timeout)
+{
+ if (info->tip->tip.timer) {
+ XtRemoveTimeOut(info->tip->tip.timer);
+ info->tip->tip.timer = 0;
+ }
+ if (info->mapped) {
+ XtRemoveGrab(XtParent((Widget)info->tip));
+ XUnmapWindow(XtDisplay((Widget)info->tip), XtWindow((Widget)info->tip));
+ info->mapped = False;
+ }
+ if (add_timeout) {
+ info->tip->tip.timer =
+ XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)info->tip),
+ info->tip->tip.timeout, TipTimeoutCallback,
+ (XtPointer)info);
+ }
+}
+
+static void
+TipTimeoutCallback(XtPointer closure, XtIntervalId *id)
+{
+ XawTipInfo *info = (XawTipInfo*)closure;
+ Arg args[3];
+
+ info->tip->tip.label = NULL;
+ info->tip->tip.international = False;
+ info->tip->tip.encoding = 0;
+ info->tip->tip.timer = 0;
+ XtSetArg(args[0], XtNtip, &info->tip->tip.label);
+ XtSetArg(args[1], XtNinternational, &info->tip->tip.international);
+ XtSetArg(args[2], XtNencoding, &info->tip->tip.encoding);
+ XtGetValues(info->widget, args, 3);
+
+ if (info->tip->tip.label) {
+ TipLayout(info);
+ TipPosition(info);
+ XMapRaised(XtDisplay((Widget)info->tip), XtWindow((Widget)info->tip));
+ XtAddGrab(XtParent((Widget)info->tip), True, True);
+ info->mapped = True;
+ }
+}
+
+/*ARGSUSED*/
+static void
+TipShellEventHandler(Widget w, XtPointer client_data, XEvent *event,
+ Boolean *continue_to_dispatch)
+{
+ ResetTip(FindTipInfo(w), False);
+}
+
+/*ARGSUSED*/
+static void
+TipEventHandler(Widget w, XtPointer client_data, XEvent *event,
+ Boolean *continue_to_dispatch)
+{
+ XawTipInfo *info = FindTipInfo(w);
+ Boolean add_timeout;
+
+ if (info->widget != w) {
+ ResetTip(info, False);
+ info->widget = w;
+ }
+
+ switch (event->type) {
+ case EnterNotify:
+ add_timeout = True;
+ break;
+ case MotionNotify:
+ /* If any button is pressed, timer is 0 */
+ if (info->mapped)
+ return;
+ add_timeout = info->tip->tip.timer != 0;
+ break;
+ default:
+ add_timeout = False;
+ break;
+ }
+ ResetTip(info, add_timeout);
+}
+
+/*
+ * Public routines
+ */
+void
+XawTipEnable(Widget w)
+{
+ XtAddEventHandler(w, TIP_EVENT_MASK, False, TipEventHandler,
+ (XtPointer)NULL);
+}
+
+void
+XawTipDisable(Widget w)
+{
+ XawTipInfo *info = FindTipInfo(w);
+
+ XtRemoveEventHandler(w, TIP_EVENT_MASK, False, TipEventHandler,
+ (XtPointer)NULL);
+ if (info->widget == w)
+ ResetTip(info, False);
+}
diff --git a/libXaw/src/Toggle.c b/libXaw/src/Toggle.c
index dfbcf7677..cd288c5a2 100644
--- a/libXaw/src/Toggle.c
+++ b/libXaw/src/Toggle.c
@@ -1,632 +1,629 @@
-/* $Xorg: Toggle.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/*
-
-Copyright 1989, 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/Toggle.c,v 1.8 2001/08/23 00:03:20 dawes Exp $ */
-
-/*
- * Author: Chris D. Peterson
- * MIT X Consortium
- * kit@expo.lcs.mit.edu
- *
- * Date: January 12, 1989
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xaw/ToggleP.h>
-#include <X11/Xaw/XawInit.h>
-
-/*
- * Class Methods
- */
-static void XawToggleClassInitialize(void);
-static void XawToggleInitialize(Widget, Widget, ArgList, Cardinal*);
-static Boolean XawToggleSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void AddToRadioGroup(RadioGroup*, Widget);
-static void CreateRadioGroup(Widget, Widget);
-static RadioGroup *GetRadioGroup(Widget);
-static void RemoveFromRadioGroup(Widget);
-static void TurnOffRadioSiblings(Widget);
-static void XawToggleDestroy(Widget, XtPointer, XtPointer);
-
-/*
- * Actions
- */
-static void Notify(Widget, XEvent*, String*, Cardinal*);
-static void Toggle(Widget, XEvent*, String*, Cardinal*);
-static void ToggleSet(Widget, XEvent*, String*, Cardinal*);
-
-/*
- * Initialization
- */
-/*
- * The order of toggle and notify are important, as the state has
- * to be set when we call the notify proc
- */
-static char defaultTranslations[] =
-"<Enter>:" "highlight(Always)\n"
-"<Leave>:" "unhighlight()\n"
-"<Btn1Down>,<Btn1Up>:" "toggle() notify()\n"
-;
-
-#define offset(field) XtOffsetOf(ToggleRec, field)
-static XtResource resources[] = {
- {
- XtNstate,
- XtCState,
- XtRBoolean,
- sizeof(Boolean),
- offset(command.set),
- XtRString,
- "off"
- },
- {
- XtNradioGroup,
- XtCWidget,
- XtRWidget,
- sizeof(Widget),
- offset(toggle.widget),
- XtRWidget,
- NULL
- },
- {
- XtNradioData,
- XtCRadioData,
- XtRPointer,
- sizeof(XtPointer),
- offset(toggle.radio_data),
- XtRPointer,
- NULL
- },
-};
-#undef offset
-
-static XtActionsRec actionsList[] = {
- {"toggle", Toggle},
- {"notify", Notify},
- {"set", ToggleSet},
-};
-
-#define Superclass ((CommandWidgetClass)&commandClassRec)
-ToggleClassRec toggleClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Toggle", /* class_name */
- sizeof(ToggleRec), /* size */
- XawToggleClassInitialize, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- XawToggleInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* resource_count */
- NULLQUARK, /* xrm_class */
- False, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XtInheritResize, /* resize */
- XtInheritExpose, /* expose */
- XawToggleSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* simple */
- {
- XtInheritChangeSensitive, /* change_sensitive */
- },
- /* label */
- {
- NULL, /* extension */
- },
- /* command */
- {
- NULL, /* extension */
- },
- /* toggle */
- {
- NULL, /* Set */
- NULL, /* Unset */
- NULL, /* extension */
- }
-};
-
-WidgetClass toggleWidgetClass = (WidgetClass)&toggleClassRec;
-
-/*
- * Impelementation
- */
-static void
-XawToggleClassInitialize(void)
-{
- XtActionList actions;
- Cardinal num_actions;
- Cardinal i;
- ToggleWidgetClass cclass = (ToggleWidgetClass)toggleWidgetClass;
- static XtConvertArgRec parentCvtArgs[] = {
- {XtBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.parent),
- sizeof(Widget)}
- };
-
- XawInitializeWidgetSet();
- XtSetTypeConverter(XtRString, XtRWidget, XmuNewCvtStringToWidget,
- parentCvtArgs, XtNumber(parentCvtArgs),
- XtCacheNone, NULL);
- XtSetTypeConverter(XtRWidget, XtRString, XmuCvtWidgetToString,
- NULL, 0, XtCacheNone, NULL);
-
- /*
- * Find the set and unset actions in the command widget's action table
- */
- XtGetActionList(commandWidgetClass, &actions, &num_actions);
-
- for (i = 0 ; i < num_actions ; i++) {
- if (streq(actions[i].string, "set"))
- cclass->toggle_class.Set = actions[i].proc;
- if (streq(actions[i].string, "unset"))
- cclass->toggle_class.Unset = actions[i].proc;
-
- if (cclass->toggle_class.Set != NULL &&
- cclass->toggle_class.Unset != NULL) {
- XtFree((char *)actions);
- return;
- }
- }
-
- /* We should never get here */
- XtError("Aborting, due to errors resolving bindings in the Toggle widget.");
-}
-
-/*ARGSUSED*/
-static void
-XawToggleInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- ToggleWidget tw = (ToggleWidget)cnew;
- ToggleWidget tw_req = (ToggleWidget)request;
-
- tw->toggle.radio_group = NULL;
-
- if (tw->toggle.radio_data == NULL)
- tw->toggle.radio_data = (XtPointer)cnew->core.name;
-
- if (tw->toggle.widget != NULL) {
- if (GetRadioGroup(tw->toggle.widget) == NULL)
- CreateRadioGroup(cnew, tw->toggle.widget);
- else
- AddToRadioGroup(GetRadioGroup(tw->toggle.widget), cnew);
- }
- XtAddCallback(cnew, XtNdestroyCallback, XawToggleDestroy, NULL);
-
- /*
- * Command widget assumes that the widget is unset, so we only
- * have to handle the case where it needs to be set
- *
- * If this widget is in a radio group then it may cause another
- * widget to be unset, thus calling the notify proceedure
- *
- * I want to set the toggle if the user set the state to "On" in
- * the resource group, reguardless of what my ancestors did
- */
- if (tw_req->command.set)
- ToggleSet(cnew, NULL, NULL, NULL);
-}
-
-/*ARGSUSED*/
-static void
-ToggleSet(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- ToggleWidgetClass cclass = (ToggleWidgetClass)w->core.widget_class;
-
- TurnOffRadioSiblings(w);
- cclass->toggle_class.Set(w, event, NULL, NULL);
-}
-
-static void
-Toggle(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- ToggleWidget tw = (ToggleWidget)w;
- ToggleWidgetClass cclass = (ToggleWidgetClass)w->core.widget_class;
-
- if (tw->command.set)
- cclass->toggle_class.Unset(w, event, NULL, NULL);
- else
- ToggleSet(w, event, params, num_params);
-}
-
-/*ARGSUSED*/
-static void
-Notify(Widget w, XEvent *event, String *params, Cardinal *num_params)
-{
- ToggleWidget tw = (ToggleWidget)w;
- long antilint = tw->command.set;
-
- XtCallCallbacks(w, XtNcallback, (XtPointer)antilint);
-}
-
-/*ARGSUSED*/
-static Boolean
-XawToggleSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- ToggleWidget oldtw = (ToggleWidget)current;
- ToggleWidget tw = (ToggleWidget)cnew;
- ToggleWidget rtw = (ToggleWidget)request;
-
- if (oldtw->toggle.widget != tw->toggle.widget)
- XawToggleChangeRadioGroup(cnew, tw->toggle.widget);
-
- if (!tw->core.sensitive && oldtw->core.sensitive && rtw->command.set)
- tw->command.set = True;
-
- if (oldtw->command.set != tw->command.set) {
- tw->command.set = oldtw->command.set;
- Toggle(cnew, NULL, NULL, NULL);
- }
-
- return (False);
-}
-
-/*
- * Function:
- * XawToggleDestroy
- *
- * Parameters:
- * w - toggle widget that is being destroyed
- * temp1 - not used
- * temp2 - ""
- *
- * Description:
- * Destroy Callback for toggle widget.
- */
-/*ARGSUSED*/
-static void
-XawToggleDestroy(Widget w, XtPointer temp1, XtPointer temp2)
-{
- RemoveFromRadioGroup(w);
-}
-
-/*
- * Function:
- * GetRadioGroup
- *
- * Parameters:
- * w - toggle widget who's radio group we are getting
- *
- * Description:
- * Gets the radio group associated with a give toggle widget.
- *
- * Returns:
- * The radio group associated with this toggle group
- */
-static RadioGroup *
-GetRadioGroup(Widget w)
-{
- ToggleWidget tw = (ToggleWidget)w;
-
- if (tw == NULL)
- return (NULL);
-
- return (tw->toggle.radio_group);
-}
-
-/*
- * Function:
- * CreateRadioGroup
- *
- * Parameters:
- * w1 - toggle widgets to add to the radio group
- * w2 - ""
- *
- * Description:
- * Creates a radio group. give two widgets.
- *
- * Note:
- * A pointer to the group is added to each widget's radio_group field.
- */
-static void
-CreateRadioGroup(Widget w1, Widget w2)
-{
- ToggleWidget tw1 = (ToggleWidget)w1;
- ToggleWidget tw2 = (ToggleWidget) w2;
-
- if (tw1->toggle.radio_group != NULL || tw2->toggle.radio_group != NULL)
- XtAppWarning(XtWidgetToApplicationContext(w1),
- "Toggle Widget Error - Attempting to create a "
- "new toggle group, when one already exists.");
-
- AddToRadioGroup(NULL, w1);
- AddToRadioGroup(GetRadioGroup(w1), w2);
-}
-
-/*
- * Function:
- * AddToRadioGroup
- *
- * Parameters:
- * group - element of the radio group the we are adding to
- * w - new toggle widget to add to the group
- *
- * Description:
- * Adds a toggle to the radio group.
- */
-static void
-AddToRadioGroup(RadioGroup *group, Widget w)
-{
- ToggleWidget tw = (ToggleWidget)w;
- RadioGroup *local;
-
- local = (RadioGroup *)XtMalloc(sizeof(RadioGroup));
- local->widget = w;
- tw->toggle.radio_group = local;
-
- if (group == NULL) { /* Creating new group */
- group = local;
- group->next = NULL;
- group->prev = NULL;
- return;
- }
- local->prev = group; /* Adding to previous group */
- if ((local->next = group->next) != NULL)
- local->next->prev = local;
- group->next = local;
-}
-
-/*
- * Function:
- * TurnOffRadioSiblings
- *
- * Parameters:
- * widget - toggle widget
- *
- * Description:
- * Deactivates all radio siblings.
- */
-static void
-TurnOffRadioSiblings(Widget w)
-{
- RadioGroup *group;
- ToggleWidgetClass cclass = (ToggleWidgetClass)w->core.widget_class;
-
- if ((group = GetRadioGroup(w)) == NULL) /* Punt if there is no group */
- return;
-
- /* Go to the top of the group */
- for (; group->prev != NULL ; group = group->prev)
- ;
-
- while (group != NULL) {
- ToggleWidget local_tog = (ToggleWidget)group->widget;
-
- if (local_tog->command.set) {
- cclass->toggle_class.Unset(group->widget, NULL, NULL, NULL);
- Notify(group->widget, NULL, NULL, NULL);
- }
- group = group->next;
- }
-}
-
-/*
- * Function:
- * RemoveFromRadioGroup
- *
- * Parameters:
- * w - toggle widget to remove
- *
- * Description:
- * Removes a toggle from a RadioGroup.
- */
-static void
-RemoveFromRadioGroup(Widget w)
-{
- RadioGroup *group = GetRadioGroup(w);
- if (group != NULL) {
- if (group->prev != NULL)
- (group->prev)->next = group->next;
- if (group->next != NULL)
- (group->next)->prev = group->prev;
- XtFree((char *)group);
- }
-}
-
-/*
- * Function:
- * XawToggleChangeRadioGroup
- *
- * Parameters:
- * w - toggle widget to change groups
- * radio_group - any widget in the new group
- *
- * Description:
- * Allows a toggle widget to change radio groups.
- */
-void
-XawToggleChangeRadioGroup(Widget w, Widget radio_group)
-{
- ToggleWidget tw = (ToggleWidget)w;
- RadioGroup *group;
-
- RemoveFromRadioGroup(w);
-
- /*
- * If the toggle that we are about to add is set then we will
- * unset all toggles in the new radio group
- */
-
- if (tw->command.set && radio_group != NULL)
- XawToggleUnsetCurrent(radio_group);
-
- if (radio_group != NULL) {
- if ((group = GetRadioGroup(radio_group)) == NULL)
- CreateRadioGroup(w, radio_group);
- else
- AddToRadioGroup(group, w);
- }
-}
-
-/*
- * Function:
- * XawToggleGetCurrent
- *
- * Parameters:
- * w - any toggle widget in the toggle group
- *
- * Description:
- * Returns the RadioData associated with the toggle
- * widget that is currently active in a toggle group.
- *
- * Returns:
- * The XtNradioData associated with the toggle widget
- */
-XtPointer
-XawToggleGetCurrent(Widget w)
-{
- RadioGroup *group;
-
- if ((group = GetRadioGroup(w)) == NULL)
- return (NULL);
-
- for (; group->prev != NULL ; group = group->prev)
- ;
-
- while (group != NULL) {
- ToggleWidget local_tog = (ToggleWidget)group->widget;
-
- if (local_tog->command.set)
- return (local_tog->toggle.radio_data);
- group = group->next;
- }
-
- return (NULL);
-}
-
-/*
- * Function:
- * XawToggleSetCurrent
- *
- * Parameters:
- * radio_group - any toggle widget in the toggle group
- * radio_data - radio data of the toggle widget to set
- *
- * Description:
- * Sets the Toggle widget associated with the radio_data specified.
- */
-void
-XawToggleSetCurrent(Widget radio_group, XtPointer radio_data)
-{
- RadioGroup *group;
- ToggleWidget local_tog;
-
- /* Special case of no radio group */
-
- if ((group = GetRadioGroup(radio_group)) == NULL) {
- local_tog = (ToggleWidget)radio_group;
-
- if (local_tog->toggle.radio_data == radio_data &&
- !local_tog->command.set) {
- ToggleSet(radio_group, NULL, NULL, NULL);
- Notify(radio_group, NULL, NULL, NULL);
- }
- return;
- }
-
- /*
- * find top of radio_roup
- */
- for (; group->prev != NULL ; group = group->prev)
- ;
-
- /*
- * search for matching radio data
- */
- while (group != NULL) {
- local_tog = (ToggleWidget)group->widget;
-
- if (local_tog->toggle.radio_data == radio_data) {
- if (!local_tog->command.set) { /* if not already set */
- ToggleSet(group->widget, NULL, NULL, NULL);
- Notify(group->widget, NULL, NULL, NULL);
- }
- return; /* found it, done */
- }
- group = group->next;
- }
-}
-
-/*
- * Function:
- * XawToggleUnsetCurrent
- *
- * Parameters:
- * radio_group - any toggle widget in the toggle group
- *
- * Description:
- * Unsets all Toggles in the radio_group specified.
- */
-void
-XawToggleUnsetCurrent(Widget radio_group)
-{
- ToggleWidgetClass cclass;
- ToggleWidget local_tog = (ToggleWidget)radio_group;
-
- /* Special Case no radio group */
-
- if (local_tog->command.set) {
- cclass = (ToggleWidgetClass)local_tog->core.widget_class;
- cclass->toggle_class.Unset(radio_group, NULL, NULL, NULL);
- Notify(radio_group, NULL, NULL, NULL);
- }
- if (GetRadioGroup(radio_group) == NULL)
- return;
-
- TurnOffRadioSiblings(radio_group);
-}
+/*
+
+Copyright 1989, 1994, 1998 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.
+
+*/
+
+/*
+ * Author: Chris D. Peterson
+ * MIT X Consortium
+ * kit@expo.lcs.mit.edu
+ *
+ * Date: January 12, 1989
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Converters.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xaw/ToggleP.h>
+#include <X11/Xaw/XawInit.h>
+
+/*
+ * Class Methods
+ */
+static void XawToggleClassInitialize(void);
+static void XawToggleInitialize(Widget, Widget, ArgList, Cardinal*);
+static Boolean XawToggleSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void AddToRadioGroup(RadioGroup*, Widget);
+static void CreateRadioGroup(Widget, Widget);
+static RadioGroup *GetRadioGroup(Widget);
+static void RemoveFromRadioGroup(Widget);
+static void TurnOffRadioSiblings(Widget);
+static void XawToggleDestroy(Widget, XtPointer, XtPointer);
+
+/*
+ * Actions
+ */
+static void Notify(Widget, XEvent*, String*, Cardinal*);
+static void Toggle(Widget, XEvent*, String*, Cardinal*);
+static void ToggleSet(Widget, XEvent*, String*, Cardinal*);
+
+/*
+ * Initialization
+ */
+/*
+ * The order of toggle and notify are important, as the state has
+ * to be set when we call the notify proc
+ */
+static char defaultTranslations[] =
+"<Enter>:" "highlight(Always)\n"
+"<Leave>:" "unhighlight()\n"
+"<Btn1Down>,<Btn1Up>:" "toggle() notify()\n"
+;
+
+#define offset(field) XtOffsetOf(ToggleRec, field)
+static XtResource resources[] = {
+ {
+ XtNstate,
+ XtCState,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(command.set),
+ XtRString,
+ "off"
+ },
+ {
+ XtNradioGroup,
+ XtCWidget,
+ XtRWidget,
+ sizeof(Widget),
+ offset(toggle.widget),
+ XtRWidget,
+ NULL
+ },
+ {
+ XtNradioData,
+ XtCRadioData,
+ XtRPointer,
+ sizeof(XtPointer),
+ offset(toggle.radio_data),
+ XtRPointer,
+ NULL
+ },
+};
+#undef offset
+
+static XtActionsRec actionsList[] = {
+ {"toggle", Toggle},
+ {"notify", Notify},
+ {"set", ToggleSet},
+};
+
+#define Superclass ((CommandWidgetClass)&commandClassRec)
+ToggleClassRec toggleClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Toggle", /* class_name */
+ sizeof(ToggleRec), /* size */
+ XawToggleClassInitialize, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ XawToggleInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ actionsList, /* actions */
+ XtNumber(actionsList), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* resource_count */
+ NULLQUARK, /* xrm_class */
+ False, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XtInheritResize, /* resize */
+ XtInheritExpose, /* expose */
+ XawToggleSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ defaultTranslations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* simple */
+ {
+ XtInheritChangeSensitive, /* change_sensitive */
+ },
+ /* label */
+ {
+ NULL, /* extension */
+ },
+ /* command */
+ {
+ NULL, /* extension */
+ },
+ /* toggle */
+ {
+ NULL, /* Set */
+ NULL, /* Unset */
+ NULL, /* extension */
+ }
+};
+
+WidgetClass toggleWidgetClass = (WidgetClass)&toggleClassRec;
+
+/*
+ * Impelementation
+ */
+static void
+XawToggleClassInitialize(void)
+{
+ XtActionList actions;
+ Cardinal num_actions;
+ Cardinal i;
+ ToggleWidgetClass cclass = (ToggleWidgetClass)toggleWidgetClass;
+ static XtConvertArgRec parentCvtArgs[] = {
+ {XtBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.parent),
+ sizeof(Widget)}
+ };
+
+ XawInitializeWidgetSet();
+ XtSetTypeConverter(XtRString, XtRWidget, XmuNewCvtStringToWidget,
+ parentCvtArgs, XtNumber(parentCvtArgs),
+ XtCacheNone, NULL);
+ XtSetTypeConverter(XtRWidget, XtRString, XmuCvtWidgetToString,
+ NULL, 0, XtCacheNone, NULL);
+
+ /*
+ * Find the set and unset actions in the command widget's action table
+ */
+ XtGetActionList(commandWidgetClass, &actions, &num_actions);
+
+ for (i = 0 ; i < num_actions ; i++) {
+ if (streq(actions[i].string, "set"))
+ cclass->toggle_class.Set = actions[i].proc;
+ if (streq(actions[i].string, "unset"))
+ cclass->toggle_class.Unset = actions[i].proc;
+
+ if (cclass->toggle_class.Set != NULL &&
+ cclass->toggle_class.Unset != NULL) {
+ XtFree((char *)actions);
+ return;
+ }
+ }
+
+ /* We should never get here */
+ XtError("Aborting, due to errors resolving bindings in the Toggle widget.");
+}
+
+/*ARGSUSED*/
+static void
+XawToggleInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ ToggleWidget tw = (ToggleWidget)cnew;
+ ToggleWidget tw_req = (ToggleWidget)request;
+
+ tw->toggle.radio_group = NULL;
+
+ if (tw->toggle.radio_data == NULL)
+ tw->toggle.radio_data = (XtPointer)cnew->core.name;
+
+ if (tw->toggle.widget != NULL) {
+ if (GetRadioGroup(tw->toggle.widget) == NULL)
+ CreateRadioGroup(cnew, tw->toggle.widget);
+ else
+ AddToRadioGroup(GetRadioGroup(tw->toggle.widget), cnew);
+ }
+ XtAddCallback(cnew, XtNdestroyCallback, XawToggleDestroy, NULL);
+
+ /*
+ * Command widget assumes that the widget is unset, so we only
+ * have to handle the case where it needs to be set
+ *
+ * If this widget is in a radio group then it may cause another
+ * widget to be unset, thus calling the notify proceedure
+ *
+ * I want to set the toggle if the user set the state to "On" in
+ * the resource group, reguardless of what my ancestors did
+ */
+ if (tw_req->command.set)
+ ToggleSet(cnew, NULL, NULL, NULL);
+}
+
+/*ARGSUSED*/
+static void
+ToggleSet(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ ToggleWidgetClass cclass = (ToggleWidgetClass)w->core.widget_class;
+
+ TurnOffRadioSiblings(w);
+ cclass->toggle_class.Set(w, event, NULL, NULL);
+}
+
+static void
+Toggle(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ ToggleWidget tw = (ToggleWidget)w;
+ ToggleWidgetClass cclass = (ToggleWidgetClass)w->core.widget_class;
+
+ if (tw->command.set)
+ cclass->toggle_class.Unset(w, event, NULL, NULL);
+ else
+ ToggleSet(w, event, params, num_params);
+}
+
+/*ARGSUSED*/
+static void
+Notify(Widget w, XEvent *event, String *params, Cardinal *num_params)
+{
+ ToggleWidget tw = (ToggleWidget)w;
+ long antilint = tw->command.set;
+
+ XtCallCallbacks(w, XtNcallback, (XtPointer)antilint);
+}
+
+/*ARGSUSED*/
+static Boolean
+XawToggleSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ ToggleWidget oldtw = (ToggleWidget)current;
+ ToggleWidget tw = (ToggleWidget)cnew;
+ ToggleWidget rtw = (ToggleWidget)request;
+
+ if (oldtw->toggle.widget != tw->toggle.widget)
+ XawToggleChangeRadioGroup(cnew, tw->toggle.widget);
+
+ if (!tw->core.sensitive && oldtw->core.sensitive && rtw->command.set)
+ tw->command.set = True;
+
+ if (oldtw->command.set != tw->command.set) {
+ tw->command.set = oldtw->command.set;
+ Toggle(cnew, NULL, NULL, NULL);
+ }
+
+ return (False);
+}
+
+/*
+ * Function:
+ * XawToggleDestroy
+ *
+ * Parameters:
+ * w - toggle widget that is being destroyed
+ * temp1 - not used
+ * temp2 - ""
+ *
+ * Description:
+ * Destroy Callback for toggle widget.
+ */
+/*ARGSUSED*/
+static void
+XawToggleDestroy(Widget w, XtPointer temp1, XtPointer temp2)
+{
+ RemoveFromRadioGroup(w);
+}
+
+/*
+ * Function:
+ * GetRadioGroup
+ *
+ * Parameters:
+ * w - toggle widget who's radio group we are getting
+ *
+ * Description:
+ * Gets the radio group associated with a give toggle widget.
+ *
+ * Returns:
+ * The radio group associated with this toggle group
+ */
+static RadioGroup *
+GetRadioGroup(Widget w)
+{
+ ToggleWidget tw = (ToggleWidget)w;
+
+ if (tw == NULL)
+ return (NULL);
+
+ return (tw->toggle.radio_group);
+}
+
+/*
+ * Function:
+ * CreateRadioGroup
+ *
+ * Parameters:
+ * w1 - toggle widgets to add to the radio group
+ * w2 - ""
+ *
+ * Description:
+ * Creates a radio group. give two widgets.
+ *
+ * Note:
+ * A pointer to the group is added to each widget's radio_group field.
+ */
+static void
+CreateRadioGroup(Widget w1, Widget w2)
+{
+ ToggleWidget tw1 = (ToggleWidget)w1;
+ ToggleWidget tw2 = (ToggleWidget) w2;
+
+ if (tw1->toggle.radio_group != NULL || tw2->toggle.radio_group != NULL)
+ XtAppWarning(XtWidgetToApplicationContext(w1),
+ "Toggle Widget Error - Attempting to create a "
+ "new toggle group, when one already exists.");
+
+ AddToRadioGroup(NULL, w1);
+ AddToRadioGroup(GetRadioGroup(w1), w2);
+}
+
+/*
+ * Function:
+ * AddToRadioGroup
+ *
+ * Parameters:
+ * group - element of the radio group the we are adding to
+ * w - new toggle widget to add to the group
+ *
+ * Description:
+ * Adds a toggle to the radio group.
+ */
+static void
+AddToRadioGroup(RadioGroup *group, Widget w)
+{
+ ToggleWidget tw = (ToggleWidget)w;
+ RadioGroup *local;
+
+ local = (RadioGroup *)XtMalloc(sizeof(RadioGroup));
+ local->widget = w;
+ tw->toggle.radio_group = local;
+
+ if (group == NULL) { /* Creating new group */
+ group = local;
+ group->next = NULL;
+ group->prev = NULL;
+ return;
+ }
+ local->prev = group; /* Adding to previous group */
+ if ((local->next = group->next) != NULL)
+ local->next->prev = local;
+ group->next = local;
+}
+
+/*
+ * Function:
+ * TurnOffRadioSiblings
+ *
+ * Parameters:
+ * widget - toggle widget
+ *
+ * Description:
+ * Deactivates all radio siblings.
+ */
+static void
+TurnOffRadioSiblings(Widget w)
+{
+ RadioGroup *group;
+ ToggleWidgetClass cclass = (ToggleWidgetClass)w->core.widget_class;
+
+ if ((group = GetRadioGroup(w)) == NULL) /* Punt if there is no group */
+ return;
+
+ /* Go to the top of the group */
+ for (; group->prev != NULL ; group = group->prev)
+ ;
+
+ while (group != NULL) {
+ ToggleWidget local_tog = (ToggleWidget)group->widget;
+
+ if (local_tog->command.set) {
+ cclass->toggle_class.Unset(group->widget, NULL, NULL, NULL);
+ Notify(group->widget, NULL, NULL, NULL);
+ }
+ group = group->next;
+ }
+}
+
+/*
+ * Function:
+ * RemoveFromRadioGroup
+ *
+ * Parameters:
+ * w - toggle widget to remove
+ *
+ * Description:
+ * Removes a toggle from a RadioGroup.
+ */
+static void
+RemoveFromRadioGroup(Widget w)
+{
+ RadioGroup *group = GetRadioGroup(w);
+ if (group != NULL) {
+ if (group->prev != NULL)
+ (group->prev)->next = group->next;
+ if (group->next != NULL)
+ (group->next)->prev = group->prev;
+ XtFree((char *)group);
+ }
+}
+
+/*
+ * Function:
+ * XawToggleChangeRadioGroup
+ *
+ * Parameters:
+ * w - toggle widget to change groups
+ * radio_group - any widget in the new group
+ *
+ * Description:
+ * Allows a toggle widget to change radio groups.
+ */
+void
+XawToggleChangeRadioGroup(Widget w, Widget radio_group)
+{
+ ToggleWidget tw = (ToggleWidget)w;
+ RadioGroup *group;
+
+ RemoveFromRadioGroup(w);
+
+ /*
+ * If the toggle that we are about to add is set then we will
+ * unset all toggles in the new radio group
+ */
+
+ if (tw->command.set && radio_group != NULL)
+ XawToggleUnsetCurrent(radio_group);
+
+ if (radio_group != NULL) {
+ if ((group = GetRadioGroup(radio_group)) == NULL)
+ CreateRadioGroup(w, radio_group);
+ else
+ AddToRadioGroup(group, w);
+ }
+}
+
+/*
+ * Function:
+ * XawToggleGetCurrent
+ *
+ * Parameters:
+ * w - any toggle widget in the toggle group
+ *
+ * Description:
+ * Returns the RadioData associated with the toggle
+ * widget that is currently active in a toggle group.
+ *
+ * Returns:
+ * The XtNradioData associated with the toggle widget
+ */
+XtPointer
+XawToggleGetCurrent(Widget w)
+{
+ RadioGroup *group;
+
+ if ((group = GetRadioGroup(w)) == NULL)
+ return (NULL);
+
+ for (; group->prev != NULL ; group = group->prev)
+ ;
+
+ while (group != NULL) {
+ ToggleWidget local_tog = (ToggleWidget)group->widget;
+
+ if (local_tog->command.set)
+ return (local_tog->toggle.radio_data);
+ group = group->next;
+ }
+
+ return (NULL);
+}
+
+/*
+ * Function:
+ * XawToggleSetCurrent
+ *
+ * Parameters:
+ * radio_group - any toggle widget in the toggle group
+ * radio_data - radio data of the toggle widget to set
+ *
+ * Description:
+ * Sets the Toggle widget associated with the radio_data specified.
+ */
+void
+XawToggleSetCurrent(Widget radio_group, XtPointer radio_data)
+{
+ RadioGroup *group;
+ ToggleWidget local_tog;
+
+ /* Special case of no radio group */
+
+ if ((group = GetRadioGroup(radio_group)) == NULL) {
+ local_tog = (ToggleWidget)radio_group;
+
+ if (local_tog->toggle.radio_data == radio_data &&
+ !local_tog->command.set) {
+ ToggleSet(radio_group, NULL, NULL, NULL);
+ Notify(radio_group, NULL, NULL, NULL);
+ }
+ return;
+ }
+
+ /*
+ * find top of radio_roup
+ */
+ for (; group->prev != NULL ; group = group->prev)
+ ;
+
+ /*
+ * search for matching radio data
+ */
+ while (group != NULL) {
+ local_tog = (ToggleWidget)group->widget;
+
+ if (local_tog->toggle.radio_data == radio_data) {
+ if (!local_tog->command.set) { /* if not already set */
+ ToggleSet(group->widget, NULL, NULL, NULL);
+ Notify(group->widget, NULL, NULL, NULL);
+ }
+ return; /* found it, done */
+ }
+ group = group->next;
+ }
+}
+
+/*
+ * Function:
+ * XawToggleUnsetCurrent
+ *
+ * Parameters:
+ * radio_group - any toggle widget in the toggle group
+ *
+ * Description:
+ * Unsets all Toggles in the radio_group specified.
+ */
+void
+XawToggleUnsetCurrent(Widget radio_group)
+{
+ ToggleWidgetClass cclass;
+ ToggleWidget local_tog = (ToggleWidget)radio_group;
+
+ /* Special Case no radio group */
+
+ if (local_tog->command.set) {
+ cclass = (ToggleWidgetClass)local_tog->core.widget_class;
+ cclass->toggle_class.Unset(radio_group, NULL, NULL, NULL);
+ Notify(radio_group, NULL, NULL, NULL);
+ }
+ if (GetRadioGroup(radio_group) == NULL)
+ return;
+
+ TurnOffRadioSiblings(radio_group);
+}
diff --git a/libXaw/src/Tree.c b/libXaw/src/Tree.c
index c37b215b9..c5e9a00f6 100644
--- a/libXaw/src/Tree.c
+++ b/libXaw/src/Tree.c
@@ -1,1017 +1,1014 @@
-/*
- * $Xorg: Tree.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $
- *
-
-Copyright 1990, 1994, 1998 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.
-
- * Copyright 1989 Prentice Hall
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose and without fee is hereby granted, provided that the above
- * copyright notice appear in all copies and that both the copyright notice
- * and this permission notice appear in supporting documentation.
- *
- * Prentice Hall and the authors disclaim all warranties with regard
- * to this software, including all implied warranties of merchantability and
- * fitness. In no event shall Prentice Hall or the authors be liable
- * for any special, indirect or cosequential 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.
- *
- * Authors: Jim Fulton, MIT X Consortium,
- * based on a version by Douglas Young, Prentice Hall
- *
- * This widget is based on the Tree widget described on pages 397-419 of
- * Douglas Young's book "The X Window System, Programming and Applications
- * with Xt OSF/Motif Edition." The layout code has been rewritten to use
- * additional blank space to make the structure of the graph easier to see
- * as well as to support vertical trees.
- */
-/* $XFree86: xc/lib/Xaw/Tree.c,v 1.9 2001/01/17 19:42:35 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xaw/XawInit.h>
-#include <X11/Xaw/Cardinals.h>
-#include <X11/Xaw/TreeP.h>
-#include "Private.h"
-
-#define IsHorizontal(tw) ((tw)->tree.gravity == WestGravity || \
- (tw)->tree.gravity == EastGravity)
-
-/*
- * Class Methods
- */
-static void XawTreeChangeManaged(Widget);
-static void XawTreeClassInitialize(void);
-static void XawTreeConstraintDestroy(Widget);
-static void XawTreeConstraintInitialize(Widget, Widget, ArgList, Cardinal*);
-static Boolean XawTreeConstraintSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static void XawTreeDestroy(Widget);
-static XtGeometryResult XawTreeGeometryManager(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawTreeInitialize(Widget, Widget, ArgList, Cardinal*);
-static XtGeometryResult XawTreeQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawTreeRedisplay(Widget, XEvent*, Region);
-static Boolean XawTreeSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void arrange_subtree(TreeWidget, Widget, int, int, int);
-static void check_gravity(TreeWidget, XtGravity);
-static void compute_bounding_box_subtree(TreeWidget, Widget, int);
-static void delete_node(Widget, Widget);
-static GC get_tree_gc(TreeWidget);
-static void initialize_dimensions(Dimension**, int*, int);
-static void insert_node(Widget, Widget);
-static void layout_tree(TreeWidget, Bool);
-static void set_positions(TreeWidget, Widget, int);
-static void set_tree_size(TreeWidget, Bool, unsigned int, unsigned int);
-
-/*
- * Initialization
- */
-
-/*
- * resources of the tree itself
- */
-static XtResource resources[] = {
- { XtNautoReconfigure, XtCAutoReconfigure, XtRBoolean, sizeof (Boolean),
- XtOffsetOf(TreeRec, tree.auto_reconfigure), XtRImmediate,
- (XtPointer) FALSE },
- { XtNhSpace, XtCHSpace, XtRDimension, sizeof (Dimension),
- XtOffsetOf(TreeRec, tree.hpad), XtRImmediate, (XtPointer) 0 },
- { XtNvSpace, XtCVSpace, XtRDimension, sizeof (Dimension),
- XtOffsetOf(TreeRec, tree.vpad), XtRImmediate, (XtPointer) 0 },
- { XtNforeground, XtCForeground, XtRPixel, sizeof (Pixel),
- XtOffsetOf(TreeRec, tree.foreground), XtRString,
- XtDefaultForeground},
- { XtNlineWidth, XtCLineWidth, XtRDimension, sizeof (Dimension),
- XtOffsetOf(TreeRec, tree.line_width), XtRImmediate, (XtPointer) 0 },
- { XtNgravity, XtCGravity, XtRGravity, sizeof (XtGravity),
- XtOffsetOf(TreeRec, tree.gravity), XtRImmediate,
- (XtPointer) WestGravity },
-#ifndef OLDXAW
- { XawNdisplayList, XawCDisplayList, XawRDisplayList, sizeof(XawDisplayList*),
- XtOffsetOf(TreeRec, tree.display_list), XtRImmediate,
- NULL },
-#endif
-};
-
-
-/*
- * resources that are attached to all children of the tree
- */
-static XtResource treeConstraintResources[] = {
- { XtNtreeParent, XtCTreeParent, XtRWidget, sizeof (Widget),
- XtOffsetOf(TreeConstraintsRec, tree.parent), XtRImmediate, NULL },
- { XtNtreeGC, XtCTreeGC, XtRGC, sizeof(GC),
- XtOffsetOf(TreeConstraintsRec, tree.gc), XtRImmediate, NULL },
-};
-
-
-TreeClassRec treeClassRec = {
- {
- /* core_class fields */
- (WidgetClass) &constraintClassRec, /* superclass */
- "Tree", /* class_name */
- sizeof(TreeRec), /* widget_size */
- XawTreeClassInitialize, /* class_init */
- NULL, /* class_part_init */
- FALSE, /* class_inited */
- XawTreeInitialize, /* initialize */
- NULL, /* initialize_hook */
- XtInheritRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- TRUE, /* compress_motion */
- TRUE, /* compress_exposure */
- TRUE, /* compress_enterleave*/
- TRUE, /* visible_interest */
- XawTreeDestroy, /* destroy */
- NULL, /* resize */
- XawTreeRedisplay, /* expose */
- XawTreeSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XawTreeQueryGeometry, /* query_geometry */
- NULL, /* display_accelerator*/
- NULL, /* extension */
- },
- {
- /* composite_class fields */
- XawTreeGeometryManager, /* geometry_manager */
- XawTreeChangeManaged, /* change_managed */
- XtInheritInsertChild, /* insert_child */
- XtInheritDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- {
- /* constraint_class fields */
- treeConstraintResources, /* subresources */
- XtNumber(treeConstraintResources), /* subresource_count */
- sizeof(TreeConstraintsRec), /* constraint_size */
- XawTreeConstraintInitialize, /* initialize */
- XawTreeConstraintDestroy, /* destroy */
- XawTreeConstraintSetValues, /* set_values */
- NULL, /* extension */
- },
- {
- /* Tree class fields */
- NULL, /* ignore */
- }
-};
-
-WidgetClass treeWidgetClass = (WidgetClass) &treeClassRec;
-
-
-/*****************************************************************************
- * *
- * tree utility routines *
- * *
- *****************************************************************************/
-
-static void
-initialize_dimensions(Dimension **listp, int *sizep, int n)
-{
- int i;
- Dimension *l;
-
- if (!*listp) {
- *listp = (Dimension *) XtCalloc ((unsigned int) n,
- (unsigned int) sizeof(Dimension));
- *sizep = ((*listp) ? n : 0);
- return;
- }
- if (n > *sizep) {
- *listp = (Dimension *) XtRealloc((char *) *listp,
- (unsigned int) (n*sizeof(Dimension)));
- if (!*listp) {
- *sizep = 0;
- return;
- }
- for (i = *sizep, l = (*listp) + i; i < n; i++, l++) *l = 0;
- *sizep = n;
- }
- return;
-}
-
-static GC
-get_tree_gc(TreeWidget w)
-{
- XtGCMask valuemask = GCBackground | GCForeground;
- XGCValues values;
-
- values.background = w->core.background_pixel;
- values.foreground = w->tree.foreground;
- if (w->tree.line_width != 0) {
- valuemask |= GCLineWidth;
- values.line_width = w->tree.line_width;
- }
-
- return XtGetGC ((Widget) w, valuemask, &values);
-}
-
-static void
-insert_node(Widget parent, Widget node)
-{
- TreeConstraints pc;
- TreeConstraints nc = TREE_CONSTRAINT(node);
- int nindex;
-
- nc->tree.parent = parent;
-
- if (parent == NULL) return;
-
- /*
- * If there isn't more room in the children array,
- * allocate additional space.
- */
- pc = TREE_CONSTRAINT(parent);
- nindex = pc->tree.n_children;
-
- if (pc->tree.n_children == pc->tree.max_children) {
- pc->tree.max_children += (pc->tree.max_children / 2) + 2;
- pc->tree.children = (WidgetList) XtRealloc ((char *)pc->tree.children,
- (unsigned int)
- ((pc->tree.max_children) *
- sizeof(Widget)));
- }
-
- /*
- * Add the sub_node in the next available slot and
- * increment the counter.
- */
- pc->tree.children[nindex] = node;
- pc->tree.n_children++;
-}
-
-static void
-delete_node(Widget parent, Widget node)
-{
- TreeConstraints pc;
- int pos, i;
-
- /*
- * Make sure the parent exists.
- */
- if (!parent) return;
-
- pc = TREE_CONSTRAINT(parent);
-
- /*
- * Find the sub_node on its parent's list.
- */
- for (pos = 0; pos < pc->tree.n_children; pos++)
- if (pc->tree.children[pos] == node) break;
-
- if (pos == pc->tree.n_children) return;
-
- /*
- * Decrement the number of children
- */
- pc->tree.n_children--;
-
- /*
- * Fill in the gap left by the sub_node.
- * Zero the last slot for good luck.
- */
- for (i = pos; i < pc->tree.n_children; i++)
- pc->tree.children[i] = pc->tree.children[i+1];
-
- pc->tree.children[pc->tree.n_children] = NULL;
-}
-
-static void
-check_gravity(TreeWidget tw, XtGravity grav)
-{
- switch (tw->tree.gravity) {
- case WestGravity: case NorthGravity: case EastGravity: case SouthGravity:
- break;
- default:
- tw->tree.gravity = grav;
- break;
- }
-}
-
-
-/*****************************************************************************
- * *
- * tree class methods *
- * *
- *****************************************************************************/
-
-static void
-XawTreeClassInitialize(void)
-{
- XawInitializeWidgetSet();
- XtAddConverter(XtRString, XtRGravity, XmuCvtStringToGravity, NULL, 0);
- XtSetTypeConverter(XtRGravity, XtRString, XmuCvtGravityToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-
-/*ARGSUSED*/
-static void
-XawTreeInitialize(Widget grequest, Widget gnew,
- ArgList args, Cardinal *num_args)
-{
- TreeWidget request = (TreeWidget) grequest, cnew = (TreeWidget) gnew;
- Arg arglist[2];
-
- /*
- * Make sure the widget's width and height are
- * greater than zero.
- */
- if (request->core.width <= 0) cnew->core.width = 5;
- if (request->core.height <= 0) cnew->core.height = 5;
-
- /*
- * Set the padding according to the orientation
- */
- if (request->tree.hpad == 0 && request->tree.vpad == 0) {
- if (IsHorizontal (request)) {
- cnew->tree.hpad = TREE_HORIZONTAL_DEFAULT_SPACING;
- cnew->tree.vpad = TREE_VERTICAL_DEFAULT_SPACING;
- } else {
- cnew->tree.hpad = TREE_VERTICAL_DEFAULT_SPACING;
- cnew->tree.vpad = TREE_HORIZONTAL_DEFAULT_SPACING;
- }
- }
-
- /*
- * Create a graphics context for the connecting lines.
- */
- cnew->tree.gc = get_tree_gc (cnew);
-
- /*
- * Create the hidden root widget.
- */
- cnew->tree.tree_root = (Widget) NULL;
- XtSetArg(arglist[0], XtNwidth, 1);
- XtSetArg(arglist[1], XtNheight, 1);
- cnew->tree.tree_root = XtCreateWidget ("root", widgetClass, gnew,
- arglist,TWO);
-
- /*
- * Allocate the array used to hold the widest values per depth
- */
- cnew->tree.largest = NULL;
- cnew->tree.n_largest = 0;
- initialize_dimensions (&cnew->tree.largest, &cnew->tree.n_largest,
- TREE_INITIAL_DEPTH);
-
- /*
- * make sure that our gravity is one of the acceptable values
- */
- check_gravity (cnew, WestGravity);
-}
-
-
-/* ARGSUSED */
-static void
-XawTreeConstraintInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- TreeConstraints tc = TREE_CONSTRAINT(cnew);
- TreeWidget tw = (TreeWidget) cnew->core.parent;
-
- /*
- * Initialize the widget to have no sub-nodes.
- */
- tc->tree.n_children = 0;
- tc->tree.max_children = 0;
- tc->tree.children = (Widget *) NULL;
- tc->tree.x = tc->tree.y = 0;
- tc->tree.bbsubwidth = 0;
- tc->tree.bbsubheight = 0;
-
-
- /*
- * If this widget has a super-node, add it to that
- * widget' sub-nodes list. Otherwise make it a sub-node of
- * the tree_root widget.
- */
- if (tc->tree.parent)
- insert_node (tc->tree.parent, cnew);
- else if (tw->tree.tree_root)
- insert_node (tw->tree.tree_root, cnew);
-}
-
-
-/* ARGSUSED */
-static Boolean
-XawTreeSetValues(Widget gcurrent, Widget grequest, Widget gnew,
- ArgList args, Cardinal *num_args)
-{
- TreeWidget current = (TreeWidget) gcurrent, cnew = (TreeWidget) gnew;
- Boolean redraw = FALSE;
-
- /*
- * If the foreground color has changed, redo the GC's
- * and indicate a redraw.
- */
- if (cnew->tree.foreground != current->tree.foreground ||
- cnew->core.background_pixel != current->core.background_pixel ||
- cnew->tree.line_width != current->tree.line_width) {
- XtReleaseGC (gnew, cnew->tree.gc);
- cnew->tree.gc = get_tree_gc (cnew);
- redraw = TRUE;
- }
-
- /*
- * If the minimum spacing has changed, recalculate the
- * tree layout. layout_tree() does a redraw, so we don't
- * need SetValues to do another one.
- */
- if (cnew->tree.gravity != current->tree.gravity) {
- check_gravity (cnew, current->tree.gravity);
- }
-
- if (IsHorizontal(cnew) != IsHorizontal(current)) {
- if (cnew->tree.vpad == current->tree.vpad &&
- cnew->tree.hpad == current->tree.hpad) {
- cnew->tree.vpad = current->tree.hpad;
- cnew->tree.hpad = current->tree.vpad;
- }
- }
-
- if (cnew->tree.vpad != current->tree.vpad ||
- cnew->tree.hpad != current->tree.hpad ||
- cnew->tree.gravity != current->tree.gravity) {
- layout_tree (cnew, TRUE);
- redraw = FALSE;
- }
- return redraw;
-}
-
-
-/* ARGSUSED */
-static Boolean
-XawTreeConstraintSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- TreeConstraints newc = TREE_CONSTRAINT(cnew);
- TreeConstraints curc = TREE_CONSTRAINT(current);
- TreeWidget tw = (TreeWidget) cnew->core.parent;
-
- /*
- * If the parent field has changed, remove the widget
- * from the old widget's children list and add it to the
- * new one.
- */
- if (curc->tree.parent != newc->tree.parent){
- if (curc->tree.parent)
- delete_node (curc->tree.parent, cnew);
- if (newc->tree.parent)
- insert_node(newc->tree.parent, cnew);
-
- /*
- * If the Tree widget has been realized,
- * compute new layout.
- */
- if (XtIsRealized((Widget)tw))
- layout_tree (tw, FALSE);
- }
- return False;
-}
-
-
-static void
-XawTreeConstraintDestroy(Widget w)
-{
- TreeConstraints tc = TREE_CONSTRAINT(w);
- TreeWidget tw = (TreeWidget) XtParent(w);
- int i;
-
- /*
- * Remove the widget from its parent's sub-nodes list and
- * make all this widget's sub-nodes sub-nodes of the parent.
- */
-
- if (tw->tree.tree_root == w) {
- if (tc->tree.n_children > 0)
- tw->tree.tree_root = tc->tree.children[0];
- else
- tw->tree.tree_root = NULL;
- }
-
- delete_node (tc->tree.parent, (Widget) w);
- for (i = 0; i< tc->tree.n_children; i++)
- insert_node (tc->tree.parent, tc->tree.children[i]);
-
- layout_tree ((TreeWidget) (w->core.parent), FALSE);
-}
-
-/* ARGSUSED */
-static XtGeometryResult
-XawTreeGeometryManager(Widget w, XtWidgetGeometry *request,
- XtWidgetGeometry *reply)
-{
-
- TreeWidget tw = (TreeWidget) w->core.parent;
-
- /*
- * No position changes allowed!.
- */
- if ((request->request_mode & CWX && request->x!=w->core.x)
- ||(request->request_mode & CWY && request->y!=w->core.y))
- return (XtGeometryNo);
-
- /*
- * Allow all resize requests.
- */
-
- if (request->request_mode & CWWidth)
- w->core.width = request->width;
- if (request->request_mode & CWHeight)
- w->core.height = request->height;
- if (request->request_mode & CWBorderWidth)
- w->core.border_width = request->border_width;
-
- if (tw->tree.auto_reconfigure) layout_tree (tw, FALSE);
- return (XtGeometryYes);
-}
-
-static void
-XawTreeChangeManaged(Widget gw)
-{
- layout_tree ((TreeWidget) gw, FALSE);
-}
-
-
-static void
-XawTreeDestroy(Widget gw)
-{
- TreeWidget w = (TreeWidget) gw;
-
- XtReleaseGC (gw, w->tree.gc);
- if (w->tree.largest) XtFree ((char *) w->tree.largest);
-}
-
-
-/* ARGSUSED */
-static void
-XawTreeRedisplay(Widget gw, XEvent *event, Region region)
-{
- TreeWidget tw = (TreeWidget) gw;
-
-#ifndef OLDXAW
- if (tw->tree.display_list)
- XawRunDisplayList(gw, tw->tree.display_list, event, region);
-#endif
-
- /*
- * If the Tree widget is visible, visit each managed child.
- */
- if (tw->core.visible) {
- Cardinal i;
- int j;
- Display *dpy = XtDisplay (tw);
- Window w = XtWindow (tw);
-
- for (i = 0; i < tw->composite.num_children; i++) {
- Widget child = tw->composite.children[i];
- TreeConstraints tc = TREE_CONSTRAINT(child);
-
- /*
- * Don't draw lines from the fake tree_root.
- */
- if (child != tw->tree.tree_root && tc->tree.n_children) {
- int srcx = child->core.x + child->core.border_width;
- int srcy = child->core.y + child->core.border_width;
-
- switch (tw->tree.gravity) {
- case WestGravity:
- srcx += child->core.width + child->core.border_width;
- /* fall through */
- case EastGravity:
- srcy += child->core.height / 2;
- break;
-
- case NorthGravity:
- srcy += child->core.height + child->core.border_width;
- /* fall through */
- case SouthGravity:
- srcx += child->core.width / 2;
- break;
- }
-
- for (j = 0; j < tc->tree.n_children; j++) {
- Widget k = tc->tree.children[j];
- GC gc = (tc->tree.gc ? tc->tree.gc : tw->tree.gc);
-
- switch (tw->tree.gravity) {
- case WestGravity:
- /*
- * right center to left center
- */
- XDrawLine (dpy, w, gc, srcx, srcy,
- (int) k->core.x,
- (k->core.y + ((int) k->core.border_width) +
- ((int) k->core.height) / 2));
- break;
-
- case NorthGravity:
- /*
- * bottom center to top center
- */
- XDrawLine (dpy, w, gc, srcx, srcy,
- (k->core.x + ((int) k->core.border_width) +
- ((int) k->core.width) / 2),
- (int) k->core.y);
- break;
-
- case EastGravity:
- /*
- * left center to right center
- */
- XDrawLine (dpy, w, gc, srcx, srcy,
- (k->core.x +
- (((int) k->core.border_width) << 1) +
- (int) k->core.width),
- (k->core.y + ((int) k->core.border_width) +
- ((int) k->core.height) / 2));
- break;
-
- case SouthGravity:
- /*
- * top center to bottom center
- */
- XDrawLine (dpy, w, gc, srcx, srcy,
- (k->core.x + ((int) k->core.border_width) +
- ((int) k->core.width) / 2),
- (k->core.y +
- (((int) k->core.border_width) << 1) +
- (int) k->core.height));
- break;
- }
- }
- }
- }
- }
-}
-
-static XtGeometryResult
-XawTreeQueryGeometry(Widget w, XtWidgetGeometry *intended,
- XtWidgetGeometry *preferred)
-{
- TreeWidget tw = (TreeWidget) w;
-
- preferred->request_mode = (CWWidth | CWHeight);
- preferred->width = tw->tree.maxwidth;
- preferred->height = tw->tree.maxheight;
-
- if (((intended->request_mode & (CWWidth | CWHeight)) ==
- (CWWidth | CWHeight)) &&
- intended->width == preferred->width &&
- intended->height == preferred->height)
- return XtGeometryYes;
- else if (preferred->width == w->core.width &&
- preferred->height == w->core.height)
- return XtGeometryNo;
- else
- return XtGeometryAlmost;
-}
-
-
-/*****************************************************************************
- * *
- * tree layout algorithm *
- * *
- * Each node in the tree is "shrink-wrapped" with a minimal bounding *
- * rectangle, laid next to its siblings (with a small about of padding in *
- * between) and then wrapped with their parent. Parents are centered about *
- * their children (or vice versa if the parent is larger than the children). *
- * *
- *****************************************************************************/
-
-static void
-compute_bounding_box_subtree(TreeWidget tree, Widget w, int depth)
-{
- TreeConstraints tc = TREE_CONSTRAINT(w); /* info attached to all kids */
- int i;
- Bool horiz = IsHorizontal (tree);
- Dimension newwidth, newheight;
- Dimension bw2 = w->core.border_width * 2;
-
- /*
- * Set the max-size per level.
- */
- if (depth >= tree->tree.n_largest) {
- initialize_dimensions (&tree->tree.largest,
- &tree->tree.n_largest, depth + 1);
- }
- newwidth = ((horiz ? w->core.width : w->core.height) + bw2);
- if (tree->tree.largest[depth] < newwidth)
- tree->tree.largest[depth] = newwidth;
-
-
- /*
- * initialize
- */
- tc->tree.bbwidth = w->core.width + bw2;
- tc->tree.bbheight = w->core.height + bw2;
-
- if (tc->tree.n_children == 0) return;
-
- /*
- * Figure the size of the opposite dimension (vertical if tree is
- * horizontal, else vice versa). The other dimension will be set
- * in the second pass once we know the maximum dimensions.
- */
- newwidth = 0;
- newheight = 0;
- for (i = 0; i < tc->tree.n_children; i++) {
- Widget child = tc->tree.children[i];
- TreeConstraints cc = TREE_CONSTRAINT(child);
-
- compute_bounding_box_subtree (tree, child, depth + 1);
-
- if (horiz) {
- if (newwidth < cc->tree.bbwidth) newwidth = cc->tree.bbwidth;
- newheight += tree->tree.vpad + cc->tree.bbheight;
- } else {
- if (newheight < cc->tree.bbheight) newheight = cc->tree.bbheight;
- newwidth += tree->tree.hpad + cc->tree.bbwidth;
- }
- }
-
-
- tc->tree.bbsubwidth = newwidth;
- tc->tree.bbsubheight = newheight;
-
- /*
- * Now fit parent onto side (or top) of bounding box and correct for
- * extra padding. Be careful of unsigned arithmetic.
- */
- if (horiz) {
- tc->tree.bbwidth += tree->tree.hpad + newwidth;
- newheight -= tree->tree.vpad;
- if (newheight > tc->tree.bbheight) tc->tree.bbheight = newheight;
- } else {
- tc->tree.bbheight += tree->tree.vpad + newheight;
- newwidth -= tree->tree.hpad;
- if (newwidth > tc->tree.bbwidth) tc->tree.bbwidth = newwidth;
- }
-}
-
-
-static void
-set_positions(TreeWidget tw, Widget w, int level)
-{
- int i;
-
- if (w) {
- TreeConstraints tc = TREE_CONSTRAINT(w);
-
- if (level > 0) {
- /*
- * mirror if necessary
- */
- switch (tw->tree.gravity) {
- case EastGravity:
- tc->tree.x = (((Position) tw->tree.maxwidth) -
- ((Position) w->core.width) - tc->tree.x);
- break;
-
- case SouthGravity:
- tc->tree.y = (((Position) tw->tree.maxheight) -
- ((Position) w->core.height) - tc->tree.y);
- break;
- }
-
- /*
- * Move the widget into position.
- */
- XtMoveWidget (w, tc->tree.x, tc->tree.y);
- }
-
- /*
- * Set the positions of all children.
- */
- for (i = 0; i < tc->tree.n_children; i++)
- set_positions (tw, tc->tree.children[i], level + 1);
- }
-}
-
-
-static void
-arrange_subtree(TreeWidget tree, Widget w, int depth, int x, int y)
-{
- TreeConstraints tc = TREE_CONSTRAINT(w); /* info attached to all kids */
- TreeConstraints firstcc, lastcc;
- int i;
- int newx, newy;
- Bool horiz = IsHorizontal (tree);
- Widget child = NULL;
- Dimension tmp;
- Dimension bw2 = w->core.border_width * 2;
- Bool relayout = True;
-
-
- /*
- * If no children, then just lay out where requested.
- */
- tc->tree.x = x;
- tc->tree.y = y;
-
- if (horiz) {
- int myh = (w->core.height + bw2);
-
- if (myh > (int)tc->tree.bbsubheight) {
- y += (myh - (int)tc->tree.bbsubheight) / 2;
- relayout = False;
- }
- } else {
- int myw = (w->core.width + bw2);
-
- if (myw > (int)tc->tree.bbsubwidth) {
- x += (myw - (int)tc->tree.bbsubwidth) / 2;
- relayout = False;
- }
- }
-
- if ((tmp = ((Dimension) x) + tc->tree.bbwidth) > tree->tree.maxwidth)
- tree->tree.maxwidth = tmp;
- if ((tmp = ((Dimension) y) + tc->tree.bbheight) > tree->tree.maxheight)
- tree->tree.maxheight = tmp;
-
- if (tc->tree.n_children == 0) return;
-
-
- /*
- * Have children, so walk down tree laying out children, then laying
- * out parents.
- */
- if (horiz) {
- newx = x + tree->tree.largest[depth];
- if (depth > 0) newx += tree->tree.hpad;
- newy = y;
- } else {
- newx = x;
- newy = y + tree->tree.largest[depth];
- if (depth > 0) newy += tree->tree.vpad;
- }
-
- for (i = 0; i < tc->tree.n_children; i++) {
- TreeConstraints cc;
-
- child = tc->tree.children[i]; /* last value is used outside loop */
- cc = TREE_CONSTRAINT(child);
-
- arrange_subtree (tree, child, depth + 1, newx, newy);
- if (horiz) {
- newy += tree->tree.vpad + cc->tree.bbheight;
- } else {
- newx += tree->tree.hpad + cc->tree.bbwidth;
- }
- }
-
- /*
- * now layout parent between first and last children
- */
- if (relayout) {
- Position adjusted;
- firstcc = TREE_CONSTRAINT (tc->tree.children[0]);
- lastcc = TREE_CONSTRAINT (child);
-
- /* Adjustments are disallowed if they result in a position above
- * or to the left of the originally requested position, because
- * this could collide with the position of the previous sibling.
- */
- if (horiz) {
- tc->tree.x = x;
- adjusted = firstcc->tree.y +
- ((lastcc->tree.y + (Position) child->core.height +
- (Position) child->core.border_width * 2 -
- firstcc->tree.y - (Position) w->core.height -
- (Position) w->core.border_width * 2 + 1) / 2);
- if (adjusted > tc->tree.y) tc->tree.y = adjusted;
- } else {
- adjusted = firstcc->tree.x +
- ((lastcc->tree.x + (Position) child->core.width +
- (Position) child->core.border_width * 2 -
- firstcc->tree.x - (Position) w->core.width -
- (Position) w->core.border_width * 2 + 1) / 2);
- if (adjusted > tc->tree.x) tc->tree.x = adjusted;
- tc->tree.y = y;
- }
- }
-}
-
-static void
-set_tree_size(TreeWidget tw, Bool insetvalues,
- unsigned int width, unsigned int height)
-{
- if (insetvalues) {
- tw->core.width = width;
- tw->core.height = height;
- } else {
- Dimension replyWidth = 0, replyHeight = 0;
- XtGeometryResult result = XtMakeResizeRequest ((Widget) tw,
- width, height,
- &replyWidth,
- &replyHeight);
- /*
- * Accept any compromise.
- */
- if (result == XtGeometryAlmost)
- XtMakeResizeRequest ((Widget) tw, replyWidth, replyHeight,
- (Dimension *) NULL, (Dimension *) NULL);
- }
- return;
-}
-
-static void
-layout_tree(TreeWidget tw, Bool insetvalues)
-{
- int i;
- Dimension *dp;
-
- /*
- * Do a depth-first search computing the width and height of the bounding
- * box for the tree at that position (and below). Then, walk again using
- * this information to layout the children at each level.
- */
-
- if (tw->tree.tree_root == NULL)
- return;
-
- tw->tree.maxwidth = tw->tree.maxheight = 0;
- for (i = 0, dp = tw->tree.largest; i < tw->tree.n_largest; i++, dp++)
- *dp = 0;
- initialize_dimensions (&tw->tree.largest, &tw->tree.n_largest,
- tw->tree.n_largest);
- compute_bounding_box_subtree (tw, tw->tree.tree_root, 0);
-
- /*
- * Second pass to do final layout. Each child's bounding box is stacked
- * on top of (if horizontal, else next to) on top of its siblings. The
- * parent is centered between the first and last children.
- */
- arrange_subtree (tw, tw->tree.tree_root, 0, 0, 0);
-
- /*
- * Move each widget into place.
- */
- set_tree_size (tw, insetvalues, tw->tree.maxwidth, tw->tree.maxheight);
- set_positions (tw, tw->tree.tree_root, 0);
-
- /*
- * And redisplay.
- */
- if (XtIsRealized ((Widget) tw)) {
- XClearArea (XtDisplay(tw), XtWindow((Widget)tw), 0, 0, 0, 0, True);
- }
-}
-
-
-
-/*****************************************************************************
- * *
- * Public Routines *
- * *
- *****************************************************************************/
-
-void
-XawTreeForceLayout(Widget tree)
-{
- layout_tree ((TreeWidget) tree, FALSE);
-}
-
+/*
+
+Copyright 1990, 1994, 1998 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.
+
+ * Copyright 1989 Prentice Hall
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation.
+ *
+ * Prentice Hall and the authors disclaim all warranties with regard
+ * to this software, including all implied warranties of merchantability and
+ * fitness. In no event shall Prentice Hall or the authors be liable
+ * for any special, indirect or cosequential 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.
+ *
+ * Authors: Jim Fulton, MIT X Consortium,
+ * based on a version by Douglas Young, Prentice Hall
+ *
+ * This widget is based on the Tree widget described on pages 397-419 of
+ * Douglas Young's book "The X Window System, Programming and Applications
+ * with Xt OSF/Motif Edition." The layout code has been rewritten to use
+ * additional blank space to make the structure of the graph easier to see
+ * as well as to support vertical trees.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/XawInit.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/TreeP.h>
+#include "Private.h"
+
+#define IsHorizontal(tw) ((tw)->tree.gravity == WestGravity || \
+ (tw)->tree.gravity == EastGravity)
+
+/*
+ * Class Methods
+ */
+static void XawTreeChangeManaged(Widget);
+static void XawTreeClassInitialize(void);
+static void XawTreeConstraintDestroy(Widget);
+static void XawTreeConstraintInitialize(Widget, Widget, ArgList, Cardinal*);
+static Boolean XawTreeConstraintSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static void XawTreeDestroy(Widget);
+static XtGeometryResult XawTreeGeometryManager(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawTreeInitialize(Widget, Widget, ArgList, Cardinal*);
+static XtGeometryResult XawTreeQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawTreeRedisplay(Widget, XEvent*, Region);
+static Boolean XawTreeSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void arrange_subtree(TreeWidget, Widget, int, int, int);
+static void check_gravity(TreeWidget, XtGravity);
+static void compute_bounding_box_subtree(TreeWidget, Widget, int);
+static void delete_node(Widget, Widget);
+static GC get_tree_gc(TreeWidget);
+static void initialize_dimensions(Dimension**, int*, int);
+static void insert_node(Widget, Widget);
+static void layout_tree(TreeWidget, Bool);
+static void set_positions(TreeWidget, Widget, int);
+static void set_tree_size(TreeWidget, Bool, unsigned int, unsigned int);
+
+/*
+ * Initialization
+ */
+
+/*
+ * resources of the tree itself
+ */
+static XtResource resources[] = {
+ { XtNautoReconfigure, XtCAutoReconfigure, XtRBoolean, sizeof (Boolean),
+ XtOffsetOf(TreeRec, tree.auto_reconfigure), XtRImmediate,
+ (XtPointer) FALSE },
+ { XtNhSpace, XtCHSpace, XtRDimension, sizeof (Dimension),
+ XtOffsetOf(TreeRec, tree.hpad), XtRImmediate, (XtPointer) 0 },
+ { XtNvSpace, XtCVSpace, XtRDimension, sizeof (Dimension),
+ XtOffsetOf(TreeRec, tree.vpad), XtRImmediate, (XtPointer) 0 },
+ { XtNforeground, XtCForeground, XtRPixel, sizeof (Pixel),
+ XtOffsetOf(TreeRec, tree.foreground), XtRString,
+ XtDefaultForeground},
+ { XtNlineWidth, XtCLineWidth, XtRDimension, sizeof (Dimension),
+ XtOffsetOf(TreeRec, tree.line_width), XtRImmediate, (XtPointer) 0 },
+ { XtNgravity, XtCGravity, XtRGravity, sizeof (XtGravity),
+ XtOffsetOf(TreeRec, tree.gravity), XtRImmediate,
+ (XtPointer) WestGravity },
+#ifndef OLDXAW
+ { XawNdisplayList, XawCDisplayList, XawRDisplayList, sizeof(XawDisplayList*),
+ XtOffsetOf(TreeRec, tree.display_list), XtRImmediate,
+ NULL },
+#endif
+};
+
+
+/*
+ * resources that are attached to all children of the tree
+ */
+static XtResource treeConstraintResources[] = {
+ { XtNtreeParent, XtCTreeParent, XtRWidget, sizeof (Widget),
+ XtOffsetOf(TreeConstraintsRec, tree.parent), XtRImmediate, NULL },
+ { XtNtreeGC, XtCTreeGC, XtRGC, sizeof(GC),
+ XtOffsetOf(TreeConstraintsRec, tree.gc), XtRImmediate, NULL },
+};
+
+
+TreeClassRec treeClassRec = {
+ {
+ /* core_class fields */
+ (WidgetClass) &constraintClassRec, /* superclass */
+ "Tree", /* class_name */
+ sizeof(TreeRec), /* widget_size */
+ XawTreeClassInitialize, /* class_init */
+ NULL, /* class_part_init */
+ FALSE, /* class_inited */
+ XawTreeInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ TRUE, /* compress_motion */
+ TRUE, /* compress_exposure */
+ TRUE, /* compress_enterleave*/
+ TRUE, /* visible_interest */
+ XawTreeDestroy, /* destroy */
+ NULL, /* resize */
+ XawTreeRedisplay, /* expose */
+ XawTreeSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XawTreeQueryGeometry, /* query_geometry */
+ NULL, /* display_accelerator*/
+ NULL, /* extension */
+ },
+ {
+ /* composite_class fields */
+ XawTreeGeometryManager, /* geometry_manager */
+ XawTreeChangeManaged, /* change_managed */
+ XtInheritInsertChild, /* insert_child */
+ XtInheritDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ {
+ /* constraint_class fields */
+ treeConstraintResources, /* subresources */
+ XtNumber(treeConstraintResources), /* subresource_count */
+ sizeof(TreeConstraintsRec), /* constraint_size */
+ XawTreeConstraintInitialize, /* initialize */
+ XawTreeConstraintDestroy, /* destroy */
+ XawTreeConstraintSetValues, /* set_values */
+ NULL, /* extension */
+ },
+ {
+ /* Tree class fields */
+ NULL, /* ignore */
+ }
+};
+
+WidgetClass treeWidgetClass = (WidgetClass) &treeClassRec;
+
+
+/*****************************************************************************
+ * *
+ * tree utility routines *
+ * *
+ *****************************************************************************/
+
+static void
+initialize_dimensions(Dimension **listp, int *sizep, int n)
+{
+ int i;
+ Dimension *l;
+
+ if (!*listp) {
+ *listp = (Dimension *) XtCalloc ((unsigned int) n,
+ (unsigned int) sizeof(Dimension));
+ *sizep = ((*listp) ? n : 0);
+ return;
+ }
+ if (n > *sizep) {
+ *listp = (Dimension *) XtRealloc((char *) *listp,
+ (unsigned int) (n*sizeof(Dimension)));
+ if (!*listp) {
+ *sizep = 0;
+ return;
+ }
+ for (i = *sizep, l = (*listp) + i; i < n; i++, l++) *l = 0;
+ *sizep = n;
+ }
+ return;
+}
+
+static GC
+get_tree_gc(TreeWidget w)
+{
+ XtGCMask valuemask = GCBackground | GCForeground;
+ XGCValues values;
+
+ values.background = w->core.background_pixel;
+ values.foreground = w->tree.foreground;
+ if (w->tree.line_width != 0) {
+ valuemask |= GCLineWidth;
+ values.line_width = w->tree.line_width;
+ }
+
+ return XtGetGC ((Widget) w, valuemask, &values);
+}
+
+static void
+insert_node(Widget parent, Widget node)
+{
+ TreeConstraints pc;
+ TreeConstraints nc = TREE_CONSTRAINT(node);
+ int nindex;
+
+ nc->tree.parent = parent;
+
+ if (parent == NULL) return;
+
+ /*
+ * If there isn't more room in the children array,
+ * allocate additional space.
+ */
+ pc = TREE_CONSTRAINT(parent);
+ nindex = pc->tree.n_children;
+
+ if (pc->tree.n_children == pc->tree.max_children) {
+ pc->tree.max_children += (pc->tree.max_children / 2) + 2;
+ pc->tree.children = (WidgetList) XtRealloc ((char *)pc->tree.children,
+ (unsigned int)
+ ((pc->tree.max_children) *
+ sizeof(Widget)));
+ }
+
+ /*
+ * Add the sub_node in the next available slot and
+ * increment the counter.
+ */
+ pc->tree.children[nindex] = node;
+ pc->tree.n_children++;
+}
+
+static void
+delete_node(Widget parent, Widget node)
+{
+ TreeConstraints pc;
+ int pos, i;
+
+ /*
+ * Make sure the parent exists.
+ */
+ if (!parent) return;
+
+ pc = TREE_CONSTRAINT(parent);
+
+ /*
+ * Find the sub_node on its parent's list.
+ */
+ for (pos = 0; pos < pc->tree.n_children; pos++)
+ if (pc->tree.children[pos] == node) break;
+
+ if (pos == pc->tree.n_children) return;
+
+ /*
+ * Decrement the number of children
+ */
+ pc->tree.n_children--;
+
+ /*
+ * Fill in the gap left by the sub_node.
+ * Zero the last slot for good luck.
+ */
+ for (i = pos; i < pc->tree.n_children; i++)
+ pc->tree.children[i] = pc->tree.children[i+1];
+
+ pc->tree.children[pc->tree.n_children] = NULL;
+}
+
+static void
+check_gravity(TreeWidget tw, XtGravity grav)
+{
+ switch (tw->tree.gravity) {
+ case WestGravity: case NorthGravity: case EastGravity: case SouthGravity:
+ break;
+ default:
+ tw->tree.gravity = grav;
+ break;
+ }
+}
+
+
+/*****************************************************************************
+ * *
+ * tree class methods *
+ * *
+ *****************************************************************************/
+
+static void
+XawTreeClassInitialize(void)
+{
+ XawInitializeWidgetSet();
+ XtAddConverter(XtRString, XtRGravity, XmuCvtStringToGravity, NULL, 0);
+ XtSetTypeConverter(XtRGravity, XtRString, XmuCvtGravityToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+
+/*ARGSUSED*/
+static void
+XawTreeInitialize(Widget grequest, Widget gnew,
+ ArgList args, Cardinal *num_args)
+{
+ TreeWidget request = (TreeWidget) grequest, cnew = (TreeWidget) gnew;
+ Arg arglist[2];
+
+ /*
+ * Make sure the widget's width and height are
+ * greater than zero.
+ */
+ if (request->core.width <= 0) cnew->core.width = 5;
+ if (request->core.height <= 0) cnew->core.height = 5;
+
+ /*
+ * Set the padding according to the orientation
+ */
+ if (request->tree.hpad == 0 && request->tree.vpad == 0) {
+ if (IsHorizontal (request)) {
+ cnew->tree.hpad = TREE_HORIZONTAL_DEFAULT_SPACING;
+ cnew->tree.vpad = TREE_VERTICAL_DEFAULT_SPACING;
+ } else {
+ cnew->tree.hpad = TREE_VERTICAL_DEFAULT_SPACING;
+ cnew->tree.vpad = TREE_HORIZONTAL_DEFAULT_SPACING;
+ }
+ }
+
+ /*
+ * Create a graphics context for the connecting lines.
+ */
+ cnew->tree.gc = get_tree_gc (cnew);
+
+ /*
+ * Create the hidden root widget.
+ */
+ cnew->tree.tree_root = (Widget) NULL;
+ XtSetArg(arglist[0], XtNwidth, 1);
+ XtSetArg(arglist[1], XtNheight, 1);
+ cnew->tree.tree_root = XtCreateWidget ("root", widgetClass, gnew,
+ arglist,TWO);
+
+ /*
+ * Allocate the array used to hold the widest values per depth
+ */
+ cnew->tree.largest = NULL;
+ cnew->tree.n_largest = 0;
+ initialize_dimensions (&cnew->tree.largest, &cnew->tree.n_largest,
+ TREE_INITIAL_DEPTH);
+
+ /*
+ * make sure that our gravity is one of the acceptable values
+ */
+ check_gravity (cnew, WestGravity);
+}
+
+
+/* ARGSUSED */
+static void
+XawTreeConstraintInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ TreeConstraints tc = TREE_CONSTRAINT(cnew);
+ TreeWidget tw = (TreeWidget) cnew->core.parent;
+
+ /*
+ * Initialize the widget to have no sub-nodes.
+ */
+ tc->tree.n_children = 0;
+ tc->tree.max_children = 0;
+ tc->tree.children = (Widget *) NULL;
+ tc->tree.x = tc->tree.y = 0;
+ tc->tree.bbsubwidth = 0;
+ tc->tree.bbsubheight = 0;
+
+
+ /*
+ * If this widget has a super-node, add it to that
+ * widget' sub-nodes list. Otherwise make it a sub-node of
+ * the tree_root widget.
+ */
+ if (tc->tree.parent)
+ insert_node (tc->tree.parent, cnew);
+ else if (tw->tree.tree_root)
+ insert_node (tw->tree.tree_root, cnew);
+}
+
+
+/* ARGSUSED */
+static Boolean
+XawTreeSetValues(Widget gcurrent, Widget grequest, Widget gnew,
+ ArgList args, Cardinal *num_args)
+{
+ TreeWidget current = (TreeWidget) gcurrent, cnew = (TreeWidget) gnew;
+ Boolean redraw = FALSE;
+
+ /*
+ * If the foreground color has changed, redo the GC's
+ * and indicate a redraw.
+ */
+ if (cnew->tree.foreground != current->tree.foreground ||
+ cnew->core.background_pixel != current->core.background_pixel ||
+ cnew->tree.line_width != current->tree.line_width) {
+ XtReleaseGC (gnew, cnew->tree.gc);
+ cnew->tree.gc = get_tree_gc (cnew);
+ redraw = TRUE;
+ }
+
+ /*
+ * If the minimum spacing has changed, recalculate the
+ * tree layout. layout_tree() does a redraw, so we don't
+ * need SetValues to do another one.
+ */
+ if (cnew->tree.gravity != current->tree.gravity) {
+ check_gravity (cnew, current->tree.gravity);
+ }
+
+ if (IsHorizontal(cnew) != IsHorizontal(current)) {
+ if (cnew->tree.vpad == current->tree.vpad &&
+ cnew->tree.hpad == current->tree.hpad) {
+ cnew->tree.vpad = current->tree.hpad;
+ cnew->tree.hpad = current->tree.vpad;
+ }
+ }
+
+ if (cnew->tree.vpad != current->tree.vpad ||
+ cnew->tree.hpad != current->tree.hpad ||
+ cnew->tree.gravity != current->tree.gravity) {
+ layout_tree (cnew, TRUE);
+ redraw = FALSE;
+ }
+ return redraw;
+}
+
+
+/* ARGSUSED */
+static Boolean
+XawTreeConstraintSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ TreeConstraints newc = TREE_CONSTRAINT(cnew);
+ TreeConstraints curc = TREE_CONSTRAINT(current);
+ TreeWidget tw = (TreeWidget) cnew->core.parent;
+
+ /*
+ * If the parent field has changed, remove the widget
+ * from the old widget's children list and add it to the
+ * new one.
+ */
+ if (curc->tree.parent != newc->tree.parent){
+ if (curc->tree.parent)
+ delete_node (curc->tree.parent, cnew);
+ if (newc->tree.parent)
+ insert_node(newc->tree.parent, cnew);
+
+ /*
+ * If the Tree widget has been realized,
+ * compute new layout.
+ */
+ if (XtIsRealized((Widget)tw))
+ layout_tree (tw, FALSE);
+ }
+ return False;
+}
+
+
+static void
+XawTreeConstraintDestroy(Widget w)
+{
+ TreeConstraints tc = TREE_CONSTRAINT(w);
+ TreeWidget tw = (TreeWidget) XtParent(w);
+ int i;
+
+ /*
+ * Remove the widget from its parent's sub-nodes list and
+ * make all this widget's sub-nodes sub-nodes of the parent.
+ */
+
+ if (tw->tree.tree_root == w) {
+ if (tc->tree.n_children > 0)
+ tw->tree.tree_root = tc->tree.children[0];
+ else
+ tw->tree.tree_root = NULL;
+ }
+
+ delete_node (tc->tree.parent, (Widget) w);
+ for (i = 0; i< tc->tree.n_children; i++)
+ insert_node (tc->tree.parent, tc->tree.children[i]);
+
+ layout_tree ((TreeWidget) (w->core.parent), FALSE);
+}
+
+/* ARGSUSED */
+static XtGeometryResult
+XawTreeGeometryManager(Widget w, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply)
+{
+
+ TreeWidget tw = (TreeWidget) w->core.parent;
+
+ /*
+ * No position changes allowed!.
+ */
+ if ((request->request_mode & CWX && request->x!=w->core.x)
+ ||(request->request_mode & CWY && request->y!=w->core.y))
+ return (XtGeometryNo);
+
+ /*
+ * Allow all resize requests.
+ */
+
+ if (request->request_mode & CWWidth)
+ w->core.width = request->width;
+ if (request->request_mode & CWHeight)
+ w->core.height = request->height;
+ if (request->request_mode & CWBorderWidth)
+ w->core.border_width = request->border_width;
+
+ if (tw->tree.auto_reconfigure) layout_tree (tw, FALSE);
+ return (XtGeometryYes);
+}
+
+static void
+XawTreeChangeManaged(Widget gw)
+{
+ layout_tree ((TreeWidget) gw, FALSE);
+}
+
+
+static void
+XawTreeDestroy(Widget gw)
+{
+ TreeWidget w = (TreeWidget) gw;
+
+ XtReleaseGC (gw, w->tree.gc);
+ if (w->tree.largest) XtFree ((char *) w->tree.largest);
+}
+
+
+/* ARGSUSED */
+static void
+XawTreeRedisplay(Widget gw, XEvent *event, Region region)
+{
+ TreeWidget tw = (TreeWidget) gw;
+
+#ifndef OLDXAW
+ if (tw->tree.display_list)
+ XawRunDisplayList(gw, tw->tree.display_list, event, region);
+#endif
+
+ /*
+ * If the Tree widget is visible, visit each managed child.
+ */
+ if (tw->core.visible) {
+ Cardinal i;
+ int j;
+ Display *dpy = XtDisplay (tw);
+ Window w = XtWindow (tw);
+
+ for (i = 0; i < tw->composite.num_children; i++) {
+ Widget child = tw->composite.children[i];
+ TreeConstraints tc = TREE_CONSTRAINT(child);
+
+ /*
+ * Don't draw lines from the fake tree_root.
+ */
+ if (child != tw->tree.tree_root && tc->tree.n_children) {
+ int srcx = child->core.x + child->core.border_width;
+ int srcy = child->core.y + child->core.border_width;
+
+ switch (tw->tree.gravity) {
+ case WestGravity:
+ srcx += child->core.width + child->core.border_width;
+ /* fall through */
+ case EastGravity:
+ srcy += child->core.height / 2;
+ break;
+
+ case NorthGravity:
+ srcy += child->core.height + child->core.border_width;
+ /* fall through */
+ case SouthGravity:
+ srcx += child->core.width / 2;
+ break;
+ }
+
+ for (j = 0; j < tc->tree.n_children; j++) {
+ Widget k = tc->tree.children[j];
+ GC gc = (tc->tree.gc ? tc->tree.gc : tw->tree.gc);
+
+ switch (tw->tree.gravity) {
+ case WestGravity:
+ /*
+ * right center to left center
+ */
+ XDrawLine (dpy, w, gc, srcx, srcy,
+ (int) k->core.x,
+ (k->core.y + ((int) k->core.border_width) +
+ ((int) k->core.height) / 2));
+ break;
+
+ case NorthGravity:
+ /*
+ * bottom center to top center
+ */
+ XDrawLine (dpy, w, gc, srcx, srcy,
+ (k->core.x + ((int) k->core.border_width) +
+ ((int) k->core.width) / 2),
+ (int) k->core.y);
+ break;
+
+ case EastGravity:
+ /*
+ * left center to right center
+ */
+ XDrawLine (dpy, w, gc, srcx, srcy,
+ (k->core.x +
+ (((int) k->core.border_width) << 1) +
+ (int) k->core.width),
+ (k->core.y + ((int) k->core.border_width) +
+ ((int) k->core.height) / 2));
+ break;
+
+ case SouthGravity:
+ /*
+ * top center to bottom center
+ */
+ XDrawLine (dpy, w, gc, srcx, srcy,
+ (k->core.x + ((int) k->core.border_width) +
+ ((int) k->core.width) / 2),
+ (k->core.y +
+ (((int) k->core.border_width) << 1) +
+ (int) k->core.height));
+ break;
+ }
+ }
+ }
+ }
+ }
+}
+
+static XtGeometryResult
+XawTreeQueryGeometry(Widget w, XtWidgetGeometry *intended,
+ XtWidgetGeometry *preferred)
+{
+ TreeWidget tw = (TreeWidget) w;
+
+ preferred->request_mode = (CWWidth | CWHeight);
+ preferred->width = tw->tree.maxwidth;
+ preferred->height = tw->tree.maxheight;
+
+ if (((intended->request_mode & (CWWidth | CWHeight)) ==
+ (CWWidth | CWHeight)) &&
+ intended->width == preferred->width &&
+ intended->height == preferred->height)
+ return XtGeometryYes;
+ else if (preferred->width == w->core.width &&
+ preferred->height == w->core.height)
+ return XtGeometryNo;
+ else
+ return XtGeometryAlmost;
+}
+
+
+/*****************************************************************************
+ * *
+ * tree layout algorithm *
+ * *
+ * Each node in the tree is "shrink-wrapped" with a minimal bounding *
+ * rectangle, laid next to its siblings (with a small about of padding in *
+ * between) and then wrapped with their parent. Parents are centered about *
+ * their children (or vice versa if the parent is larger than the children). *
+ * *
+ *****************************************************************************/
+
+static void
+compute_bounding_box_subtree(TreeWidget tree, Widget w, int depth)
+{
+ TreeConstraints tc = TREE_CONSTRAINT(w); /* info attached to all kids */
+ int i;
+ Bool horiz = IsHorizontal (tree);
+ Dimension newwidth, newheight;
+ Dimension bw2 = w->core.border_width * 2;
+
+ /*
+ * Set the max-size per level.
+ */
+ if (depth >= tree->tree.n_largest) {
+ initialize_dimensions (&tree->tree.largest,
+ &tree->tree.n_largest, depth + 1);
+ }
+ newwidth = ((horiz ? w->core.width : w->core.height) + bw2);
+ if (tree->tree.largest[depth] < newwidth)
+ tree->tree.largest[depth] = newwidth;
+
+
+ /*
+ * initialize
+ */
+ tc->tree.bbwidth = w->core.width + bw2;
+ tc->tree.bbheight = w->core.height + bw2;
+
+ if (tc->tree.n_children == 0) return;
+
+ /*
+ * Figure the size of the opposite dimension (vertical if tree is
+ * horizontal, else vice versa). The other dimension will be set
+ * in the second pass once we know the maximum dimensions.
+ */
+ newwidth = 0;
+ newheight = 0;
+ for (i = 0; i < tc->tree.n_children; i++) {
+ Widget child = tc->tree.children[i];
+ TreeConstraints cc = TREE_CONSTRAINT(child);
+
+ compute_bounding_box_subtree (tree, child, depth + 1);
+
+ if (horiz) {
+ if (newwidth < cc->tree.bbwidth) newwidth = cc->tree.bbwidth;
+ newheight += tree->tree.vpad + cc->tree.bbheight;
+ } else {
+ if (newheight < cc->tree.bbheight) newheight = cc->tree.bbheight;
+ newwidth += tree->tree.hpad + cc->tree.bbwidth;
+ }
+ }
+
+
+ tc->tree.bbsubwidth = newwidth;
+ tc->tree.bbsubheight = newheight;
+
+ /*
+ * Now fit parent onto side (or top) of bounding box and correct for
+ * extra padding. Be careful of unsigned arithmetic.
+ */
+ if (horiz) {
+ tc->tree.bbwidth += tree->tree.hpad + newwidth;
+ newheight -= tree->tree.vpad;
+ if (newheight > tc->tree.bbheight) tc->tree.bbheight = newheight;
+ } else {
+ tc->tree.bbheight += tree->tree.vpad + newheight;
+ newwidth -= tree->tree.hpad;
+ if (newwidth > tc->tree.bbwidth) tc->tree.bbwidth = newwidth;
+ }
+}
+
+
+static void
+set_positions(TreeWidget tw, Widget w, int level)
+{
+ int i;
+
+ if (w) {
+ TreeConstraints tc = TREE_CONSTRAINT(w);
+
+ if (level > 0) {
+ /*
+ * mirror if necessary
+ */
+ switch (tw->tree.gravity) {
+ case EastGravity:
+ tc->tree.x = (((Position) tw->tree.maxwidth) -
+ ((Position) w->core.width) - tc->tree.x);
+ break;
+
+ case SouthGravity:
+ tc->tree.y = (((Position) tw->tree.maxheight) -
+ ((Position) w->core.height) - tc->tree.y);
+ break;
+ }
+
+ /*
+ * Move the widget into position.
+ */
+ XtMoveWidget (w, tc->tree.x, tc->tree.y);
+ }
+
+ /*
+ * Set the positions of all children.
+ */
+ for (i = 0; i < tc->tree.n_children; i++)
+ set_positions (tw, tc->tree.children[i], level + 1);
+ }
+}
+
+
+static void
+arrange_subtree(TreeWidget tree, Widget w, int depth, int x, int y)
+{
+ TreeConstraints tc = TREE_CONSTRAINT(w); /* info attached to all kids */
+ TreeConstraints firstcc, lastcc;
+ int i;
+ int newx, newy;
+ Bool horiz = IsHorizontal (tree);
+ Widget child = NULL;
+ Dimension tmp;
+ Dimension bw2 = w->core.border_width * 2;
+ Bool relayout = True;
+
+
+ /*
+ * If no children, then just lay out where requested.
+ */
+ tc->tree.x = x;
+ tc->tree.y = y;
+
+ if (horiz) {
+ int myh = (w->core.height + bw2);
+
+ if (myh > (int)tc->tree.bbsubheight) {
+ y += (myh - (int)tc->tree.bbsubheight) / 2;
+ relayout = False;
+ }
+ } else {
+ int myw = (w->core.width + bw2);
+
+ if (myw > (int)tc->tree.bbsubwidth) {
+ x += (myw - (int)tc->tree.bbsubwidth) / 2;
+ relayout = False;
+ }
+ }
+
+ if ((tmp = ((Dimension) x) + tc->tree.bbwidth) > tree->tree.maxwidth)
+ tree->tree.maxwidth = tmp;
+ if ((tmp = ((Dimension) y) + tc->tree.bbheight) > tree->tree.maxheight)
+ tree->tree.maxheight = tmp;
+
+ if (tc->tree.n_children == 0) return;
+
+
+ /*
+ * Have children, so walk down tree laying out children, then laying
+ * out parents.
+ */
+ if (horiz) {
+ newx = x + tree->tree.largest[depth];
+ if (depth > 0) newx += tree->tree.hpad;
+ newy = y;
+ } else {
+ newx = x;
+ newy = y + tree->tree.largest[depth];
+ if (depth > 0) newy += tree->tree.vpad;
+ }
+
+ for (i = 0; i < tc->tree.n_children; i++) {
+ TreeConstraints cc;
+
+ child = tc->tree.children[i]; /* last value is used outside loop */
+ cc = TREE_CONSTRAINT(child);
+
+ arrange_subtree (tree, child, depth + 1, newx, newy);
+ if (horiz) {
+ newy += tree->tree.vpad + cc->tree.bbheight;
+ } else {
+ newx += tree->tree.hpad + cc->tree.bbwidth;
+ }
+ }
+
+ /*
+ * now layout parent between first and last children
+ */
+ if (relayout) {
+ Position adjusted;
+ firstcc = TREE_CONSTRAINT (tc->tree.children[0]);
+ lastcc = TREE_CONSTRAINT (child);
+
+ /* Adjustments are disallowed if they result in a position above
+ * or to the left of the originally requested position, because
+ * this could collide with the position of the previous sibling.
+ */
+ if (horiz) {
+ tc->tree.x = x;
+ adjusted = firstcc->tree.y +
+ ((lastcc->tree.y + (Position) child->core.height +
+ (Position) child->core.border_width * 2 -
+ firstcc->tree.y - (Position) w->core.height -
+ (Position) w->core.border_width * 2 + 1) / 2);
+ if (adjusted > tc->tree.y) tc->tree.y = adjusted;
+ } else {
+ adjusted = firstcc->tree.x +
+ ((lastcc->tree.x + (Position) child->core.width +
+ (Position) child->core.border_width * 2 -
+ firstcc->tree.x - (Position) w->core.width -
+ (Position) w->core.border_width * 2 + 1) / 2);
+ if (adjusted > tc->tree.x) tc->tree.x = adjusted;
+ tc->tree.y = y;
+ }
+ }
+}
+
+static void
+set_tree_size(TreeWidget tw, Bool insetvalues,
+ unsigned int width, unsigned int height)
+{
+ if (insetvalues) {
+ tw->core.width = width;
+ tw->core.height = height;
+ } else {
+ Dimension replyWidth = 0, replyHeight = 0;
+ XtGeometryResult result = XtMakeResizeRequest ((Widget) tw,
+ width, height,
+ &replyWidth,
+ &replyHeight);
+ /*
+ * Accept any compromise.
+ */
+ if (result == XtGeometryAlmost)
+ XtMakeResizeRequest ((Widget) tw, replyWidth, replyHeight,
+ (Dimension *) NULL, (Dimension *) NULL);
+ }
+ return;
+}
+
+static void
+layout_tree(TreeWidget tw, Bool insetvalues)
+{
+ int i;
+ Dimension *dp;
+
+ /*
+ * Do a depth-first search computing the width and height of the bounding
+ * box for the tree at that position (and below). Then, walk again using
+ * this information to layout the children at each level.
+ */
+
+ if (tw->tree.tree_root == NULL)
+ return;
+
+ tw->tree.maxwidth = tw->tree.maxheight = 0;
+ for (i = 0, dp = tw->tree.largest; i < tw->tree.n_largest; i++, dp++)
+ *dp = 0;
+ initialize_dimensions (&tw->tree.largest, &tw->tree.n_largest,
+ tw->tree.n_largest);
+ compute_bounding_box_subtree (tw, tw->tree.tree_root, 0);
+
+ /*
+ * Second pass to do final layout. Each child's bounding box is stacked
+ * on top of (if horizontal, else next to) on top of its siblings. The
+ * parent is centered between the first and last children.
+ */
+ arrange_subtree (tw, tw->tree.tree_root, 0, 0, 0);
+
+ /*
+ * Move each widget into place.
+ */
+ set_tree_size (tw, insetvalues, tw->tree.maxwidth, tw->tree.maxheight);
+ set_positions (tw, tw->tree.tree_root, 0);
+
+ /*
+ * And redisplay.
+ */
+ if (XtIsRealized ((Widget) tw)) {
+ XClearArea (XtDisplay(tw), XtWindow((Widget)tw), 0, 0, 0, 0, True);
+ }
+}
+
+
+
+/*****************************************************************************
+ * *
+ * Public Routines *
+ * *
+ *****************************************************************************/
+
+void
+XawTreeForceLayout(Widget tree)
+{
+ layout_tree ((TreeWidget) tree, FALSE);
+}
+
diff --git a/libXaw/src/Vendor.c b/libXaw/src/Vendor.c
index 03199b59f..88398906f 100644
--- a/libXaw/src/Vendor.c
+++ b/libXaw/src/Vendor.c
@@ -1,527 +1,524 @@
-/* $Xorg: Vendor.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Vendor.c,v 1.8 2001/12/14 19:54:45 dawes Exp $ */
-
-/*
- * This is a copy of Xt/Vendor.c with an additional ClassInitialize
- * procedure to register Xmu resource type converters, and all the
- * monkey business associated with input methods...
- *
- */
-
-/* Make sure all wm properties can make it out of the resource manager */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/ShellP.h>
-#include <X11/VendorP.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/Editres.h>
-#include <X11/Xmu/ExtAgent.h>
-
-/* The following two headers are for the input method. */
-
-#include <X11/Xaw/VendorEP.h>
-#include <X11/Xaw/XawImP.h>
-
-/*
- * Class Methods
- */
-static void XawVendorShellChangeManaged(Widget);
-static Boolean XawCvtCompoundTextToString(Display*, XrmValuePtr, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-static void XawVendorShellClassInitialize(void);
-static XtGeometryResult XawVendorShellGeometryManager(Widget,
- XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawVendorShellExtClassInitialize(void);
-static void XawVendorShellExtDestroy(Widget);
-static void XawVendorShellExtInitialize(Widget, Widget, ArgList, Cardinal*);
-void XawVendorShellExtResize(Widget);
-static Boolean XawVendorShellExtSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-static void XawVendorShellClassPartInit(WidgetClass);
-static void XawVendorShellInitialize(Widget, Widget, ArgList, Cardinal*);
-static void XawVendorShellRealize(Widget, Mask*, XSetWindowAttributes*);
-static Boolean XawVendorShellSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * External
- */
-void XawVendorStructureNotifyHandler(Widget, XtPointer, XEvent*, Boolean*);
-
-static XtResource resources[] = {
- {XtNinput, XtCInput, XtRBool, sizeof(Bool),
- XtOffsetOf(VendorShellRec, wm.wm_hints.input),
- XtRImmediate, (XtPointer)True}
-};
-
-/***************************************************************************
- *
- * Vendor shell class record
- *
- ***************************************************************************/
-
-#if defined(__UNIXOS2__) || defined(__CYGWIN__) || defined(__MINGW32__)
-/* to fix the EditRes problem because of wrong linker semantics */
-extern WidgetClass vendorShellWidgetClass; /* from Xt/Vendor.c */
-extern VendorShellClassRec _XawVendorShellClassRec;
-extern void _XawFixupVendorShell();
-
-#if defined(__UNIXOS2__)
-unsigned long _DLL_InitTerm(unsigned long mod,unsigned long flag)
-{
- switch (flag) {
- case 0: /*called on init*/
- _CRT_init();
- vendorShellWidgetClass = (WidgetClass)(&_XawVendorShellClassRec);
- _XawFixupVendorShell();
- return 1;
- case 1: /*called on exit*/
- return 1;
- default:
- return 0;
- }
-}
-#endif
-
-#if defined(__CYGWIN__) || defined(__MINGW32__) && !defined(_MSC_VER)
-int __stdcall
-DllMain(unsigned long mod_handle, unsigned long flag, void *routine)
-{
- switch (flag)
- {
- case 1: /* DLL_PROCESS_ATTACH - process attach */
- vendorShellWidgetClass = (WidgetClass)(&_XawVendorShellClassRec);
- _XawFixupVendorShell();
- break;
- case 0: /* DLL_PROCESS_DETACH - process detach */
- break;
- }
- return 1;
-}
-#endif
-
-#define vendorShellClassRec _XawVendorShellClassRec
-
-#endif
-
-static CompositeClassExtensionRec vendorCompositeExt = {
- /* next_extension */ NULL,
- /* record_type */ NULLQUARK,
- /* version */ XtCompositeExtensionVersion,
- /* record_size */ sizeof (CompositeClassExtensionRec),
- /* accepts_objects */ TRUE,
- /* allows_change_managed_set */ FALSE
-};
-
-#define SuperClass (&wmShellClassRec)
-externaldef(vendorshellclassrec) VendorShellClassRec vendorShellClassRec = {
- {
- /* superclass */ (WidgetClass)SuperClass,
- /* class_name */ "VendorShell",
- /* size */ sizeof(VendorShellRec),
- /* class_initialize */ XawVendorShellClassInitialize,
- /* class_part_init */ XawVendorShellClassPartInit,
- /* Class init'ed ? */ FALSE,
- /* initialize */ XawVendorShellInitialize,
- /* initialize_hook */ NULL,
- /* realize */ XawVendorShellRealize,
- /* actions */ NULL,
- /* num_actions */ 0,
- /* resources */ resources,
- /* resource_count */ XtNumber(resources),
- /* xrm_class */ NULLQUARK,
- /* compress_motion */ FALSE,
- /* compress_exposure */ TRUE,
- /* compress_enterleave*/ FALSE,
- /* visible_interest */ FALSE,
- /* destroy */ NULL,
- /* resize */ XawVendorShellExtResize,
- /* expose */ NULL,
- /* set_values */ XawVendorShellSetValues,
- /* set_values_hook */ NULL,
- /* set_values_almost */ XtInheritSetValuesAlmost,
- /* get_values_hook */ NULL,
- /* accept_focus */ NULL,
- /* intrinsics version */ XtVersion,
- /* callback offsets */ NULL,
- /* tm_table */ NULL,
- /* query_geometry */ NULL,
- /* display_accelerator*/ NULL,
- /* extension */ NULL
- },{
- /* geometry_manager */ XawVendorShellGeometryManager,
- /* change_managed */ XawVendorShellChangeManaged,
- /* insert_child */ XtInheritInsertChild,
- /* delete_child */ XtInheritDeleteChild,
- /* extension */ (XtPointer) &vendorCompositeExt
- },{
- /* extension */ NULL
- },{
- /* extension */ NULL
- },{
- /* extension */ NULL
- }
-};
-
-#ifndef __UNIXOS2__
-externaldef(vendorshellwidgetclass) WidgetClass vendorShellWidgetClass =
- (WidgetClass) (&vendorShellClassRec);
-#endif
-
-/***************************************************************************
- *
- * The following section is for the Vendor shell Extension class record
- *
- ***************************************************************************/
-
-static XtResource ext_resources[] = {
- {XtNinputMethod, XtCInputMethod, XtRString, sizeof(String),
- XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.input_method),
- XtRString, (XtPointer)NULL},
- {XtNpreeditType, XtCPreeditType, XtRString, sizeof(String),
- XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.preedit_type),
- XtRString, (XtPointer)"OverTheSpot,OffTheSpot,Root"},
- {XtNopenIm, XtCOpenIm, XtRBoolean, sizeof(Boolean),
- XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.open_im),
- XtRImmediate, (XtPointer)TRUE},
- {XtNsharedIc, XtCSharedIc, XtRBoolean, sizeof(Boolean),
- XtOffsetOf(XawVendorShellExtRec, vendor_ext.ic.shared_ic),
- XtRImmediate, (XtPointer)FALSE}
-};
-
-externaldef(vendorshellextclassrec) XawVendorShellExtClassRec
- xawvendorShellExtClassRec = {
- {
- /* superclass */ (WidgetClass)&objectClassRec,
- /* class_name */ "VendorShellExt",
- /* size */ sizeof(XawVendorShellExtRec),
- /* class_initialize */ XawVendorShellExtClassInitialize,
- /* class_part_initialize*/ NULL,
- /* Class init'ed ? */ FALSE,
- /* initialize */ XawVendorShellExtInitialize,
- /* initialize_hook */ NULL,
- /* pad */ NULL,
- /* pad */ NULL,
- /* pad */ 0,
- /* resources */ ext_resources,
- /* resource_count */ XtNumber(ext_resources),
- /* xrm_class */ NULLQUARK,
- /* pad */ FALSE,
- /* pad */ FALSE,
- /* pad */ FALSE,
- /* pad */ FALSE,
- /* destroy */ XawVendorShellExtDestroy,
- /* pad */ NULL,
- /* pad */ NULL,
- /* set_values */ XawVendorShellExtSetValues,
- /* set_values_hook */ NULL,
- /* pad */ NULL,
- /* get_values_hook */ NULL,
- /* pad */ NULL,
- /* version */ XtVersion,
- /* callback_offsets */ NULL,
- /* pad */ NULL,
- /* pad */ NULL,
- /* pad */ NULL,
- /* extension */ NULL
- },{
- /* extension */ NULL
- }
-};
-
-externaldef(xawvendorshellwidgetclass) WidgetClass
- xawvendorShellExtWidgetClass = (WidgetClass) (&xawvendorShellExtClassRec);
-
-
-/*ARGSUSED*/
-static Boolean
-XawCvtCompoundTextToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
- XrmValue *fromVal, XrmValue *toVal,
- XtPointer *cvt_data)
-{
- XTextProperty prop;
- char **list;
- int count;
- static char *mbs = NULL;
- int len;
-
- prop.value = (unsigned char *)fromVal->addr;
- prop.encoding = XA_COMPOUND_TEXT(dpy);
- prop.format = 8;
- prop.nitems = fromVal->size;
-
- if(XmbTextPropertyToTextList(dpy, &prop, &list, &count) < Success) {
- XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
- "converter", "XmbTextPropertyToTextList", "XawError",
- "conversion from CT to MB failed.", NULL, NULL);
- return False;
- }
- len = strlen(*list);
- toVal->size = len;
- mbs = XtRealloc(mbs, len + 1); /* keep buffer because no one call free :( */
- strcpy(mbs, *list);
- XFreeStringList(list);
- toVal->addr = (XtPointer)mbs;
- return True;
-}
-
-static void
-XawVendorShellClassInitialize(void)
-{
- static XtConvertArgRec screenConvertArg[] = {
- {XtWidgetBaseOffset, (XtPointer) XtOffsetOf(WidgetRec, core.screen),
- sizeof(Screen *)}
- };
-
- XtAddConverter(XtRString, XtRCursor, XmuCvtStringToCursor,
- screenConvertArg, XtNumber(screenConvertArg));
-
- XtAddConverter(XtRString, XtRBitmap, XmuCvtStringToBitmap,
- screenConvertArg, XtNumber(screenConvertArg));
-
- XtSetTypeConverter("CompoundText", XtRString, XawCvtCompoundTextToString,
- NULL, 0, XtCacheNone, NULL);
-}
-
-static void
-XawVendorShellClassPartInit(WidgetClass cclass)
-{
- CompositeClassExtension ext;
- VendorShellWidgetClass vsclass = (VendorShellWidgetClass)cclass;
-
- if ((ext = (CompositeClassExtension)
- XtGetClassExtension (cclass,
- XtOffsetOf(CompositeClassRec,
- composite_class.extension),
- NULLQUARK, 1L, (Cardinal) 0)) == NULL) {
- ext = (CompositeClassExtension) XtNew (CompositeClassExtensionRec);
- if (ext != NULL) {
- ext->next_extension = vsclass->composite_class.extension;
- ext->record_type = NULLQUARK;
- ext->version = XtCompositeExtensionVersion;
- ext->record_size = sizeof (CompositeClassExtensionRec);
- ext->accepts_objects = TRUE;
- ext->allows_change_managed_set = FALSE;
- vsclass->composite_class.extension = (XtPointer) ext;
- }
- }
-}
-
-#if defined(__osf__) || defined(__UNIXOS2__) || defined(__CYGWIN__) || defined(__MINGW32__)
-/* stupid OSF/1 shared libraries have the wrong semantics */
-/* symbols do not get resolved external to the shared library */
-void _XawFixupVendorShell()
-{
- transientShellWidgetClass->core_class.superclass =
- (WidgetClass) &vendorShellClassRec;
- topLevelShellWidgetClass->core_class.superclass =
- (WidgetClass) &vendorShellClassRec;
-}
-#endif
-
-/* ARGSUSED */
-static void
-XawVendorShellInitialize(Widget req, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- XtAddEventHandler(cnew, (EventMask) 0, TRUE, _XEditResCheckMessages, NULL);
- XtAddEventHandler(cnew, (EventMask) 0, TRUE, XmuRegisterExternalAgent, NULL);
- XtCreateWidget("shellext", xawvendorShellExtWidgetClass,
- cnew, args, *num_args);
-}
-
-/* ARGSUSED */
-static Boolean
-XawVendorShellSetValues(Widget old, Widget ref, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- return FALSE;
-}
-
-static void
-XawVendorShellRealize(Widget wid, Mask *vmask, XSetWindowAttributes *attr)
-{
- WidgetClass super = wmShellWidgetClass;
-
- /* Make my superclass do all the dirty work */
-
- (*super->core_class.realize) (wid, vmask, attr);
- _XawImRealize(wid);
-}
-
-
-static void
-XawVendorShellExtClassInitialize(void)
-{
-}
-
-/* ARGSUSED */
-static void
-XawVendorShellExtInitialize(Widget req, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- _XawImInitialize(cnew->core.parent, cnew);
-}
-
-/* ARGSUSED */
-static void
-XawVendorShellExtDestroy(Widget w)
-{
- _XawImDestroy( w->core.parent, w );
-}
-
-/* ARGSUSED */
-static Boolean
-XawVendorShellExtSetValues(Widget old, Widget ref, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- return FALSE;
-}
-
-void
-XawVendorShellExtResize(Widget w)
-{
- ShellWidget sw = (ShellWidget) w;
- Widget childwid;
- Cardinal i;
- int core_height;
-
- _XawImResizeVendorShell( w );
- core_height = _XawImGetShellHeight( w );
- for( i = 0; i < sw->composite.num_children; i++ ) {
- if( XtIsManaged( sw->composite.children[ i ] ) ) {
- childwid = sw->composite.children[ i ];
- XtResizeWidget( childwid, sw->core.width, core_height,
- childwid->core.border_width );
- }
- }
-}
-
-/*ARGSUSED*/
-void
-XawVendorStructureNotifyHandler(Widget w, XtPointer closure, XEvent *event,
- Boolean *continue_to_dispatch)
-{
- XawVendorShellExtResize(w);
-}
-
-/*ARGSUSED*/
-static XtGeometryResult
-XawVendorShellGeometryManager(Widget wid, XtWidgetGeometry *request,
- XtWidgetGeometry *reply)
-{
- ShellWidget shell = (ShellWidget)(wid->core.parent);
- XtWidgetGeometry my_request;
-
- if(shell->shell.allow_shell_resize == FALSE && XtIsRealized(wid))
- return(XtGeometryNo);
-
- if (request->request_mode & (CWX | CWY))
- return(XtGeometryNo);
-
- /* %%% worry about XtCWQueryOnly */
- my_request.request_mode = 0;
- if (request->request_mode & CWWidth) {
- my_request.width = request->width;
- my_request.request_mode |= CWWidth;
- }
- if (request->request_mode & CWHeight) {
- my_request.height = request->height
- + _XawImGetImAreaHeight( wid );
- my_request.request_mode |= CWHeight;
- }
- if (request->request_mode & CWBorderWidth) {
- my_request.border_width = request->border_width;
- my_request.request_mode |= CWBorderWidth;
- }
- if (XtMakeGeometryRequest((Widget)shell, &my_request, NULL)
- == XtGeometryYes) {
- /* assert: if (request->request_mode & CWWidth) then
- * shell->core.width == request->width
- * assert: if (request->request_mode & CWHeight) then
- * shell->core.height == request->height
- *
- * so, whatever the WM sized us to (if the Shell requested
- * only one of the two) is now the correct child size
- */
-
- wid->core.width = shell->core.width;
- wid->core.height = shell->core.height;
- if (request->request_mode & CWBorderWidth) {
- wid->core.x = wid->core.y = -request->border_width;
- }
- _XawImCallVendorShellExtResize(wid);
- return XtGeometryYes;
- } else return XtGeometryNo;
-}
-
-static void
-XawVendorShellChangeManaged(Widget wid)
-{
- ShellWidget w = (ShellWidget) wid;
- Widget* childP;
- int i;
-
- (*SuperClass->composite_class.change_managed)(wid);
- for (i = w->composite.num_children, childP = w->composite.children;
- i; i--, childP++) {
- if (XtIsManaged(*childP)) {
- XtSetKeyboardFocus(wid, *childP);
- break;
- }
- }
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+/*
+ * This is a copy of Xt/Vendor.c with an additional ClassInitialize
+ * procedure to register Xmu resource type converters, and all the
+ * monkey business associated with input methods...
+ *
+ */
+
+/* Make sure all wm properties can make it out of the resource manager */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/ShellP.h>
+#include <X11/VendorP.h>
+#include <X11/Xmu/Converters.h>
+#include <X11/Xmu/Atoms.h>
+#include <X11/Xmu/Editres.h>
+#include <X11/Xmu/ExtAgent.h>
+
+/* The following two headers are for the input method. */
+
+#include <X11/Xaw/VendorEP.h>
+#include <X11/Xaw/XawImP.h>
+
+/*
+ * Class Methods
+ */
+static void XawVendorShellChangeManaged(Widget);
+static Boolean XawCvtCompoundTextToString(Display*, XrmValuePtr, Cardinal*,
+ XrmValue*, XrmValue*, XtPointer*);
+static void XawVendorShellClassInitialize(void);
+static XtGeometryResult XawVendorShellGeometryManager(Widget,
+ XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawVendorShellExtClassInitialize(void);
+static void XawVendorShellExtDestroy(Widget);
+static void XawVendorShellExtInitialize(Widget, Widget, ArgList, Cardinal*);
+void XawVendorShellExtResize(Widget);
+static Boolean XawVendorShellExtSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+static void XawVendorShellClassPartInit(WidgetClass);
+static void XawVendorShellInitialize(Widget, Widget, ArgList, Cardinal*);
+static void XawVendorShellRealize(Widget, Mask*, XSetWindowAttributes*);
+static Boolean XawVendorShellSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * External
+ */
+void XawVendorStructureNotifyHandler(Widget, XtPointer, XEvent*, Boolean*);
+
+static XtResource resources[] = {
+ {XtNinput, XtCInput, XtRBool, sizeof(Bool),
+ XtOffsetOf(VendorShellRec, wm.wm_hints.input),
+ XtRImmediate, (XtPointer)True}
+};
+
+/***************************************************************************
+ *
+ * Vendor shell class record
+ *
+ ***************************************************************************/
+
+#if defined(__UNIXOS2__) || defined(__CYGWIN__) || defined(__MINGW32__)
+/* to fix the EditRes problem because of wrong linker semantics */
+extern WidgetClass vendorShellWidgetClass; /* from Xt/Vendor.c */
+extern VendorShellClassRec _XawVendorShellClassRec;
+extern void _XawFixupVendorShell();
+
+#if defined(__UNIXOS2__)
+unsigned long _DLL_InitTerm(unsigned long mod,unsigned long flag)
+{
+ switch (flag) {
+ case 0: /*called on init*/
+ _CRT_init();
+ vendorShellWidgetClass = (WidgetClass)(&_XawVendorShellClassRec);
+ _XawFixupVendorShell();
+ return 1;
+ case 1: /*called on exit*/
+ return 1;
+ default:
+ return 0;
+ }
+}
+#endif
+
+#if defined(__CYGWIN__) || defined(__MINGW32__) && !defined(_MSC_VER)
+int __stdcall
+DllMain(unsigned long mod_handle, unsigned long flag, void *routine)
+{
+ switch (flag)
+ {
+ case 1: /* DLL_PROCESS_ATTACH - process attach */
+ vendorShellWidgetClass = (WidgetClass)(&_XawVendorShellClassRec);
+ _XawFixupVendorShell();
+ break;
+ case 0: /* DLL_PROCESS_DETACH - process detach */
+ break;
+ }
+ return 1;
+}
+#endif
+
+#define vendorShellClassRec _XawVendorShellClassRec
+
+#endif
+
+static CompositeClassExtensionRec vendorCompositeExt = {
+ /* next_extension */ NULL,
+ /* record_type */ NULLQUARK,
+ /* version */ XtCompositeExtensionVersion,
+ /* record_size */ sizeof (CompositeClassExtensionRec),
+ /* accepts_objects */ TRUE,
+ /* allows_change_managed_set */ FALSE
+};
+
+#define SuperClass (&wmShellClassRec)
+externaldef(vendorshellclassrec) VendorShellClassRec vendorShellClassRec = {
+ {
+ /* superclass */ (WidgetClass)SuperClass,
+ /* class_name */ "VendorShell",
+ /* size */ sizeof(VendorShellRec),
+ /* class_initialize */ XawVendorShellClassInitialize,
+ /* class_part_init */ XawVendorShellClassPartInit,
+ /* Class init'ed ? */ FALSE,
+ /* initialize */ XawVendorShellInitialize,
+ /* initialize_hook */ NULL,
+ /* realize */ XawVendorShellRealize,
+ /* actions */ NULL,
+ /* num_actions */ 0,
+ /* resources */ resources,
+ /* resource_count */ XtNumber(resources),
+ /* xrm_class */ NULLQUARK,
+ /* compress_motion */ FALSE,
+ /* compress_exposure */ TRUE,
+ /* compress_enterleave*/ FALSE,
+ /* visible_interest */ FALSE,
+ /* destroy */ NULL,
+ /* resize */ XawVendorShellExtResize,
+ /* expose */ NULL,
+ /* set_values */ XawVendorShellSetValues,
+ /* set_values_hook */ NULL,
+ /* set_values_almost */ XtInheritSetValuesAlmost,
+ /* get_values_hook */ NULL,
+ /* accept_focus */ NULL,
+ /* intrinsics version */ XtVersion,
+ /* callback offsets */ NULL,
+ /* tm_table */ NULL,
+ /* query_geometry */ NULL,
+ /* display_accelerator*/ NULL,
+ /* extension */ NULL
+ },{
+ /* geometry_manager */ XawVendorShellGeometryManager,
+ /* change_managed */ XawVendorShellChangeManaged,
+ /* insert_child */ XtInheritInsertChild,
+ /* delete_child */ XtInheritDeleteChild,
+ /* extension */ (XtPointer) &vendorCompositeExt
+ },{
+ /* extension */ NULL
+ },{
+ /* extension */ NULL
+ },{
+ /* extension */ NULL
+ }
+};
+
+#ifndef __UNIXOS2__
+externaldef(vendorshellwidgetclass) WidgetClass vendorShellWidgetClass =
+ (WidgetClass) (&vendorShellClassRec);
+#endif
+
+/***************************************************************************
+ *
+ * The following section is for the Vendor shell Extension class record
+ *
+ ***************************************************************************/
+
+static XtResource ext_resources[] = {
+ {XtNinputMethod, XtCInputMethod, XtRString, sizeof(String),
+ XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.input_method),
+ XtRString, (XtPointer)NULL},
+ {XtNpreeditType, XtCPreeditType, XtRString, sizeof(String),
+ XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.preedit_type),
+ XtRString, (XtPointer)"OverTheSpot,OffTheSpot,Root"},
+ {XtNopenIm, XtCOpenIm, XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.open_im),
+ XtRImmediate, (XtPointer)TRUE},
+ {XtNsharedIc, XtCSharedIc, XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(XawVendorShellExtRec, vendor_ext.ic.shared_ic),
+ XtRImmediate, (XtPointer)FALSE}
+};
+
+externaldef(vendorshellextclassrec) XawVendorShellExtClassRec
+ xawvendorShellExtClassRec = {
+ {
+ /* superclass */ (WidgetClass)&objectClassRec,
+ /* class_name */ "VendorShellExt",
+ /* size */ sizeof(XawVendorShellExtRec),
+ /* class_initialize */ XawVendorShellExtClassInitialize,
+ /* class_part_initialize*/ NULL,
+ /* Class init'ed ? */ FALSE,
+ /* initialize */ XawVendorShellExtInitialize,
+ /* initialize_hook */ NULL,
+ /* pad */ NULL,
+ /* pad */ NULL,
+ /* pad */ 0,
+ /* resources */ ext_resources,
+ /* resource_count */ XtNumber(ext_resources),
+ /* xrm_class */ NULLQUARK,
+ /* pad */ FALSE,
+ /* pad */ FALSE,
+ /* pad */ FALSE,
+ /* pad */ FALSE,
+ /* destroy */ XawVendorShellExtDestroy,
+ /* pad */ NULL,
+ /* pad */ NULL,
+ /* set_values */ XawVendorShellExtSetValues,
+ /* set_values_hook */ NULL,
+ /* pad */ NULL,
+ /* get_values_hook */ NULL,
+ /* pad */ NULL,
+ /* version */ XtVersion,
+ /* callback_offsets */ NULL,
+ /* pad */ NULL,
+ /* pad */ NULL,
+ /* pad */ NULL,
+ /* extension */ NULL
+ },{
+ /* extension */ NULL
+ }
+};
+
+externaldef(xawvendorshellwidgetclass) WidgetClass
+ xawvendorShellExtWidgetClass = (WidgetClass) (&xawvendorShellExtClassRec);
+
+
+/*ARGSUSED*/
+static Boolean
+XawCvtCompoundTextToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
+ XrmValue *fromVal, XrmValue *toVal,
+ XtPointer *cvt_data)
+{
+ XTextProperty prop;
+ char **list;
+ int count;
+ static char *mbs = NULL;
+ int len;
+
+ prop.value = (unsigned char *)fromVal->addr;
+ prop.encoding = XA_COMPOUND_TEXT(dpy);
+ prop.format = 8;
+ prop.nitems = fromVal->size;
+
+ if(XmbTextPropertyToTextList(dpy, &prop, &list, &count) < Success) {
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ "converter", "XmbTextPropertyToTextList", "XawError",
+ "conversion from CT to MB failed.", NULL, NULL);
+ return False;
+ }
+ len = strlen(*list);
+ toVal->size = len;
+ mbs = XtRealloc(mbs, len + 1); /* keep buffer because no one call free :( */
+ strcpy(mbs, *list);
+ XFreeStringList(list);
+ toVal->addr = (XtPointer)mbs;
+ return True;
+}
+
+static void
+XawVendorShellClassInitialize(void)
+{
+ static XtConvertArgRec screenConvertArg[] = {
+ {XtWidgetBaseOffset, (XtPointer) XtOffsetOf(WidgetRec, core.screen),
+ sizeof(Screen *)}
+ };
+
+ XtAddConverter(XtRString, XtRCursor, XmuCvtStringToCursor,
+ screenConvertArg, XtNumber(screenConvertArg));
+
+ XtAddConverter(XtRString, XtRBitmap, XmuCvtStringToBitmap,
+ screenConvertArg, XtNumber(screenConvertArg));
+
+ XtSetTypeConverter("CompoundText", XtRString, XawCvtCompoundTextToString,
+ NULL, 0, XtCacheNone, NULL);
+}
+
+static void
+XawVendorShellClassPartInit(WidgetClass cclass)
+{
+ CompositeClassExtension ext;
+ VendorShellWidgetClass vsclass = (VendorShellWidgetClass)cclass;
+
+ if ((ext = (CompositeClassExtension)
+ XtGetClassExtension (cclass,
+ XtOffsetOf(CompositeClassRec,
+ composite_class.extension),
+ NULLQUARK, 1L, (Cardinal) 0)) == NULL) {
+ ext = (CompositeClassExtension) XtNew (CompositeClassExtensionRec);
+ if (ext != NULL) {
+ ext->next_extension = vsclass->composite_class.extension;
+ ext->record_type = NULLQUARK;
+ ext->version = XtCompositeExtensionVersion;
+ ext->record_size = sizeof (CompositeClassExtensionRec);
+ ext->accepts_objects = TRUE;
+ ext->allows_change_managed_set = FALSE;
+ vsclass->composite_class.extension = (XtPointer) ext;
+ }
+ }
+}
+
+#if defined(__osf__) || defined(__UNIXOS2__) || defined(__CYGWIN__) || defined(__MINGW32__)
+/* stupid OSF/1 shared libraries have the wrong semantics */
+/* symbols do not get resolved external to the shared library */
+void _XawFixupVendorShell()
+{
+ transientShellWidgetClass->core_class.superclass =
+ (WidgetClass) &vendorShellClassRec;
+ topLevelShellWidgetClass->core_class.superclass =
+ (WidgetClass) &vendorShellClassRec;
+}
+#endif
+
+/* ARGSUSED */
+static void
+XawVendorShellInitialize(Widget req, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ XtAddEventHandler(cnew, (EventMask) 0, TRUE, _XEditResCheckMessages, NULL);
+ XtAddEventHandler(cnew, (EventMask) 0, TRUE, XmuRegisterExternalAgent, NULL);
+ XtCreateWidget("shellext", xawvendorShellExtWidgetClass,
+ cnew, args, *num_args);
+}
+
+/* ARGSUSED */
+static Boolean
+XawVendorShellSetValues(Widget old, Widget ref, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ return FALSE;
+}
+
+static void
+XawVendorShellRealize(Widget wid, Mask *vmask, XSetWindowAttributes *attr)
+{
+ WidgetClass super = wmShellWidgetClass;
+
+ /* Make my superclass do all the dirty work */
+
+ (*super->core_class.realize) (wid, vmask, attr);
+ _XawImRealize(wid);
+}
+
+
+static void
+XawVendorShellExtClassInitialize(void)
+{
+}
+
+/* ARGSUSED */
+static void
+XawVendorShellExtInitialize(Widget req, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ _XawImInitialize(cnew->core.parent, cnew);
+}
+
+/* ARGSUSED */
+static void
+XawVendorShellExtDestroy(Widget w)
+{
+ _XawImDestroy( w->core.parent, w );
+}
+
+/* ARGSUSED */
+static Boolean
+XawVendorShellExtSetValues(Widget old, Widget ref, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ return FALSE;
+}
+
+void
+XawVendorShellExtResize(Widget w)
+{
+ ShellWidget sw = (ShellWidget) w;
+ Widget childwid;
+ Cardinal i;
+ int core_height;
+
+ _XawImResizeVendorShell( w );
+ core_height = _XawImGetShellHeight( w );
+ for( i = 0; i < sw->composite.num_children; i++ ) {
+ if( XtIsManaged( sw->composite.children[ i ] ) ) {
+ childwid = sw->composite.children[ i ];
+ XtResizeWidget( childwid, sw->core.width, core_height,
+ childwid->core.border_width );
+ }
+ }
+}
+
+/*ARGSUSED*/
+void
+XawVendorStructureNotifyHandler(Widget w, XtPointer closure, XEvent *event,
+ Boolean *continue_to_dispatch)
+{
+ XawVendorShellExtResize(w);
+}
+
+/*ARGSUSED*/
+static XtGeometryResult
+XawVendorShellGeometryManager(Widget wid, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply)
+{
+ ShellWidget shell = (ShellWidget)(wid->core.parent);
+ XtWidgetGeometry my_request;
+
+ if(shell->shell.allow_shell_resize == FALSE && XtIsRealized(wid))
+ return(XtGeometryNo);
+
+ if (request->request_mode & (CWX | CWY))
+ return(XtGeometryNo);
+
+ /* %%% worry about XtCWQueryOnly */
+ my_request.request_mode = 0;
+ if (request->request_mode & CWWidth) {
+ my_request.width = request->width;
+ my_request.request_mode |= CWWidth;
+ }
+ if (request->request_mode & CWHeight) {
+ my_request.height = request->height
+ + _XawImGetImAreaHeight( wid );
+ my_request.request_mode |= CWHeight;
+ }
+ if (request->request_mode & CWBorderWidth) {
+ my_request.border_width = request->border_width;
+ my_request.request_mode |= CWBorderWidth;
+ }
+ if (XtMakeGeometryRequest((Widget)shell, &my_request, NULL)
+ == XtGeometryYes) {
+ /* assert: if (request->request_mode & CWWidth) then
+ * shell->core.width == request->width
+ * assert: if (request->request_mode & CWHeight) then
+ * shell->core.height == request->height
+ *
+ * so, whatever the WM sized us to (if the Shell requested
+ * only one of the two) is now the correct child size
+ */
+
+ wid->core.width = shell->core.width;
+ wid->core.height = shell->core.height;
+ if (request->request_mode & CWBorderWidth) {
+ wid->core.x = wid->core.y = -request->border_width;
+ }
+ _XawImCallVendorShellExtResize(wid);
+ return XtGeometryYes;
+ } else return XtGeometryNo;
+}
+
+static void
+XawVendorShellChangeManaged(Widget wid)
+{
+ ShellWidget w = (ShellWidget) wid;
+ Widget* childP;
+ int i;
+
+ (*SuperClass->composite_class.change_managed)(wid);
+ for (i = w->composite.num_children, childP = w->composite.children;
+ i; i--, childP++) {
+ if (XtIsManaged(*childP)) {
+ XtSetKeyboardFocus(wid, *childP);
+ break;
+ }
+ }
+}
diff --git a/libXaw/src/Viewport.c b/libXaw/src/Viewport.c
index 90c909e10..ac2857257 100644
--- a/libXaw/src/Viewport.c
+++ b/libXaw/src/Viewport.c
@@ -1,1102 +1,1099 @@
-/* $Xorg: Viewport.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/***********************************************************
-
-Copyright 1987, 1988, 1994, 1998 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.
-
-
-Copyright 1987, 1988 by 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 name of Digital 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.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xaw/Viewport.c,v 1.10 2001/08/23 00:03:20 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/Scrollbar.h>
-#include <X11/Xaw/ViewportP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Class Methods
- */
-static Boolean Layout(FormWidget, unsigned int, unsigned int, Bool);
-static void XawViewportChangeManaged(Widget);
-static void XawViewportInitialize(Widget, Widget, ArgList, Cardinal*);
-static void
-XawViewportConstraintInitialize(Widget, Widget, ArgList, Cardinal*);
-static XtGeometryResult XawViewportGeometryManager(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static XtGeometryResult XawViewportQueryGeometry(Widget,
- XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawViewportRealize(Widget, XtValueMask*, XSetWindowAttributes*);
-static void XawViewportResize(Widget);
-static Boolean XawViewportSetValues(Widget, Widget, Widget,
- ArgList, Cardinal*);
-
-/*
- * Prototypes
- */
-static void ComputeLayout(Widget, Bool, Bool);
-static void ComputeWithForceBars(Widget, Bool, XtWidgetGeometry*,
- int*, int*);
-static Widget CreateScrollbar(ViewportWidget, Bool);
-static XtGeometryResult GeometryRequestPlusScrollbar(ViewportWidget, Bool,
- XtWidgetGeometry*,
- XtWidgetGeometry*);
-static Bool GetGeometry(Widget, unsigned int, unsigned int);
-static void MoveChild(ViewportWidget, int, int);
-static XtGeometryResult QueryGeometry(ViewportWidget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void RedrawThumbs(ViewportWidget);
-static void ScrollUpDownProc(Widget, XtPointer, XtPointer);
-static void SendReport(ViewportWidget, unsigned int);
-static void SetBar(Widget, int, unsigned int, unsigned int);
-static XtGeometryResult TestSmaller(ViewportWidget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void ThumbProc(Widget, XtPointer, XtPointer);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(ViewportRec, viewport.field)
-static XtResource resources[] = {
- {
- XtNforceBars,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(forcebars),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNallowHoriz,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(allowhoriz),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNallowVert,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(allowvert),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNuseBottom,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(usebottom),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNuseRight,
- XtCBoolean,
- XtRBoolean,
- sizeof(Boolean),
- offset(useright),
- XtRImmediate,
- (XtPointer)False
- },
- {
- XtNreportCallback,
- XtCReportCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(report_callbacks),
- XtRImmediate,
- NULL
- },
-};
-#undef offset
-
-#define Superclass (&formClassRec)
-ViewportClassRec viewportClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Viewport", /* class_name */
- sizeof(ViewportRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_init */
- False, /* class_inited */
- XawViewportInitialize, /* initialize */
- NULL, /* initialize_hook */
- XawViewportRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XawViewportResize, /* resize */
- XtInheritExpose, /* expose */
- XawViewportSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XawViewportQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* composite */
- {
- XawViewportGeometryManager, /* geometry_manager */
- XawViewportChangeManaged, /* change_managed */
- XtInheritInsertChild, /* insert_child */
- XtInheritDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- /* constraint */
- {
- NULL, /* subresourses */
- 0, /* subresource_count */
- sizeof(ViewportConstraintsRec), /* constraint_size */
- XawViewportConstraintInitialize, /* initialize */
- NULL, /* destroy */
- NULL, /* set_values */
- NULL, /* extension */
- },
- /* form */
- {
- Layout, /* layout */
- },
- /* viewport */
- {
- NULL, /* extension */
- },
-};
-
-WidgetClass viewportWidgetClass = (WidgetClass)&viewportClassRec;
-
-/*
- * Implementation
- */
-static Widget
-CreateScrollbar(ViewportWidget w, Bool horizontal)
-{
- static Arg barArgs[] = {
- {XtNorientation, 0},
- {XtNlength, 0},
- {XtNleft, 0},
- {XtNright, 0},
- {XtNtop, 0},
- {XtNbottom, 0},
- {XtNmappedWhenManaged, False},
- };
- Widget clip = w->viewport.clip;
- ViewportConstraints constraints =
- (ViewportConstraints)clip->core.constraints;
- Widget bar;
-
- XtSetArg(barArgs[0], XtNorientation,
- horizontal ? XtorientHorizontal : XtorientVertical);
- XtSetArg(barArgs[1], XtNlength,
- horizontal ? XtWidth(clip) : XtHeight(clip));
- XtSetArg(barArgs[2], XtNleft,
- !horizontal && w->viewport.useright ? XtChainRight : XtChainLeft);
- XtSetArg(barArgs[3], XtNright,
- !horizontal && !w->viewport.useright ? XtChainLeft : XtChainRight);
- XtSetArg(barArgs[4], XtNtop,
- horizontal && w->viewport.usebottom ? XtChainBottom: XtChainTop);
- XtSetArg(barArgs[5], XtNbottom,
- horizontal && !w->viewport.usebottom ? XtChainTop: XtChainBottom);
-
- bar = XtCreateWidget(horizontal ? "horizontal" : "vertical",
- scrollbarWidgetClass, (Widget)w,
- barArgs, XtNumber(barArgs));
- XtAddCallback(bar, XtNscrollProc, ScrollUpDownProc, (XtPointer)w);
- XtAddCallback(bar, XtNjumpProc, ThumbProc, (XtPointer)w);
-
- if (horizontal) {
- w->viewport.horiz_bar = bar;
- constraints->form.vert_base = bar;
- }
- else {
- w->viewport.vert_bar = bar;
- constraints->form.horiz_base = bar;
- }
-
- XtManageChild(bar);
-
- return (bar);
-}
-
-/*ARGSUSED*/
-static void
-XawViewportInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- ViewportWidget w = (ViewportWidget)cnew;
- static Arg clip_args[8];
- Cardinal arg_cnt;
- Widget h_bar, v_bar;
- Dimension clip_height, clip_width;
-
- w->form.default_spacing = 0; /* Reset the default spacing to 0 pixels */
-
- /*
- * Initialize all widget pointers to NULL
- */
- w->viewport.child = NULL;
- w->viewport.horiz_bar = w->viewport.vert_bar = NULL;
-
- /*
- * Create Clip Widget
- */
- arg_cnt = 0;
- XtSetArg(clip_args[arg_cnt], XtNbackgroundPixmap, None); arg_cnt++;
- XtSetArg(clip_args[arg_cnt], XtNborderWidth, 0); arg_cnt++;
- XtSetArg(clip_args[arg_cnt], XtNleft, XtChainLeft); arg_cnt++;
- XtSetArg(clip_args[arg_cnt], XtNright, XtChainRight); arg_cnt++;
- XtSetArg(clip_args[arg_cnt], XtNtop, XtChainTop); arg_cnt++;
- XtSetArg(clip_args[arg_cnt], XtNbottom, XtChainBottom); arg_cnt++;
- XtSetArg(clip_args[arg_cnt], XtNwidth, XtWidth(w)); arg_cnt++;
- XtSetArg(clip_args[arg_cnt], XtNheight, XtHeight(w)); arg_cnt++;
-
- w->viewport.clip = XtCreateManagedWidget("clip", widgetClass, cnew,
- clip_args, arg_cnt);
-
- if (!w->viewport.forcebars)
- return; /* If we are not forcing the bars then we are done */
-
- if (w->viewport.allowhoriz)
- (void)CreateScrollbar(w, True);
- if (w->viewport.allowvert)
- (void)CreateScrollbar(w, False);
-
- h_bar = w->viewport.horiz_bar;
- v_bar = w->viewport.vert_bar;
-
- /*
- * Set the clip widget to the correct height
- */
- clip_width = XtWidth(w);
- clip_height = XtHeight(w);
-
- if (h_bar != NULL && XtWidth(w) > XtWidth(h_bar) + XtBorderWidth(h_bar))
- clip_width -= XtWidth(h_bar) + XtBorderWidth(h_bar);
-
- if (v_bar != NULL && XtHeight(w) > XtHeight(v_bar) + XtBorderWidth(v_bar))
- clip_height -= XtHeight(v_bar) + XtBorderWidth(v_bar);
-
- arg_cnt = 0;
- XtSetArg(clip_args[arg_cnt], XtNwidth, clip_width); arg_cnt++;
- XtSetArg(clip_args[arg_cnt], XtNheight, clip_height); arg_cnt++;
- XtSetValues(w->viewport.clip, clip_args, arg_cnt);
-}
-
-/*ARGSUSED*/
-static void
-XawViewportConstraintInitialize(Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- ((ViewportConstraints)cnew->core.constraints)->viewport.reparented = False;
-}
-
-static void
-XawViewportRealize(Widget widget, XtValueMask *value_mask,
- XSetWindowAttributes *attributes)
-{
- ViewportWidget w = (ViewportWidget)widget;
- Widget child = w->viewport.child;
- Widget clip = w->viewport.clip;
-
- *value_mask |= CWBitGravity;
- attributes->bit_gravity = NorthWestGravity;
- (*Superclass->core_class.realize)(widget, value_mask, attributes);
-
- (*w->core.widget_class->core_class.resize)(widget); /* turn on bars */
-
- if (child != NULL) {
- XtMoveWidget(child, 0, 0);
- XtRealizeWidget(clip);
- XtRealizeWidget(child);
- XReparentWindow(XtDisplay(w), XtWindow(child), XtWindow(clip), 0, 0);
- XtMapWidget(child);
- }
-}
-
-/*ARGSUSED*/
-static Boolean
-XawViewportSetValues(Widget current, Widget request, Widget cnew,
- ArgList args, Cardinal *num_args)
-{
- ViewportWidget w = (ViewportWidget)cnew;
- ViewportWidget cw = (ViewportWidget)current;
-
- if (w->viewport.forcebars != cw->viewport.forcebars
- || w->viewport.allowvert != cw->viewport.allowvert
- || w->viewport.allowhoriz != cw->viewport.allowhoriz
- || w->viewport.useright != cw->viewport.useright
- || w->viewport.usebottom != cw->viewport.usebottom)
- (*w->core.widget_class->core_class.resize)(cnew); /* Recompute layout */
-
- return (False);
-}
-
-static void
-XawViewportChangeManaged(Widget widget)
-{
- ViewportWidget w = (ViewportWidget)widget;
- int num_children = w->composite.num_children;
- Widget child, *childP;
- int i;
-
- child = NULL;
- for (childP = w->composite.children,
- i = 0; i < num_children;
- childP++, i++) {
- if (XtIsManaged(*childP)
- && *childP != w->viewport.clip
- && *childP != w->viewport.horiz_bar
- && *childP != w->viewport.vert_bar) {
- child = *childP;
- break;
- }
- }
-
- if (child != w->viewport.child) {
- w->viewport.child = child;
- if (child != NULL) {
- XtResizeWidget(child, XtWidth(child), XtHeight(child), 0);
- if (XtIsRealized(widget)) {
- ViewportConstraints constraints =
- (ViewportConstraints)child->core.constraints;
- if (!XtIsRealized(child)) {
- Window window = XtWindow(w);
-
- XtMoveWidget(child, 0, 0);
- w->core.window = XtWindow(w->viewport.clip);
- XtRealizeWidget(child);
- w->core.window = window;
- constraints->viewport.reparented = True;
- }
- else if (!constraints->viewport.reparented) {
- XReparentWindow(XtDisplay(w), XtWindow(child),
- XtWindow(w->viewport.clip), 0, 0);
- constraints->viewport.reparented = True;
- if (child->core.mapped_when_managed)
- XtMapWidget(child);
- }
- }
- GetGeometry(widget, XtWidth(child), XtHeight(child));
- (*((ViewportWidgetClass)w->core.widget_class)->form_class.layout)
- ((FormWidget)w, XtWidth(w), XtHeight(w), True /* True? */);
- }
- }
-
-#ifdef notdef
- (*Superclass->composite_class.change_managed)(widget);
-#endif
-}
-
-static void
-SetBar(Widget w, int top, unsigned int length, unsigned int total)
-{
- XawScrollbarSetThumb(w, (float)top / (float)total,
- (float)length / (float)total);
-}
-
-static void
-RedrawThumbs(ViewportWidget w)
-{
- Widget child = w->viewport.child;
- Widget clip = w->viewport.clip;
-
- if (w->viewport.horiz_bar != NULL)
- SetBar(w->viewport.horiz_bar, -(int)XtX(child),
- XtWidth(clip), XtWidth(child));
-
- if (w->viewport.vert_bar != NULL)
- SetBar(w->viewport.vert_bar, -(int)XtY(child),
- XtHeight(clip), XtHeight(child));
-}
-
-static void
-SendReport(ViewportWidget w, unsigned int changed)
-{
- XawPannerReport rep;
-
- if (w->viewport.report_callbacks) {
- Widget child = w->viewport.child;
- Widget clip = w->viewport.clip;
-
- rep.changed = changed;
- rep.slider_x = -XtX(child); /* child is canvas */
- rep.slider_y = -XtY(child); /* clip is slider */
- rep.slider_width = XtWidth(clip);
- rep.slider_height = XtHeight(clip);
- rep.canvas_width = XtWidth(child);
- rep.canvas_height = XtHeight(child);
- XtCallCallbackList((Widget)w, w->viewport.report_callbacks,
- (XtPointer)&rep);
- }
-}
-
-static void
-MoveChild(ViewportWidget w, int x, int y)
-{
- Widget child = w->viewport.child;
- Widget clip = w->viewport.clip;
-
- /* make sure we never move past right/bottom borders */
- if (-x + (int)XtWidth(clip) > XtWidth(child))
- x = -(int)(XtWidth(child) - XtWidth(clip));
-
- if (-y + (int)XtHeight(clip) > XtHeight(child))
- y = -(int)(XtHeight(child) - XtHeight(clip));
-
- /* make sure we never move past left/top borders */
- if (x >= 0)
- x = 0;
- if (y >= 0)
- y = 0;
-
- XtMoveWidget(child, x, y);
- SendReport(w, (XawPRSliderX | XawPRSliderY));
-
- RedrawThumbs(w);
-}
-
-static void
-ComputeLayout(Widget widget, Bool query, Bool destroy_scrollbars)
-{
- ViewportWidget w = (ViewportWidget)widget;
- Widget child = w->viewport.child;
- Widget clip = w->viewport.clip;
- ViewportConstraints constraints =
- (ViewportConstraints)clip->core.constraints;
- Bool needshoriz, needsvert;
- int clip_width, clip_height;
- XtWidgetGeometry intended;
-
- if (child == NULL)
- return;
-
- clip_width = XtWidth(w);
- clip_height = XtHeight(w);
- intended.request_mode = CWBorderWidth;
- intended.border_width = 0;
-
- if (w->viewport.forcebars) {
- needsvert = w->viewport.allowvert;
- needshoriz = w->viewport.allowhoriz;
- ComputeWithForceBars(widget, query, &intended,
- &clip_width, &clip_height);
- }
- else {
- Dimension prev_width, prev_height;
- XtGeometryMask prev_mode;
- XtWidgetGeometry preferred;
-
- needshoriz = needsvert = False;
-
- /*
- * intended.{width,height} caches the eventual child dimensions,
- * but we don't set the mode bits until after we decide that the
- * child's preferences are not acceptable
- */
- if (!w->viewport.allowhoriz)
- intended.request_mode |= CWWidth;
-
- if (XtWidth(child) < clip_width)
- intended.width = clip_width;
- else
- intended.width = XtWidth(child);
-
- if (XtHeight(child) < clip_height)
- intended.height = clip_height;
- else
- intended.height = XtHeight(child);
-
- if (!w->viewport.allowvert)
- intended.request_mode |= CWHeight;
-
- if (!query) {
- preferred.width = XtWidth(child);
- preferred.height = XtHeight(child);
- }
- do { /* while intended != prev */
- if (query) {
- (void)XtQueryGeometry(child, &intended, &preferred);
- if (!(preferred.request_mode & CWWidth))
- preferred.width = intended.width;
- if (!(preferred.request_mode & CWHeight))
- preferred.height = intended.height;
- }
- prev_width = intended.width;
- prev_height = intended.height;
- prev_mode = intended.request_mode;
- /*
- * note that having once decided to turn on either bar
- * we'll not change our mind until we're next resized,
- * thus avoiding potential oscillations
- */
-#define CheckHoriz() \
- if (w->viewport.allowhoriz && \
- preferred.width > clip_width) { \
- if (!needshoriz) { \
- Widget bar; \
- \
- needshoriz = True; \
- if ((bar = w->viewport.horiz_bar) == NULL) \
- bar = CreateScrollbar(w, True); \
- clip_height -= XtHeight(bar) + XtBorderWidth(bar); \
- if (clip_height < 1) \
- clip_height = 1; \
- } \
- intended.width = preferred.width; \
- }
-
- CheckHoriz();
- if (w->viewport.allowvert && preferred.height > clip_height) {
- if (!needsvert) {
- Widget bar;
- needsvert = True;
- if ((bar = w->viewport.vert_bar) == NULL)
- bar = CreateScrollbar(w, False);
- clip_width -= XtWidth(bar) + XtBorderWidth(bar);
- if (clip_width < 1)
- clip_width = 1;
- CheckHoriz();
- }
- intended.height = preferred.height;
- }
- if (!w->viewport.allowhoriz || preferred.width < clip_width) {
- intended.width = clip_width;
- intended.request_mode |= CWWidth;
- }
- if (!w->viewport.allowvert || preferred.height < clip_height) {
- intended.height = clip_height;
- intended.request_mode |= CWHeight;
- }
- } while (intended.request_mode != prev_mode
- || (intended.request_mode & CWWidth
- && intended.width != prev_width)
- || (intended.request_mode & CWHeight
- && intended.height != prev_height));
- }
-
- if (XtIsRealized(clip))
- XRaiseWindow(XtDisplay(clip), XtWindow(clip));
-
- XtMoveWidget(clip,
- needsvert ? w->viewport.useright ? 0 :
- XtWidth(w->viewport.vert_bar)
- + XtBorderWidth(w->viewport.vert_bar) : 0,
- needshoriz ? w->viewport.usebottom ? 0 :
- XtHeight(w->viewport.horiz_bar)
- + XtBorderWidth(w->viewport.horiz_bar) : 0);
- XtResizeWidget(clip, clip_width, clip_height, 0);
-
- if (w->viewport.horiz_bar != NULL) {
- Widget bar = w->viewport.horiz_bar;
-
- if (!needshoriz) {
- constraints->form.vert_base = NULL;
- if (destroy_scrollbars) {
- XtDestroyWidget(bar);
- w->viewport.horiz_bar = NULL;
- }
- }
- else {
- int bw = XtBorderWidth(bar);
-
- XtResizeWidget(bar, clip_width, XtHeight(bar), bw);
- XtMoveWidget(bar,
- needsvert && !w->viewport.useright
- ? XtWidth(w->viewport.vert_bar) : -bw,
- w->viewport.usebottom
- ? XtHeight(w) - XtHeight(bar) - bw : -bw);
- XtSetMappedWhenManaged(bar, True);
- }
- }
-
- if (w->viewport.vert_bar != NULL) {
- Widget bar = w->viewport.vert_bar;
-
- if (!needsvert) {
- constraints->form.horiz_base = NULL;
- if (destroy_scrollbars) {
- XtDestroyWidget(bar);
- w->viewport.vert_bar = NULL;
- }
- }
- else {
- int bw = bar->core.border_width;
-
- XtResizeWidget(bar, XtWidth(bar), clip_height, bw);
- XtMoveWidget(bar,
- w->viewport.useright
- ? XtWidth(w) - XtWidth(bar) - bw : -bw,
- needshoriz && !w->viewport.usebottom
- ? XtHeight(w->viewport.horiz_bar) : -bw);
- XtSetMappedWhenManaged(bar, True);
- }
- }
-
- if (child != NULL) {
- XtResizeWidget(child, intended.width, intended.height, 0);
- MoveChild(w, needshoriz ? XtX(child) : 0, needsvert ? XtY(child) : 0);
- }
-
- SendReport (w, XawPRAll);
-}
-
-/*
- * Function:
- * ComputeWithForceBars
- *
- * Parameters:
- * widget - viewport widget
- * query - whether or not to query the child
- * intended - cache of the childs height is stored here
- * (used and returned)
- * clip_width - size of clip window (used and returned)
- * clip_height - ""
- *
- * Description:
- * Computes the layout give forcebars is set.
- */
-static void
-ComputeWithForceBars(Widget widget, Bool query, XtWidgetGeometry *intended,
- int *clip_width, int *clip_height)
-{
- ViewportWidget w = (ViewportWidget)widget;
- Widget child = w->viewport.child;
- XtWidgetGeometry preferred;
-
- /*
- * If forcebars then needs = allows = has
- * Thus if needsvert is set it MUST have a scrollbar
- */
- if (w->viewport.allowvert) {
- if (w->viewport.vert_bar == NULL)
- w->viewport.vert_bar = CreateScrollbar(w, False);
-
- *clip_width -= XtWidth(w->viewport.vert_bar) +
- XtBorderWidth(w->viewport.vert_bar);
- }
-
- if (w->viewport.allowhoriz) {
- if (w->viewport.horiz_bar == NULL)
- w->viewport.horiz_bar = CreateScrollbar(w, True);
-
- *clip_height -= XtHeight(w->viewport.horiz_bar) +
- XtBorderWidth(w->viewport.horiz_bar);
- }
-
- AssignMax(*clip_width, 1);
- AssignMax(*clip_height, 1);
-
- if (!w->viewport.allowvert) {
- intended->height = *clip_height;
- intended->request_mode = CWHeight;
- }
- if (!w->viewport.allowhoriz) {
- intended->width = *clip_width;
- intended->request_mode = CWWidth;
- }
-
- if (query) {
- if (w->viewport.allowvert || w->viewport.allowhoriz) {
- XtQueryGeometry(child, intended, &preferred);
-
- if (!(intended->request_mode & CWWidth)) {
- if (preferred.request_mode & CWWidth)
- intended->width = preferred.width;
- else
- intended->width = XtWidth(child);
- }
-
- if (!(intended->request_mode & CWHeight)) {
- if (preferred.request_mode & CWHeight)
- intended->height = preferred.height;
- else
- intended->height = XtHeight(child);
- }
- }
- }
- else {
- if (w->viewport.allowvert)
- intended->height = XtHeight(child);
- if (w->viewport.allowhoriz)
- intended->width = XtWidth(child);
- }
-
- if (*clip_width > (int)intended->width)
- intended->width = *clip_width;
- if (*clip_height > (int)intended->height)
- intended->height = *clip_height;
-}
-
-static void
-XawViewportResize(Widget widget)
-{
- ComputeLayout(widget, True, True);
-}
-
-/*ARGSUSED*/
-static Boolean
-Layout(FormWidget w, unsigned int width, unsigned int height, Bool force)
-{
- ComputeLayout((Widget)w, True, True);
- w->form.preferred_width = XtWidth(w);
- w->form.preferred_height = XtHeight(w);
-
- return (False);
-}
-
-static void
-ScrollUpDownProc(Widget widget, XtPointer closure, XtPointer call_data)
-{
- ViewportWidget w = (ViewportWidget)closure;
- Widget child = w->viewport.child;
- int pix = (long)call_data;
- int x, y;
-
- if (child == NULL)
- return;
-
- x = XtX(child) - (widget == w->viewport.horiz_bar ? pix : 0);
- y = XtY(child) - (widget == w->viewport.vert_bar ? pix : 0);
- MoveChild(w, x, y);
-}
-
-/*ARGSUSED*/
-static void
-ThumbProc(Widget widget, XtPointer closure, XtPointer call_data)
-{
- ViewportWidget w = (ViewportWidget)closure;
- Widget child = w->viewport.child;
- float percent = *(float *)call_data;
- int x, y;
-
- if (child == NULL)
- return;
-
- if (widget == w->viewport.horiz_bar)
- x = -percent * XtWidth(child);
- else
- x = XtX(child);
-
- if (widget == w->viewport.vert_bar)
- y = -percent * XtHeight(child);
- else
- y = XtY(child);
-
- MoveChild(w, x, y);
-}
-
-static XtGeometryResult
-TestSmaller(ViewportWidget w, XtWidgetGeometry *request,
- XtWidgetGeometry *reply_return)
-{
- if (request->width < XtWidth(w) || request->height < XtHeight(w))
- return (XtMakeGeometryRequest((Widget)w, request, reply_return));
-
- return (XtGeometryYes);
-}
-
-static XtGeometryResult
-GeometryRequestPlusScrollbar(ViewportWidget w, Bool horizontal,
- XtWidgetGeometry *request,
- XtWidgetGeometry *reply_return)
-{
- Widget sb;
- XtWidgetGeometry plusScrollbars;
-
- plusScrollbars = *request;
- if ((sb = w->viewport.horiz_bar) == NULL)
- sb = CreateScrollbar(w, horizontal);
- request->width += XtWidth(sb);
- request->height += XtHeight(sb);
- XtDestroyWidget(sb);
- return (XtMakeGeometryRequest((Widget)w, &plusScrollbars, reply_return));
-}
-
-#define WidthChange() (request->width != XtWidth(w))
-#define HeightChange() (request->height != XtHeight(w))
-static XtGeometryResult
-QueryGeometry(ViewportWidget w, XtWidgetGeometry *request,
- XtWidgetGeometry *reply_return)
-{
- if (w->viewport.allowhoriz && w->viewport.allowvert)
- return (TestSmaller(w, request, reply_return));
-
- else if (w->viewport.allowhoriz && !w->viewport.allowvert) {
- if (WidthChange() && !HeightChange())
- return (TestSmaller(w, request, reply_return));
- else if (!WidthChange() && HeightChange())
- return (XtMakeGeometryRequest((Widget)w, request, reply_return));
- else if (WidthChange() && HeightChange())
- return (GeometryRequestPlusScrollbar(w, True, request, reply_return));
- else /* !WidthChange() && !HeightChange() */
- return (XtGeometryYes);
- }
- else if (!w->viewport.allowhoriz && w->viewport.allowvert) {
- if (!WidthChange() && HeightChange())
- return (TestSmaller(w, request, reply_return));
- else if (WidthChange() && !HeightChange())
- return (XtMakeGeometryRequest((Widget)w, request, reply_return));
- else if (WidthChange() && HeightChange())
- return (GeometryRequestPlusScrollbar(w, False, request, reply_return));
- else /* !WidthChange() && !HeightChange() */
- return (XtGeometryYes);
- }
- else /* (!w->viewport.allowhoriz && !w->viewport.allowvert) */
- return (XtMakeGeometryRequest((Widget)w, request, reply_return));
-}
-#undef WidthChange
-#undef HeightChange
-
-static XtGeometryResult
-XawViewportGeometryManager(Widget child, XtWidgetGeometry *request,
- XtWidgetGeometry *reply)
-{
- ViewportWidget w = (ViewportWidget)child->core.parent;
- Bool rWidth = (request->request_mode & CWWidth) != 0;
- Bool rHeight = (request->request_mode & CWHeight) != 0;
- XtWidgetGeometry allowed;
- XtGeometryResult result;
- Bool reconfigured;
- Bool child_changed_size;
- unsigned int height_remaining;
-
- if (request->request_mode & XtCWQueryOnly)
- return (QueryGeometry(w, request, reply));
-
- if (child != w->viewport.child
- || request->request_mode & ~(CWWidth | CWHeight | CWBorderWidth)
- || ((request->request_mode & CWBorderWidth)
- && request->border_width > 0))
- return (XtGeometryNo);
-
- allowed = *request;
-
- reconfigured = GetGeometry((Widget)w,
- rWidth ? request->width : XtWidth(w),
- rHeight ? request->height : XtHeight(w));
-
- child_changed_size = (rWidth && XtWidth(child) != request->width) ||
- (rHeight && XtHeight(child) != request->height);
-
- height_remaining = XtHeight(w);
- if (rWidth && XtWidth(w) != request->width) {
- if (w->viewport.allowhoriz && request->width > XtWidth(w)) {
- /* horizontal scrollbar will be needed so possibly reduce height */
- Widget bar;
-
- if ((bar = w->viewport.horiz_bar) == NULL)
- bar = CreateScrollbar(w, True);
- height_remaining -= XtHeight(bar) + XtBorderWidth(bar);
- reconfigured = True;
- }
- else
- allowed.width = XtWidth(w);
- }
- if (rHeight && height_remaining != request->height) {
- if (w->viewport.allowvert && request->height > height_remaining) {
- /* vertical scrollbar will be needed, so possibly reduce width */
- if (!w->viewport.allowhoriz || request->width < XtWidth(w)) {
- Widget bar;
-
- if ((bar = w->viewport.vert_bar) == NULL)
- bar = CreateScrollbar(w, False);
- if (!rWidth) {
- allowed.width = XtWidth(w);
- allowed.request_mode |= CWWidth;
- }
- if (allowed.width > XtWidth(bar) + XtBorderWidth(bar))
- allowed.width -= XtWidth(bar) + XtBorderWidth(bar);
- else
- allowed.width = 1;
- reconfigured = True;
- }
- }
- else
- allowed.height = height_remaining;
- }
-
- if (allowed.width != request->width || allowed.height != request->height) {
- *reply = allowed;
- result = XtGeometryAlmost;
- }
- else {
- if (rWidth)
- XtWidth(child) = request->width;
- if (rHeight)
- XtHeight(child) = request->height;
- result = XtGeometryYes;
- }
-
- if (reconfigured || child_changed_size)
- ComputeLayout((Widget)w, False, result == XtGeometryYes);
-
- return (result);
-}
-
-static Bool
-GetGeometry(Widget w, unsigned int width, unsigned int height)
-{
- XtWidgetGeometry geometry, return_geom;
- XtGeometryResult result;
-
- if (width == XtWidth(w) && height == XtHeight(w))
- return (False);
-
- geometry.request_mode = CWWidth | CWHeight;
- geometry.width = width;
- geometry.height = height;
-
- if (XtIsRealized(w)) {
- if (((ViewportWidget)w)->viewport.allowhoriz && width > XtWidth(w))
- geometry.width = XtWidth(w);
- if (((ViewportWidget)w)->viewport.allowvert && height > XtHeight(w))
- geometry.height = XtHeight(w);
- }
- else {
- /* This is the Realize call; we'll inherit a w&h iff none currently */
- if (XtWidth(w) != 0) {
- if (XtHeight(w) != 0)
- return (False);
- geometry.width = XtWidth(w);
- }
- if (XtHeight(w) != 0)
- geometry.height = XtHeight(w);
- }
-
- result = XtMakeGeometryRequest(w, &geometry, &return_geom);
- if (result == XtGeometryAlmost)
- result = XtMakeGeometryRequest(w, &return_geom, NULL);
-
- return (result == XtGeometryYes);
-}
-
-static XtGeometryResult
-XawViewportQueryGeometry(Widget w, XtWidgetGeometry *constraints,
- XtWidgetGeometry *reply)
-{
- if (((ViewportWidget)w)->viewport.child != NULL)
- return (XtQueryGeometry(((ViewportWidget)w)->viewport.child,
- constraints, reply));
-
- return (XtGeometryYes);
-}
-
-void
-XawViewportSetLocation
-(
- Widget gw,
-#if NeedWidePrototypes
- double xoff, double yoff
-#else
- float xoff, float yoff
-#endif
- )
-{
- ViewportWidget w = (ViewportWidget)gw;
- Widget child = w->viewport.child;
- int x, y;
-
- if (xoff > 1.0) /* scroll to right */
- x = XtWidth(child);
- else if (xoff < 0.0) /* if the offset is < 0.0 nothing */
- x = XtX(child);
- else
- x = (float)XtWidth(child) * xoff;
-
- if (yoff > 1.0)
- y = XtHeight(child);
- else if (yoff < 0.0)
- y = XtY(child);
- else
- y = (float)XtHeight(child) * yoff;
-
- MoveChild (w, -x, -y);
-}
-
-void
-XawViewportSetCoordinates(Widget gw,
-#if NeedWidePrototypes
- int x, int y
-#else
- Position x, Position y
-#endif
-)
-{
- ViewportWidget w = (ViewportWidget)gw;
- Widget child = w->viewport.child;
-
- if (x > XtWidth(child))
- x = XtWidth(child);
- else if (x < 0)
- x = XtX(child);
-
- if (y > XtHeight(child))
- y = XtHeight(child);
- else if (y < 0)
- y = XtY(child);
-
- MoveChild (w, -x, -y);
-}
+/***********************************************************
+
+Copyright 1987, 1988, 1994, 1998 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.
+
+
+Copyright 1987, 1988 by 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 name of Digital 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.
+
+******************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/Scrollbar.h>
+#include <X11/Xaw/ViewportP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Class Methods
+ */
+static Boolean Layout(FormWidget, unsigned int, unsigned int, Bool);
+static void XawViewportChangeManaged(Widget);
+static void XawViewportInitialize(Widget, Widget, ArgList, Cardinal*);
+static void
+XawViewportConstraintInitialize(Widget, Widget, ArgList, Cardinal*);
+static XtGeometryResult XawViewportGeometryManager(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static XtGeometryResult XawViewportQueryGeometry(Widget,
+ XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawViewportRealize(Widget, XtValueMask*, XSetWindowAttributes*);
+static void XawViewportResize(Widget);
+static Boolean XawViewportSetValues(Widget, Widget, Widget,
+ ArgList, Cardinal*);
+
+/*
+ * Prototypes
+ */
+static void ComputeLayout(Widget, Bool, Bool);
+static void ComputeWithForceBars(Widget, Bool, XtWidgetGeometry*,
+ int*, int*);
+static Widget CreateScrollbar(ViewportWidget, Bool);
+static XtGeometryResult GeometryRequestPlusScrollbar(ViewportWidget, Bool,
+ XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static Bool GetGeometry(Widget, unsigned int, unsigned int);
+static void MoveChild(ViewportWidget, int, int);
+static XtGeometryResult QueryGeometry(ViewportWidget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void RedrawThumbs(ViewportWidget);
+static void ScrollUpDownProc(Widget, XtPointer, XtPointer);
+static void SendReport(ViewportWidget, unsigned int);
+static void SetBar(Widget, int, unsigned int, unsigned int);
+static XtGeometryResult TestSmaller(ViewportWidget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void ThumbProc(Widget, XtPointer, XtPointer);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(ViewportRec, viewport.field)
+static XtResource resources[] = {
+ {
+ XtNforceBars,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(forcebars),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNallowHoriz,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(allowhoriz),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNallowVert,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(allowvert),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNuseBottom,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(usebottom),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNuseRight,
+ XtCBoolean,
+ XtRBoolean,
+ sizeof(Boolean),
+ offset(useright),
+ XtRImmediate,
+ (XtPointer)False
+ },
+ {
+ XtNreportCallback,
+ XtCReportCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(report_callbacks),
+ XtRImmediate,
+ NULL
+ },
+};
+#undef offset
+
+#define Superclass (&formClassRec)
+ViewportClassRec viewportClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Viewport", /* class_name */
+ sizeof(ViewportRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_init */
+ False, /* class_inited */
+ XawViewportInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XawViewportRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XawViewportResize, /* resize */
+ XtInheritExpose, /* expose */
+ XawViewportSetValues, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XawViewportQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* composite */
+ {
+ XawViewportGeometryManager, /* geometry_manager */
+ XawViewportChangeManaged, /* change_managed */
+ XtInheritInsertChild, /* insert_child */
+ XtInheritDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ /* constraint */
+ {
+ NULL, /* subresourses */
+ 0, /* subresource_count */
+ sizeof(ViewportConstraintsRec), /* constraint_size */
+ XawViewportConstraintInitialize, /* initialize */
+ NULL, /* destroy */
+ NULL, /* set_values */
+ NULL, /* extension */
+ },
+ /* form */
+ {
+ Layout, /* layout */
+ },
+ /* viewport */
+ {
+ NULL, /* extension */
+ },
+};
+
+WidgetClass viewportWidgetClass = (WidgetClass)&viewportClassRec;
+
+/*
+ * Implementation
+ */
+static Widget
+CreateScrollbar(ViewportWidget w, Bool horizontal)
+{
+ static Arg barArgs[] = {
+ {XtNorientation, 0},
+ {XtNlength, 0},
+ {XtNleft, 0},
+ {XtNright, 0},
+ {XtNtop, 0},
+ {XtNbottom, 0},
+ {XtNmappedWhenManaged, False},
+ };
+ Widget clip = w->viewport.clip;
+ ViewportConstraints constraints =
+ (ViewportConstraints)clip->core.constraints;
+ Widget bar;
+
+ XtSetArg(barArgs[0], XtNorientation,
+ horizontal ? XtorientHorizontal : XtorientVertical);
+ XtSetArg(barArgs[1], XtNlength,
+ horizontal ? XtWidth(clip) : XtHeight(clip));
+ XtSetArg(barArgs[2], XtNleft,
+ !horizontal && w->viewport.useright ? XtChainRight : XtChainLeft);
+ XtSetArg(barArgs[3], XtNright,
+ !horizontal && !w->viewport.useright ? XtChainLeft : XtChainRight);
+ XtSetArg(barArgs[4], XtNtop,
+ horizontal && w->viewport.usebottom ? XtChainBottom: XtChainTop);
+ XtSetArg(barArgs[5], XtNbottom,
+ horizontal && !w->viewport.usebottom ? XtChainTop: XtChainBottom);
+
+ bar = XtCreateWidget(horizontal ? "horizontal" : "vertical",
+ scrollbarWidgetClass, (Widget)w,
+ barArgs, XtNumber(barArgs));
+ XtAddCallback(bar, XtNscrollProc, ScrollUpDownProc, (XtPointer)w);
+ XtAddCallback(bar, XtNjumpProc, ThumbProc, (XtPointer)w);
+
+ if (horizontal) {
+ w->viewport.horiz_bar = bar;
+ constraints->form.vert_base = bar;
+ }
+ else {
+ w->viewport.vert_bar = bar;
+ constraints->form.horiz_base = bar;
+ }
+
+ XtManageChild(bar);
+
+ return (bar);
+}
+
+/*ARGSUSED*/
+static void
+XawViewportInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ ViewportWidget w = (ViewportWidget)cnew;
+ static Arg clip_args[8];
+ Cardinal arg_cnt;
+ Widget h_bar, v_bar;
+ Dimension clip_height, clip_width;
+
+ w->form.default_spacing = 0; /* Reset the default spacing to 0 pixels */
+
+ /*
+ * Initialize all widget pointers to NULL
+ */
+ w->viewport.child = NULL;
+ w->viewport.horiz_bar = w->viewport.vert_bar = NULL;
+
+ /*
+ * Create Clip Widget
+ */
+ arg_cnt = 0;
+ XtSetArg(clip_args[arg_cnt], XtNbackgroundPixmap, None); arg_cnt++;
+ XtSetArg(clip_args[arg_cnt], XtNborderWidth, 0); arg_cnt++;
+ XtSetArg(clip_args[arg_cnt], XtNleft, XtChainLeft); arg_cnt++;
+ XtSetArg(clip_args[arg_cnt], XtNright, XtChainRight); arg_cnt++;
+ XtSetArg(clip_args[arg_cnt], XtNtop, XtChainTop); arg_cnt++;
+ XtSetArg(clip_args[arg_cnt], XtNbottom, XtChainBottom); arg_cnt++;
+ XtSetArg(clip_args[arg_cnt], XtNwidth, XtWidth(w)); arg_cnt++;
+ XtSetArg(clip_args[arg_cnt], XtNheight, XtHeight(w)); arg_cnt++;
+
+ w->viewport.clip = XtCreateManagedWidget("clip", widgetClass, cnew,
+ clip_args, arg_cnt);
+
+ if (!w->viewport.forcebars)
+ return; /* If we are not forcing the bars then we are done */
+
+ if (w->viewport.allowhoriz)
+ (void)CreateScrollbar(w, True);
+ if (w->viewport.allowvert)
+ (void)CreateScrollbar(w, False);
+
+ h_bar = w->viewport.horiz_bar;
+ v_bar = w->viewport.vert_bar;
+
+ /*
+ * Set the clip widget to the correct height
+ */
+ clip_width = XtWidth(w);
+ clip_height = XtHeight(w);
+
+ if (h_bar != NULL && XtWidth(w) > XtWidth(h_bar) + XtBorderWidth(h_bar))
+ clip_width -= XtWidth(h_bar) + XtBorderWidth(h_bar);
+
+ if (v_bar != NULL && XtHeight(w) > XtHeight(v_bar) + XtBorderWidth(v_bar))
+ clip_height -= XtHeight(v_bar) + XtBorderWidth(v_bar);
+
+ arg_cnt = 0;
+ XtSetArg(clip_args[arg_cnt], XtNwidth, clip_width); arg_cnt++;
+ XtSetArg(clip_args[arg_cnt], XtNheight, clip_height); arg_cnt++;
+ XtSetValues(w->viewport.clip, clip_args, arg_cnt);
+}
+
+/*ARGSUSED*/
+static void
+XawViewportConstraintInitialize(Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ ((ViewportConstraints)cnew->core.constraints)->viewport.reparented = False;
+}
+
+static void
+XawViewportRealize(Widget widget, XtValueMask *value_mask,
+ XSetWindowAttributes *attributes)
+{
+ ViewportWidget w = (ViewportWidget)widget;
+ Widget child = w->viewport.child;
+ Widget clip = w->viewport.clip;
+
+ *value_mask |= CWBitGravity;
+ attributes->bit_gravity = NorthWestGravity;
+ (*Superclass->core_class.realize)(widget, value_mask, attributes);
+
+ (*w->core.widget_class->core_class.resize)(widget); /* turn on bars */
+
+ if (child != NULL) {
+ XtMoveWidget(child, 0, 0);
+ XtRealizeWidget(clip);
+ XtRealizeWidget(child);
+ XReparentWindow(XtDisplay(w), XtWindow(child), XtWindow(clip), 0, 0);
+ XtMapWidget(child);
+ }
+}
+
+/*ARGSUSED*/
+static Boolean
+XawViewportSetValues(Widget current, Widget request, Widget cnew,
+ ArgList args, Cardinal *num_args)
+{
+ ViewportWidget w = (ViewportWidget)cnew;
+ ViewportWidget cw = (ViewportWidget)current;
+
+ if (w->viewport.forcebars != cw->viewport.forcebars
+ || w->viewport.allowvert != cw->viewport.allowvert
+ || w->viewport.allowhoriz != cw->viewport.allowhoriz
+ || w->viewport.useright != cw->viewport.useright
+ || w->viewport.usebottom != cw->viewport.usebottom)
+ (*w->core.widget_class->core_class.resize)(cnew); /* Recompute layout */
+
+ return (False);
+}
+
+static void
+XawViewportChangeManaged(Widget widget)
+{
+ ViewportWidget w = (ViewportWidget)widget;
+ int num_children = w->composite.num_children;
+ Widget child, *childP;
+ int i;
+
+ child = NULL;
+ for (childP = w->composite.children,
+ i = 0; i < num_children;
+ childP++, i++) {
+ if (XtIsManaged(*childP)
+ && *childP != w->viewport.clip
+ && *childP != w->viewport.horiz_bar
+ && *childP != w->viewport.vert_bar) {
+ child = *childP;
+ break;
+ }
+ }
+
+ if (child != w->viewport.child) {
+ w->viewport.child = child;
+ if (child != NULL) {
+ XtResizeWidget(child, XtWidth(child), XtHeight(child), 0);
+ if (XtIsRealized(widget)) {
+ ViewportConstraints constraints =
+ (ViewportConstraints)child->core.constraints;
+ if (!XtIsRealized(child)) {
+ Window window = XtWindow(w);
+
+ XtMoveWidget(child, 0, 0);
+ w->core.window = XtWindow(w->viewport.clip);
+ XtRealizeWidget(child);
+ w->core.window = window;
+ constraints->viewport.reparented = True;
+ }
+ else if (!constraints->viewport.reparented) {
+ XReparentWindow(XtDisplay(w), XtWindow(child),
+ XtWindow(w->viewport.clip), 0, 0);
+ constraints->viewport.reparented = True;
+ if (child->core.mapped_when_managed)
+ XtMapWidget(child);
+ }
+ }
+ GetGeometry(widget, XtWidth(child), XtHeight(child));
+ (*((ViewportWidgetClass)w->core.widget_class)->form_class.layout)
+ ((FormWidget)w, XtWidth(w), XtHeight(w), True /* True? */);
+ }
+ }
+
+#ifdef notdef
+ (*Superclass->composite_class.change_managed)(widget);
+#endif
+}
+
+static void
+SetBar(Widget w, int top, unsigned int length, unsigned int total)
+{
+ XawScrollbarSetThumb(w, (float)top / (float)total,
+ (float)length / (float)total);
+}
+
+static void
+RedrawThumbs(ViewportWidget w)
+{
+ Widget child = w->viewport.child;
+ Widget clip = w->viewport.clip;
+
+ if (w->viewport.horiz_bar != NULL)
+ SetBar(w->viewport.horiz_bar, -(int)XtX(child),
+ XtWidth(clip), XtWidth(child));
+
+ if (w->viewport.vert_bar != NULL)
+ SetBar(w->viewport.vert_bar, -(int)XtY(child),
+ XtHeight(clip), XtHeight(child));
+}
+
+static void
+SendReport(ViewportWidget w, unsigned int changed)
+{
+ XawPannerReport rep;
+
+ if (w->viewport.report_callbacks) {
+ Widget child = w->viewport.child;
+ Widget clip = w->viewport.clip;
+
+ rep.changed = changed;
+ rep.slider_x = -XtX(child); /* child is canvas */
+ rep.slider_y = -XtY(child); /* clip is slider */
+ rep.slider_width = XtWidth(clip);
+ rep.slider_height = XtHeight(clip);
+ rep.canvas_width = XtWidth(child);
+ rep.canvas_height = XtHeight(child);
+ XtCallCallbackList((Widget)w, w->viewport.report_callbacks,
+ (XtPointer)&rep);
+ }
+}
+
+static void
+MoveChild(ViewportWidget w, int x, int y)
+{
+ Widget child = w->viewport.child;
+ Widget clip = w->viewport.clip;
+
+ /* make sure we never move past right/bottom borders */
+ if (-x + (int)XtWidth(clip) > XtWidth(child))
+ x = -(int)(XtWidth(child) - XtWidth(clip));
+
+ if (-y + (int)XtHeight(clip) > XtHeight(child))
+ y = -(int)(XtHeight(child) - XtHeight(clip));
+
+ /* make sure we never move past left/top borders */
+ if (x >= 0)
+ x = 0;
+ if (y >= 0)
+ y = 0;
+
+ XtMoveWidget(child, x, y);
+ SendReport(w, (XawPRSliderX | XawPRSliderY));
+
+ RedrawThumbs(w);
+}
+
+static void
+ComputeLayout(Widget widget, Bool query, Bool destroy_scrollbars)
+{
+ ViewportWidget w = (ViewportWidget)widget;
+ Widget child = w->viewport.child;
+ Widget clip = w->viewport.clip;
+ ViewportConstraints constraints =
+ (ViewportConstraints)clip->core.constraints;
+ Bool needshoriz, needsvert;
+ int clip_width, clip_height;
+ XtWidgetGeometry intended;
+
+ if (child == NULL)
+ return;
+
+ clip_width = XtWidth(w);
+ clip_height = XtHeight(w);
+ intended.request_mode = CWBorderWidth;
+ intended.border_width = 0;
+
+ if (w->viewport.forcebars) {
+ needsvert = w->viewport.allowvert;
+ needshoriz = w->viewport.allowhoriz;
+ ComputeWithForceBars(widget, query, &intended,
+ &clip_width, &clip_height);
+ }
+ else {
+ Dimension prev_width, prev_height;
+ XtGeometryMask prev_mode;
+ XtWidgetGeometry preferred;
+
+ needshoriz = needsvert = False;
+
+ /*
+ * intended.{width,height} caches the eventual child dimensions,
+ * but we don't set the mode bits until after we decide that the
+ * child's preferences are not acceptable
+ */
+ if (!w->viewport.allowhoriz)
+ intended.request_mode |= CWWidth;
+
+ if (XtWidth(child) < clip_width)
+ intended.width = clip_width;
+ else
+ intended.width = XtWidth(child);
+
+ if (XtHeight(child) < clip_height)
+ intended.height = clip_height;
+ else
+ intended.height = XtHeight(child);
+
+ if (!w->viewport.allowvert)
+ intended.request_mode |= CWHeight;
+
+ if (!query) {
+ preferred.width = XtWidth(child);
+ preferred.height = XtHeight(child);
+ }
+ do { /* while intended != prev */
+ if (query) {
+ (void)XtQueryGeometry(child, &intended, &preferred);
+ if (!(preferred.request_mode & CWWidth))
+ preferred.width = intended.width;
+ if (!(preferred.request_mode & CWHeight))
+ preferred.height = intended.height;
+ }
+ prev_width = intended.width;
+ prev_height = intended.height;
+ prev_mode = intended.request_mode;
+ /*
+ * note that having once decided to turn on either bar
+ * we'll not change our mind until we're next resized,
+ * thus avoiding potential oscillations
+ */
+#define CheckHoriz() \
+ if (w->viewport.allowhoriz && \
+ preferred.width > clip_width) { \
+ if (!needshoriz) { \
+ Widget bar; \
+ \
+ needshoriz = True; \
+ if ((bar = w->viewport.horiz_bar) == NULL) \
+ bar = CreateScrollbar(w, True); \
+ clip_height -= XtHeight(bar) + XtBorderWidth(bar); \
+ if (clip_height < 1) \
+ clip_height = 1; \
+ } \
+ intended.width = preferred.width; \
+ }
+
+ CheckHoriz();
+ if (w->viewport.allowvert && preferred.height > clip_height) {
+ if (!needsvert) {
+ Widget bar;
+ needsvert = True;
+ if ((bar = w->viewport.vert_bar) == NULL)
+ bar = CreateScrollbar(w, False);
+ clip_width -= XtWidth(bar) + XtBorderWidth(bar);
+ if (clip_width < 1)
+ clip_width = 1;
+ CheckHoriz();
+ }
+ intended.height = preferred.height;
+ }
+ if (!w->viewport.allowhoriz || preferred.width < clip_width) {
+ intended.width = clip_width;
+ intended.request_mode |= CWWidth;
+ }
+ if (!w->viewport.allowvert || preferred.height < clip_height) {
+ intended.height = clip_height;
+ intended.request_mode |= CWHeight;
+ }
+ } while (intended.request_mode != prev_mode
+ || (intended.request_mode & CWWidth
+ && intended.width != prev_width)
+ || (intended.request_mode & CWHeight
+ && intended.height != prev_height));
+ }
+
+ if (XtIsRealized(clip))
+ XRaiseWindow(XtDisplay(clip), XtWindow(clip));
+
+ XtMoveWidget(clip,
+ needsvert ? w->viewport.useright ? 0 :
+ XtWidth(w->viewport.vert_bar)
+ + XtBorderWidth(w->viewport.vert_bar) : 0,
+ needshoriz ? w->viewport.usebottom ? 0 :
+ XtHeight(w->viewport.horiz_bar)
+ + XtBorderWidth(w->viewport.horiz_bar) : 0);
+ XtResizeWidget(clip, clip_width, clip_height, 0);
+
+ if (w->viewport.horiz_bar != NULL) {
+ Widget bar = w->viewport.horiz_bar;
+
+ if (!needshoriz) {
+ constraints->form.vert_base = NULL;
+ if (destroy_scrollbars) {
+ XtDestroyWidget(bar);
+ w->viewport.horiz_bar = NULL;
+ }
+ }
+ else {
+ int bw = XtBorderWidth(bar);
+
+ XtResizeWidget(bar, clip_width, XtHeight(bar), bw);
+ XtMoveWidget(bar,
+ needsvert && !w->viewport.useright
+ ? XtWidth(w->viewport.vert_bar) : -bw,
+ w->viewport.usebottom
+ ? XtHeight(w) - XtHeight(bar) - bw : -bw);
+ XtSetMappedWhenManaged(bar, True);
+ }
+ }
+
+ if (w->viewport.vert_bar != NULL) {
+ Widget bar = w->viewport.vert_bar;
+
+ if (!needsvert) {
+ constraints->form.horiz_base = NULL;
+ if (destroy_scrollbars) {
+ XtDestroyWidget(bar);
+ w->viewport.vert_bar = NULL;
+ }
+ }
+ else {
+ int bw = bar->core.border_width;
+
+ XtResizeWidget(bar, XtWidth(bar), clip_height, bw);
+ XtMoveWidget(bar,
+ w->viewport.useright
+ ? XtWidth(w) - XtWidth(bar) - bw : -bw,
+ needshoriz && !w->viewport.usebottom
+ ? XtHeight(w->viewport.horiz_bar) : -bw);
+ XtSetMappedWhenManaged(bar, True);
+ }
+ }
+
+ if (child != NULL) {
+ XtResizeWidget(child, intended.width, intended.height, 0);
+ MoveChild(w, needshoriz ? XtX(child) : 0, needsvert ? XtY(child) : 0);
+ }
+
+ SendReport (w, XawPRAll);
+}
+
+/*
+ * Function:
+ * ComputeWithForceBars
+ *
+ * Parameters:
+ * widget - viewport widget
+ * query - whether or not to query the child
+ * intended - cache of the childs height is stored here
+ * (used and returned)
+ * clip_width - size of clip window (used and returned)
+ * clip_height - ""
+ *
+ * Description:
+ * Computes the layout give forcebars is set.
+ */
+static void
+ComputeWithForceBars(Widget widget, Bool query, XtWidgetGeometry *intended,
+ int *clip_width, int *clip_height)
+{
+ ViewportWidget w = (ViewportWidget)widget;
+ Widget child = w->viewport.child;
+ XtWidgetGeometry preferred;
+
+ /*
+ * If forcebars then needs = allows = has
+ * Thus if needsvert is set it MUST have a scrollbar
+ */
+ if (w->viewport.allowvert) {
+ if (w->viewport.vert_bar == NULL)
+ w->viewport.vert_bar = CreateScrollbar(w, False);
+
+ *clip_width -= XtWidth(w->viewport.vert_bar) +
+ XtBorderWidth(w->viewport.vert_bar);
+ }
+
+ if (w->viewport.allowhoriz) {
+ if (w->viewport.horiz_bar == NULL)
+ w->viewport.horiz_bar = CreateScrollbar(w, True);
+
+ *clip_height -= XtHeight(w->viewport.horiz_bar) +
+ XtBorderWidth(w->viewport.horiz_bar);
+ }
+
+ AssignMax(*clip_width, 1);
+ AssignMax(*clip_height, 1);
+
+ if (!w->viewport.allowvert) {
+ intended->height = *clip_height;
+ intended->request_mode = CWHeight;
+ }
+ if (!w->viewport.allowhoriz) {
+ intended->width = *clip_width;
+ intended->request_mode = CWWidth;
+ }
+
+ if (query) {
+ if (w->viewport.allowvert || w->viewport.allowhoriz) {
+ XtQueryGeometry(child, intended, &preferred);
+
+ if (!(intended->request_mode & CWWidth)) {
+ if (preferred.request_mode & CWWidth)
+ intended->width = preferred.width;
+ else
+ intended->width = XtWidth(child);
+ }
+
+ if (!(intended->request_mode & CWHeight)) {
+ if (preferred.request_mode & CWHeight)
+ intended->height = preferred.height;
+ else
+ intended->height = XtHeight(child);
+ }
+ }
+ }
+ else {
+ if (w->viewport.allowvert)
+ intended->height = XtHeight(child);
+ if (w->viewport.allowhoriz)
+ intended->width = XtWidth(child);
+ }
+
+ if (*clip_width > (int)intended->width)
+ intended->width = *clip_width;
+ if (*clip_height > (int)intended->height)
+ intended->height = *clip_height;
+}
+
+static void
+XawViewportResize(Widget widget)
+{
+ ComputeLayout(widget, True, True);
+}
+
+/*ARGSUSED*/
+static Boolean
+Layout(FormWidget w, unsigned int width, unsigned int height, Bool force)
+{
+ ComputeLayout((Widget)w, True, True);
+ w->form.preferred_width = XtWidth(w);
+ w->form.preferred_height = XtHeight(w);
+
+ return (False);
+}
+
+static void
+ScrollUpDownProc(Widget widget, XtPointer closure, XtPointer call_data)
+{
+ ViewportWidget w = (ViewportWidget)closure;
+ Widget child = w->viewport.child;
+ int pix = (long)call_data;
+ int x, y;
+
+ if (child == NULL)
+ return;
+
+ x = XtX(child) - (widget == w->viewport.horiz_bar ? pix : 0);
+ y = XtY(child) - (widget == w->viewport.vert_bar ? pix : 0);
+ MoveChild(w, x, y);
+}
+
+/*ARGSUSED*/
+static void
+ThumbProc(Widget widget, XtPointer closure, XtPointer call_data)
+{
+ ViewportWidget w = (ViewportWidget)closure;
+ Widget child = w->viewport.child;
+ float percent = *(float *)call_data;
+ int x, y;
+
+ if (child == NULL)
+ return;
+
+ if (widget == w->viewport.horiz_bar)
+ x = -percent * XtWidth(child);
+ else
+ x = XtX(child);
+
+ if (widget == w->viewport.vert_bar)
+ y = -percent * XtHeight(child);
+ else
+ y = XtY(child);
+
+ MoveChild(w, x, y);
+}
+
+static XtGeometryResult
+TestSmaller(ViewportWidget w, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply_return)
+{
+ if (request->width < XtWidth(w) || request->height < XtHeight(w))
+ return (XtMakeGeometryRequest((Widget)w, request, reply_return));
+
+ return (XtGeometryYes);
+}
+
+static XtGeometryResult
+GeometryRequestPlusScrollbar(ViewportWidget w, Bool horizontal,
+ XtWidgetGeometry *request,
+ XtWidgetGeometry *reply_return)
+{
+ Widget sb;
+ XtWidgetGeometry plusScrollbars;
+
+ plusScrollbars = *request;
+ if ((sb = w->viewport.horiz_bar) == NULL)
+ sb = CreateScrollbar(w, horizontal);
+ request->width += XtWidth(sb);
+ request->height += XtHeight(sb);
+ XtDestroyWidget(sb);
+ return (XtMakeGeometryRequest((Widget)w, &plusScrollbars, reply_return));
+}
+
+#define WidthChange() (request->width != XtWidth(w))
+#define HeightChange() (request->height != XtHeight(w))
+static XtGeometryResult
+QueryGeometry(ViewportWidget w, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply_return)
+{
+ if (w->viewport.allowhoriz && w->viewport.allowvert)
+ return (TestSmaller(w, request, reply_return));
+
+ else if (w->viewport.allowhoriz && !w->viewport.allowvert) {
+ if (WidthChange() && !HeightChange())
+ return (TestSmaller(w, request, reply_return));
+ else if (!WidthChange() && HeightChange())
+ return (XtMakeGeometryRequest((Widget)w, request, reply_return));
+ else if (WidthChange() && HeightChange())
+ return (GeometryRequestPlusScrollbar(w, True, request, reply_return));
+ else /* !WidthChange() && !HeightChange() */
+ return (XtGeometryYes);
+ }
+ else if (!w->viewport.allowhoriz && w->viewport.allowvert) {
+ if (!WidthChange() && HeightChange())
+ return (TestSmaller(w, request, reply_return));
+ else if (WidthChange() && !HeightChange())
+ return (XtMakeGeometryRequest((Widget)w, request, reply_return));
+ else if (WidthChange() && HeightChange())
+ return (GeometryRequestPlusScrollbar(w, False, request, reply_return));
+ else /* !WidthChange() && !HeightChange() */
+ return (XtGeometryYes);
+ }
+ else /* (!w->viewport.allowhoriz && !w->viewport.allowvert) */
+ return (XtMakeGeometryRequest((Widget)w, request, reply_return));
+}
+#undef WidthChange
+#undef HeightChange
+
+static XtGeometryResult
+XawViewportGeometryManager(Widget child, XtWidgetGeometry *request,
+ XtWidgetGeometry *reply)
+{
+ ViewportWidget w = (ViewportWidget)child->core.parent;
+ Bool rWidth = (request->request_mode & CWWidth) != 0;
+ Bool rHeight = (request->request_mode & CWHeight) != 0;
+ XtWidgetGeometry allowed;
+ XtGeometryResult result;
+ Bool reconfigured;
+ Bool child_changed_size;
+ unsigned int height_remaining;
+
+ if (request->request_mode & XtCWQueryOnly)
+ return (QueryGeometry(w, request, reply));
+
+ if (child != w->viewport.child
+ || request->request_mode & ~(CWWidth | CWHeight | CWBorderWidth)
+ || ((request->request_mode & CWBorderWidth)
+ && request->border_width > 0))
+ return (XtGeometryNo);
+
+ allowed = *request;
+
+ reconfigured = GetGeometry((Widget)w,
+ rWidth ? request->width : XtWidth(w),
+ rHeight ? request->height : XtHeight(w));
+
+ child_changed_size = (rWidth && XtWidth(child) != request->width) ||
+ (rHeight && XtHeight(child) != request->height);
+
+ height_remaining = XtHeight(w);
+ if (rWidth && XtWidth(w) != request->width) {
+ if (w->viewport.allowhoriz && request->width > XtWidth(w)) {
+ /* horizontal scrollbar will be needed so possibly reduce height */
+ Widget bar;
+
+ if ((bar = w->viewport.horiz_bar) == NULL)
+ bar = CreateScrollbar(w, True);
+ height_remaining -= XtHeight(bar) + XtBorderWidth(bar);
+ reconfigured = True;
+ }
+ else
+ allowed.width = XtWidth(w);
+ }
+ if (rHeight && height_remaining != request->height) {
+ if (w->viewport.allowvert && request->height > height_remaining) {
+ /* vertical scrollbar will be needed, so possibly reduce width */
+ if (!w->viewport.allowhoriz || request->width < XtWidth(w)) {
+ Widget bar;
+
+ if ((bar = w->viewport.vert_bar) == NULL)
+ bar = CreateScrollbar(w, False);
+ if (!rWidth) {
+ allowed.width = XtWidth(w);
+ allowed.request_mode |= CWWidth;
+ }
+ if (allowed.width > XtWidth(bar) + XtBorderWidth(bar))
+ allowed.width -= XtWidth(bar) + XtBorderWidth(bar);
+ else
+ allowed.width = 1;
+ reconfigured = True;
+ }
+ }
+ else
+ allowed.height = height_remaining;
+ }
+
+ if (allowed.width != request->width || allowed.height != request->height) {
+ *reply = allowed;
+ result = XtGeometryAlmost;
+ }
+ else {
+ if (rWidth)
+ XtWidth(child) = request->width;
+ if (rHeight)
+ XtHeight(child) = request->height;
+ result = XtGeometryYes;
+ }
+
+ if (reconfigured || child_changed_size)
+ ComputeLayout((Widget)w, False, result == XtGeometryYes);
+
+ return (result);
+}
+
+static Bool
+GetGeometry(Widget w, unsigned int width, unsigned int height)
+{
+ XtWidgetGeometry geometry, return_geom;
+ XtGeometryResult result;
+
+ if (width == XtWidth(w) && height == XtHeight(w))
+ return (False);
+
+ geometry.request_mode = CWWidth | CWHeight;
+ geometry.width = width;
+ geometry.height = height;
+
+ if (XtIsRealized(w)) {
+ if (((ViewportWidget)w)->viewport.allowhoriz && width > XtWidth(w))
+ geometry.width = XtWidth(w);
+ if (((ViewportWidget)w)->viewport.allowvert && height > XtHeight(w))
+ geometry.height = XtHeight(w);
+ }
+ else {
+ /* This is the Realize call; we'll inherit a w&h iff none currently */
+ if (XtWidth(w) != 0) {
+ if (XtHeight(w) != 0)
+ return (False);
+ geometry.width = XtWidth(w);
+ }
+ if (XtHeight(w) != 0)
+ geometry.height = XtHeight(w);
+ }
+
+ result = XtMakeGeometryRequest(w, &geometry, &return_geom);
+ if (result == XtGeometryAlmost)
+ result = XtMakeGeometryRequest(w, &return_geom, NULL);
+
+ return (result == XtGeometryYes);
+}
+
+static XtGeometryResult
+XawViewportQueryGeometry(Widget w, XtWidgetGeometry *constraints,
+ XtWidgetGeometry *reply)
+{
+ if (((ViewportWidget)w)->viewport.child != NULL)
+ return (XtQueryGeometry(((ViewportWidget)w)->viewport.child,
+ constraints, reply));
+
+ return (XtGeometryYes);
+}
+
+void
+XawViewportSetLocation
+(
+ Widget gw,
+#if NeedWidePrototypes
+ double xoff, double yoff
+#else
+ float xoff, float yoff
+#endif
+ )
+{
+ ViewportWidget w = (ViewportWidget)gw;
+ Widget child = w->viewport.child;
+ int x, y;
+
+ if (xoff > 1.0) /* scroll to right */
+ x = XtWidth(child);
+ else if (xoff < 0.0) /* if the offset is < 0.0 nothing */
+ x = XtX(child);
+ else
+ x = (float)XtWidth(child) * xoff;
+
+ if (yoff > 1.0)
+ y = XtHeight(child);
+ else if (yoff < 0.0)
+ y = XtY(child);
+ else
+ y = (float)XtHeight(child) * yoff;
+
+ MoveChild (w, -x, -y);
+}
+
+void
+XawViewportSetCoordinates(Widget gw,
+#if NeedWidePrototypes
+ int x, int y
+#else
+ Position x, Position y
+#endif
+)
+{
+ ViewportWidget w = (ViewportWidget)gw;
+ Widget child = w->viewport.child;
+
+ if (x > XtWidth(child))
+ x = XtWidth(child);
+ else if (x < 0)
+ x = XtX(child);
+
+ if (y > XtHeight(child))
+ y = XtHeight(child);
+ else if (y < 0)
+ y = XtY(child);
+
+ MoveChild (w, -x, -y);
+}
diff --git a/libXaw/src/XawI18n.c b/libXaw/src/XawI18n.c
index 345bc7d87..38483f40e 100644
--- a/libXaw/src/XawI18n.c
+++ b/libXaw/src/XawI18n.c
@@ -1,108 +1,105 @@
-/* $Xorg: XawI18n.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/* Copyright 1991 NCR Corporation - Dayton, Ohio, USA */
-
-/*
- * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
- * and Nippon Telegraph and Telephone Corporation
- *
- * 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 names of OMRON, NTT Software, and NTT
- * not be used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. OMRON, NTT Software,
- * and NTT make no representations about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD
- * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT 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.
- *
- * Author: Li Yuhong OMRON Corporation
- */
-
-/*
-
-Copyright 1991, 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/XawI18n.c,v 1.7 2001/01/17 19:42:36 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include "XawI18n.h"
-
-wchar_t
-#if NeedWidePrototypes
-_Xaw_atowc(int c)
-#else
-_Xaw_atowc(unsigned char c)
-#endif
-{
- wchar_t wc;
- char str[2];
-
- str[0] = c;
- str[1] = '\0';
-
- mbtowc(&wc, str, 1);
-
- return (wc);
-}
-
-#ifdef NCR
-int
-_Xaw_iswspace(wchar_t w)
-{
- int ret = 0;
- wchar_t s = _Xaw_atowc(' ');
-
- if (s == w)
- ret = 1;
-
- return (ret);
-}
-#endif
-
-int
-_Xaw_iswalnum(wchar_t ch)
-{
-#ifdef HAVE_ISWALNUM
- return iswalnum(ch);
-#else
- unsigned char mb[MB_LEN_MAX];
-
- wctomb((char*)mb, ch);
-
- return (isalnum(*mb));
-#endif
-}
+/* Copyright 1991 NCR Corporation - Dayton, Ohio, USA */
+
+/*
+ * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
+ * and Nippon Telegraph and Telephone Corporation
+ *
+ * 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 names of OMRON, NTT Software, and NTT
+ * not be used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. OMRON, NTT Software,
+ * and NTT make no representations about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ *
+ * OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT 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.
+ *
+ * Author: Li Yuhong OMRON Corporation
+ */
+
+/*
+
+Copyright 1991, 1994, 1998 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.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include "XawI18n.h"
+
+wchar_t
+#if NeedWidePrototypes
+_Xaw_atowc(int c)
+#else
+_Xaw_atowc(unsigned char c)
+#endif
+{
+ wchar_t wc;
+ char str[2];
+
+ str[0] = c;
+ str[1] = '\0';
+
+ mbtowc(&wc, str, 1);
+
+ return (wc);
+}
+
+#ifdef NCR
+int
+_Xaw_iswspace(wchar_t w)
+{
+ int ret = 0;
+ wchar_t s = _Xaw_atowc(' ');
+
+ if (s == w)
+ ret = 1;
+
+ return (ret);
+}
+#endif
+
+int
+_Xaw_iswalnum(wchar_t ch)
+{
+#ifdef HAVE_ISWALNUM
+ return iswalnum(ch);
+#else
+ unsigned char mb[MB_LEN_MAX];
+
+ wctomb((char*)mb, ch);
+
+ return (isalnum(*mb));
+#endif
+}
diff --git a/libXaw/src/XawI18n.h b/libXaw/src/XawI18n.h
index 8f157d19b..6a9064a3a 100644
--- a/libXaw/src/XawI18n.h
+++ b/libXaw/src/XawI18n.h
@@ -1,122 +1,118 @@
-/* $XdotOrg: xc/lib/Xaw/XawI18n.h,v 1.2 2004/04/23 18:43:38 eich Exp $ */
-/* $Xorg: XawI18n.h,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/************************************************************
-
-Copyright 1993, 1994, 1998 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.
-
-********************************************************/
-/* $XFree86: xc/lib/Xaw/XawI18n.h,v 3.14 2001/12/14 19:54:46 dawes Exp $ */
-
-#ifdef HAS_WCTYPE_H
-#include <wctype.h>
-#ifndef NO_WIDEC_H
-#include <widec.h>
-#define wcslen(c) wslen(c)
-#define wcscpy(d, s) wscpy(d, s)
-#define wcsncpy(d, s, l) wsncpy(d, s, l)
-#endif
-#endif
-
-#ifdef HAS_WCHAR_H
-#include <wchar.h>
-#endif
-
-#if defined(AIXV3) || defined(__SCO__)
-#include <ctype.h>
-#endif
-
-#ifdef NCR
-#define iswspace(c) _Xaw_iswspace(c)
-int _Xaw_iswspace
-(
- wchar_t c
- );
-#endif
-
-#ifdef sony
-#ifndef SVR4
-#include <jctype.h>
-#define iswspace(c) jisspace(c)
-#endif
-#endif
-
-#ifdef QNX4
-#define toascii( c ) ((unsigned)(c) & 0x007f)
-#endif
-
-#include <stdlib.h>
-
-#ifdef USE_XWCHAR_STRING
-int _Xwcslen
-(
- wchar_t *wstr
- );
-
-#define wcslen(c) _Xwcslen(c)
-
-wchar_t *_Xwcscpy
-(
- wchar_t *wstr1,
- wchar_t *wstr2
- );
-
-#define wcscpy(d,s) _Xwcscpy(d,s)
-
-wchar_t *_Xwcsncpy
-(
- wchar_t *wstr1,
- wchar_t *wstr2,
- int len
- );
-
-#define wcsncpy(d, s, l) _Xwcsncpy(d, s, l)
-
-#ifdef USE_XMBTOWC
-#define mbtowc(wc, s, l) _Xmbtowc(wc, s, l)
-#endif
-#endif
-
-wchar_t _Xaw_atowc
-(
-#if NeedWidePrototypes
- int c
-#else
- unsigned char c
-#endif
- );
-
-#ifndef HAS_ISW_FUNCS
-#include <ctype.h>
-#ifndef iswspace
-#define iswspace(c) (isascii(c) && isspace(toascii(c)))
-#endif
-#endif
-
-#if !defined(iswalnum) && !defined(HAVE_ISWALNUM)
-#define iswalnum(c) _Xaw_iswalnum(c)
-#endif
-int _Xaw_iswalnum
-(
- wchar_t c
- );
+/************************************************************
+
+Copyright 1993, 1994, 1998 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.
+
+********************************************************/
+
+#ifdef HAVE_WCTYPE_H
+#include <wctype.h>
+#ifdef HAVE_WIDEC_H
+#include <widec.h>
+#define wcslen(c) wslen(c)
+#define wcscpy(d, s) wscpy(d, s)
+#define wcsncpy(d, s, l) wsncpy(d, s, l)
+#endif
+#endif
+
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+
+#if defined(AIXV3) || defined(__SCO__)
+#include <ctype.h>
+#endif
+
+#ifdef NCR
+#define iswspace(c) _Xaw_iswspace(c)
+int _Xaw_iswspace
+(
+ wchar_t c
+ );
+#endif
+
+#ifdef sony
+#ifndef SVR4
+#include <jctype.h>
+#define iswspace(c) jisspace(c)
+#endif
+#endif
+
+#ifdef QNX4
+#define toascii( c ) ((unsigned)(c) & 0x007f)
+#endif
+
+#include <stdlib.h>
+
+#ifdef USE_XWCHAR_STRING
+int _Xwcslen
+(
+ wchar_t *wstr
+ );
+
+#define wcslen(c) _Xwcslen(c)
+
+wchar_t *_Xwcscpy
+(
+ wchar_t *wstr1,
+ wchar_t *wstr2
+ );
+
+#define wcscpy(d,s) _Xwcscpy(d,s)
+
+wchar_t *_Xwcsncpy
+(
+ wchar_t *wstr1,
+ wchar_t *wstr2,
+ int len
+ );
+
+#define wcsncpy(d, s, l) _Xwcsncpy(d, s, l)
+
+#ifdef USE_XMBTOWC
+#define mbtowc(wc, s, l) _Xmbtowc(wc, s, l)
+#endif
+#endif
+
+wchar_t _Xaw_atowc
+(
+#if NeedWidePrototypes
+ int c
+#else
+ unsigned char c
+#endif
+ );
+
+#ifndef HAS_ISW_FUNCS
+#include <ctype.h>
+#ifndef iswspace
+#define iswspace(c) (isascii(c) && isspace(toascii(c)))
+#endif
+#endif
+
+#if !defined(iswalnum) && !defined(HAVE_ISWALNUM)
+#define iswalnum(c) _Xaw_iswalnum(c)
+#endif
+int _Xaw_iswalnum
+(
+ wchar_t c
+ );
diff --git a/libXaw/src/XawIm.c b/libXaw/src/XawIm.c
index 24a60786a..11391b57a 100644
--- a/libXaw/src/XawIm.c
+++ b/libXaw/src/XawIm.c
@@ -1,1612 +1,1609 @@
-/* $Xorg: XawIm.c,v 1.6 2001/02/09 02:03:47 xorgcvs Exp $ */
-
-/*
- * Copyright 1991 by OMRON Corporation
- *
- * 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 OMRON not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. OMRON makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * OMRON 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 TORTUOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Author: Seiji Kuwari OMRON Corporation
- * kuwa@omron.co.jp
- * kuwa%omron.co.jp@uunet.uu.net
- */
-
-
-/*
-
-Copyright 1994, 1998 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.
-
-*/
-/* $XFree86: xc/lib/Xaw/XawIm.c,v 1.14tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xos.h>
-#include <X11/Xfuncs.h>
-#include <X11/ShellP.h>
-#include <X11/Xaw/TextP.h>
-#include <X11/Xaw/MultiSrc.h>
-#include <X11/Xaw/MultiSinkP.h>
-#include <X11/Xaw/XawImP.h>
-#include <X11/Xaw/VendorEP.h>
-#include "XawI18n.h"
-#include <ctype.h>
-
-#include <stdarg.h>
-
-#define maxAscentOfFontSet(fontset) \
- ( - (XExtentsOfFontSet((fontset)))->max_logical_extent.y)
-
-#define maxHeightOfFontSet(fontset) \
- ((XExtentsOfFontSet((fontset)))->max_logical_extent.height)
-
-#define maxDescentOfFontSet(fontset) \
- (maxHeightOfFontSet(fontset) - maxAscentOfFontSet(fontset))
-
-#define Offset(field) (XtOffsetOf(XawIcTablePart, field))
-
-/*****************************************************
- *
- * Forward reference prototypes
- *
- *****************************************************/
-
-/*
- * Prototypes
- */
-static void AllCreateIC(XawVendorShellExtPart*);
-static void CloseIM(XawVendorShellExtPart*);
-static void CompileResourceList(XtResourceList, unsigned int);
-static void ConfigureCB(Widget, XtPointer, XEvent*, Boolean*);
-static void CreateIC(Widget, XawVendorShellExtPart*);
-static XawIcTableList CreateIcTable(Widget, XawVendorShellExtPart*);
-static XawIcTableList CurrentSharedIcTable(XawVendorShellExtPart*);
-static void Destroy(Widget, XawVendorShellExtPart*);
-static void DestroyAllIM(XawVendorShellExtPart*);
-static void DestroyIC(Widget, XawVendorShellExtPart*);
-static void FreeAllDataOfVendorShell(XawVendorShellExtPart*,
- VendorShellWidget);
-static XawVendorShellExtPart *GetExtPart(VendorShellWidget);
-static XawIcTableList GetIcTable(Widget, XawVendorShellExtPart*);
-static XawIcTableList GetIcTableShared(Widget, XawVendorShellExtPart*);
-static XIMStyle GetInputStyleOfIC(XawVendorShellExtPart*);
-static Bool Initialize(VendorShellWidget, XawVendorShellExtPart*);
-static Bool IsCreatedIC(Widget, XawVendorShellExtPart*);
-static Bool IsRegistered(Widget, XawVendorShellExtPart*);
-static Bool IsSharedIC(XawVendorShellExtPart*);
-static Bool NoRegistered(XawVendorShellExtPart*);
-static void OpenIM(XawVendorShellExtPart*);
-static void Reconnect(XawVendorShellExtPart*);
-static void Register(Widget, XawVendorShellExtPart*);
-static Bool RegisterToVendorShell(Widget, XawVendorShellExtPart*);
-static void ResizeVendorShell(VendorShellWidget, XawVendorShellExtPart*);
-static Bool ResizeVendorShell_Core(VendorShellWidget, XawVendorShellExtPart*,
- XawIcTableList);
-static VendorShellWidget SearchVendorShell(Widget);
-static Widget SetErrCnxt(Widget, XIM);
-static XawVendorShellExtPart *SetExtPart(VendorShellWidget,
- XawVendorShellExtWidget);
-static void SetFocus(Widget, XawVendorShellExtPart*);
-static void SetFocusValues(Widget, ArgList, Cardinal, Bool);
-static void SetICFocus(Widget, XawVendorShellExtPart*);
-static void SetICValues(Widget, XawVendorShellExtPart*, Bool);
-static void SetICValuesShared(Widget, XawVendorShellExtPart*, XawIcTableList,
- Bool);
-static void SetValues(Widget, XawVendorShellExtPart*, ArgList, Cardinal);
-static unsigned int SetVendorShellHeight(XawVendorShellExtPart*,
- unsigned int);
-static void SharedICChangeFocusWindow(Widget, XawVendorShellExtPart*,
- XawIcTableList);
-static void SizeNegotiation(XawIcTableList, unsigned int, unsigned int);
-static void Unregister(Widget, XawVendorShellExtPart*);
-static void UnregisterFromVendorShell(Widget, XawVendorShellExtPart*);
-static void UnsetFocus(Widget);
-static void UnsetICFocus(Widget, XawVendorShellExtPart*);
-static void VendorShellDestroyed(Widget, XtPointer, XtPointer);
-
-/*
- * From Vendor.c
- */
-void XawVendorShellExtResize(Widget);
-void XawVendorStructureNotifyHandler(Widget, XtPointer, XEvent*, Boolean*);
-
-
-/*
- * From Xt/Resources.c
- */
-void _XtCopyFromArg(XtArgVal src, char*, unsigned int);
-
-static XtResource resources[] =
-{
- {
- XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet),
- Offset (font_set), XtRString, XtDefaultFontSet
- },
- {
- XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
- Offset (foreground), XtRString, (XtPointer)"XtDefaultForeground"
- },
- {
- XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel),
- Offset (background), XtRString, (XtPointer)"XtDefaultBackground"
- },
- {
- XtNbackgroundPixmap, XtCPixmap, XtRPixmap, sizeof(Pixmap),
- Offset (bg_pixmap), XtRImmediate, (XtPointer) XtUnspecifiedPixmap
- },
- {
- XtNinsertPosition, XtCTextPosition, XtRInt, sizeof (XawTextPosition),
- Offset (cursor_position), XtRImmediate, (XtPointer) 0
- }
-};
-#undef Offset
-
-
-static VendorShellWidget SearchVendorShell(Widget w)
-{
- while(w && !XtIsShell(w)) w = XtParent(w);
- if (w && XtIsVendorShell(w)) return((VendorShellWidget)w);
- return(NULL);
-}
-
-static XContext extContext = (XContext)NULL;
-
-static XawVendorShellExtPart *
-SetExtPart(VendorShellWidget w, XawVendorShellExtWidget vew)
-{
- contextDataRec *contextData;
-
- if (extContext == (XContext)NULL) extContext = XUniqueContext();
-
- contextData = XtNew(contextDataRec);
- contextData->parent = (Widget)w;
- contextData->ve = (Widget)vew;
- if (XSaveContext(XtDisplay(w), (Window)w, extContext, (char *)contextData)) {
- return(NULL);
- }
- return(&(vew->vendor_ext));
-}
-
-static XawVendorShellExtPart *
-GetExtPart(VendorShellWidget w)
-{
- contextDataRec *contextData;
- XawVendorShellExtWidget vew;
-
- if (XFindContext(XtDisplay(w), (Window)w, extContext,
- (XPointer*)&contextData)) {
- return(NULL);
- }
- vew = (XawVendorShellExtWidget)contextData->ve;
- return(&(vew->vendor_ext));
-}
-
-static Bool
-IsSharedIC(XawVendorShellExtPart * ve)
-{
- return( ve->ic.shared_ic );
-}
-
-static XawIcTableList
-GetIcTableShared(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
-
- for (p = ve->ic.ic_table; p; p = p->next) {
- if (p->widget == w) {
- if (IsSharedIC(ve)) {
- return(ve->ic.shared_ic_table);
- } else {
- return(p);
- }
- }
- }
- return(NULL);
-}
-
-static XawIcTableList
-GetIcTable(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
-
- for (p = ve->ic.ic_table; p; p = p->next) {
- if (p->widget == w) {
- return(p);
- }
- }
- return(NULL);
-}
-
-static XIMStyle
-GetInputStyleOfIC(XawVendorShellExtPart *ve)
-{
-
- if (!ve) return((XIMStyle)0);
- return(ve->ic.input_style);
-}
-
-/*ARGSUSED*/
-static void
-ConfigureCB(Widget w, XtPointer closure, XEvent *event, Boolean *unused)
-{
- XawIcTableList p;
- XawVendorShellExtPart *ve;
- VendorShellWidget vw;
- XVaNestedList pe_attr;
- XRectangle pe_area;
- XawTextMargin *margin;
-
- if (event->type != ConfigureNotify) return;
-
- if ((vw = SearchVendorShell(w)) == NULL) return;
-
- if ((ve = GetExtPart(vw)) != NULL) {
- if (IsSharedIC(ve)) return;
- if ((ve->im.xim == NULL) ||
- ((p = GetIcTableShared(w, ve)) == NULL) ||
- (p->xic == NULL) || !(p->input_style & XIMPreeditPosition)) return;
- pe_area.x = 0;
- pe_area.y = 0;
- pe_area.width = w->core.width;
- pe_area.height = w->core.height;
- margin = &(((TextWidget)w)->text.margin);
- pe_area.x += margin->left;
- pe_area.y += margin->top;
- pe_area.width -= (margin->left + margin->right - 1);
- pe_area.height -= (margin->top + margin->bottom - 1);
-
- pe_attr = XVaCreateNestedList(0, XNArea, &pe_area, NULL);
- XSetICValues(p->xic, XNPreeditAttributes, pe_attr, NULL);
- XtFree(pe_attr);
- }
-}
-
-static XContext errContext = (XContext)NULL;
-
-static Widget SetErrCnxt(Widget w, XIM xim)
-{
- contextErrDataRec *contextErrData;
-
- if (errContext == (XContext)NULL) errContext = XUniqueContext();
-
- contextErrData = XtNew(contextErrDataRec);
- contextErrData->widget = w;
- contextErrData->xim = xim;
- if (XSaveContext(XtDisplay(w), (Window)xim, errContext,
- (char *)contextErrData)) {
- return(NULL);
- }
- return(contextErrData->widget);
-}
-
-#if 0
-static Widget
-GetErrCnxt(XIM error_im)
-{
- contextErrDataRec *contextErrData;
-
- if (XFindContext(XDisplayOfIM(error_im), (Window)error_im, errContext,
- (XPointer*)&contextErrData)) {
- return(NULL);
- }
- return(contextErrData->widget);
-}
-#endif
-
-static void
-CloseIM(XawVendorShellExtPart *ve)
-{
- if (ve->im.xim)
- XCloseIM(ve->im.xim);
-}
-
-static unsigned int
-SetVendorShellHeight(XawVendorShellExtPart* ve, unsigned int height)
-{
- Arg args[2];
- Cardinal i = 0;
-
- if (ve->im.area_height < height || height == 0) {
- XtSetArg(args[i], XtNheight,
- (ve->parent->core.height + height - ve->im.area_height));
- ve->im.area_height = height;
- XtSetValues(ve->parent, args, 1);
- }
- return(ve->im.area_height);
-}
-
-static void
-DestroyAllIM(XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
- contextErrDataRec *contextErrData;
-
- /*
- * Destory all ICs
- */
- if (IsSharedIC(ve)) {
- if ((p = ve->ic.shared_ic_table) && p->xic) {
- DestroyIC(p->widget, ve);
- p->xic = NULL;
- p->ic_focused = FALSE;
- }
- } else {
- for (p = ve->ic.ic_table; p; p = p->next) {
- if (p->xic == NULL) continue;
- DestroyIC(p->widget, ve);
- p->xic = NULL;
- p->ic_focused = FALSE;
- }
- }
- if (!ve->im.xim) return;
- /*
- * Close Input Method
- */
- if (!XFindContext(XDisplayOfIM(ve->im.xim), (Window)ve->im.xim, errContext,
- (XPointer*)&contextErrData)) {
- if (contextErrData) XtFree((char *)contextErrData);
- }
- XDeleteContext(XDisplayOfIM(ve->im.xim), (Window)ve->im.xim, errContext);
- CloseIM(ve);
- ve->im.xim = NULL;
-
- /*
- * resize vendor shell to core size
- */
- (void) SetVendorShellHeight(ve, 0);
- /*
- XawVendorShellExtResize(vw);
- */
- return;
-}
-
-static void
-FreeAllDataOfVendorShell(XawVendorShellExtPart *ve, VendorShellWidget vw)
-{
- XawIcTableList p, next;
- contextErrDataRec *contextErrData;
-
- if (!XFindContext(XtDisplay(vw), (Window)vw, extContext,
- (XPointer*)&contextErrData)) {
- if (contextErrData) XtFree((char *)contextErrData);
- }
- XDeleteContext(XtDisplay(vw), (Window)vw, extContext);
- if (ve->ic.shared_ic_table)
- XtFree((char *)ve->ic.shared_ic_table);
- if (ve->im.resources) XtFree((char *)ve->im.resources);
- for (p = ve->ic.ic_table; p; p = next) {
- next = p->next;
- XtFree((char *)p);
- }
-}
-
-static void
-VendorShellDestroyed(Widget w, XtPointer cl_data, XtPointer ca_data)
-{
- XawVendorShellExtPart *ve;
-
- if ( ( ve = GetExtPart( (VendorShellWidget) w ) ) == NULL ) return;
- DestroyAllIM( ve );
- FreeAllDataOfVendorShell( ve, (VendorShellWidget) w );
- return;
-}
-
-#if 0
-static int
-IOErrorHandler(XIM error_im)
-{
- VendorShellWidget vw;
- XawVendorShellExtPart * ve;
-
- if ((vw = (VendorShellWidget)GetErrCnxt(error_im)) == NULL
- || (ve = GetExtPart(vw)) == NULL) return(0);
-
- DestroyAllIM(ve);
- return(0);
-}
-#endif
-
-/*
- * Attempt to open an input method
- */
-
-static void
-OpenIM(XawVendorShellExtPart *ve)
-{
- int i;
- char *p, *s, *ns, *end, *pbuf, buf[32];
- XIM xim = NULL;
- XIMStyles *xim_styles;
- XIMStyle input_style = 0;
- Boolean found;
-
- if (ve->im.open_im == False) return;
- ve->im.xim = NULL;
- if (ve->im.input_method == NULL) {
- if ((p = XSetLocaleModifiers("@im=none")) != NULL && *p)
- xim = XOpenIM(XtDisplay(ve->parent), NULL, NULL, NULL);
- } else {
- /* no fragment can be longer than the whole string */
- Cardinal len = strlen (ve->im.input_method) + 5;
-
- if (len < sizeof buf) pbuf = buf;
- else pbuf = XtMalloc (len);
-
- if (pbuf == NULL) return;
-
- for(ns=s=ve->im.input_method; ns && *s;) {
- /* skip any leading blanks */
- while (*s && isspace(*s)) s++;
- if (!*s) break;
- if ((ns = end = strchr(s, ',')) == NULL)
- end = s + strlen(s);
- /* If there is a spurious comma end can be the same as s */
- if (end > s) {
- /* strip any trailing blanks */
- while (isspace(*(end - 1))) end--;
-
- strcpy (pbuf, "@im=");
- strncat (pbuf, s, end - s);
- pbuf[end - s + 4] = '\0';
- }
-
- if ((p = XSetLocaleModifiers(pbuf)) != NULL && *p
- && (xim = XOpenIM(XtDisplay(ve->parent), NULL, NULL, NULL)) != NULL)
- break;
-
- s = ns + 1;
- }
-
- if (pbuf != buf) XtFree (pbuf);
- }
- if (xim == NULL) {
- if ((p = XSetLocaleModifiers("")) != NULL) {
- xim = XOpenIM(XtDisplay(ve->parent), NULL, NULL, NULL);
- }
- }
- if (xim == NULL) {
- XtAppWarning(XtWidgetToApplicationContext(ve->parent),
- "Input Method Open Failed");
- return;
- }
- if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL)
- || !xim_styles) {
- XtAppWarning(XtWidgetToApplicationContext(ve->parent),
- "input method doesn't support any style");
- XCloseIM(xim);
- return;
- }
- found = False;
- for(ns = s = ve->im.preedit_type; s && !found;) {
- while (*s && isspace(*s)) s++;
- if (!*s) break;
- if ((ns = end = strchr(s, ',')) == NULL)
- end = s + strlen(s);
- else
- ns++;
- if (end > s)
- while (isspace(*(end - 1))) end--;
-
- if (!strncmp(s, "OverTheSpot", end - s)) {
- input_style = (XIMPreeditPosition | XIMStatusArea);
- } else if (!strncmp(s, "OffTheSpot", end - s)) {
- input_style = (XIMPreeditArea | XIMStatusArea);
- } else if (!strncmp(s, "Root", end - s)) {
- input_style = (XIMPreeditNothing | XIMStatusNothing);
- }
- for (i = 0; (unsigned short)i < xim_styles->count_styles; i++)
- if (input_style == xim_styles->supported_styles[i]) {
- ve->ic.input_style = input_style;
- SetErrCnxt(ve->parent, xim);
- ve->im.xim = xim;
- found = True;
- break;
- }
-
- s = ns;
- }
- XFree(xim_styles);
-
- if (!found) {
- XCloseIM(xim);
- XtAppWarning(XtWidgetToApplicationContext(ve->parent),
- "input method doesn't support my input style");
- }
-}
-
-static Bool
-ResizeVendorShell_Core(VendorShellWidget vw, XawVendorShellExtPart *ve,
- XawIcTableList p)
-{
- XVaNestedList pe_attr, st_attr;
- XRectangle pe_area, st_area;
- XRectangle *get_pe_area = NULL, *get_st_area = NULL;
-
- st_area.width = 0;
- if (p->input_style & XIMStatusArea) {
- st_attr = XVaCreateNestedList(0, XNArea, &get_st_area, NULL);
- XGetICValues(p->xic, XNStatusAttributes, st_attr, NULL);
- XFree(st_attr);
- if (p->xic == NULL) {
- return(FALSE);
- }
- st_area.x = 0;
- st_area.y = vw->core.height - ve->im.area_height;
- st_area.width = get_st_area->width;
- st_area.height = get_st_area->height;
- XFree(get_st_area);
- st_attr = XVaCreateNestedList(0, XNArea, &st_area, NULL);
- XSetICValues(p->xic, XNStatusAttributes, st_attr, NULL);
- XFree(st_attr);
- if (p->xic == NULL) {
- return(FALSE);
- }
- }
- if (p->input_style & XIMPreeditArea) {
- pe_attr = XVaCreateNestedList(0, XNArea, &get_pe_area, NULL);
- XGetICValues(p->xic, XNPreeditAttributes, pe_attr, NULL);
- XFree(pe_attr);
- if (p->xic == NULL) {
- return(FALSE);
- }
- pe_area.x = st_area.width;
- pe_area.y = vw->core.height - ve->im.area_height;
- pe_area.width = vw->core.width;
- pe_area.height = get_pe_area->height;
- if (p->input_style & XIMStatusArea) {
- pe_area.width -= st_area.width;
- }
- XFree(get_pe_area);
- pe_attr = XVaCreateNestedList(0, XNArea, &pe_area, NULL);
- XSetICValues(p->xic, XNPreeditAttributes, pe_attr, NULL);
- XFree(pe_attr);
- }
- return(TRUE);
-}
-
-static void
-ResizeVendorShell(VendorShellWidget vw, XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
-
- if (IsSharedIC(ve)) {
- p = ve->ic.shared_ic_table;
- if (p->xic == NULL) return;
- ResizeVendorShell_Core(vw, ve, p);
- return;
- }
- for (p = ve->ic.ic_table; p; p = p->next) {
- if (p->xic == NULL) continue;
- if (ResizeVendorShell_Core(vw, ve, p) == FALSE) return;
- }
-}
-
-static XawIcTableList
-CreateIcTable(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList table;
-
- table = (XawIcTableList) XtMalloc(sizeof(XawIcTablePart));
- if (table == NULL) return(NULL);
- table->widget = w;
- table->xic = NULL;
- table->flg = table->prev_flg = 0;
- table->font_set = NULL;
- table->foreground = table->background = 0xffffffff;
- table->bg_pixmap = 0;
- table->cursor_position = 0xffff;
- table->line_spacing = 0;
- table->ic_focused = FALSE;
- table->openic_error = FALSE;
- return(table);
-}
-
-static Bool
-RegisterToVendorShell(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList table;
-
- if ((table = CreateIcTable(w, ve)) == NULL) return(FALSE);
- table->next = ve->ic.ic_table;
- ve->ic.ic_table = table;
- return(TRUE);
-}
-
-static void
-UnregisterFromVendorShell(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList *prev, p;
-
- for (prev = &ve->ic.ic_table; (p = *prev) != NULL; prev = &p->next) {
- if (p->widget == w) {
- *prev = p->next;
- XtFree((char *)p);
- break;
- }
- }
- return;
-}
-
-static void
-SetICValuesShared(Widget w, XawVendorShellExtPart *ve,
- XawIcTableList p, Bool check)
-{
- XawIcTableList pp;
-
- if ((pp = GetIcTable(w, ve)) == NULL) return;
- if (check == TRUE && CurrentSharedIcTable(ve) != pp) return;
-
- if (pp->prev_flg & CICursorP && p->cursor_position != pp->cursor_position) {
- p->cursor_position = pp->cursor_position;
- p->flg |= CICursorP;
- }
- if (pp->prev_flg & CIFontSet && p->font_set != pp->font_set) {
- p->font_set = pp->font_set;
- p->flg |= (CIFontSet|CICursorP);
- }
- if (pp->prev_flg & CIFg && p->foreground != pp->foreground) {
- p->foreground = pp->foreground;
- p->flg |= CIFg;
- }
- if (pp->prev_flg & CIBg && p->background != pp->background) {
- p->background = pp->background;
- p->flg |= CIBg;
- }
- if (pp->prev_flg & CIBgPixmap && p->bg_pixmap != pp->bg_pixmap) {
- p->bg_pixmap = pp->bg_pixmap;
- p->flg |= CIBgPixmap;
- }
- if (pp->prev_flg & CILineS && p->line_spacing != pp->line_spacing) {
- p->line_spacing = pp->line_spacing;
- p->flg |= CILineS;
- }
-}
-
-static Bool
-IsCreatedIC(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
-
- if (ve->im.xim == NULL) return(FALSE);
- if ((p = GetIcTableShared(w, ve)) == NULL) return(FALSE);
- if (p->xic == NULL) return(FALSE);
- return(TRUE);
-}
-
-static void
-SizeNegotiation(XawIcTableList p, unsigned int width, unsigned int height)
-{
- XRectangle pe_area, st_area;
- XVaNestedList pe_attr = NULL, st_attr = NULL;
- int ic_cnt = 0;
- XRectangle *pe_area_needed = NULL, *st_area_needed = NULL;
- XPointer ic_a[5];
-
- if (p->input_style & XIMPreeditArea) {
- pe_attr = XVaCreateNestedList(0, XNAreaNeeded, &pe_area_needed, NULL);
- ic_a[ic_cnt] = (XPointer) XNPreeditAttributes; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) pe_attr; ic_cnt++;
- }
- if (p->input_style & XIMStatusArea) {
- st_attr = XVaCreateNestedList(0, XNAreaNeeded, &st_area_needed, NULL);
- ic_a[ic_cnt] = (XPointer) XNStatusAttributes; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) st_attr; ic_cnt++;
- }
- ic_a[ic_cnt] = (XPointer) NULL;
-
- if (ic_cnt > 0) {
- XGetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], NULL);
- if (pe_attr) XFree(pe_attr);
- if (st_attr) XFree(st_attr);
- if (p->xic == NULL) {
- p->openic_error = True;
- return;
- }
- pe_attr = st_attr = NULL;
- ic_cnt = 0;
- if (p->input_style & XIMStatusArea) {
- st_area.height = st_area_needed->height;
- st_area.x = 0;
- st_area.y = height - st_area.height;
- if (p->input_style & XIMPreeditArea) {
- st_area.width = st_area_needed->width;
- } else {
- st_area.width = width;
- }
-
- XFree(st_area_needed);
- st_attr = XVaCreateNestedList(0, XNArea, &st_area, NULL);
- ic_a[ic_cnt] = (XPointer) XNStatusAttributes; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) st_attr; ic_cnt++;
- }
- if (p->input_style & XIMPreeditArea) {
- if (p->input_style & XIMStatusArea) {
- pe_area.x = st_area.width;
- pe_area.width = width - st_area.width;
- } else {
- pe_area.x = 0;
- pe_area.width = width;
- }
- pe_area.height = pe_area_needed->height;
- XFree(pe_area_needed);
- pe_area.y = height - pe_area.height;
- pe_attr = XVaCreateNestedList(0, XNArea, &pe_area, NULL);
- ic_a[ic_cnt] = (XPointer) XNPreeditAttributes; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) pe_attr; ic_cnt++;
- }
- ic_a[ic_cnt] = (XPointer) NULL;
- XSetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], NULL);
- if (pe_attr) XFree(pe_attr);
- if (st_attr) XFree(st_attr);
- if (p->xic == NULL) {
- p->openic_error = True;
- return;
- }
- }
-}
-
-static void
-CreateIC(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
- XPoint position;
- XRectangle pe_area, st_area;
- XVaNestedList pe_attr = NULL, st_attr = NULL;
- XPointer ic_a[20], pe_a[20], st_a[20];
- Dimension height = 0;
- int ic_cnt = 0, pe_cnt = 0, st_cnt = 0;
- XawTextMargin *margin;
-
- if (!XtIsRealized(w)) return;
- if (((ve->im.xim == NULL) || (p = GetIcTableShared(w, ve)) == NULL) ||
- p->xic || (p->openic_error != FALSE)) return;
-
- p->input_style = GetInputStyleOfIC(ve);
-
- if (IsSharedIC(ve)) SetICValuesShared(w, ve, p, FALSE);
- XFlush(XtDisplay(w));
-
- if (p->input_style & (XIMPreeditArea|XIMPreeditPosition|XIMStatusArea)) {
- if (p->flg & CIFontSet) {
- pe_a[pe_cnt] = (XPointer) XNFontSet; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->font_set; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNFontSet; st_cnt++;
- st_a[st_cnt] = (XPointer) p->font_set; st_cnt++;
- if (p->font_set) {
- height = maxAscentOfFontSet(p->font_set)
- + maxDescentOfFontSet(p->font_set);
- }
- height = SetVendorShellHeight(ve, height);
- }
- if (p->flg & CIFg) {
- pe_a[pe_cnt] = (XPointer) XNForeground; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->foreground; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNForeground; st_cnt++;
- st_a[st_cnt] = (XPointer) p->foreground; st_cnt++;
- }
- if (p->flg & CIBg) {
- pe_a[pe_cnt] = (XPointer) XNBackground; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->background; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNBackground; st_cnt++;
- st_a[st_cnt] = (XPointer) p->background; st_cnt++;
- }
- if (p->flg & CIBgPixmap) {
- pe_a[pe_cnt] = (XPointer) XNBackgroundPixmap; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->bg_pixmap; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNBackgroundPixmap; st_cnt++;
- st_a[st_cnt] = (XPointer) p->bg_pixmap; st_cnt++;
- }
- if (p->flg & CILineS) {
- pe_a[pe_cnt] = (XPointer) XNLineSpace; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->line_spacing; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNLineSpace; st_cnt++;
- st_a[st_cnt] = (XPointer) p->line_spacing; st_cnt++;
- }
- }
- if (p->input_style & XIMPreeditArea) {
- pe_area.x = 0;
- pe_area.y = ve->parent->core.height - height;
- pe_area.width = ve->parent->core.width;
- pe_area.height = height;
- pe_a[pe_cnt] = (XPointer) XNArea; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) &pe_area; pe_cnt++;
- }
- if (p->input_style & XIMPreeditPosition) {
- pe_area.x = 0;
- pe_area.y = 0;
- pe_area.width = w->core.width;
- pe_area.height = w->core.height;
- margin = &(((TextWidget)w)->text.margin);
- pe_area.x += margin->left;
- pe_area.y += margin->top;
- pe_area.width -= (margin->left + margin->right - 1);
- pe_area.height -= (margin->top + margin->bottom - 1);
- pe_a[pe_cnt] = (XPointer) XNArea; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) &pe_area; pe_cnt++;
- if (p->flg & CICursorP) {
- _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y);
- } else {
- position.x = position.y = 0;
- }
- pe_a[pe_cnt] = (XPointer) XNSpotLocation; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) &position; pe_cnt++;
- }
- if (p->input_style & XIMStatusArea) {
- st_area.x = 0;
- st_area.y = ve->parent->core.height - height;
- st_area.width = ve->parent->core.width;
- st_area.height = height;
- st_a[st_cnt] = (XPointer) XNArea; st_cnt++;
- st_a[st_cnt] = (XPointer) &st_area; st_cnt++;
- }
-
- ic_a[ic_cnt] = (XPointer) XNInputStyle; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) p->input_style; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) XNClientWindow; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) XtWindow(ve->parent); ic_cnt++;
- ic_a[ic_cnt] = (XPointer) XNFocusWindow; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) XtWindow(w); ic_cnt++;
-
- if (pe_cnt > 0) {
- pe_a[pe_cnt] = (XPointer) NULL;
- pe_attr = XVaCreateNestedList(0, pe_a[0], pe_a[1], pe_a[2], pe_a[3],
- pe_a[4], pe_a[5], pe_a[6], pe_a[7], pe_a[8],
- pe_a[9], pe_a[10], pe_a[11], pe_a[12],
- pe_a[13], pe_a[14], pe_a[15], pe_a[16],
- pe_a[17], pe_a[18], NULL);
- ic_a[ic_cnt] = (XPointer) XNPreeditAttributes; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) pe_attr; ic_cnt++;
- }
-
- if (st_cnt > 0) {
- st_a[st_cnt] = (XPointer) NULL;
- st_attr = XVaCreateNestedList(0, st_a[0], st_a[1], st_a[2], st_a[3],
- st_a[4], st_a[5], st_a[6], st_a[7], st_a[8],
- st_a[9], st_a[10], st_a[11], st_a[12],
- st_a[13], st_a[14], st_a[15], st_a[16],
- st_a[17], st_a[18], NULL);
- ic_a[ic_cnt] = (XPointer) XNStatusAttributes; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) st_attr; ic_cnt++;
- }
- ic_a[ic_cnt] = (XPointer) NULL;
-
- p->xic = XCreateIC(ve->im.xim, ic_a[0], ic_a[1], ic_a[2], ic_a[3],
- ic_a[4], ic_a[5], ic_a[6], ic_a[7], ic_a[8], ic_a[9],
- ic_a[10], ic_a[11], ic_a[12], ic_a[13], ic_a[14],
- ic_a[15], ic_a[16], ic_a[17], ic_a[18], NULL);
- if (pe_attr) XtFree(pe_attr);
- if (st_attr) XtFree(st_attr);
-
- if (p->xic == NULL) {
- p->openic_error = True;
- return;
- }
-
- SizeNegotiation(p, ve->parent->core.width, ve->parent->core.height);
-
- p->flg &= ~(CIFontSet | CIFg | CIBg | CIBgPixmap | CICursorP | CILineS);
-
- if (!IsSharedIC(ve)) {
- if (p->input_style & XIMPreeditPosition) {
- XtAddEventHandler(w, (EventMask)StructureNotifyMask, FALSE,
- (XtEventHandler)ConfigureCB, (Opaque)NULL);
- }
- }
-}
-
-static void
-SetICValues(Widget w, XawVendorShellExtPart *ve, Bool focus)
-{
- XawIcTableList p;
- XPoint position;
- XRectangle pe_area;
- XVaNestedList pe_attr = NULL, st_attr = NULL;
- XPointer ic_a[20], pe_a[20], st_a[20];
- int ic_cnt = 0, pe_cnt = 0, st_cnt = 0;
- XawTextMargin *margin;
- int height = 0;
-
- if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
- (p->xic == NULL)) return;
-
- if (IsSharedIC(ve)) SetICValuesShared(w, ve, p, TRUE);
- XFlush(XtDisplay(w));
- if (focus == FALSE &&
- !(p->flg & (CIFontSet | CIFg | CIBg |
- CIBgPixmap | CICursorP | CILineS))) return;
-#ifdef SPOT
- if ((p->input_style & XIMPreeditPosition)
- && ((!IsSharedIC(ve) && ((p->flg & ~CIICFocus) == CICursorP))
- || (IsSharedIC(ve) && p->flg == CICursorP))) {
- _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y);
- _XipChangeSpot(p->xic, position.x, position.y);
- p->flg &= ~CICursorP;
- return;
- }
-#endif
-
- if (p->input_style & (XIMPreeditArea|XIMPreeditPosition|XIMStatusArea)) {
- if (p->flg & CIFontSet) {
- pe_a[pe_cnt] = (XPointer) XNFontSet; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->font_set; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNFontSet; st_cnt++;
- st_a[st_cnt] = (XPointer) p->font_set; st_cnt++;
- if (p->font_set) {
- height = maxAscentOfFontSet(p->font_set)
- + maxDescentOfFontSet(p->font_set);
- }
- height = SetVendorShellHeight(ve, height);
- }
- if (p->flg & CIFg) {
- pe_a[pe_cnt] = (XPointer) XNForeground; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->foreground; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNForeground; st_cnt++;
- st_a[st_cnt] = (XPointer) p->foreground; st_cnt++;
- }
- if (p->flg & CIBg) {
- pe_a[pe_cnt] = (XPointer) XNBackground; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->background; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNBackground; st_cnt++;
- st_a[st_cnt] = (XPointer) p->background; st_cnt++;
- }
- if (p->flg & CIBgPixmap) {
- pe_a[pe_cnt] = (XPointer) XNBackgroundPixmap; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->bg_pixmap; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNBackgroundPixmap; st_cnt++;
- st_a[st_cnt] = (XPointer) p->bg_pixmap; st_cnt++;
- }
- if (p->flg & CILineS) {
- pe_a[pe_cnt] = (XPointer) XNLineSpace; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) p->line_spacing; pe_cnt++;
- st_a[st_cnt] = (XPointer) XNLineSpace; st_cnt++;
- st_a[st_cnt] = (XPointer) p->line_spacing; st_cnt++;
- }
- }
- if (p->input_style & XIMPreeditPosition) {
- if (p->flg & CICursorP) {
- _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y);
- pe_a[pe_cnt] = (XPointer) XNSpotLocation; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) &position; pe_cnt++;
- }
- }
- if (IsSharedIC(ve)) {
- if (p->input_style & XIMPreeditPosition) {
- pe_area.x = 0;
- pe_area.y = 0;
- pe_area.width = w->core.width;
- pe_area.height = w->core.height;
- margin = &(((TextWidget)w)->text.margin);
- pe_area.x += margin->left;
- pe_area.y += margin->top;
- pe_area.width -= (margin->left + margin->right - 1);
- pe_area.height -= (margin->top + margin->bottom - 1);
- pe_a[pe_cnt] = (XPointer) XNArea; pe_cnt++;
- pe_a[pe_cnt] = (XPointer) &pe_area; pe_cnt++;
- }
- }
-
- if (pe_cnt > 0) {
- pe_a[pe_cnt] = (XPointer) NULL;
- pe_attr = XVaCreateNestedList(0, pe_a[0], pe_a[1], pe_a[2], pe_a[3],
- pe_a[4], pe_a[5], pe_a[6], pe_a[7],
- pe_a[8], pe_a[9], pe_a[10], pe_a[11],
- pe_a[12], pe_a[13], pe_a[14], pe_a[15],
- pe_a[16], pe_a[17], pe_a[18], NULL);
- ic_a[ic_cnt] = (XPointer) XNPreeditAttributes; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) pe_attr; ic_cnt++;
- }
- if (st_cnt > 0) {
- st_a[st_cnt] = (XPointer) NULL;
- st_attr = XVaCreateNestedList(0, st_a[0], st_a[1], st_a[2], st_a[3],
- st_a[4], st_a[5], st_a[6], st_a[7],
- st_a[8], st_a[9], st_a[10], st_a[11],
- st_a[12], st_a[13], st_a[14], st_a[15],
- st_a[16], st_a[17], st_a[18], NULL);
- ic_a[ic_cnt] = (XPointer) XNStatusAttributes; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) st_attr; ic_cnt++;
- }
- if (focus == TRUE) {
- ic_a[ic_cnt] = (XPointer) XNFocusWindow; ic_cnt++;
- ic_a[ic_cnt] = (XPointer) XtWindow(w); ic_cnt++;
- }
- if (ic_cnt > 0) {
- ic_a[ic_cnt] = (XPointer) NULL;
- XSetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], ic_a[4],
- ic_a[5], ic_a[6], ic_a[7], ic_a[8], ic_a[9], ic_a[10],
- ic_a[11], ic_a[12], ic_a[13], ic_a[14], ic_a[15],
- ic_a[16], ic_a[17], ic_a[18], NULL);
- if (pe_attr) XtFree(pe_attr);
- if (st_attr) XtFree(st_attr);
- }
-
- if (IsSharedIC(ve) && p->flg & CIFontSet)
- SizeNegotiation(p, ve->parent->core.width, ve->parent->core.height);
-
- p->flg &= ~(CIFontSet | CIFg | CIBg | CIBgPixmap | CICursorP | CILineS);
-}
-
-static void
-SharedICChangeFocusWindow(Widget w, XawVendorShellExtPart *ve,
- XawIcTableList p)
-{
- XawIcTableList pp;
-
- if (w == NULL) {
- ve->ic.current_ic_table = NULL;
- return;
- }
- if ((pp = GetIcTable(w, ve)) == NULL) return;
- ve->ic.current_ic_table = pp;
- SetICValues(w, ve, TRUE);
-}
-
-static XawIcTableList
-CurrentSharedIcTable(XawVendorShellExtPart *ve)
-{
- return(ve->ic.current_ic_table);
-}
-
-static void
-SetICFocus(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList p, pp;
-
- if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
- (p->xic == NULL)) return;
-
- if (IsSharedIC(ve)) {
- pp = CurrentSharedIcTable(ve);
- if (pp == NULL || pp->widget != w) {
- SharedICChangeFocusWindow(w, ve, p);
- }
- }
- if (p->flg & CIICFocus && p->ic_focused == FALSE) {
- p->ic_focused = TRUE;
- XSetICFocus(p->xic);
- }
- p->flg &= ~CIICFocus;
-}
-
-static void
-UnsetICFocus(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList p, pp;
-
- if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
- (p->xic == NULL)) return;
-
- if (IsSharedIC(ve) && (pp = CurrentSharedIcTable(ve))) {
- if (pp->widget != w) {
- return;
- }
- SharedICChangeFocusWindow(NULL, ve, p);
- }
- if (p->ic_focused == TRUE) {
- XUnsetICFocus(p->xic);
- p->ic_focused = FALSE;
- }
-}
-
-static void
-SetValues(Widget w, XawVendorShellExtPart *ve,
- ArgList args, Cardinal num_args)
-{
- ArgList arg;
-
- XrmName argName;
- XrmResourceList xrmres;
- Cardinal i;
- XawIcTablePart *p, save_tbl;
-
- if ((p = GetIcTable(w, ve)) == NULL) return;
-
- memcpy(&save_tbl, p, sizeof(XawIcTablePart));
-
- for (arg = args ; num_args != 0; num_args--, arg++) {
- argName = XrmStringToName(arg->name);
- for (xrmres = (XrmResourceList)ve->im.resources, i = 0;
- i < ve->im.num_resources; i++, xrmres++) {
- if (argName == xrmres->xrm_name) {
- _XtCopyFromArg(arg->value,
- (char *)p - xrmres->xrm_offset - 1,
- xrmres->xrm_size);
- break;
- }
- }
- }
- if (p->font_set != save_tbl.font_set) {
- p->flg |= CIFontSet;
- }
- if (p->foreground != save_tbl.foreground) {
- p->flg |= CIFg;
- }
- if (p->background !=save_tbl.background) {
- p->flg |= CIBg;
- }
- if (p->bg_pixmap != save_tbl.bg_pixmap) {
- p->flg |= CIBgPixmap;
- }
- if (p->cursor_position != save_tbl.cursor_position) {
- p->flg |= CICursorP;
- }
- if (p->line_spacing != save_tbl.line_spacing) {
- p->flg |= CILineS;
- }
- p->prev_flg |= p->flg;
-}
-
-static void
-SetFocus(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
- if ((p = GetIcTableShared(w, ve)) == NULL) return;
-
- if ( p->ic_focused == FALSE || IsSharedIC(ve)) {
- p->flg |= CIICFocus;
- }
- p->prev_flg |= p->flg;
-}
-
-static void
-DestroyIC(Widget w, XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
-
- if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
- (p->xic == NULL)) return;
- if (IsSharedIC(ve)) {
- if (GetIcTable(w, ve) == ve->ic.current_ic_table) {
- UnsetICFocus(w, ve);
- }
- return;
- }
- XDestroyIC(p->xic);
- if (!IsSharedIC(ve)) {
- if (p->input_style & XIMPreeditPosition) {
- XtRemoveEventHandler(w, (EventMask)StructureNotifyMask, FALSE,
- (XtEventHandler)ConfigureCB, (Opaque)NULL);
- }
- }
-}
-
-static void
-SetFocusValues(Widget inwidg, ArgList args, Cardinal num_args, Bool focus)
-{
- XawVendorShellExtPart *ve;
- VendorShellWidget vw;
-
- if ((vw = SearchVendorShell(inwidg)) == NULL) return;
- if ((ve = GetExtPart(vw)) != NULL) {
- if (num_args > 0) SetValues(inwidg, ve, args, num_args);
- if (focus) SetFocus(inwidg, ve);
- if (XtIsRealized((Widget)vw) && ve->im.xim) {
- if (IsCreatedIC(inwidg, ve)) {
- SetICValues(inwidg, ve, FALSE);
- if (focus) SetICFocus(inwidg, ve);
- } else {
- CreateIC(inwidg, ve);
- SetICFocus(inwidg, ve);
- }
- }
- }
-}
-
-static void
-UnsetFocus(Widget inwidg)
-{
- XawVendorShellExtPart *ve;
- VendorShellWidget vw;
- XawIcTableList p;
-
- if ((vw = SearchVendorShell(inwidg)) == NULL) return;
- if ((ve = GetExtPart(vw)) != NULL) {
- if ((p = GetIcTableShared(inwidg, ve)) == NULL) return;
- if (p->flg & CIICFocus) {
- p->flg &= ~CIICFocus;
- }
- p->prev_flg &= ~CIICFocus;
- if (ve->im.xim && XtIsRealized((Widget)vw) && p->xic) {
- UnsetICFocus(inwidg, ve);
- }
- }
-}
-
-static Bool
-IsRegistered(Widget w, XawVendorShellExtPart* ve)
-{
- XawIcTableList p;
-
- for (p = ve->ic.ic_table; p; p = p->next)
- {
- if (p->widget == w) return(TRUE);
- }
- return(FALSE);
-}
-
-static void
-Register(Widget inwidg, XawVendorShellExtPart* ve)
-{
- if (ve->im.xim == NULL)
- {
- OpenIM(ve);
- }
-
- if (IsRegistered(inwidg, ve)) return;
-
- if (RegisterToVendorShell(inwidg, ve) == FALSE) return;
-
- if (ve->im.xim == NULL) return;
-
- if (XtIsRealized(ve->parent))
- {
- CreateIC(inwidg, ve);
- SetICFocus(inwidg, ve);
- }
-}
-
-static Bool
-NoRegistered(XawVendorShellExtPart* ve)
-{
- if (ve->ic.ic_table == NULL) return(TRUE);
- return(FALSE);
-}
-
-static void
-Unregister(Widget inwidg, XawVendorShellExtPart *ve)
-{
- if (!IsRegistered(inwidg, ve)) return;
-
- DestroyIC(inwidg, ve);
-
- UnregisterFromVendorShell(inwidg, ve);
-
- if (NoRegistered(ve))
- {
- CloseIM(ve);
- ve->im.xim = NULL;
- /*
- * resize vendor shell to core size
- */
- (void) SetVendorShellHeight(ve, 0);
- }
-}
-
-static void
-AllCreateIC(XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
-
- if (ve->im.xim == NULL) return;
- if (IsSharedIC(ve) && ve->ic.ic_table[0].widget) {
- p = ve->ic.shared_ic_table;
- if (p->xic == NULL)
- CreateIC(ve->ic.ic_table[0].widget, ve);
- SetICFocus(ve->ic.ic_table[0].widget, ve);
- return;
- }
- for (p = ve->ic.ic_table; p; p = p->next) {
- if (p->xic == NULL)
- CreateIC(p->widget, ve);
- }
- for (p = ve->ic.ic_table; p; p = p->next) {
- SetICFocus(p->widget, ve);
- }
-}
-
-
-static void
-Reconnect(XawVendorShellExtPart *ve)
-{
- XawIcTableList p;
-
- ve->im.open_im = True;
- if (ve->im.xim == NULL) {
- OpenIM(ve);
- }
- if (ve->im.xim == NULL) return;
-
- if (IsSharedIC(ve)) {
- p = ve->ic.shared_ic_table;
- p->flg = p->prev_flg;
- p->openic_error = FALSE;
- } else {
- for (p = ve->ic.ic_table; p; p = p->next) {
- p->flg = p->prev_flg;
- p->openic_error = FALSE;
- }
- }
- AllCreateIC(ve);
-}
-
-
-static void
-CompileResourceList(XtResourceList res, unsigned int num_res)
-{
- unsigned int count;
-
-#define xrmres ((XrmResourceList) res)
- for (count = 0; count < num_res; res++, count++) {
- xrmres->xrm_name = XrmPermStringToQuark(res->resource_name);
- xrmres->xrm_class = XrmPermStringToQuark(res->resource_class);
- xrmres->xrm_type = XrmPermStringToQuark(res->resource_type);
- xrmres->xrm_offset = -res->resource_offset - 1;
- xrmres->xrm_default_type = XrmPermStringToQuark(res->default_type);
- }
-#undef xrmres
-}
-
-static Bool
-Initialize(VendorShellWidget vw, XawVendorShellExtPart *ve)
-{
- if (!XtIsVendorShell((Widget)vw)) return(FALSE);
- ve->parent = (Widget)vw;
- ve->im.xim = NULL;
- ve->im.area_height = 0;
- ve->im.resources = (XrmResourceList)XtMalloc(sizeof(resources));
- if (ve->im.resources == NULL) return(FALSE);
- memcpy((char *)ve->im.resources, (char *)resources, sizeof(resources));
- ve->im.num_resources = XtNumber(resources);
- CompileResourceList( (XtResourceList) ve->im.resources,
- ve->im.num_resources );
- if ((ve->ic.shared_ic_table = CreateIcTable( (Widget)vw, ve)) == NULL)
- return(FALSE);
- ve->ic.current_ic_table = NULL;
- ve->ic.ic_table = NULL;
- return(TRUE);
-}
-
-
-/* Destroy()
- *
- * This frees all (most?) of the resources malloced by XawIm.
- * It is called by _XawImDestroy, which is called by Vendor.c's
- * VendorExt's Destroy method. Sheeran, Omron KK, 93/08/05 */
-
-static void
-Destroy(Widget w, XawVendorShellExtPart *ve)
-{
- contextDataRec *contextData;
- contextErrDataRec *contextErrData;
-
- if (!XtIsVendorShell( w ) )
- return;
- XtFree( (char*) ve->im.resources );
-
- if (extContext != (XContext)NULL &&
- !XFindContext (XtDisplay (w), (Window)w,
- extContext, (XPointer*)&contextData))
- XtFree( (char*) contextData );
-
- if (errContext != (XContext)NULL &&
- !XFindContext (XDisplayOfIM( ve->im.xim ), (Window) ve->im.xim,
- errContext, (XPointer*) &contextErrData))
- XtFree( (char*) contextErrData );
-}
-
-/*********************************************
- *
- * SEMI-PRIVATE FUNCTIONS
- * For use by other Xaw modules
- *
- ********************************************/
-
-void
-_XawImResizeVendorShell(Widget w)
-{
- XawVendorShellExtPart *ve;
-
- if ( ( ve = GetExtPart( (VendorShellWidget) w ) ) && ve->im.xim ) {
- ResizeVendorShell( (VendorShellWidget) w, ve );
- }
-}
-
-
-Dimension
-_XawImGetShellHeight(Widget w)
-{
- XawVendorShellExtPart *ve;
-
- if (!XtIsVendorShell( w ) ) return( w->core.height );
- if ( (ve = GetExtPart( (VendorShellWidget) w )) != NULL ) {
- return( w->core.height - ve->im.area_height );
- }
- return( w->core.height );
-}
-
-void
-_XawImRealize(Widget w)
-{
- XawVendorShellExtPart *ve;
-
- if ( !XtIsRealized( w ) || !XtIsVendorShell( w ) ) return;
- if ( (ve = GetExtPart( (VendorShellWidget) w )) != NULL ) {
- XtAddEventHandler( w, (EventMask)StructureNotifyMask, FALSE,
- XawVendorStructureNotifyHandler, (XtPointer)NULL );
- AllCreateIC(ve);
- }
-}
-
-void
-_XawImInitialize(Widget w, Widget ext)
-{
- XawVendorShellExtPart *ve;
-
- if ( !XtIsVendorShell( w ) ) return;
- if ( (ve = SetExtPart( (VendorShellWidget) w, (XawVendorShellExtWidget)ext )) != NULL ) {
- if ( Initialize( (VendorShellWidget) w, ve ) == FALSE ) return;
- XtAddCallback( w, XtNdestroyCallback, VendorShellDestroyed,
- (XtPointer) NULL );
- }
-}
-
-void
-_XawImReconnect(Widget inwidg)
-{
- XawVendorShellExtPart *ve;
- VendorShellWidget vw;
-
- if ((vw = SearchVendorShell(inwidg)) == NULL) return;
- if ((ve = GetExtPart(vw)) != NULL) {
- Reconnect(ve);
- }
-}
-
-void
-_XawImRegister(Widget inwidg)
-{
- XawVendorShellExtPart *ve;
- VendorShellWidget vw;
-
- if ((vw = SearchVendorShell(inwidg)) == NULL) return;
- if ((ve = GetExtPart(vw)) != NULL) {
- Register(inwidg, ve);
- }
-}
-
-void
-_XawImUnregister(Widget inwidg)
-{
- XawVendorShellExtPart *ve;
- VendorShellWidget vw;
-
- if ((vw = SearchVendorShell(inwidg)) == NULL) return;
- if ((ve = GetExtPart(vw)) != NULL) {
- Unregister(inwidg, ve);
- }
-}
-
-void
-_XawImSetValues(Widget inwidg, ArgList args, Cardinal num_args)
-{
- SetFocusValues( inwidg, args, num_args, FALSE );
-}
-
-void
-_XawImSetFocusValues(Widget inwidg, ArgList args, Cardinal num_args)
-{
- SetFocusValues(inwidg, args, num_args, TRUE);
-}
-
-void
-_XawImUnsetFocus(Widget inwidg)
-{
- UnsetFocus(inwidg);
-}
-
-int
-_XawImWcLookupString(Widget inwidg, XKeyPressedEvent *event,
- wchar_t* buffer_return, int bytes_buffer,
- KeySym *keysym_return)
-{
- XawVendorShellExtPart* ve;
- VendorShellWidget vw;
- XawIcTableList p;
- int i, ret;
- char tmp_buf[64], *tmp_p;
- wchar_t* buf_p;
-
- if ((vw = SearchVendorShell(inwidg)) && (ve = GetExtPart(vw)) &&
- ve->im.xim && (p = GetIcTableShared(inwidg, ve)) && p->xic) {
- return(XwcLookupString(p->xic, event, buffer_return, bytes_buffer/sizeof(wchar_t),
- keysym_return, NULL));
- }
- ret = XLookupString( event, tmp_buf, sizeof(tmp_buf), keysym_return,
- NULL );
- for ( i = 0, tmp_p = tmp_buf, buf_p = buffer_return; i < ret; i++ ) {
- *buf_p++ = _Xaw_atowc(*tmp_p++);
- }
- return( ret );
-}
-
-int
-_XawLookupString(Widget w, XKeyEvent *event, char *buffer_return, int buffer_size,
- KeySym *keysym_return)
-{
- XawVendorShellExtPart *ve;
- VendorShellWidget vw;
- XawIcTableList p;
-
- if ((vw = SearchVendorShell(w)) && (ve = GetExtPart(vw))
- && ve->im.xim && (p = GetIcTableShared(w, ve)) && p->xic)
- return (XmbLookupString(p->xic, event, buffer_return, buffer_size,
- keysym_return, NULL));
-
- return (XLookupString(event, buffer_return, buffer_size,
- keysym_return, NULL));
-}
-
-int
-_XawImGetImAreaHeight(Widget w)
-{
- XawVendorShellExtPart *ve;
- VendorShellWidget vw;
-
- if ((vw = SearchVendorShell(w)) && (ve = GetExtPart(vw))) {
- return(ve->im.area_height);
- }
- return(0);
-}
-
-void
-_XawImCallVendorShellExtResize(Widget w)
-{
- VendorShellWidget vw;
-
- if ((vw = SearchVendorShell(w)) && GetExtPart(vw)) {
- XawVendorShellExtResize((Widget)vw);
- }
-}
-
-
-/* _XawImDestroy()
- *
- * This should be called by the VendorExt from its
- * core Destroy method. Sheeran, Omron KK 93/08/05 */
-
-void
-_XawImDestroy(Widget w, Widget ext)
-{
- XawVendorShellExtPart *ve;
-
- if ( !XtIsVendorShell( w ) ) return;
- if ( (ve = GetExtPart( (VendorShellWidget) w )) != NULL )
- Destroy( w, ve );
-}
+/*
+ * Copyright 1991 by OMRON Corporation
+ *
+ * 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 OMRON not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. OMRON makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * OMRON 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 TORTUOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * Author: Seiji Kuwari OMRON Corporation
+ * kuwa@omron.co.jp
+ * kuwa%omron.co.jp@uunet.uu.net
+ */
+
+
+/*
+
+Copyright 1994, 1998 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.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xfuncs.h>
+#include <X11/ShellP.h>
+#include <X11/Xaw/TextP.h>
+#include <X11/Xaw/MultiSrc.h>
+#include <X11/Xaw/MultiSinkP.h>
+#include <X11/Xaw/XawImP.h>
+#include <X11/Xaw/VendorEP.h>
+#include "XawI18n.h"
+#include <ctype.h>
+
+#include <stdarg.h>
+
+#define maxAscentOfFontSet(fontset) \
+ ( - (XExtentsOfFontSet((fontset)))->max_logical_extent.y)
+
+#define maxHeightOfFontSet(fontset) \
+ ((XExtentsOfFontSet((fontset)))->max_logical_extent.height)
+
+#define maxDescentOfFontSet(fontset) \
+ (maxHeightOfFontSet(fontset) - maxAscentOfFontSet(fontset))
+
+#define Offset(field) (XtOffsetOf(XawIcTablePart, field))
+
+/*****************************************************
+ *
+ * Forward reference prototypes
+ *
+ *****************************************************/
+
+/*
+ * Prototypes
+ */
+static void AllCreateIC(XawVendorShellExtPart*);
+static void CloseIM(XawVendorShellExtPart*);
+static void CompileResourceList(XtResourceList, unsigned int);
+static void ConfigureCB(Widget, XtPointer, XEvent*, Boolean*);
+static void CreateIC(Widget, XawVendorShellExtPart*);
+static XawIcTableList CreateIcTable(Widget, XawVendorShellExtPart*);
+static XawIcTableList CurrentSharedIcTable(XawVendorShellExtPart*);
+static void Destroy(Widget, XawVendorShellExtPart*);
+static void DestroyAllIM(XawVendorShellExtPart*);
+static void DestroyIC(Widget, XawVendorShellExtPart*);
+static void FreeAllDataOfVendorShell(XawVendorShellExtPart*,
+ VendorShellWidget);
+static XawVendorShellExtPart *GetExtPart(VendorShellWidget);
+static XawIcTableList GetIcTable(Widget, XawVendorShellExtPart*);
+static XawIcTableList GetIcTableShared(Widget, XawVendorShellExtPart*);
+static XIMStyle GetInputStyleOfIC(XawVendorShellExtPart*);
+static Bool Initialize(VendorShellWidget, XawVendorShellExtPart*);
+static Bool IsCreatedIC(Widget, XawVendorShellExtPart*);
+static Bool IsRegistered(Widget, XawVendorShellExtPart*);
+static Bool IsSharedIC(XawVendorShellExtPart*);
+static Bool NoRegistered(XawVendorShellExtPart*);
+static void OpenIM(XawVendorShellExtPart*);
+static void Reconnect(XawVendorShellExtPart*);
+static void Register(Widget, XawVendorShellExtPart*);
+static Bool RegisterToVendorShell(Widget, XawVendorShellExtPart*);
+static void ResizeVendorShell(VendorShellWidget, XawVendorShellExtPart*);
+static Bool ResizeVendorShell_Core(VendorShellWidget, XawVendorShellExtPart*,
+ XawIcTableList);
+static VendorShellWidget SearchVendorShell(Widget);
+static Widget SetErrCnxt(Widget, XIM);
+static XawVendorShellExtPart *SetExtPart(VendorShellWidget,
+ XawVendorShellExtWidget);
+static void SetFocus(Widget, XawVendorShellExtPart*);
+static void SetFocusValues(Widget, ArgList, Cardinal, Bool);
+static void SetICFocus(Widget, XawVendorShellExtPart*);
+static void SetICValues(Widget, XawVendorShellExtPart*, Bool);
+static void SetICValuesShared(Widget, XawVendorShellExtPart*, XawIcTableList,
+ Bool);
+static void SetValues(Widget, XawVendorShellExtPart*, ArgList, Cardinal);
+static unsigned int SetVendorShellHeight(XawVendorShellExtPart*,
+ unsigned int);
+static void SharedICChangeFocusWindow(Widget, XawVendorShellExtPart*,
+ XawIcTableList);
+static void SizeNegotiation(XawIcTableList, unsigned int, unsigned int);
+static void Unregister(Widget, XawVendorShellExtPart*);
+static void UnregisterFromVendorShell(Widget, XawVendorShellExtPart*);
+static void UnsetFocus(Widget);
+static void UnsetICFocus(Widget, XawVendorShellExtPart*);
+static void VendorShellDestroyed(Widget, XtPointer, XtPointer);
+
+/*
+ * From Vendor.c
+ */
+void XawVendorShellExtResize(Widget);
+void XawVendorStructureNotifyHandler(Widget, XtPointer, XEvent*, Boolean*);
+
+
+/*
+ * From Xt/Resources.c
+ */
+void _XtCopyFromArg(XtArgVal src, char*, unsigned int);
+
+static XtResource resources[] =
+{
+ {
+ XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet),
+ Offset (font_set), XtRString, XtDefaultFontSet
+ },
+ {
+ XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
+ Offset (foreground), XtRString, (XtPointer)"XtDefaultForeground"
+ },
+ {
+ XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel),
+ Offset (background), XtRString, (XtPointer)"XtDefaultBackground"
+ },
+ {
+ XtNbackgroundPixmap, XtCPixmap, XtRPixmap, sizeof(Pixmap),
+ Offset (bg_pixmap), XtRImmediate, (XtPointer) XtUnspecifiedPixmap
+ },
+ {
+ XtNinsertPosition, XtCTextPosition, XtRInt, sizeof (XawTextPosition),
+ Offset (cursor_position), XtRImmediate, (XtPointer) 0
+ }
+};
+#undef Offset
+
+
+static VendorShellWidget SearchVendorShell(Widget w)
+{
+ while(w && !XtIsShell(w)) w = XtParent(w);
+ if (w && XtIsVendorShell(w)) return((VendorShellWidget)w);
+ return(NULL);
+}
+
+static XContext extContext = (XContext)NULL;
+
+static XawVendorShellExtPart *
+SetExtPart(VendorShellWidget w, XawVendorShellExtWidget vew)
+{
+ contextDataRec *contextData;
+
+ if (extContext == (XContext)NULL) extContext = XUniqueContext();
+
+ contextData = XtNew(contextDataRec);
+ contextData->parent = (Widget)w;
+ contextData->ve = (Widget)vew;
+ if (XSaveContext(XtDisplay(w), (Window)w, extContext, (char *)contextData)) {
+ return(NULL);
+ }
+ return(&(vew->vendor_ext));
+}
+
+static XawVendorShellExtPart *
+GetExtPart(VendorShellWidget w)
+{
+ contextDataRec *contextData;
+ XawVendorShellExtWidget vew;
+
+ if (XFindContext(XtDisplay(w), (Window)w, extContext,
+ (XPointer*)&contextData)) {
+ return(NULL);
+ }
+ vew = (XawVendorShellExtWidget)contextData->ve;
+ return(&(vew->vendor_ext));
+}
+
+static Bool
+IsSharedIC(XawVendorShellExtPart * ve)
+{
+ return( ve->ic.shared_ic );
+}
+
+static XawIcTableList
+GetIcTableShared(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+
+ for (p = ve->ic.ic_table; p; p = p->next) {
+ if (p->widget == w) {
+ if (IsSharedIC(ve)) {
+ return(ve->ic.shared_ic_table);
+ } else {
+ return(p);
+ }
+ }
+ }
+ return(NULL);
+}
+
+static XawIcTableList
+GetIcTable(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+
+ for (p = ve->ic.ic_table; p; p = p->next) {
+ if (p->widget == w) {
+ return(p);
+ }
+ }
+ return(NULL);
+}
+
+static XIMStyle
+GetInputStyleOfIC(XawVendorShellExtPart *ve)
+{
+
+ if (!ve) return((XIMStyle)0);
+ return(ve->ic.input_style);
+}
+
+/*ARGSUSED*/
+static void
+ConfigureCB(Widget w, XtPointer closure, XEvent *event, Boolean *unused)
+{
+ XawIcTableList p;
+ XawVendorShellExtPart *ve;
+ VendorShellWidget vw;
+ XVaNestedList pe_attr;
+ XRectangle pe_area;
+ XawTextMargin *margin;
+
+ if (event->type != ConfigureNotify) return;
+
+ if ((vw = SearchVendorShell(w)) == NULL) return;
+
+ if ((ve = GetExtPart(vw)) != NULL) {
+ if (IsSharedIC(ve)) return;
+ if ((ve->im.xim == NULL) ||
+ ((p = GetIcTableShared(w, ve)) == NULL) ||
+ (p->xic == NULL) || !(p->input_style & XIMPreeditPosition)) return;
+ pe_area.x = 0;
+ pe_area.y = 0;
+ pe_area.width = w->core.width;
+ pe_area.height = w->core.height;
+ margin = &(((TextWidget)w)->text.margin);
+ pe_area.x += margin->left;
+ pe_area.y += margin->top;
+ pe_area.width -= (margin->left + margin->right - 1);
+ pe_area.height -= (margin->top + margin->bottom - 1);
+
+ pe_attr = XVaCreateNestedList(0, XNArea, &pe_area, NULL);
+ XSetICValues(p->xic, XNPreeditAttributes, pe_attr, NULL);
+ XtFree(pe_attr);
+ }
+}
+
+static XContext errContext = (XContext)NULL;
+
+static Widget SetErrCnxt(Widget w, XIM xim)
+{
+ contextErrDataRec *contextErrData;
+
+ if (errContext == (XContext)NULL) errContext = XUniqueContext();
+
+ contextErrData = XtNew(contextErrDataRec);
+ contextErrData->widget = w;
+ contextErrData->xim = xim;
+ if (XSaveContext(XtDisplay(w), (Window)xim, errContext,
+ (char *)contextErrData)) {
+ return(NULL);
+ }
+ return(contextErrData->widget);
+}
+
+#if 0
+static Widget
+GetErrCnxt(XIM error_im)
+{
+ contextErrDataRec *contextErrData;
+
+ if (XFindContext(XDisplayOfIM(error_im), (Window)error_im, errContext,
+ (XPointer*)&contextErrData)) {
+ return(NULL);
+ }
+ return(contextErrData->widget);
+}
+#endif
+
+static void
+CloseIM(XawVendorShellExtPart *ve)
+{
+ if (ve->im.xim)
+ XCloseIM(ve->im.xim);
+}
+
+static unsigned int
+SetVendorShellHeight(XawVendorShellExtPart* ve, unsigned int height)
+{
+ Arg args[2];
+ Cardinal i = 0;
+
+ if (ve->im.area_height < height || height == 0) {
+ XtSetArg(args[i], XtNheight,
+ (ve->parent->core.height + height - ve->im.area_height));
+ ve->im.area_height = height;
+ XtSetValues(ve->parent, args, 1);
+ }
+ return(ve->im.area_height);
+}
+
+static void
+DestroyAllIM(XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+ contextErrDataRec *contextErrData;
+
+ /*
+ * Destory all ICs
+ */
+ if (IsSharedIC(ve)) {
+ if ((p = ve->ic.shared_ic_table) && p->xic) {
+ DestroyIC(p->widget, ve);
+ p->xic = NULL;
+ p->ic_focused = FALSE;
+ }
+ } else {
+ for (p = ve->ic.ic_table; p; p = p->next) {
+ if (p->xic == NULL) continue;
+ DestroyIC(p->widget, ve);
+ p->xic = NULL;
+ p->ic_focused = FALSE;
+ }
+ }
+ if (!ve->im.xim) return;
+ /*
+ * Close Input Method
+ */
+ if (!XFindContext(XDisplayOfIM(ve->im.xim), (Window)ve->im.xim, errContext,
+ (XPointer*)&contextErrData)) {
+ if (contextErrData) XtFree((char *)contextErrData);
+ }
+ XDeleteContext(XDisplayOfIM(ve->im.xim), (Window)ve->im.xim, errContext);
+ CloseIM(ve);
+ ve->im.xim = NULL;
+
+ /*
+ * resize vendor shell to core size
+ */
+ (void) SetVendorShellHeight(ve, 0);
+ /*
+ XawVendorShellExtResize(vw);
+ */
+ return;
+}
+
+static void
+FreeAllDataOfVendorShell(XawVendorShellExtPart *ve, VendorShellWidget vw)
+{
+ XawIcTableList p, next;
+ contextErrDataRec *contextErrData;
+
+ if (!XFindContext(XtDisplay(vw), (Window)vw, extContext,
+ (XPointer*)&contextErrData)) {
+ if (contextErrData) XtFree((char *)contextErrData);
+ }
+ XDeleteContext(XtDisplay(vw), (Window)vw, extContext);
+ if (ve->ic.shared_ic_table)
+ XtFree((char *)ve->ic.shared_ic_table);
+ if (ve->im.resources) XtFree((char *)ve->im.resources);
+ for (p = ve->ic.ic_table; p; p = next) {
+ next = p->next;
+ XtFree((char *)p);
+ }
+}
+
+static void
+VendorShellDestroyed(Widget w, XtPointer cl_data, XtPointer ca_data)
+{
+ XawVendorShellExtPart *ve;
+
+ if ( ( ve = GetExtPart( (VendorShellWidget) w ) ) == NULL ) return;
+ DestroyAllIM( ve );
+ FreeAllDataOfVendorShell( ve, (VendorShellWidget) w );
+ return;
+}
+
+#if 0
+static int
+IOErrorHandler(XIM error_im)
+{
+ VendorShellWidget vw;
+ XawVendorShellExtPart * ve;
+
+ if ((vw = (VendorShellWidget)GetErrCnxt(error_im)) == NULL
+ || (ve = GetExtPart(vw)) == NULL) return(0);
+
+ DestroyAllIM(ve);
+ return(0);
+}
+#endif
+
+/*
+ * Attempt to open an input method
+ */
+
+static void
+OpenIM(XawVendorShellExtPart *ve)
+{
+ int i;
+ char *p, *s, *ns, *end, *pbuf, buf[32];
+ XIM xim = NULL;
+ XIMStyles *xim_styles;
+ XIMStyle input_style = 0;
+ Boolean found;
+
+ if (ve->im.open_im == False) return;
+ ve->im.xim = NULL;
+ if (ve->im.input_method == NULL) {
+ if ((p = XSetLocaleModifiers("@im=none")) != NULL && *p)
+ xim = XOpenIM(XtDisplay(ve->parent), NULL, NULL, NULL);
+ } else {
+ /* no fragment can be longer than the whole string */
+ Cardinal len = strlen (ve->im.input_method) + 5;
+
+ if (len < sizeof buf) pbuf = buf;
+ else pbuf = XtMalloc (len);
+
+ if (pbuf == NULL) return;
+
+ for(ns=s=ve->im.input_method; ns && *s;) {
+ /* skip any leading blanks */
+ while (*s && isspace(*s)) s++;
+ if (!*s) break;
+ if ((ns = end = strchr(s, ',')) == NULL)
+ end = s + strlen(s);
+ /* If there is a spurious comma end can be the same as s */
+ if (end > s) {
+ /* strip any trailing blanks */
+ while (isspace(*(end - 1))) end--;
+
+ strcpy (pbuf, "@im=");
+ strncat (pbuf, s, end - s);
+ pbuf[end - s + 4] = '\0';
+ }
+
+ if ((p = XSetLocaleModifiers(pbuf)) != NULL && *p
+ && (xim = XOpenIM(XtDisplay(ve->parent), NULL, NULL, NULL)) != NULL)
+ break;
+
+ s = ns + 1;
+ }
+
+ if (pbuf != buf) XtFree (pbuf);
+ }
+ if (xim == NULL) {
+ if ((p = XSetLocaleModifiers("")) != NULL) {
+ xim = XOpenIM(XtDisplay(ve->parent), NULL, NULL, NULL);
+ }
+ }
+ if (xim == NULL) {
+ XtAppWarning(XtWidgetToApplicationContext(ve->parent),
+ "Input Method Open Failed");
+ return;
+ }
+ if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL)
+ || !xim_styles) {
+ XtAppWarning(XtWidgetToApplicationContext(ve->parent),
+ "input method doesn't support any style");
+ XCloseIM(xim);
+ return;
+ }
+ found = False;
+ for(ns = s = ve->im.preedit_type; s && !found;) {
+ while (*s && isspace(*s)) s++;
+ if (!*s) break;
+ if ((ns = end = strchr(s, ',')) == NULL)
+ end = s + strlen(s);
+ else
+ ns++;
+ if (end > s)
+ while (isspace(*(end - 1))) end--;
+
+ if (!strncmp(s, "OverTheSpot", end - s)) {
+ input_style = (XIMPreeditPosition | XIMStatusArea);
+ } else if (!strncmp(s, "OffTheSpot", end - s)) {
+ input_style = (XIMPreeditArea | XIMStatusArea);
+ } else if (!strncmp(s, "Root", end - s)) {
+ input_style = (XIMPreeditNothing | XIMStatusNothing);
+ }
+ for (i = 0; (unsigned short)i < xim_styles->count_styles; i++)
+ if (input_style == xim_styles->supported_styles[i]) {
+ ve->ic.input_style = input_style;
+ SetErrCnxt(ve->parent, xim);
+ ve->im.xim = xim;
+ found = True;
+ break;
+ }
+
+ s = ns;
+ }
+ XFree(xim_styles);
+
+ if (!found) {
+ XCloseIM(xim);
+ XtAppWarning(XtWidgetToApplicationContext(ve->parent),
+ "input method doesn't support my input style");
+ }
+}
+
+static Bool
+ResizeVendorShell_Core(VendorShellWidget vw, XawVendorShellExtPart *ve,
+ XawIcTableList p)
+{
+ XVaNestedList pe_attr, st_attr;
+ XRectangle pe_area, st_area;
+ XRectangle *get_pe_area = NULL, *get_st_area = NULL;
+
+ st_area.width = 0;
+ if (p->input_style & XIMStatusArea) {
+ st_attr = XVaCreateNestedList(0, XNArea, &get_st_area, NULL);
+ XGetICValues(p->xic, XNStatusAttributes, st_attr, NULL);
+ XFree(st_attr);
+ if (p->xic == NULL) {
+ return(FALSE);
+ }
+ st_area.x = 0;
+ st_area.y = vw->core.height - ve->im.area_height;
+ st_area.width = get_st_area->width;
+ st_area.height = get_st_area->height;
+ XFree(get_st_area);
+ st_attr = XVaCreateNestedList(0, XNArea, &st_area, NULL);
+ XSetICValues(p->xic, XNStatusAttributes, st_attr, NULL);
+ XFree(st_attr);
+ if (p->xic == NULL) {
+ return(FALSE);
+ }
+ }
+ if (p->input_style & XIMPreeditArea) {
+ pe_attr = XVaCreateNestedList(0, XNArea, &get_pe_area, NULL);
+ XGetICValues(p->xic, XNPreeditAttributes, pe_attr, NULL);
+ XFree(pe_attr);
+ if (p->xic == NULL) {
+ return(FALSE);
+ }
+ pe_area.x = st_area.width;
+ pe_area.y = vw->core.height - ve->im.area_height;
+ pe_area.width = vw->core.width;
+ pe_area.height = get_pe_area->height;
+ if (p->input_style & XIMStatusArea) {
+ pe_area.width -= st_area.width;
+ }
+ XFree(get_pe_area);
+ pe_attr = XVaCreateNestedList(0, XNArea, &pe_area, NULL);
+ XSetICValues(p->xic, XNPreeditAttributes, pe_attr, NULL);
+ XFree(pe_attr);
+ }
+ return(TRUE);
+}
+
+static void
+ResizeVendorShell(VendorShellWidget vw, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+
+ if (IsSharedIC(ve)) {
+ p = ve->ic.shared_ic_table;
+ if (p->xic == NULL) return;
+ ResizeVendorShell_Core(vw, ve, p);
+ return;
+ }
+ for (p = ve->ic.ic_table; p; p = p->next) {
+ if (p->xic == NULL) continue;
+ if (ResizeVendorShell_Core(vw, ve, p) == FALSE) return;
+ }
+}
+
+static XawIcTableList
+CreateIcTable(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList table;
+
+ table = (XawIcTableList) XtMalloc(sizeof(XawIcTablePart));
+ if (table == NULL) return(NULL);
+ table->widget = w;
+ table->xic = NULL;
+ table->flg = table->prev_flg = 0;
+ table->font_set = NULL;
+ table->foreground = table->background = 0xffffffff;
+ table->bg_pixmap = 0;
+ table->cursor_position = 0xffff;
+ table->line_spacing = 0;
+ table->ic_focused = FALSE;
+ table->openic_error = FALSE;
+ return(table);
+}
+
+static Bool
+RegisterToVendorShell(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList table;
+
+ if ((table = CreateIcTable(w, ve)) == NULL) return(FALSE);
+ table->next = ve->ic.ic_table;
+ ve->ic.ic_table = table;
+ return(TRUE);
+}
+
+static void
+UnregisterFromVendorShell(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList *prev, p;
+
+ for (prev = &ve->ic.ic_table; (p = *prev) != NULL; prev = &p->next) {
+ if (p->widget == w) {
+ *prev = p->next;
+ XtFree((char *)p);
+ break;
+ }
+ }
+ return;
+}
+
+static void
+SetICValuesShared(Widget w, XawVendorShellExtPart *ve,
+ XawIcTableList p, Bool check)
+{
+ XawIcTableList pp;
+
+ if ((pp = GetIcTable(w, ve)) == NULL) return;
+ if (check == TRUE && CurrentSharedIcTable(ve) != pp) return;
+
+ if (pp->prev_flg & CICursorP && p->cursor_position != pp->cursor_position) {
+ p->cursor_position = pp->cursor_position;
+ p->flg |= CICursorP;
+ }
+ if (pp->prev_flg & CIFontSet && p->font_set != pp->font_set) {
+ p->font_set = pp->font_set;
+ p->flg |= (CIFontSet|CICursorP);
+ }
+ if (pp->prev_flg & CIFg && p->foreground != pp->foreground) {
+ p->foreground = pp->foreground;
+ p->flg |= CIFg;
+ }
+ if (pp->prev_flg & CIBg && p->background != pp->background) {
+ p->background = pp->background;
+ p->flg |= CIBg;
+ }
+ if (pp->prev_flg & CIBgPixmap && p->bg_pixmap != pp->bg_pixmap) {
+ p->bg_pixmap = pp->bg_pixmap;
+ p->flg |= CIBgPixmap;
+ }
+ if (pp->prev_flg & CILineS && p->line_spacing != pp->line_spacing) {
+ p->line_spacing = pp->line_spacing;
+ p->flg |= CILineS;
+ }
+}
+
+static Bool
+IsCreatedIC(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+
+ if (ve->im.xim == NULL) return(FALSE);
+ if ((p = GetIcTableShared(w, ve)) == NULL) return(FALSE);
+ if (p->xic == NULL) return(FALSE);
+ return(TRUE);
+}
+
+static void
+SizeNegotiation(XawIcTableList p, unsigned int width, unsigned int height)
+{
+ XRectangle pe_area, st_area;
+ XVaNestedList pe_attr = NULL, st_attr = NULL;
+ int ic_cnt = 0;
+ XRectangle *pe_area_needed = NULL, *st_area_needed = NULL;
+ XPointer ic_a[5];
+
+ if (p->input_style & XIMPreeditArea) {
+ pe_attr = XVaCreateNestedList(0, XNAreaNeeded, &pe_area_needed, NULL);
+ ic_a[ic_cnt] = (XPointer) XNPreeditAttributes; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) pe_attr; ic_cnt++;
+ }
+ if (p->input_style & XIMStatusArea) {
+ st_attr = XVaCreateNestedList(0, XNAreaNeeded, &st_area_needed, NULL);
+ ic_a[ic_cnt] = (XPointer) XNStatusAttributes; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) st_attr; ic_cnt++;
+ }
+ ic_a[ic_cnt] = (XPointer) NULL;
+
+ if (ic_cnt > 0) {
+ XGetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], NULL);
+ if (pe_attr) XFree(pe_attr);
+ if (st_attr) XFree(st_attr);
+ if (p->xic == NULL) {
+ p->openic_error = True;
+ return;
+ }
+ pe_attr = st_attr = NULL;
+ ic_cnt = 0;
+ if (p->input_style & XIMStatusArea) {
+ st_area.height = st_area_needed->height;
+ st_area.x = 0;
+ st_area.y = height - st_area.height;
+ if (p->input_style & XIMPreeditArea) {
+ st_area.width = st_area_needed->width;
+ } else {
+ st_area.width = width;
+ }
+
+ XFree(st_area_needed);
+ st_attr = XVaCreateNestedList(0, XNArea, &st_area, NULL);
+ ic_a[ic_cnt] = (XPointer) XNStatusAttributes; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) st_attr; ic_cnt++;
+ }
+ if (p->input_style & XIMPreeditArea) {
+ if (p->input_style & XIMStatusArea) {
+ pe_area.x = st_area.width;
+ pe_area.width = width - st_area.width;
+ } else {
+ pe_area.x = 0;
+ pe_area.width = width;
+ }
+ pe_area.height = pe_area_needed->height;
+ XFree(pe_area_needed);
+ pe_area.y = height - pe_area.height;
+ pe_attr = XVaCreateNestedList(0, XNArea, &pe_area, NULL);
+ ic_a[ic_cnt] = (XPointer) XNPreeditAttributes; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) pe_attr; ic_cnt++;
+ }
+ ic_a[ic_cnt] = (XPointer) NULL;
+ XSetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], NULL);
+ if (pe_attr) XFree(pe_attr);
+ if (st_attr) XFree(st_attr);
+ if (p->xic == NULL) {
+ p->openic_error = True;
+ return;
+ }
+ }
+}
+
+static void
+CreateIC(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+ XPoint position;
+ XRectangle pe_area, st_area;
+ XVaNestedList pe_attr = NULL, st_attr = NULL;
+ XPointer ic_a[20], pe_a[20], st_a[20];
+ Dimension height = 0;
+ int ic_cnt = 0, pe_cnt = 0, st_cnt = 0;
+ XawTextMargin *margin;
+
+ if (!XtIsRealized(w)) return;
+ if (((ve->im.xim == NULL) || (p = GetIcTableShared(w, ve)) == NULL) ||
+ p->xic || (p->openic_error != FALSE)) return;
+
+ p->input_style = GetInputStyleOfIC(ve);
+
+ if (IsSharedIC(ve)) SetICValuesShared(w, ve, p, FALSE);
+ XFlush(XtDisplay(w));
+
+ if (p->input_style & (XIMPreeditArea|XIMPreeditPosition|XIMStatusArea)) {
+ if (p->flg & CIFontSet) {
+ pe_a[pe_cnt] = (XPointer) XNFontSet; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->font_set; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNFontSet; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->font_set; st_cnt++;
+ if (p->font_set) {
+ height = maxAscentOfFontSet(p->font_set)
+ + maxDescentOfFontSet(p->font_set);
+ }
+ height = SetVendorShellHeight(ve, height);
+ }
+ if (p->flg & CIFg) {
+ pe_a[pe_cnt] = (XPointer) XNForeground; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->foreground; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNForeground; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->foreground; st_cnt++;
+ }
+ if (p->flg & CIBg) {
+ pe_a[pe_cnt] = (XPointer) XNBackground; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->background; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNBackground; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->background; st_cnt++;
+ }
+ if (p->flg & CIBgPixmap) {
+ pe_a[pe_cnt] = (XPointer) XNBackgroundPixmap; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->bg_pixmap; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNBackgroundPixmap; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->bg_pixmap; st_cnt++;
+ }
+ if (p->flg & CILineS) {
+ pe_a[pe_cnt] = (XPointer) XNLineSpace; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->line_spacing; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNLineSpace; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->line_spacing; st_cnt++;
+ }
+ }
+ if (p->input_style & XIMPreeditArea) {
+ pe_area.x = 0;
+ pe_area.y = ve->parent->core.height - height;
+ pe_area.width = ve->parent->core.width;
+ pe_area.height = height;
+ pe_a[pe_cnt] = (XPointer) XNArea; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) &pe_area; pe_cnt++;
+ }
+ if (p->input_style & XIMPreeditPosition) {
+ pe_area.x = 0;
+ pe_area.y = 0;
+ pe_area.width = w->core.width;
+ pe_area.height = w->core.height;
+ margin = &(((TextWidget)w)->text.margin);
+ pe_area.x += margin->left;
+ pe_area.y += margin->top;
+ pe_area.width -= (margin->left + margin->right - 1);
+ pe_area.height -= (margin->top + margin->bottom - 1);
+ pe_a[pe_cnt] = (XPointer) XNArea; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) &pe_area; pe_cnt++;
+ if (p->flg & CICursorP) {
+ _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y);
+ } else {
+ position.x = position.y = 0;
+ }
+ pe_a[pe_cnt] = (XPointer) XNSpotLocation; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) &position; pe_cnt++;
+ }
+ if (p->input_style & XIMStatusArea) {
+ st_area.x = 0;
+ st_area.y = ve->parent->core.height - height;
+ st_area.width = ve->parent->core.width;
+ st_area.height = height;
+ st_a[st_cnt] = (XPointer) XNArea; st_cnt++;
+ st_a[st_cnt] = (XPointer) &st_area; st_cnt++;
+ }
+
+ ic_a[ic_cnt] = (XPointer) XNInputStyle; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) p->input_style; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) XNClientWindow; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) XtWindow(ve->parent); ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) XNFocusWindow; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) XtWindow(w); ic_cnt++;
+
+ if (pe_cnt > 0) {
+ pe_a[pe_cnt] = (XPointer) NULL;
+ pe_attr = XVaCreateNestedList(0, pe_a[0], pe_a[1], pe_a[2], pe_a[3],
+ pe_a[4], pe_a[5], pe_a[6], pe_a[7], pe_a[8],
+ pe_a[9], pe_a[10], pe_a[11], pe_a[12],
+ pe_a[13], pe_a[14], pe_a[15], pe_a[16],
+ pe_a[17], pe_a[18], NULL);
+ ic_a[ic_cnt] = (XPointer) XNPreeditAttributes; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) pe_attr; ic_cnt++;
+ }
+
+ if (st_cnt > 0) {
+ st_a[st_cnt] = (XPointer) NULL;
+ st_attr = XVaCreateNestedList(0, st_a[0], st_a[1], st_a[2], st_a[3],
+ st_a[4], st_a[5], st_a[6], st_a[7], st_a[8],
+ st_a[9], st_a[10], st_a[11], st_a[12],
+ st_a[13], st_a[14], st_a[15], st_a[16],
+ st_a[17], st_a[18], NULL);
+ ic_a[ic_cnt] = (XPointer) XNStatusAttributes; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) st_attr; ic_cnt++;
+ }
+ ic_a[ic_cnt] = (XPointer) NULL;
+
+ p->xic = XCreateIC(ve->im.xim, ic_a[0], ic_a[1], ic_a[2], ic_a[3],
+ ic_a[4], ic_a[5], ic_a[6], ic_a[7], ic_a[8], ic_a[9],
+ ic_a[10], ic_a[11], ic_a[12], ic_a[13], ic_a[14],
+ ic_a[15], ic_a[16], ic_a[17], ic_a[18], NULL);
+ if (pe_attr) XtFree(pe_attr);
+ if (st_attr) XtFree(st_attr);
+
+ if (p->xic == NULL) {
+ p->openic_error = True;
+ return;
+ }
+
+ SizeNegotiation(p, ve->parent->core.width, ve->parent->core.height);
+
+ p->flg &= ~(CIFontSet | CIFg | CIBg | CIBgPixmap | CICursorP | CILineS);
+
+ if (!IsSharedIC(ve)) {
+ if (p->input_style & XIMPreeditPosition) {
+ XtAddEventHandler(w, (EventMask)StructureNotifyMask, FALSE,
+ (XtEventHandler)ConfigureCB, (Opaque)NULL);
+ }
+ }
+}
+
+static void
+SetICValues(Widget w, XawVendorShellExtPart *ve, Bool focus)
+{
+ XawIcTableList p;
+ XPoint position;
+ XRectangle pe_area;
+ XVaNestedList pe_attr = NULL, st_attr = NULL;
+ XPointer ic_a[20], pe_a[20], st_a[20];
+ int ic_cnt = 0, pe_cnt = 0, st_cnt = 0;
+ XawTextMargin *margin;
+ int height = 0;
+
+ if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
+ (p->xic == NULL)) return;
+
+ if (IsSharedIC(ve)) SetICValuesShared(w, ve, p, TRUE);
+ XFlush(XtDisplay(w));
+ if (focus == FALSE &&
+ !(p->flg & (CIFontSet | CIFg | CIBg |
+ CIBgPixmap | CICursorP | CILineS))) return;
+#ifdef SPOT
+ if ((p->input_style & XIMPreeditPosition)
+ && ((!IsSharedIC(ve) && ((p->flg & ~CIICFocus) == CICursorP))
+ || (IsSharedIC(ve) && p->flg == CICursorP))) {
+ _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y);
+ _XipChangeSpot(p->xic, position.x, position.y);
+ p->flg &= ~CICursorP;
+ return;
+ }
+#endif
+
+ if (p->input_style & (XIMPreeditArea|XIMPreeditPosition|XIMStatusArea)) {
+ if (p->flg & CIFontSet) {
+ pe_a[pe_cnt] = (XPointer) XNFontSet; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->font_set; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNFontSet; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->font_set; st_cnt++;
+ if (p->font_set) {
+ height = maxAscentOfFontSet(p->font_set)
+ + maxDescentOfFontSet(p->font_set);
+ }
+ height = SetVendorShellHeight(ve, height);
+ }
+ if (p->flg & CIFg) {
+ pe_a[pe_cnt] = (XPointer) XNForeground; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->foreground; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNForeground; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->foreground; st_cnt++;
+ }
+ if (p->flg & CIBg) {
+ pe_a[pe_cnt] = (XPointer) XNBackground; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->background; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNBackground; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->background; st_cnt++;
+ }
+ if (p->flg & CIBgPixmap) {
+ pe_a[pe_cnt] = (XPointer) XNBackgroundPixmap; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->bg_pixmap; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNBackgroundPixmap; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->bg_pixmap; st_cnt++;
+ }
+ if (p->flg & CILineS) {
+ pe_a[pe_cnt] = (XPointer) XNLineSpace; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) p->line_spacing; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNLineSpace; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->line_spacing; st_cnt++;
+ }
+ }
+ if (p->input_style & XIMPreeditPosition) {
+ if (p->flg & CICursorP) {
+ _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y);
+ pe_a[pe_cnt] = (XPointer) XNSpotLocation; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) &position; pe_cnt++;
+ }
+ }
+ if (IsSharedIC(ve)) {
+ if (p->input_style & XIMPreeditPosition) {
+ pe_area.x = 0;
+ pe_area.y = 0;
+ pe_area.width = w->core.width;
+ pe_area.height = w->core.height;
+ margin = &(((TextWidget)w)->text.margin);
+ pe_area.x += margin->left;
+ pe_area.y += margin->top;
+ pe_area.width -= (margin->left + margin->right - 1);
+ pe_area.height -= (margin->top + margin->bottom - 1);
+ pe_a[pe_cnt] = (XPointer) XNArea; pe_cnt++;
+ pe_a[pe_cnt] = (XPointer) &pe_area; pe_cnt++;
+ }
+ }
+
+ if (pe_cnt > 0) {
+ pe_a[pe_cnt] = (XPointer) NULL;
+ pe_attr = XVaCreateNestedList(0, pe_a[0], pe_a[1], pe_a[2], pe_a[3],
+ pe_a[4], pe_a[5], pe_a[6], pe_a[7],
+ pe_a[8], pe_a[9], pe_a[10], pe_a[11],
+ pe_a[12], pe_a[13], pe_a[14], pe_a[15],
+ pe_a[16], pe_a[17], pe_a[18], NULL);
+ ic_a[ic_cnt] = (XPointer) XNPreeditAttributes; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) pe_attr; ic_cnt++;
+ }
+ if (st_cnt > 0) {
+ st_a[st_cnt] = (XPointer) NULL;
+ st_attr = XVaCreateNestedList(0, st_a[0], st_a[1], st_a[2], st_a[3],
+ st_a[4], st_a[5], st_a[6], st_a[7],
+ st_a[8], st_a[9], st_a[10], st_a[11],
+ st_a[12], st_a[13], st_a[14], st_a[15],
+ st_a[16], st_a[17], st_a[18], NULL);
+ ic_a[ic_cnt] = (XPointer) XNStatusAttributes; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) st_attr; ic_cnt++;
+ }
+ if (focus == TRUE) {
+ ic_a[ic_cnt] = (XPointer) XNFocusWindow; ic_cnt++;
+ ic_a[ic_cnt] = (XPointer) XtWindow(w); ic_cnt++;
+ }
+ if (ic_cnt > 0) {
+ ic_a[ic_cnt] = (XPointer) NULL;
+ XSetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], ic_a[4],
+ ic_a[5], ic_a[6], ic_a[7], ic_a[8], ic_a[9], ic_a[10],
+ ic_a[11], ic_a[12], ic_a[13], ic_a[14], ic_a[15],
+ ic_a[16], ic_a[17], ic_a[18], NULL);
+ if (pe_attr) XtFree(pe_attr);
+ if (st_attr) XtFree(st_attr);
+ }
+
+ if (IsSharedIC(ve) && p->flg & CIFontSet)
+ SizeNegotiation(p, ve->parent->core.width, ve->parent->core.height);
+
+ p->flg &= ~(CIFontSet | CIFg | CIBg | CIBgPixmap | CICursorP | CILineS);
+}
+
+static void
+SharedICChangeFocusWindow(Widget w, XawVendorShellExtPart *ve,
+ XawIcTableList p)
+{
+ XawIcTableList pp;
+
+ if (w == NULL) {
+ ve->ic.current_ic_table = NULL;
+ return;
+ }
+ if ((pp = GetIcTable(w, ve)) == NULL) return;
+ ve->ic.current_ic_table = pp;
+ SetICValues(w, ve, TRUE);
+}
+
+static XawIcTableList
+CurrentSharedIcTable(XawVendorShellExtPart *ve)
+{
+ return(ve->ic.current_ic_table);
+}
+
+static void
+SetICFocus(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p, pp;
+
+ if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
+ (p->xic == NULL)) return;
+
+ if (IsSharedIC(ve)) {
+ pp = CurrentSharedIcTable(ve);
+ if (pp == NULL || pp->widget != w) {
+ SharedICChangeFocusWindow(w, ve, p);
+ }
+ }
+ if (p->flg & CIICFocus && p->ic_focused == FALSE) {
+ p->ic_focused = TRUE;
+ XSetICFocus(p->xic);
+ }
+ p->flg &= ~CIICFocus;
+}
+
+static void
+UnsetICFocus(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p, pp;
+
+ if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
+ (p->xic == NULL)) return;
+
+ if (IsSharedIC(ve) && (pp = CurrentSharedIcTable(ve))) {
+ if (pp->widget != w) {
+ return;
+ }
+ SharedICChangeFocusWindow(NULL, ve, p);
+ }
+ if (p->ic_focused == TRUE) {
+ XUnsetICFocus(p->xic);
+ p->ic_focused = FALSE;
+ }
+}
+
+static void
+SetValues(Widget w, XawVendorShellExtPart *ve,
+ ArgList args, Cardinal num_args)
+{
+ ArgList arg;
+
+ XrmName argName;
+ XrmResourceList xrmres;
+ Cardinal i;
+ XawIcTablePart *p, save_tbl;
+
+ if ((p = GetIcTable(w, ve)) == NULL) return;
+
+ memcpy(&save_tbl, p, sizeof(XawIcTablePart));
+
+ for (arg = args ; num_args != 0; num_args--, arg++) {
+ argName = XrmStringToName(arg->name);
+ for (xrmres = (XrmResourceList)ve->im.resources, i = 0;
+ i < ve->im.num_resources; i++, xrmres++) {
+ if (argName == xrmres->xrm_name) {
+ _XtCopyFromArg(arg->value,
+ (char *)p - xrmres->xrm_offset - 1,
+ xrmres->xrm_size);
+ break;
+ }
+ }
+ }
+ if (p->font_set != save_tbl.font_set) {
+ p->flg |= CIFontSet;
+ }
+ if (p->foreground != save_tbl.foreground) {
+ p->flg |= CIFg;
+ }
+ if (p->background !=save_tbl.background) {
+ p->flg |= CIBg;
+ }
+ if (p->bg_pixmap != save_tbl.bg_pixmap) {
+ p->flg |= CIBgPixmap;
+ }
+ if (p->cursor_position != save_tbl.cursor_position) {
+ p->flg |= CICursorP;
+ }
+ if (p->line_spacing != save_tbl.line_spacing) {
+ p->flg |= CILineS;
+ }
+ p->prev_flg |= p->flg;
+}
+
+static void
+SetFocus(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+ if ((p = GetIcTableShared(w, ve)) == NULL) return;
+
+ if ( p->ic_focused == FALSE || IsSharedIC(ve)) {
+ p->flg |= CIICFocus;
+ }
+ p->prev_flg |= p->flg;
+}
+
+static void
+DestroyIC(Widget w, XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+
+ if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
+ (p->xic == NULL)) return;
+ if (IsSharedIC(ve)) {
+ if (GetIcTable(w, ve) == ve->ic.current_ic_table) {
+ UnsetICFocus(w, ve);
+ }
+ return;
+ }
+ XDestroyIC(p->xic);
+ if (!IsSharedIC(ve)) {
+ if (p->input_style & XIMPreeditPosition) {
+ XtRemoveEventHandler(w, (EventMask)StructureNotifyMask, FALSE,
+ (XtEventHandler)ConfigureCB, (Opaque)NULL);
+ }
+ }
+}
+
+static void
+SetFocusValues(Widget inwidg, ArgList args, Cardinal num_args, Bool focus)
+{
+ XawVendorShellExtPart *ve;
+ VendorShellWidget vw;
+
+ if ((vw = SearchVendorShell(inwidg)) == NULL) return;
+ if ((ve = GetExtPart(vw)) != NULL) {
+ if (num_args > 0) SetValues(inwidg, ve, args, num_args);
+ if (focus) SetFocus(inwidg, ve);
+ if (XtIsRealized((Widget)vw) && ve->im.xim) {
+ if (IsCreatedIC(inwidg, ve)) {
+ SetICValues(inwidg, ve, FALSE);
+ if (focus) SetICFocus(inwidg, ve);
+ } else {
+ CreateIC(inwidg, ve);
+ SetICFocus(inwidg, ve);
+ }
+ }
+ }
+}
+
+static void
+UnsetFocus(Widget inwidg)
+{
+ XawVendorShellExtPart *ve;
+ VendorShellWidget vw;
+ XawIcTableList p;
+
+ if ((vw = SearchVendorShell(inwidg)) == NULL) return;
+ if ((ve = GetExtPart(vw)) != NULL) {
+ if ((p = GetIcTableShared(inwidg, ve)) == NULL) return;
+ if (p->flg & CIICFocus) {
+ p->flg &= ~CIICFocus;
+ }
+ p->prev_flg &= ~CIICFocus;
+ if (ve->im.xim && XtIsRealized((Widget)vw) && p->xic) {
+ UnsetICFocus(inwidg, ve);
+ }
+ }
+}
+
+static Bool
+IsRegistered(Widget w, XawVendorShellExtPart* ve)
+{
+ XawIcTableList p;
+
+ for (p = ve->ic.ic_table; p; p = p->next)
+ {
+ if (p->widget == w) return(TRUE);
+ }
+ return(FALSE);
+}
+
+static void
+Register(Widget inwidg, XawVendorShellExtPart* ve)
+{
+ if (ve->im.xim == NULL)
+ {
+ OpenIM(ve);
+ }
+
+ if (IsRegistered(inwidg, ve)) return;
+
+ if (RegisterToVendorShell(inwidg, ve) == FALSE) return;
+
+ if (ve->im.xim == NULL) return;
+
+ if (XtIsRealized(ve->parent))
+ {
+ CreateIC(inwidg, ve);
+ SetICFocus(inwidg, ve);
+ }
+}
+
+static Bool
+NoRegistered(XawVendorShellExtPart* ve)
+{
+ if (ve->ic.ic_table == NULL) return(TRUE);
+ return(FALSE);
+}
+
+static void
+Unregister(Widget inwidg, XawVendorShellExtPart *ve)
+{
+ if (!IsRegistered(inwidg, ve)) return;
+
+ DestroyIC(inwidg, ve);
+
+ UnregisterFromVendorShell(inwidg, ve);
+
+ if (NoRegistered(ve))
+ {
+ CloseIM(ve);
+ ve->im.xim = NULL;
+ /*
+ * resize vendor shell to core size
+ */
+ (void) SetVendorShellHeight(ve, 0);
+ }
+}
+
+static void
+AllCreateIC(XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+
+ if (ve->im.xim == NULL) return;
+ if (IsSharedIC(ve) && ve->ic.ic_table[0].widget) {
+ p = ve->ic.shared_ic_table;
+ if (p->xic == NULL)
+ CreateIC(ve->ic.ic_table[0].widget, ve);
+ SetICFocus(ve->ic.ic_table[0].widget, ve);
+ return;
+ }
+ for (p = ve->ic.ic_table; p; p = p->next) {
+ if (p->xic == NULL)
+ CreateIC(p->widget, ve);
+ }
+ for (p = ve->ic.ic_table; p; p = p->next) {
+ SetICFocus(p->widget, ve);
+ }
+}
+
+
+static void
+Reconnect(XawVendorShellExtPart *ve)
+{
+ XawIcTableList p;
+
+ ve->im.open_im = True;
+ if (ve->im.xim == NULL) {
+ OpenIM(ve);
+ }
+ if (ve->im.xim == NULL) return;
+
+ if (IsSharedIC(ve)) {
+ p = ve->ic.shared_ic_table;
+ p->flg = p->prev_flg;
+ p->openic_error = FALSE;
+ } else {
+ for (p = ve->ic.ic_table; p; p = p->next) {
+ p->flg = p->prev_flg;
+ p->openic_error = FALSE;
+ }
+ }
+ AllCreateIC(ve);
+}
+
+
+static void
+CompileResourceList(XtResourceList res, unsigned int num_res)
+{
+ unsigned int count;
+
+#define xrmres ((XrmResourceList) res)
+ for (count = 0; count < num_res; res++, count++) {
+ xrmres->xrm_name = XrmPermStringToQuark(res->resource_name);
+ xrmres->xrm_class = XrmPermStringToQuark(res->resource_class);
+ xrmres->xrm_type = XrmPermStringToQuark(res->resource_type);
+ xrmres->xrm_offset = -res->resource_offset - 1;
+ xrmres->xrm_default_type = XrmPermStringToQuark(res->default_type);
+ }
+#undef xrmres
+}
+
+static Bool
+Initialize(VendorShellWidget vw, XawVendorShellExtPart *ve)
+{
+ if (!XtIsVendorShell((Widget)vw)) return(FALSE);
+ ve->parent = (Widget)vw;
+ ve->im.xim = NULL;
+ ve->im.area_height = 0;
+ ve->im.resources = (XrmResourceList)XtMalloc(sizeof(resources));
+ if (ve->im.resources == NULL) return(FALSE);
+ memcpy((char *)ve->im.resources, (char *)resources, sizeof(resources));
+ ve->im.num_resources = XtNumber(resources);
+ CompileResourceList( (XtResourceList) ve->im.resources,
+ ve->im.num_resources );
+ if ((ve->ic.shared_ic_table = CreateIcTable( (Widget)vw, ve)) == NULL)
+ return(FALSE);
+ ve->ic.current_ic_table = NULL;
+ ve->ic.ic_table = NULL;
+ return(TRUE);
+}
+
+
+/* Destroy()
+ *
+ * This frees all (most?) of the resources malloced by XawIm.
+ * It is called by _XawImDestroy, which is called by Vendor.c's
+ * VendorExt's Destroy method. Sheeran, Omron KK, 93/08/05 */
+
+static void
+Destroy(Widget w, XawVendorShellExtPart *ve)
+{
+ contextDataRec *contextData;
+ contextErrDataRec *contextErrData;
+
+ if (!XtIsVendorShell( w ) )
+ return;
+ XtFree( (char*) ve->im.resources );
+
+ if (extContext != (XContext)NULL &&
+ !XFindContext (XtDisplay (w), (Window)w,
+ extContext, (XPointer*)&contextData))
+ XtFree( (char*) contextData );
+
+ if (errContext != (XContext)NULL &&
+ !XFindContext (XDisplayOfIM( ve->im.xim ), (Window) ve->im.xim,
+ errContext, (XPointer*) &contextErrData))
+ XtFree( (char*) contextErrData );
+}
+
+/*********************************************
+ *
+ * SEMI-PRIVATE FUNCTIONS
+ * For use by other Xaw modules
+ *
+ ********************************************/
+
+void
+_XawImResizeVendorShell(Widget w)
+{
+ XawVendorShellExtPart *ve;
+
+ if ( ( ve = GetExtPart( (VendorShellWidget) w ) ) && ve->im.xim ) {
+ ResizeVendorShell( (VendorShellWidget) w, ve );
+ }
+}
+
+
+Dimension
+_XawImGetShellHeight(Widget w)
+{
+ XawVendorShellExtPart *ve;
+
+ if (!XtIsVendorShell( w ) ) return( w->core.height );
+ if ( (ve = GetExtPart( (VendorShellWidget) w )) != NULL ) {
+ return( w->core.height - ve->im.area_height );
+ }
+ return( w->core.height );
+}
+
+void
+_XawImRealize(Widget w)
+{
+ XawVendorShellExtPart *ve;
+
+ if ( !XtIsRealized( w ) || !XtIsVendorShell( w ) ) return;
+ if ( (ve = GetExtPart( (VendorShellWidget) w )) != NULL ) {
+ XtAddEventHandler( w, (EventMask)StructureNotifyMask, FALSE,
+ XawVendorStructureNotifyHandler, (XtPointer)NULL );
+ AllCreateIC(ve);
+ }
+}
+
+void
+_XawImInitialize(Widget w, Widget ext)
+{
+ XawVendorShellExtPart *ve;
+
+ if ( !XtIsVendorShell( w ) ) return;
+ if ( (ve = SetExtPart( (VendorShellWidget) w, (XawVendorShellExtWidget)ext )) != NULL ) {
+ if ( Initialize( (VendorShellWidget) w, ve ) == FALSE ) return;
+ XtAddCallback( w, XtNdestroyCallback, VendorShellDestroyed,
+ (XtPointer) NULL );
+ }
+}
+
+void
+_XawImReconnect(Widget inwidg)
+{
+ XawVendorShellExtPart *ve;
+ VendorShellWidget vw;
+
+ if ((vw = SearchVendorShell(inwidg)) == NULL) return;
+ if ((ve = GetExtPart(vw)) != NULL) {
+ Reconnect(ve);
+ }
+}
+
+void
+_XawImRegister(Widget inwidg)
+{
+ XawVendorShellExtPart *ve;
+ VendorShellWidget vw;
+
+ if ((vw = SearchVendorShell(inwidg)) == NULL) return;
+ if ((ve = GetExtPart(vw)) != NULL) {
+ Register(inwidg, ve);
+ }
+}
+
+void
+_XawImUnregister(Widget inwidg)
+{
+ XawVendorShellExtPart *ve;
+ VendorShellWidget vw;
+
+ if ((vw = SearchVendorShell(inwidg)) == NULL) return;
+ if ((ve = GetExtPart(vw)) != NULL) {
+ Unregister(inwidg, ve);
+ }
+}
+
+void
+_XawImSetValues(Widget inwidg, ArgList args, Cardinal num_args)
+{
+ SetFocusValues( inwidg, args, num_args, FALSE );
+}
+
+void
+_XawImSetFocusValues(Widget inwidg, ArgList args, Cardinal num_args)
+{
+ SetFocusValues(inwidg, args, num_args, TRUE);
+}
+
+void
+_XawImUnsetFocus(Widget inwidg)
+{
+ UnsetFocus(inwidg);
+}
+
+int
+_XawImWcLookupString(Widget inwidg, XKeyPressedEvent *event,
+ wchar_t* buffer_return, int bytes_buffer,
+ KeySym *keysym_return)
+{
+ XawVendorShellExtPart* ve;
+ VendorShellWidget vw;
+ XawIcTableList p;
+ int i, ret;
+ char tmp_buf[64], *tmp_p;
+ wchar_t* buf_p;
+
+ if ((vw = SearchVendorShell(inwidg)) && (ve = GetExtPart(vw)) &&
+ ve->im.xim && (p = GetIcTableShared(inwidg, ve)) && p->xic) {
+ return(XwcLookupString(p->xic, event, buffer_return, bytes_buffer/sizeof(wchar_t),
+ keysym_return, NULL));
+ }
+ ret = XLookupString( event, tmp_buf, sizeof(tmp_buf), keysym_return,
+ NULL );
+ for ( i = 0, tmp_p = tmp_buf, buf_p = buffer_return; i < ret; i++ ) {
+ *buf_p++ = _Xaw_atowc(*tmp_p++);
+ }
+ return( ret );
+}
+
+int
+_XawLookupString(Widget w, XKeyEvent *event, char *buffer_return, int buffer_size,
+ KeySym *keysym_return)
+{
+ XawVendorShellExtPart *ve;
+ VendorShellWidget vw;
+ XawIcTableList p;
+
+ if ((vw = SearchVendorShell(w)) && (ve = GetExtPart(vw))
+ && ve->im.xim && (p = GetIcTableShared(w, ve)) && p->xic)
+ return (XmbLookupString(p->xic, event, buffer_return, buffer_size,
+ keysym_return, NULL));
+
+ return (XLookupString(event, buffer_return, buffer_size,
+ keysym_return, NULL));
+}
+
+int
+_XawImGetImAreaHeight(Widget w)
+{
+ XawVendorShellExtPart *ve;
+ VendorShellWidget vw;
+
+ if ((vw = SearchVendorShell(w)) && (ve = GetExtPart(vw))) {
+ return(ve->im.area_height);
+ }
+ return(0);
+}
+
+void
+_XawImCallVendorShellExtResize(Widget w)
+{
+ VendorShellWidget vw;
+
+ if ((vw = SearchVendorShell(w)) && GetExtPart(vw)) {
+ XawVendorShellExtResize((Widget)vw);
+ }
+}
+
+
+/* _XawImDestroy()
+ *
+ * This should be called by the VendorExt from its
+ * core Destroy method. Sheeran, Omron KK 93/08/05 */
+
+void
+_XawImDestroy(Widget w, Widget ext)
+{
+ XawVendorShellExtPart *ve;
+
+ if ( !XtIsVendorShell( w ) ) return;
+ if ( (ve = GetExtPart( (VendorShellWidget) w )) != NULL )
+ Destroy( w, ve );
+}
diff --git a/libXaw/src/XawInit.c b/libXaw/src/XawInit.c
index 79bc78a5e..89d339aff 100644
--- a/libXaw/src/XawInit.c
+++ b/libXaw/src/XawInit.c
@@ -1,100 +1,97 @@
-/*
- * $Xorg: XawInit.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $
- *
-Copyright 1989, 1998 The Open Group
-Copyright 2003-2004 Roland Mainz <roland.mainz@nrubsig.org>
-
-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.
- *
- *
- * XawInitializeWidgetSet
- *
- * This routine forces a reference to vendor shell so that the one in this
- * widget is installed. Any other cross-widget set initialization should be
- * done here as well. All Athena widgets should include "XawInit.h" and
- * call this routine from their ClassInitialize procs (this routine may be
- * used as the class init proc).
- */
-/* $XFree86: xc/lib/Xaw/XawInit.c,v 1.9 2001/01/17 19:42:36 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/Intrinsic.h>
-#include <X11/Vendor.h>
-#include <X11/Xaw/XawInit.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include "Private.h"
-
-void
-XawInitializeWidgetSet(void)
-{
- static Boolean firsttime = True;
-
- if (firsttime) {
- firsttime = False;
-#ifndef OLDXAW
- XawPixmapsInitialize();
- XawInitializeDefaultConverters();
-#endif
- XtInitializeWidgetClass(vendorShellWidgetClass);
- }
-}
-
-/* XawOpenApplication() - mainly identical to XtOpenApplication() but
- * takes a |Display *| and |Screen *| as arguments, too... */
-Widget XawOpenApplication(XtAppContext *app_context_return,
- Display *dpy,
- Screen *screen,
- String application_name,
- String application_class,
- WidgetClass widget_class,
- int *argc,
- String *argv)
-{
- Widget toplevel;
- Cardinal n;
- Arg args[2];
-
- XtToolkitInitialize();
- *app_context_return = XtCreateApplicationContext();
- if( *app_context_return == NULL )
- return NULL;
-
- XtDisplayInitialize(*app_context_return, dpy,
- application_name, application_class,
- NULL, 0,
- argc, argv);
-
- n = 0;
- if (screen) {
- XtSetArg(args[n], XtNscreen, screen); n++;
- }
- toplevel = XtAppCreateShell(application_name,
- application_class,
- widget_class,
- dpy,
- args, n);
-
- return toplevel;
-}
-
+/*
+ *
+Copyright 1989, 1998 The Open Group
+Copyright 2003-2004 Roland Mainz <roland.mainz@nrubsig.org>
+
+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.
+ *
+ *
+ * XawInitializeWidgetSet
+ *
+ * This routine forces a reference to vendor shell so that the one in this
+ * widget is installed. Any other cross-widget set initialization should be
+ * done here as well. All Athena widgets should include "XawInit.h" and
+ * call this routine from their ClassInitialize procs (this routine may be
+ * used as the class init proc).
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/Intrinsic.h>
+#include <X11/Vendor.h>
+#include <X11/Xaw/XawInit.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include "Private.h"
+
+void
+XawInitializeWidgetSet(void)
+{
+ static Boolean firsttime = True;
+
+ if (firsttime) {
+ firsttime = False;
+#ifndef OLDXAW
+ XawPixmapsInitialize();
+ XawInitializeDefaultConverters();
+#endif
+ XtInitializeWidgetClass(vendorShellWidgetClass);
+ }
+}
+
+/* XawOpenApplication() - mainly identical to XtOpenApplication() but
+ * takes a |Display *| and |Screen *| as arguments, too... */
+Widget XawOpenApplication(XtAppContext *app_context_return,
+ Display *dpy,
+ Screen *screen,
+ String application_name,
+ String application_class,
+ WidgetClass widget_class,
+ int *argc,
+ String *argv)
+{
+ Widget toplevel;
+ Cardinal n;
+ Arg args[2];
+
+ XtToolkitInitialize();
+ *app_context_return = XtCreateApplicationContext();
+ if( *app_context_return == NULL )
+ return NULL;
+
+ XtDisplayInitialize(*app_context_return, dpy,
+ application_name, application_class,
+ NULL, 0,
+ argc, argv);
+
+ n = 0;
+ if (screen) {
+ XtSetArg(args[n], XtNscreen, screen); n++;
+ }
+ toplevel = XtAppCreateShell(application_name,
+ application_class,
+ widget_class,
+ dpy,
+ args, n);
+
+ return toplevel;
+}
+
diff --git a/libXaw/src/sharedlib.c b/libXaw/src/sharedlib.c
index d107f9fcb..31903fc4b 100644
--- a/libXaw/src/sharedlib.c
+++ b/libXaw/src/sharedlib.c
@@ -1,182 +1,173 @@
-/* $Xorg: sharedlib.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
-/*
-
-Copyright 1991, 1994, 1998 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.
-
-*/
-
-#if defined(SUNSHLIB) && !defined(SHAREDCODE)
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/Xaw/AsciiSinkP.h>
-#include <X11/Xaw/AsciiSrcP.h>
-#include <X11/Xaw/AsciiTextP.h>
-#include <X11/Xaw/MultiSinkP.h>
-#include <X11/Xaw/MultiSrcP.h>
-#include <X11/Xaw/BoxP.h>
-#include <X11/Xaw/CommandP.h>
-#include <X11/Xaw/DialogP.h>
-#include <X11/Xaw/FormP.h>
-#include <X11/Xaw/GripP.h>
-#include <X11/Xaw/LabelP.h>
-#include <X11/Xaw/ListP.h>
-#include <X11/Xaw/MenuButtoP.h>
-#include <X11/Xaw/PanedP.h>
-#include <X11/Xaw/PannerP.h>
-#include <X11/Xaw/PortholeP.h>
-#include <X11/Xaw/RepeaterP.h>
-#include <X11/Xaw/ScrollbarP.h>
-#include <X11/Xaw/SimpleP.h>
-#include <X11/Xaw/SimpleMenP.h>
-#include <X11/Xaw/SmeP.h>
-#include <X11/Xaw/SmeBSBP.h>
-#include <X11/Xaw/SmeLineP.h>
-#include <X11/Xaw/StripCharP.h>
-#include <X11/Xaw/TextP.h>
-#include <X11/Xaw/TextSinkP.h>
-#include <X11/Xaw/TextSrcP.h>
-#include <X11/Xaw/ToggleP.h>
-#include <X11/Xaw/TreeP.h>
-#include <X11/VendorP.h>
-#include <X11/Xaw/ViewportP.h>
-#if !defined(OLDXAW) && !defined(XAW7)
-#include <X11/Xaw/PrintSP.h>
-#endif
-
-extern AsciiSinkClassRec asciiSinkClassRec;
-WidgetClass asciiSinkObjectClass = (WidgetClass)&asciiSinkClassRec;
-
-extern AsciiSrcClassRec asciiSrcClassRec;
-WidgetClass asciiSrcObjectClass = (WidgetClass)&asciiSrcClassRec;
-
-extern AsciiTextClassRec asciiTextClassRec;
-WidgetClass asciiTextWidgetClass = (WidgetClass)&asciiTextClassRec;
-
-#ifdef ASCII_STRING
-extern AsciiStringClassRec asciiStringClassRec;
-WidgetClass asciiStringWidgetClass = (WidgetClass)&asciiStringClassRec;
-#endif
-
-#ifdef ASCII_DISK
-extern AsciiDiskClassRec asciiDiskClassRec;
-WidgetClass asciiDiskWidgetClass = (WidgetClass)&asciiDiskClassRec;
-#endif
-
-extern MultiSinkClassRec multiSinkClassRec;
-WidgetClass multiSinkObjectClass = (WidgetClass)&multiSinkClassRec;
-
-extern MultiSrcClassRec multiSrcClassRec;
-WidgetClass multiSrcObjectClass = (WidgetClass)&multiSrcClassRec;
-
-extern BoxClassRec boxClassRec;
-WidgetClass boxWidgetClass = (WidgetClass)&boxClassRec;
-
-extern CommandClassRec commandClassRec;
-WidgetClass commandWidgetClass = (WidgetClass) &commandClassRec;
-
-extern DialogClassRec dialogClassRec;
-WidgetClass dialogWidgetClass = (WidgetClass)&dialogClassRec;
-
-extern FormClassRec formClassRec;
-WidgetClass formWidgetClass = (WidgetClass)&formClassRec;
-
-extern GripClassRec gripClassRec;
-WidgetClass gripWidgetClass = (WidgetClass) &gripClassRec;
-
-extern LabelClassRec labelClassRec;
-WidgetClass labelWidgetClass = (WidgetClass)&labelClassRec;
-
-extern ListClassRec listClassRec;
-WidgetClass listWidgetClass = (WidgetClass)&listClassRec;
-
-extern MenuButtonClassRec menuButtonClassRec;
-WidgetClass menuButtonWidgetClass = (WidgetClass) &menuButtonClassRec;
-
-extern PanedClassRec panedClassRec;
-WidgetClass panedWidgetClass = (WidgetClass) &panedClassRec;
-WidgetClass vPanedWidgetClass = (WidgetClass) &panedClassRec;
-
-extern PannerClassRec pannerClassRec;
-WidgetClass pannerWidgetClass = (WidgetClass) &pannerClassRec;
-
-extern PortholeClassRec portholeClassRec;
-WidgetClass portholeWidgetClass = (WidgetClass) &portholeClassRec;
-
-extern RepeaterClassRec repeaterClassRec;
-WidgetClass repeaterWidgetClass = (WidgetClass) &repeaterClassRec;
-
-extern ScrollbarClassRec scrollbarClassRec;
-WidgetClass scrollbarWidgetClass = (WidgetClass)&scrollbarClassRec;
-
-extern SimpleClassRec simpleClassRec;
-WidgetClass simpleWidgetClass = (WidgetClass)&simpleClassRec;
-
-extern SimpleMenuClassRec simpleMenuClassRec;
-WidgetClass simpleMenuWidgetClass = (WidgetClass)&simpleMenuClassRec;
-
-extern SmeClassRec smeClassRec;
-WidgetClass smeObjectClass = (WidgetClass) &smeClassRec;
-
-extern SmeBSBClassRec smeBSBClassRec;
-WidgetClass smeBSBObjectClass = (WidgetClass) &smeBSBClassRec;
-
-extern SmeLineClassRec smeLineClassRec;
-WidgetClass smeLineObjectClass = (WidgetClass) &smeLineClassRec;
-
-extern StripChartClassRec stripChartClassRec;
-WidgetClass stripChartWidgetClass = (WidgetClass) &stripChartClassRec;
-
-extern TextClassRec textClassRec;
-WidgetClass textWidgetClass = (WidgetClass)&textClassRec;
-
-unsigned long FMT8BIT = 0L;
-unsigned long XawFmt8Bit = 0L;
-unsigned long XawFmtWide = 0L;
-
-extern TextSinkClassRec textSinkClassRec;
-WidgetClass textSinkObjectClass = (WidgetClass)&textSinkClassRec;
-
-extern TextSrcClassRec textSrcClassRec;
-WidgetClass textSrcObjectClass = (WidgetClass)&textSrcClassRec;
-
-extern ToggleClassRec toggleClassRec;
-WidgetClass toggleWidgetClass = (WidgetClass) &toggleClassRec;
-
-extern TreeClassRec treeClassRec;
-WidgetClass treeWidgetClass = (WidgetClass) &treeClassRec;
-
-extern VendorShellClassRec vendorShellClassRec;
-WidgetClass vendorShellWidgetClass = (WidgetClass) &vendorShellClassRec;
-
-extern ViewportClassRec viewportClassRec;
-WidgetClass viewportWidgetClass = (WidgetClass)&viewportClassRec;
-
-#if !defined(OLDXAW) && !defined(XAW7)
-extern XawPrintShellClassRec xawPrintShellClassRec;
-WidgetClass xawPrintShellWidgetClass = (WidgetClass) &xawPrintShellClassRec;
-#endif
-
-#endif /* SUNSHLIB */
+/*
+
+Copyright 1991, 1994, 1998 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.
+
+*/
+
+#if defined(SUNSHLIB) && !defined(SHAREDCODE)
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/Xaw/AsciiSinkP.h>
+#include <X11/Xaw/AsciiSrcP.h>
+#include <X11/Xaw/AsciiTextP.h>
+#include <X11/Xaw/MultiSinkP.h>
+#include <X11/Xaw/MultiSrcP.h>
+#include <X11/Xaw/BoxP.h>
+#include <X11/Xaw/CommandP.h>
+#include <X11/Xaw/DialogP.h>
+#include <X11/Xaw/FormP.h>
+#include <X11/Xaw/GripP.h>
+#include <X11/Xaw/LabelP.h>
+#include <X11/Xaw/ListP.h>
+#include <X11/Xaw/MenuButtoP.h>
+#include <X11/Xaw/PanedP.h>
+#include <X11/Xaw/PannerP.h>
+#include <X11/Xaw/PortholeP.h>
+#include <X11/Xaw/RepeaterP.h>
+#include <X11/Xaw/ScrollbarP.h>
+#include <X11/Xaw/SimpleP.h>
+#include <X11/Xaw/SimpleMenP.h>
+#include <X11/Xaw/SmeP.h>
+#include <X11/Xaw/SmeBSBP.h>
+#include <X11/Xaw/SmeLineP.h>
+#include <X11/Xaw/StripCharP.h>
+#include <X11/Xaw/TextP.h>
+#include <X11/Xaw/TextSinkP.h>
+#include <X11/Xaw/TextSrcP.h>
+#include <X11/Xaw/ToggleP.h>
+#include <X11/Xaw/TreeP.h>
+#include <X11/VendorP.h>
+#include <X11/Xaw/ViewportP.h>
+
+extern AsciiSinkClassRec asciiSinkClassRec;
+WidgetClass asciiSinkObjectClass = (WidgetClass)&asciiSinkClassRec;
+
+extern AsciiSrcClassRec asciiSrcClassRec;
+WidgetClass asciiSrcObjectClass = (WidgetClass)&asciiSrcClassRec;
+
+extern AsciiTextClassRec asciiTextClassRec;
+WidgetClass asciiTextWidgetClass = (WidgetClass)&asciiTextClassRec;
+
+#ifdef ASCII_STRING
+extern AsciiStringClassRec asciiStringClassRec;
+WidgetClass asciiStringWidgetClass = (WidgetClass)&asciiStringClassRec;
+#endif
+
+#ifdef ASCII_DISK
+extern AsciiDiskClassRec asciiDiskClassRec;
+WidgetClass asciiDiskWidgetClass = (WidgetClass)&asciiDiskClassRec;
+#endif
+
+extern MultiSinkClassRec multiSinkClassRec;
+WidgetClass multiSinkObjectClass = (WidgetClass)&multiSinkClassRec;
+
+extern MultiSrcClassRec multiSrcClassRec;
+WidgetClass multiSrcObjectClass = (WidgetClass)&multiSrcClassRec;
+
+extern BoxClassRec boxClassRec;
+WidgetClass boxWidgetClass = (WidgetClass)&boxClassRec;
+
+extern CommandClassRec commandClassRec;
+WidgetClass commandWidgetClass = (WidgetClass) &commandClassRec;
+
+extern DialogClassRec dialogClassRec;
+WidgetClass dialogWidgetClass = (WidgetClass)&dialogClassRec;
+
+extern FormClassRec formClassRec;
+WidgetClass formWidgetClass = (WidgetClass)&formClassRec;
+
+extern GripClassRec gripClassRec;
+WidgetClass gripWidgetClass = (WidgetClass) &gripClassRec;
+
+extern LabelClassRec labelClassRec;
+WidgetClass labelWidgetClass = (WidgetClass)&labelClassRec;
+
+extern ListClassRec listClassRec;
+WidgetClass listWidgetClass = (WidgetClass)&listClassRec;
+
+extern MenuButtonClassRec menuButtonClassRec;
+WidgetClass menuButtonWidgetClass = (WidgetClass) &menuButtonClassRec;
+
+extern PanedClassRec panedClassRec;
+WidgetClass panedWidgetClass = (WidgetClass) &panedClassRec;
+WidgetClass vPanedWidgetClass = (WidgetClass) &panedClassRec;
+
+extern PannerClassRec pannerClassRec;
+WidgetClass pannerWidgetClass = (WidgetClass) &pannerClassRec;
+
+extern PortholeClassRec portholeClassRec;
+WidgetClass portholeWidgetClass = (WidgetClass) &portholeClassRec;
+
+extern RepeaterClassRec repeaterClassRec;
+WidgetClass repeaterWidgetClass = (WidgetClass) &repeaterClassRec;
+
+extern ScrollbarClassRec scrollbarClassRec;
+WidgetClass scrollbarWidgetClass = (WidgetClass)&scrollbarClassRec;
+
+extern SimpleClassRec simpleClassRec;
+WidgetClass simpleWidgetClass = (WidgetClass)&simpleClassRec;
+
+extern SimpleMenuClassRec simpleMenuClassRec;
+WidgetClass simpleMenuWidgetClass = (WidgetClass)&simpleMenuClassRec;
+
+extern SmeClassRec smeClassRec;
+WidgetClass smeObjectClass = (WidgetClass) &smeClassRec;
+
+extern SmeBSBClassRec smeBSBClassRec;
+WidgetClass smeBSBObjectClass = (WidgetClass) &smeBSBClassRec;
+
+extern SmeLineClassRec smeLineClassRec;
+WidgetClass smeLineObjectClass = (WidgetClass) &smeLineClassRec;
+
+extern StripChartClassRec stripChartClassRec;
+WidgetClass stripChartWidgetClass = (WidgetClass) &stripChartClassRec;
+
+extern TextClassRec textClassRec;
+WidgetClass textWidgetClass = (WidgetClass)&textClassRec;
+
+unsigned long FMT8BIT = 0L;
+unsigned long XawFmt8Bit = 0L;
+unsigned long XawFmtWide = 0L;
+
+extern TextSinkClassRec textSinkClassRec;
+WidgetClass textSinkObjectClass = (WidgetClass)&textSinkClassRec;
+
+extern TextSrcClassRec textSrcClassRec;
+WidgetClass textSrcObjectClass = (WidgetClass)&textSrcClassRec;
+
+extern ToggleClassRec toggleClassRec;
+WidgetClass toggleWidgetClass = (WidgetClass) &toggleClassRec;
+
+extern TreeClassRec treeClassRec;
+WidgetClass treeWidgetClass = (WidgetClass) &treeClassRec;
+
+extern VendorShellClassRec vendorShellClassRec;
+WidgetClass vendorShellWidgetClass = (WidgetClass) &vendorShellClassRec;
+
+extern ViewportClassRec viewportClassRec;
+WidgetClass viewportWidgetClass = (WidgetClass)&viewportClassRec;
+
+#endif /* SUNSHLIB */
diff --git a/libXaw/xaw6.pc.in b/libXaw/xaw6.pc.in
index 537df326b..27a90dfbf 100644
--- a/libXaw/xaw6.pc.in
+++ b/libXaw/xaw6.pc.in
@@ -1,12 +1,12 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: Xaw
-Description: X Athena Widgets Library, version 6
-Version: @PACKAGE_VERSION@
-Requires: xproto xt xmu
-Requires.private: x11 xext xt xmu
-Cflags: -I${includedir}
-Libs: -L${libdir} -lXaw6
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Xaw
+Description: X Athena Widgets Library, version 6
+Version: @PACKAGE_VERSION@
+Requires: xproto xt
+Requires.private: x11 xext xt xmu
+Cflags: -I${includedir}
+Libs: -L${libdir} -lXaw6
diff --git a/libXaw/xaw7.pc.in b/libXaw/xaw7.pc.in
index 11bfbb352..2513027f4 100644
--- a/libXaw/xaw7.pc.in
+++ b/libXaw/xaw7.pc.in
@@ -1,12 +1,12 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: Xaw
-Description: X Athena Widgets Library, version 7
-Version: @PACKAGE_VERSION@
-Requires: xproto xt xmu
-Requires.private: x11 xext xt xmu xpm
-Cflags: -I${includedir}
-Libs: -L${libdir} -lXaw7
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Xaw
+Description: X Athena Widgets Library, version 7
+Version: @PACKAGE_VERSION@
+Requires: xproto xt
+Requires.private: x11 xext xt xmu xpm
+Cflags: -I${includedir}
+Libs: -L${libdir} -lXaw7