[overture] Re: Building v24 on Blue Gene P


Hi Joe,

As it turns out I forgot the patch for mogl.C as it is copied from a backup file. Rather than provide two versions of mogl.C my modification adds ifdefs for X11 and removes the moglNull.C file (as I had implemented in v22). Then mogl.C uses my provided "nullgl.h" rather than "GL/gl.h" if GL is not available. Before applying the attached patch you may need to copy static/mogl.C.backup to stat/mogl.C, the functionality in configure to copy those files should have been removed from the previous patch.

Cheers,
 -Erik


On 04/03/2012 09:17 AM, J. P. Bernstein wrote:
Thanks, Bill.

I was able to get around the mogl.o missing target error when I replaced mogl 
with moglNull in the following:

$Overture/Makefile.in:178:             static/mog.C static/overlay.c 
static/initOvertureGlobalVariables.C \

$Overture/lib/Makefile.in:219:RapsodiStaticFiles= ../static/mogl.o 
../static/overlay.o ../static/initOvertureGlobalVariables.o \

$Overture/static/Makefile.in:25:Source=  mogl.C overlay.C 
initOvertureGlobalVariables.C initStaticMappingVariables.C \

$Overture/tests/Makefile.in:24:giMain = giMain.o ../static/mogl.o 
../static/overlay.o

Erik, in particular, can you please take a look at the rest of this message 
(though comments are most welcome from anyone, of course)?

Now the build dies with:

--------------------
mpixlcxx_r -qarch=450d -qtune=450 -qmaxmem=16384 
-I/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include -I.   
-I/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include 
-DBL_USE_DOUBLE -DBL_Solaris   -g -DUSE_PPP -I/include -I/GLUT  -I/include  -c 
moglNull.C
mpixlc_r -qarch=450d -qtune=450 -qmaxmem=16384  
-I/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include -I.   -g -DSHM 
-DUSE_PPP -I. -I/include -I/include -c overlay.c
"overlay.c", line 236.21: 1506-356 (W) Compilation unit is empty.
mpixlcxx_r -qarch=450d -qtune=450 -qmaxmem=16384 
-I/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include -I.   
-I/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include 
-DBL_USE_DOUBLE -DBL_Solaris   -g -DUSE_PPP -I/include -I/GLUT  -I/include  -c 
initOvertureGlobalVariables.C
"moglNull.C", line 31.10: 1540-0836 (S) The #include file<GL/glu.h>  is not 
found.
make[1]: *** [moglNull.o] Error 1
make[1]: *** Waiting for unfinished jobs....
"/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include/A++.h", line 
1405.21: 1540-1091 (W) The friend declaration "APP_view" specifies a default argument 
expression and is not a definition.
. . .
"/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include/p_inline_func.h",
 line 465.12: 1540-1103 (W) The address of a local variable or temporary is used in a 
return expression.
. . .
make[1]: Leaving directory 
`/gpfs/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/static'
make: *** [all] Error 2
--------------------

I found the solution is to comment out the following in 
$Overture/static/moglNull.C

#include<GL/glu.h>

Next, the build fails with:

--------------------
mpixlcxx_r -qarch=450d -qtune=450 -qmaxmem=16384
-I/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include -I.   
-I/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include 
-DBL_USE_DOUBLE -DBL_Solaris   -g -DUSE_PPP -I/include -I/GLUT  -I/include  -c 
initStaticMappingVariables.C
"/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include/A++.h", line 
1405.21: 1540-1091 (W) The friend declaration "APP_view" specifies a default argument 
expression and is not a definition.
. . .
"/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include/mogl.h", line 40.11: 
1540-0063 (S) The text "*" is unexpected.
"/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include/mogl.h", line 197.42: 
1540-0063 (S) The text "left" is unexpected.
"/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include/mogl.h", line 201.42: 
1540-0063 (S) The text "left" is unexpected.
"/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include/mogl.h", line 205.49: 1540-0040 (S) 
The text "aspectRatio" is unexpected.  "GLdouble" may be undeclared or ambiguous.
"/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include/mogl.h", line 210.41: 1540-0040 (S) 
The text "fovy" is unexpected.  "GLdouble" may be undeclared or ambiguous.
"moglNull.C", line 176.33: 1540-0063 (S) The text "GLdouble" is unexpected.
"moglNull.C", line 180.33: 1540-0063 (S) The text "GLdouble" is unexpected.
"moglNull.C", line 184.40: 1540-0063 (S) The text "GLdouble" is unexpected.
"moglNull.C", line 189.32: 1540-0063 (S) The text "GLdouble" is unexpected.
"/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include/P++.h", line 
1339.21: 1540-1091 (W) The friend declaration "APP_view" specifies a default argument 
expression and is not a definition.
. . .
"/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include/p_inline_func.h",
 line 465.12: 1540-1103 (W) The address of a local variable or temporary is used in a 
return expression.
make[1]: *** [moglNull.o] Error 1
make[1]: *** Waiting for unfinished jobs....
"/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include/p_inline_func.h",
 line 465.12: 1540-1103 (W) The address of a local variable or temporary is used in a 
return expression.
. . .
make[1]: Leaving directory 
`/gpfs/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/static'
make: *** [all] Error 2
--------------------

It looks to me that mogl.h still has to be included in order to define things 
needed to create the empty stubs for mogl functions. Is that correct, Erik? 
While I continue to look into this, can you please comment on the errors?

Best,

Joe


On Apr 2, 2012, at 5:54 PM, Bill Henshaw wrote:

Hi Joe:
   The Overture/configure script should replace mogl.C with moglNull.C
in the Overture/static directory and compile that.

  mogl.C is the Motif/OpenGL interface and is where all Motif code is located.

...Bill


On 04/02/2012 03:20 PM, J. P. Bernstein wrote:
Hello Bill, Kyler, Erik,

I was able to patch v24 with Erik's patches enabling noGL and noPERL config 
options in addition to noX11 (I am still working on getting Mesa compiled for 
the BG/P backend to have the option to go with just noX11 and noPERL).

The build runs for many minutes and then dies with:

make[1]: Entering directory 
`/gpfs/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/static'
perl ../config/makeDepend -f depend -Y -- 
-I/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/include -I.   
-I/home/jpbernst/Code/Overture/LLNL-CISM/A++P++-0.8.0/P++/install/include 
-DBL_USE_DOUBLE -DBL_Solaris -- mogl.C overlay.C initOvertureGlobalVariables.C 
initStaticMappingVariables.C xColours.C ReferenceCounting.C OvertureInit.C 
RapsodiInit.C memoryUsage.C
make[1]: *** No rule to make target `mogl.o', needed by `static_date'.  Stop.
make[1]: *** Waiting for unfinished jobs....
run makedepend ...
...done
touch depend_date
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory 
`/gpfs/home/jpbernst/Code/Overture/LLNL-CISM/Overture.v24/static'
make: *** [all] Error 2

Is mogl related to OpenGL? That is, Erik, is that something that the noGL 
config option should deprecate? In the $Overture/static, I see moglNull.C. . .

Best,

Joe

----- Original Message -----
From: "J. P. Bernstein"<astro@xxxxxxx>
To: overture@xxxxxxxxxxxxx
Sent: Monday, April 2, 2012 3:29:11 PM
Subject: [overture] Re: Building v24 on Blue Gene P

Hello Bill,

Would you be able to send me some information about specific machines Overture 
has been run on and some performance metrics on those machines? I am putting 
together an application for discretionary time on the Argonne Blue Gene/P and 
including such information would be very beneficial.

Best,

Joe

----- Original Message -----
From: "Bill Henshaw"<henshaw@xxxxxxxx>
To: overture@xxxxxxxxxxxxx
Sent: Saturday, March 31, 2012 5:36:18 PM
Subject: [overture] Re: Building v24 on Blue Gene P

Thanks Erik,
    I had forgot that you had built a null version of OpenGL.
...Bill

On 03/29/2012 03:58 PM, Erik Wilson wrote:
Similar to the noX11 flag, the patch I sent (attached for everyone else)
add options for noGL and noPERL configure flags. OpenGL functionality is
removed via a null implementation; just in case Mesa proves too
difficult to compile.

Cheers,
    -Erik

On 03/28/2012 02:54 PM, J. P. Bernstein wrote:
Thanks, Bill.

Can you please clarify if those changes are in v24, or if you are referring to 
changes post v24?

Indeed, I am close to compiling Mesa on BG/P. I am getting a failure due to the 
compiler not being recognized at the latter stage of compiling libmesa itself. 
I am corresponding with the Mesa folks about that.

Thanks for your offer of help regarding the perl script. I am handy with perl, 
so I agree that that step should not be hard.

Best,

Joe

----- Original Message -----
From: "Bill Henshaw"<henshaw@xxxxxxxx>
To: overture@xxxxxxxxxxxxx
Sent: Wednesday, March 28, 2012 4:48:51 PM
Subject: [overture] Re: Building v24 on Blue Gene P

Hi Joe,
        As Kyle noted, I have already made the changes to optionally remove the
dependencies on X and Motif. My plan was to still link to OpenGL, this should
not be a big deal.

       It is a simple matter to write a perl program that can convert a
command file to one that does not need perl. I can help
you with that.

...Bill



On 03/28/2012 01:07 PM, Chand, Kyle K. wrote:
Hi Joe,

I think for the OpenGL you can build Mesa without X11 and direct rendering so 
you will get the library to link against.  Here is a VisIt page about how they 
built Mesa on a BG/P system:
http://www.visitusers.org/index.php?title=Building_on_BlueGeneP
It is kind of out of date and things might be easier now...

Regards,
Kyle

________________________________________
From: overture-bounce@xxxxxxxxxxxxx [overture-bounce@xxxxxxxxxxxxx] On Behalf 
Of J. P. Bernstein [astro@xxxxxxx]
Sent: Wednesday, March 28, 2012 12:45 PM
To: overture@xxxxxxxxxxxxx
Subject: [overture] Re: Building v24 on Blue Gene P

Or am I confused. Does CG need the Overture source, Overture compilation 
products, or both? If only the source, then I better understand your point 
about really what I need to do is divorce Overture and CG form things.

Best,

Joe

On Mar 28, 2012, at 2:44 PM, J. P. Bernstein wrote:

Thanks, Kyle.

For Overture on BG/P, there is also the issue of X, MOTIF, and OpenGL. The CISM 
folks modified a version of Overture in 2008 to strip those things in addition 
to perl. Building CG alone on BG/P would reduce the problem to the CG divorce 
from those things at the expense of additionally divorcing CG from Overture.

In the end, it comes down to either divorcing Overture and CG from perl, X, 
MOTIF, and OpenGL, or divorcing Overture from CG and CG from perl, X, MOTIF, 
and OpenGL (I am not yet sure the extent to which CG even depends on those 
things). It seems to me that the latter is more sensible, but make that 
statement as a mere Overture initiate. What do you and the experts say?

Best,

Joe

On Mar 28, 2012, at 2:19 PM, Chand, Kyle K. wrote:

Hi Joe,

Really you will be divorcing Overture and CG from perl, which is doable.  
Stripping calls from Overture is easy, you just need to hack/replace 
Ogshow/OvertureParser.C when building it on the BG/P backend.  Generating 
perl-less command files on your mac will not be that hard though it may involve 
some adjustments to the way overture's command interpreter records the playback 
commands.  It may also be possible to do it with a simple perl script that 
reads a command file line by line, interprets each line ending in a semi-colon 
and string-interpolates the remaining lines, outputting the interpolated lines 
to a perl-less command file.

bpp should not be an issue.  It is used to generate code at compile time (only 
when bpp files have changed) and is never executed at run time.  If executing 
bpp on the frontend when compiling cg is an issue you can just 'touch' all the 
source files so that the bpp dependencies are not activated in the build 
system.  If that does not work then the build system will have to be adjusted 
to ignore regeneration of bpp generated source code.

Regards,
Kyle

________________________________________
From: overture-bounce@xxxxxxxxxxxxx [overture-bounce@xxxxxxxxxxxxx] On Behalf 
Of J. P. Bernstein [astro@xxxxxxx]
Sent: Wednesday, March 28, 2012 11:43 AM
To: overture@xxxxxxxxxxxxx
Subject: [overture] Re: Building v24 on Blue Gene P

Hello Kyle,

I have confirmed with ALCF management that building perl on the backend of the 
Argonne BG/P is not and will not be supported by the facility due to overhead 
issues.

What we are really after is having CG built on the BG/P backend. To us, the 
most sensible path is to build Overture somewhere else (like my Mac laptop, 
which has been done), and use it to generate perl-less command files to pass to 
a CG build on the BG/P backend. Thus, I would like to divorce CG from Overture 
to the greatest extent possible. How realistic is that goal, from the 
perspective of the Overture developers?

The immediate issue that arises with the above is CG's dependency on BPP. How 
much does CG depended on the extended capabilities of BPP, relative to CPP. In 
other words, would building BPP on it's own or reverting CG to work with CPP 
make more sense?

Best,

Joe

----- Original Message -----
From: "Kyle K. Chand"<chand1@xxxxxxxx>
To: overture@xxxxxxxxxxxxx
Sent: Monday, March 5, 2012 4:24:19 PM
Subject: [overture] Re: Building v24 on Blue Gene P

Hi Joe,

Mechanically, it would not be hard to replace the perl interpreter in
OvertureParser.C with the python interpreter (or any other
interpreter, check out Lua!).
However, it may be a great deal of effort to translate all our command
files from perl to python.  We do not use perl for regular
expressions, we use perl for two
purposes:
1) writing perl code to parameterize and generate input to our grid
generator and solvers, and
2) utilize perl's "string interpolation" mechanism to turn command
file lines like:
$N=11;
number of grid lines
$N $N
into
number of grid lines
11 11

Lately we have been using 1) a lot more, often writing perl loops and
including perl modules to parameterize and automate input generation
and make things generally more maintainable.
The mechanism represented by 2) is how 1) eventually gets used.  So,
it would be a lot of work to re-write many of our more recent (and
future) command files to use another interpreted language.

I think the most efficient path would be to strip perl from the BG
port of the code.  Then use Overture on some other machine to generate
perl-less, pure text, input for the problems you want to run.  One
could even
write a (perl :-) script that reads a command file and sends each line
ending with a semi-colon to the interpreter and every other line for
string interpolation, echoing the interpolated line to a "stripped"
command file.  You would not even need another copy of Overture for
that.

Best regards,
Kyle




mailto: chand1@xxxxxxxx
phoneto: (925) 422 7740



On Mar 5, 2012, at 12:09 PM, J. P. Bernstein wrote:

Thank you very much, Kyle, for those details.

While I am digesting that, would you care to comment on the notion
of replacing perl functionality with python? I am not familiar
enough with python or Overture to know, of the top of my head, if
python offers the capability needed.

I ask because python is available on the back end of the BG/P at
Argonne. Might such a transformation be of interest to you and the
Overture team? My job description would allow me to engage
considerably on such a task.

Best,

Joe

On Mar 5, 2012, at 12:42 PM, Kyle K. Chand wrote:

Hi Joe,

Well, I have some bad news regarding perl.  Perl is really an
integral part of how we set up problems both for the
grid generator as well as CG solver runs.  Using Overture w/o perl
is kind of like editing C++ files with ed in a terminal window; you
can do it but it is not really suggested :-)  Overture's graphics/
interpreter interface actually starts a perl interpreter
and the text commands are first sent to the interpreter to either
get string interpolation performed or perl statements evaluated.
You can see an example of how this is used in $Overture/sampleGrids/
squareArg.cmd, which parameterizes an ogen
grid generator command file using perl statements.

Now, it is probably possible to build Overture without the perl
interpreter linked in, you will have to change OvertureParser.C as
well
as the bin/Makefile to remove references to perl.  Then, however,
you will need to strip perl from any command files you plan to use.

The best way to go would be to compile Perl for BGP.  However, if
that is not possible for some reason, here is another way to go:
1) Build a "full" version of Overture somewhere you can generate
grids and test things out
2) Modify this "full" version to write the "plain text" command
files after the perl processing is completed, run any command files
you want through it to strip the perl
3) Build a "perl-less" version for BGP on which you can run perl-
stripped cg command files

The easiest way to "strip" command files of perl might be to
intercept the interpolated strings before they get sent to the rest
of Overture
from OvertureParser, I'll have to think about the least-intrusive
way to do that.

Regards,
Kyle
PS, I will try to get to your Mac question later today.

mailto: chand1@xxxxxxxx
phoneto: (925) 422 7740



On Mar 2, 2012, at 5:58 PM, J. P. Bernstein wrote:

Hello Bill,

Thank you and Kyle for the quick replies to my emails.

Warning headed. I am on assignment from the Argonne Leadership
Computing
Facility (ALCF) on this effort. There is significant interest at
ALCF to
at least run the CG solvers on BGP (not necessarily ogen).
Nevertheless,
I will share your sentiment with my assigners.

A question about the perl situation: my initial assessment
suggested to
me that perl was needed only for configuring the build and running
the
tests. Since perl is available on the front end, the configuration
part
should work. Part of my assignment is converting the perl test
scripts
to, e.g., python. However, your message below makes me doubt my
assessment. Are the perl libs, which, as you know, are not
available on
the back end, needed at run time beyond the test scripts?

Best,

Joe

On 3/2/2012 6:08 PM, Bill Henshaw wrote:
Hi Joe,
At one time I did get Overture compiled on the BGP front end at ANL
with xlc but I was left
with the issue that the perl libraries were not available with
BGP. We
could work around
this if necessary but I prefer not too if possible.

That said, experience tells me that since we have not run
Overture on
BGP then you
are likely to have problems that will be very hard for you to fix.
Therefore this is just a warning
that the path you are on may lead to great misery and despair ...

...Bill


J. P. Bernstein wrote:
Hello,

I am trying to build Overture.v24 on Blue Gene P (BG/P).
In an attempt to add a BG/P configuration for A++, I looked for
the
following config file mentioned in the A++ README file:
A++/config/config.options
but was not able to find the file or the directory mentioned in
the
A++ directory tree.

I was able to build A++ without errors with the following
configure
command:

./configure --with-CC=mpixlc_r --with-CFLAGS="-qarch=450d -
qtune=450"
--with-CXX=mpixlcxx_r --with-CXXFLAGS="-qarch=450d -qtune=450"
--prefix=`pwd`

However, the flags did not seem to be passed:

mpixlc_r -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include
-c
`test -f common_func.c || echo './'`common_func.c

mpixlcxx_r           -o resize  resize.o
-L/home/jpbernst/Code/Overture/A++P++-0.8.0/A++/install/lib  -
L../src
-lApp -lApp_static -lApp  -lm

Is this a known issue?

Returning to the BG/P config issue, I tried to hack :

config/A++P++_common_autoconfig.m4
config.sub

in order to add a Bg/P setup without success. Is there
documentation
available for adding a machine config? I was not able to find
any on
the Overture webpage.

Best,

Joe Bernstein



.






--- Overture.v24/static/mogl.C.backup   2011-05-18 11:21:57.000000000 -0400
+++ overture/static/mogl.C      2011-07-31 12:16:52.000000000 -0400
@@ -48,6 +48,7 @@
 
 // define OV_USE_LESSTIF
 
+
 #ifndef NO_APP
 #include "OvertureDefine.h"
 #include "OvertureTypes.h"
@@ -62,9 +63,6 @@
 typedef double real;
 #endif
 
-/* *wdh* 090704 : for sScanF: */
-#include "wdhdefs.h"
-
 #include <stdlib.h>
 #include <stdio.h>
 #include <math.h>
@@ -72,13 +70,38 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <math.h>
+
+#ifdef OV_USE_GL
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include <GL/glx.h>
+#else
+#include "nullgl.h"
+#include "nullglu.h"
+#endif
+
+//#include "aString.H"
+#ifndef NO_APP
+#include "aString.H"
+#else
+#include <string>
+#ifndef aString
+#define aString std::string
+#endif
+#endif
+
+#include "mogl.h"
+#include "DialogData.h"
+
+#ifdef OV_USE_X11
+
+/* *wdh* 090704 : for sScanF: */
+#include "wdhdefs.h"
+
 #include <X11/StringDefs.h>
 #include <X11/keysym.h>
 #include <X11/IntrinsicP.h>
 #include <X11/cursorfont.h>
-#include <GL/gl.h>
-#include <GL/glu.h>
-#include <GL/glx.h>
 
 #include <Xm/BulletinB.h>
 #include <Xm/CascadeB.h>
@@ -103,19 +126,6 @@
 #include <Xm/ToggleB.h>
 #include <Xm/ToggleBG.h>
 
-//#include "aString.H"
-#ifndef NO_APP
-#include "aString.H"
-#else
-#include <string>
-#ifndef aString
-#define aString std::string
-#endif
-#endif
-
-#include "mogl.h"
-#include "DialogData.h"
-
 //
 // *NOTE* we need to add the info from the visual to popup windows --- 
otherwise this generates an error in XCreateWindow 
 //  ????? what is this
@@ -475,6 +485,8 @@
 static int
 windowExistsTop(Window winid, int *pos);
 
+#endif // OV_USE_X11
+
 
 // ..VDL:
 // ----Wrappers for Viewport changes -- required by the PowerWall version
@@ -606,6 +618,8 @@
   glMatrixMode(GL_MODELVIEW);
 }
 
+#ifdef OV_USE_X11
+
 /*
  * ============ VDL CODE =======================================
  */
@@ -716,6 +730,8 @@
 
 // =============== END VDL code ====================================
 
+#endif // OV_USE_X11
+
 //..GL
 static void 
 display(GL_GraphicsInterface *giPointer /* =NULL */, const int & win_number /* 
=0 */)
@@ -738,8 +754,10 @@
 moglDisplay(int win)
 // redraw the OpenGL window
 {
+#ifdef OV_USE_X11
   if (0 <= win && win < OGLNWindows)
     draw(OGLWindowList[win]->plotStuff);
+#endif // OV_USE_X11
 }
 
 
@@ -748,6 +766,7 @@
 setMenuNameChosen( const char* answer )
 // Assign the global variable menuNameChosen to equal answer
 {
+#ifdef OV_USE_X11
   int length = strlen(answer);
   if( !menuNameChosen || length > strlen(menuNameChosen) )
   {
@@ -755,6 +774,7 @@
     menuNameChosen= new char[length+1];
   } 
   strcpy(menuNameChosen,answer);
+#endif // OV_USE_X11
 }  
 
 //..GL
@@ -762,9 +782,11 @@
 setMenuChosen( const int & menuItem, char* answer )
 // Assign the global variable menuNameChosen to equal answer
 {
+#ifdef OV_USE_X11
   menuItemChosen = menuItem;
   setMenuNameChosen(answer);
   exitEventLoop=TRUE;
+#endif // OV_USE_X11
 }  
 
 
@@ -774,12 +796,15 @@
 getCursor( real & x, real & y )
 // Wait for the user to choose a cursor position
 {
+#ifdef OV_USE_X11
   eventLoop();
 
   x=xRubberBandMax;
   y=yRubberBandMax;
+#endif // OV_USE_X11
 }
 
+#ifdef OV_USE_X11
 //============================================MOTIF-EXTERNAL
 
 static void
@@ -799,6 +824,7 @@
   ximage.obdata = NULL;
   XmInstallImage(&ximage, (char*)name);
 }
+#endif // OV_USE_X11
 
 
 //..MOTIF --- mixes Motif & GL initialization
@@ -819,6 +845,7 @@
 // /Author: WDH \& AP
 //===========================================================================
 {
+#ifdef OV_USE_X11
   if (moglInitialized) return; // only do this once!
 
   
@@ -1086,9 +1113,11 @@
   crossCursor     = XCreateFontCursor(dpy,XC_tcross);
 
   moglInitialized = 1;
+#endif // OV_USE_X11
 
 }
 
+#ifdef OV_USE_X11
 static void
 cancelFileSB(Widget widget, XtPointer client_data, XtPointer call_data)
 {
@@ -1132,11 +1161,13 @@
   exitEventLoop=TRUE;
   
 }
+#endif // OV_USE_X11
 
 
 void
 moglOpenFileSB(char *extension /* NULL */)
 {
+#ifdef OV_USE_X11
   Arg fsArgs[3];
   int nArgs=0;
   char pattern[80];
@@ -1177,11 +1208,13 @@
   XtAddCallback(fsDialog, XmNokCallback, okFileSB, NULL);
   XtAddCallback(fsDialog, XmNcancelCallback, cancelFileSB, NULL);
   XtManageChild(fsDialog);
+#endif // OV_USE_X11
 }
 
 void
 moglCloseFileSB()
 {
+#ifdef OV_USE_X11
   if (fsDialog) 
 // record the current value of XmNdirectory
     XtVaGetValues(fsDialog, XmNdirectory, &fileSelectionDirectory, NULL);
@@ -1189,11 +1222,13 @@
     XtDestroyWidget( fsDialog );
 //    XtUnrealizeWidget( fsDialog );
   fsDialog = NULL;
+#endif // OV_USE_X11
 }
 
 void
 moglCreateMessageDialog(aString msg, MessageTypeEnum type)
 {
+#ifdef OV_USE_X11
   Arg fsArgs[1];
   Widget d;
   XmString m;
@@ -1241,12 +1276,14 @@
   XtUnmanageChild(helpButton);
 // display the dialog
   XtManageChild(d);
+#endif // OV_USE_X11
 }
 
 
 int 
 moglSetTitle(int win_number, const aString &windowTitle)
 {
+#ifdef OV_USE_X11
   if (win_number >= 0 && win_number < OGLNWindows && windowTitle.length() > 0)
   {
     Widget toplevel = OGLWindowList[win_number]->toplevel;
@@ -1259,6 +1296,7 @@
   }
   
   return OK;
+#endif // OV_USE_X11
 }
 
 
@@ -1273,6 +1311,7 @@
                   WindowProperties &wProp, 
                    int directRendering /* = 1 */  )
 {
+#ifdef OV_USE_X11
   // encode the window number in viewChar;
   viewChar.win_number = OGLNWindows;
 
@@ -1847,11 +1886,13 @@
   
   
   return OGLCurrentWindow;
+#endif // OV_USE_X11
 }
 
 int
 destroyGraphicsWindow(int win_number)
 {
+#ifdef OV_USE_X11
   printf("mogl -- destroy graphics window %i.\n", win_number); // debug **pf
 
   if ( win_number < 0 || win_number >= OGLNWindows)
@@ -1895,11 +1936,13 @@
     OGLNWindows--;
 
   return OK;
+#endif // OV_USE_X11
 }
 
 void
 moglSetSensitive(int win_number, int trueOrFalse)
 {
+#ifdef OV_USE_X11
   WINDOW_REC *t;
   if (0<=win_number && win_number < OGLNWindows)
   {
@@ -1918,11 +1961,13 @@
   int i;
   for (i=0; i<t->numUserBtn && t->userButton[i]; i++)
     XtSetSensitive( t->userButton[i], trueOrFalse );
+#endif // OV_USE_X11
 }
 
 void
 moglSetButtonSensitive(int win_number, int btn, int trueOrFalse)
 {
+#ifdef OV_USE_X11
   WINDOW_REC *t;
   if (0<=win_number && win_number < OGLNWindows)
   {
@@ -1936,12 +1981,14 @@
 
   if (btn >=0 && btn<t->numUserBtn && t->userButton[btn])
     XtSetSensitive( t->userButton[btn], trueOrFalse );
+#endif // OV_USE_X11
 }
 
 
 void
 moglBuildUserButtons(const aString buttonCommand[], const aString 
buttonLabel[], int win_number)
 {
+#ifdef OV_USE_X11
   int i;
   WINDOW_REC *t;
   if (0<=win_number && win_number < OGLNWindows)
@@ -2018,11 +2065,13 @@
   }
   t->numUserBtn = i;
 
+#endif // OV_USE_X11
 }
 
 void
 moglBuildUserMenu(const aString menuName[], const aString menuTitle, int 
win_number)
 {
+#ifdef OV_USE_X11
   WINDOW_REC *t;
   if (0<=win_number && win_number < OGLNWindows)
   {
@@ -2071,6 +2120,7 @@
   t->userCascade = XmCreateCascadeButton(t->menubar,SC menuTitle.c_str(), 
args, 1);
   XtManageChild(t->userCascade);
 
+#endif // OV_USE_X11
 }
 
 
@@ -2079,7 +2129,9 @@
 void
 moglSetViewFunction( MOGL_VIEW_FUNCTION viewFunction_ )
 {
+#ifdef OV_USE_X11
   viewFunction=viewFunction_;
+#endif // OV_USE_X11
 }
 
 
@@ -2091,15 +2143,18 @@
                   MOGL_RESIZE_FUNCTION resizeFunc )
 // Define the display function callback -- called to redraw the screen
 {
+#ifdef OV_USE_X11
   graphicsInterfacePointer=giPointer;
   displayFunction=displayFunc;
   resizeFunction=resizeFunc;
+#endif // OV_USE_X11
 }
 
 
 int
 moglMakeCurrent(int win)
 {
+#ifdef OV_USE_X11
   if (0 <= win && win < OGLNWindows)
   {
     if (glXMakeCurrent(dpy, XtWindow(OGLWindowList[win]->plotStuff), 
OGLWindowList[win]->cx))
@@ -2117,8 +2172,10 @@
   else
     return ERROR;
   
+#endif // OV_USE_X11
 }
 
+#ifdef OV_USE_X11
 int
 moglGetInfo( Display *&dpy_, XVisualInfo *&vi, GLXContext &cx )
 {
@@ -2129,31 +2186,39 @@
   
   return 0;
 }
+#endif // OV_USE_X11
 
 
 int
 moglGetNWindows()
 {
+#ifdef OV_USE_X11
   return OGLNWindows;
+#endif // OV_USE_X11
 }
 
 int
 moglGetCurrentWindow()
 {
+#ifdef OV_USE_X11
   return OGLCurrentWindow;
+#endif // OV_USE_X11
 }
 
 
 void
 moglResetContext() // this is used by osRender
 {
+#ifdef OV_USE_X11
 //  glXMakeCurrent(dpy, XtWindow(OGLWindowList[OGLCurrentWindow]->plotStuff), 
OGLWindowList[OGLCurrentWindow]->cx);
+#endif // OV_USE_X11
 }
 
 void
 moglAppendCommandHistory(const aString &answer)
 // This routine is usually called from GL_GraphicsInterface
 {
+#ifdef OV_USE_X11
 
   if( showCommandHistory && answer.length() )
   {
@@ -2170,6 +2235,7 @@
   }
   
   return;
+#endif // OV_USE_X11
 }
 
 
@@ -2181,6 +2247,7 @@
 //    Set the prompt.
 // 
===================================================================================
 {
+#ifdef OV_USE_X11
   static XmTextPosition wpr_position=0;
   
   if( showPrompt && prompt.length() )
@@ -2195,8 +2262,10 @@
     XmTextSetString(command_w, (char*)"");
   }
   
+#endif // OV_USE_X11
 }
 
+#ifdef OV_USE_X11
 static int
 moglSetupPopup(Widget &baseWin, const aString menu[], Widget &popupMenu)
 {
@@ -2330,8 +2399,8 @@
   XtAddEventHandler(baseWin, ButtonPressMask, FALSE, postIt, popupMenu );
 
   return OK;
-  
 }
+#endif // OV_USE_X11
 
 
 void
@@ -2365,6 +2434,7 @@
 //
 // 
===================================================================================
 {
+#ifdef OV_USE_X11
   WINDOW_REC * w;
   int win;
   
@@ -2409,6 +2479,7 @@
     moglSetupPopup( bulletin, menu, popupMenu[OGLNWindows]);
   }
   
+#endif // OV_USE_X11
 }
 
 
@@ -2416,6 +2487,7 @@
 moglGetAnswer( aString &answer, const aString prompt /* = "" */, 
               PickInfo *pick_ /* =NULL */, int blocking /* = 1 */ )
 {
+#ifdef OV_USE_X11
   // kkc conversion to std::string, how does this work for aString??? if 
(prompt && prompt.length()>0) moglSetPrompt(prompt);
   if (prompt.length()>0) moglSetPrompt(prompt);
 
@@ -2486,6 +2558,7 @@
 
   
   return menuItemChosen;
+#endif // OV_USE_X11
 }
 
 //..MOTIF & GL --> separate to Generic & Motif
@@ -2577,6 +2650,7 @@
 void 
 moglGetWindowSize( int & width, int & height, int win /* = 0 */ )
 {
+#ifdef OV_USE_X11
   Dimension width0, height0;
   WINDOW_REC * w;
   if (0 <= win && win < OGLNWindows)
@@ -2593,19 +2667,24 @@
   XtVaGetValues(w->plotStuff, XmNwidth, &width0, XmNheight, &height0, NULL);
   width=width0;
   height=height0;  
+#endif // OV_USE_X11
 }
 
 // MOTIF & GL?
 void 
 moglPostDisplay(int win)
 {
+#ifdef OV_USE_X11
   if (0 <= win && win < OGLNWindows)
   {
     OGLWindowList[win]->postDisplay=TRUE;
   }
   return;
+#endif // OV_USE_X11
 }
 
+#ifdef OV_USE_X11
+
 //================================MOTIF INTERNAL
 
 // draw(widget)
@@ -3534,9 +3613,12 @@
   return;
 }
 
+#endif // OV_USE_X11
+
 bool
 moglRotationKeysPressed(int win_number)
 {
+#ifdef OV_USE_X11
   bool mouseButtonsDown=false;
   
   WINDOW_REC *t;
@@ -3566,8 +3648,10 @@
 //  printf("Rotation keys are %s\n", mouseButtonsDown? "down": "up");
   
   return mouseButtonsDown;
+#endif // OV_USE_X11
 }
 
+#ifdef OV_USE_X11
 //..MOTIF
 void
 drawAreaInput(Widget w, XtPointer clientData, XtPointer callData)
@@ -3988,6 +4072,8 @@
   
 }
 
+#endif // OV_USE_X11
+
 //..MOTIF
 void 
 moglPollEvents()
@@ -4002,6 +4088,7 @@
 // /Return values: none.
 // /Author: AP
 {
+#ifdef OV_USE_X11
   // first set cursor back to normal from a "watch symbol"
   WINDOW_REC *w;
   int win_number, oldCurrentWindow=OGLCurrentWindow;
@@ -4062,8 +4149,10 @@
 // set back the window focus
   moglMakeCurrent(oldCurrentWindow);
   
+#endif // OV_USE_X11
 }
 
+#ifdef OV_USE_X11
 //..MOTIF because viewFunction is changed
 void 
 getRubberBandBoxCorners( real & xMin, real & xMax, real & yMin, real & yMax )
@@ -4515,9 +4604,12 @@
     OGLWindowList[win]->annotateOpen=1;
 }
 
+#endif // OV_USE_X11
+
 void 
 moglPrintRotPnt(real x, real y, real z, int win_number)
 {
+#ifdef OV_USE_X11
   if (!moglInitialized) return; 
   char message[200];
   
@@ -4534,11 +4626,13 @@
     XmTextSetString(OGLWindowList[win_number]->xValue, message);
   }
   
+#endif // OV_USE_X11
 }
 
 void 
 moglPrintLineWidth(real lw, int win_number)
 {
+#ifdef OV_USE_X11
   if (!moglInitialized) return; 
   char message[200];
   
@@ -4555,11 +4649,13 @@
     XmTextSetString(OGLWindowList[win_number]->lineSF, message);
   }
   
+#endif // OV_USE_X11
 }
 
 void 
 moglPrintFractionOfScreen(real fraction, int win_number)
 {
+#ifdef OV_USE_X11
   if (!moglInitialized) return; 
   char message[200];
   
@@ -4576,8 +4672,11 @@
     XmTextSetString(OGLWindowList[win_number]->fractionOfScreen, message);
   }
   
+#endif // OV_USE_X11
 }
 
+#ifdef OV_USE_X11
+
 static void 
 destroyViewCharDialog( Widget w, XtPointer client_data, XtPointer call_data)
 {
@@ -5502,17 +5601,20 @@
   exitEventLoop=TRUE;
 }
 
+#endif // OV_USE_X11
 
 // default constructor
 PickInfo::
 PickInfo()
 {
+#ifdef OV_USE_X11
   pickType = 0; // 1 means Button1, 2 means Button2, and 3 means Button3
   pickWindow = -99;
   pickBox[0] = 0; // xmin
   pickBox[1] = -1;// xmax
   pickBox[2] = 0; // ymin
   pickBox[3] = -1;// ymax
+#endif // OV_USE_X11
 };
 
 
@@ -5532,8 +5634,10 @@
 //\end{PushButtonInclude.tex}
 //------------------------
 { 
+#ifdef OV_USE_X11
   sensitive=trueOrFalse;
   if( pb!=NULL ) XtSetSensitive((Widget)pb, trueOrFalse);
+#endif // OV_USE_X11
 }  
 
 //\begin{>ToggleButtonInclude.tex}{\subsection{setSensitive}} 
@@ -5547,8 +5651,10 @@
 //\end{ToggleButtonInclude.tex}
 //------------------------
 { 
+#ifdef OV_USE_X11
   sensitive=trueOrFalse;
   if( tb!=NULL ) XtSetSensitive((Widget)tb, trueOrFalse);
+#endif // OV_USE_X11
 }  
 
 //\begin{>TextLabelInclude.tex}{\subsection{setSensitive}} 
@@ -5562,9 +5668,11 @@
 //\end{TextLabelInclude.tex}
 //------------------------
 { 
+#ifdef OV_USE_X11
   sensitive=trueOrFalse;
   if( textWidget!=NULL ) XtSetSensitive((Widget)textWidget, trueOrFalse);
   if( labelWidget!=NULL) XtSetSensitive((Widget)labelWidget, trueOrFalse);  
+#endif // OV_USE_X11
 }  
 
 //\begin{>OptionMenuInclude.tex}{\subsection{setSensitive}} 
@@ -5578,6 +5686,7 @@
 //\end{OptionMenuInclude.tex}
 //------------------------
 { 
+#ifdef OV_USE_X11
   sensitive=trueOrFalse;
   if( menupane!=NULL ) XtSetSensitive((Widget)menupane, trueOrFalse);
 // do all the buttons
@@ -5588,6 +5697,7 @@
     pb.setSensitive(trueOrFalse);
   }
 
+#endif // OV_USE_X11
 }  
 
 //\begin{>OptionMenuInclude.tex}{\subsection{setSensitive}} 
@@ -5602,11 +5712,13 @@
 //\end{OptionMenuInclude.tex}
 //------------------------
 { 
+#ifdef OV_USE_X11
   if (menupane!=NULL && btn>=0 && btn<n_options)
   {
     PushButton & pb = optionList[btn];
     pb.setSensitive(trueOrFalse);
   }
+#endif // OV_USE_X11
 }  
 
 //\begin{>PullDownMenuInclude.tex}{\subsection{setSensitive}} 
@@ -5620,8 +5732,10 @@
 //\end{PullDownMenuInclude.tex}
 //------------------------
 { 
+#ifdef OV_USE_X11
   sensitive=trueOrFalse;
   if( menupane!=NULL ) XtSetSensitive((Widget)menupane, trueOrFalse);
+#endif // OV_USE_X11
 }  
 
 //\begin{>>DialogDataInclude.tex}{\subsection{setSensitive}} 
@@ -5635,6 +5749,7 @@
 //\end{DialogDataInclude.tex}
 //------------------------
 {
+#ifdef OV_USE_X11
   if (!moglInitialized) return; 
 
 // while reading a command file, dialogWindow is not always constructed when 
this function is
@@ -5651,6 +5766,7 @@
 // set the cursor to a watch if not sensitive, and a pointer i sensitive
   setCursor(trueFalse? pointerCursor: watchCursor);
   
+#endif // OV_USE_X11
 }
 
 
@@ -5677,6 +5793,7 @@
 //\end{DialogDataInclude.tex}
 // 
======================================================================================================
 {
+#ifdef OV_USE_X11
   if( widgetType==optionMenuWidget )
   {
     if( number>=0 && number<n_optionMenu  && opMenuData!=NULL )
@@ -5736,6 +5853,7 @@
   {
     printf("DialogData::setSensitive:ERROR: unknown 
widgetType=%i\n",(int)widgetType);
   }
+#endif // OV_USE_X11
 }
 
 //\begin{>>DialogDataInclude.tex}{\subsection{setSensitive}}
@@ -5761,6 +5879,7 @@
 //\end{DialogDataInclude.tex}
 // 
======================================================================================================
 {
+#ifdef OV_USE_X11
   int number=-1;
   int i;
   if( widgetType==optionMenuWidget )
@@ -5933,12 +6052,14 @@
   {
     printf("DialogData::setSensitive:ERROR: unknown 
widgetType=%i\n",(int)widgetType);
   }
+#endif // OV_USE_X11
 }
 
 
 void DialogData::
 closeDialog()
 {
+#ifdef OV_USE_X11
   int i;
   
   if (dialogWindow)
@@ -5958,6 +6079,7 @@
   }
   
   dialogWindow = NULL; // remember that the dialog window now is closed
+#endif // OV_USE_X11
 }
 
 void DialogData::
@@ -5968,6 +6090,7 @@
 //  /Author: AP
 //-----------------------------------------------------
 {
+#ifdef OV_USE_X11
   // Create the dialog -- the main text window acts as the DialogShell's 
parent.
 
   XmString t;
@@ -6422,6 +6545,7 @@
 
   if (managed) XtManageChild (dialog);
 
+#endif // OV_USE_X11
 }
 
 //\begin{>>DialogDataInclude.tex}{\subsection{changeOptionMenu}} 
@@ -6442,6 +6566,7 @@
 //\end{DialogDataInclude.tex}
 //-----------------------------------------------------
 {
+#ifdef OV_USE_X11
   if (nOption < 0 || nOption >= n_optionMenu)
   {
     printf("changeOptionMenu: ERROR: nOption=%i out of bounds=[0,%i)\n", 
nOption, n_optionMenu);
@@ -6517,6 +6642,7 @@
   }
 
   return true;
+#endif // OV_USE_X11
 }
 
 //\begin{>>DialogDataInclude.tex}{\subsection{showSibling}} 
@@ -6532,6 +6658,7 @@
 //\end{DialogDataInclude.tex}
 //----------------------------------------------
 {
+#ifdef OV_USE_X11
   Widget d = (Widget) dialogWindow;
   if (d && !XtIsManaged(d))
   {
@@ -6540,6 +6667,7 @@
   }
   else
     return 0;
+#endif // OV_USE_X11
 }
 
 
@@ -6556,6 +6684,7 @@
 //\end{DialogDataInclude.tex}
 //----------------------------------------------
 {
+#ifdef OV_USE_X11
   Widget d = (Widget) dialogWindow;
   if (d && XtIsManaged(d))
   {
@@ -6564,6 +6693,7 @@
   }
   else
     return 0;
+#endif // OV_USE_X11
 }
 
 //\begin{>>DialogDataInclude.tex}{\subsection{setTextLabel}} 
@@ -6580,6 +6710,7 @@
 //\end{DialogDataInclude.tex}
 //-----------------------------------------------------
 {
+#ifdef OV_USE_X11
   if (n >= n_text)
     return 0;
   
@@ -6593,6 +6724,7 @@
     XmTextSetString((Widget)textBoxes[n].textWidget, SC tl.string.c_str());
 
   return 1;
+#endif // OV_USE_X11
 }
 
 //\begin{>>DialogDataInclude.tex}{\subsection{setInfoLabel}} 
@@ -6611,6 +6743,7 @@
 //\end{DialogDataInclude.tex}
 //-----------------------------------------------------
 {
+#ifdef OV_USE_X11
   if (n < 0 || n >= n_infoLabels)
     return false;
   
@@ -6626,6 +6759,7 @@
   }
   
   return true;
+#endif // OV_USE_X11
 }
 
 //\begin{>>DialogDataInclude.tex}{\subsection{setToggleState}} 
@@ -6642,6 +6776,7 @@
 //\end{DialogDataInclude.tex}
 //-----------------------------------------------------
 {
+#ifdef OV_USE_X11
   if (n >= n_toggle)
     return 0;
   
@@ -6654,6 +6789,7 @@
     XmToggleButtonSetState((Widget)tButtons[n].tb, tButtons[n].state, False); 
// set the current state
 
   return 1;
+#endif // OV_USE_X11
 }
 // end of DialogData Class functions
 
@@ -6670,6 +6806,7 @@
 //\end{DialogDataInclude.tex}
 //-----------------------------------------------------
 {
+#ifdef OV_USE_X11
   for( int i=0; i<n_toggle; i++ )
   {
     if( toggleButtonLabel==tButtons[i].buttonLabel )
@@ -6680,6 +6817,7 @@
   }
 
   return 0;
+#endif // OV_USE_X11
 }
 
 
@@ -6687,6 +6825,7 @@
 void DialogData::
 setCursor(cursorTypeEnum c)
 {
+#ifdef OV_USE_X11
   Cursor crsr;
   
   if (dialogWindow && XtIsManaged((Widget) dialogWindow))
@@ -6708,6 +6847,7 @@
     wAttrib.cursor=crsr;
     
XChangeWindowAttributes(dpy,XtWindow((Widget)dialogWindow),CWCursor,&wAttrib );
   }
+#endif // OV_USE_X11
 }
 
 
@@ -6723,11 +6863,13 @@
 //\end{ToggleButtonInclude.tex}
 // 
=================================================================================
 {
+#ifdef OV_USE_X11
   state = trueOrFalse;
   if( tb!=NULL )
     XmToggleButtonSetState((Widget)tb, state, False); // set the current state
 
   return 0;
+#endif // OV_USE_X11
 }
 
 
@@ -6741,12 +6883,15 @@
 //\end{PullDownMenuInclude.tex}
 // 
=================================================================================
 {
+#ifdef OV_USE_X11
   if( type == GI_PUSHBUTTON || n<0 || n>=n_button )
     return 1;
   
   return tbList[n].setState(trueOrFalse);
+#endif // OV_USE_X11
 }
 
+#ifdef OV_USE_X11
 void
 showHardcopyDialog(Widget pb, XtPointer client_data, XtPointer call_data)
 {
@@ -6756,6 +6901,7 @@
     XtManageChild(d);
   }
 }
+#endif // OV_USE_X11
 
 
 //\begin{>>OptionMenuInclude.tex}{\subsection{setCurrentChoice}} 
@@ -6767,6 +6913,7 @@
 //\end{OptionMenuInclude.tex}
 // 
===================================================================================
 {
+#ifdef OV_USE_X11
   if (command >= 0 && command < n_options)
     currentChoice = optionList[command].buttonCommand;
   else
@@ -6794,6 +6941,7 @@
   
 
   return 0;
+#endif // OV_USE_X11
 }
 
 //\begin{>>OptionMenuInclude.tex}{\subsection{setCurrentChoice}} 
@@ -6805,6 +6953,7 @@
 //\end{OptionMenuInclude.tex}
 // 
===================================================================================
 {
+#ifdef OV_USE_X11
   int j;
   for( j=0; j<n_options; j++)
   {
@@ -6818,6 +6967,7 @@
   for( j=0; j<n_options; j++ )
     printf("[%s]\n",(const char*)optionList[j].buttonLabel.c_str());  
   return 1;
+#endif // OV_USE_X11
 }
 
   
@@ -6834,6 +6984,7 @@
 //\end{RadioBoxInclude.tex}
 // 
===================================================================================
 {
+#ifdef OV_USE_X11
   if (command >= 0 && command < n_options)
   {
 // only give the current choice to an active toggle button
@@ -6857,6 +7008,7 @@
   currentIndex = command;
   
   return true;
+#endif // OV_USE_X11
 }
 
 //\begin{>>RadioBoxInclude.tex}{\subsection{setSensitive}} 
@@ -6870,6 +7022,7 @@
 //\end{RadioBoxInclude.tex}
 //------------------------
 { 
+#ifdef OV_USE_X11
   sensitive=trueOrFalse;
   if( radioBox!=NULL ) XtSetSensitive((Widget)radioBox, trueOrFalse);
 // do all the buttons
@@ -6879,6 +7032,7 @@
     ToggleButton & tb = optionList[btn];
     tb.setSensitive(trueOrFalse);
   }
+#endif // OV_USE_X11
 }  
 
 //\begin{>>RadioBoxInclude.tex}{\subsection{setSensitive}} 
@@ -6893,10 +7047,12 @@
 //\end{RadioBoxInclude.tex}
 //------------------------
 { 
+#ifdef OV_USE_X11
   if (btn>=0 && btn<n_options)
   {
     ToggleButton & tb = optionList[btn];
     tb.setSensitive(trueOrFalse);
   }
+#endif // OV_USE_X11
 }  
 

Other related posts: