diff --git a/ng/Togl-1.7/.indent.pro b/ng/Togl-1.7/.indent.pro
deleted file mode 100644
index 365338e4..00000000
--- a/ng/Togl-1.7/.indent.pro
+++ /dev/null
@@ -1,72 +0,0 @@
---blank-before-sizeof
---blank-lines-after-declarations
---blank-lines-after-procedures
---blank-lines-before-block-comments
---braces-after-struct-decl-line
---braces-on-if-line
---break-before-boolean-operator
---case-brace-indentation0
---case-indentation2
---comment-line-length80
---continuation-indentation8
---cuddle-do-while
---cuddle-else
---declaration-indentation8
---dont-line-up-parentheses
---format-all-comments
---format-first-column-comments
---indent-level4
---leave-optional-blank-lines
---line-length80
---no-space-after-function-call-names
---no-space-after-parentheses
---no-tabs
---parameter-indentation8
---preprocessor-indentation2
---procnames-start-lines
---space-after-cast
---space-after-for
---space-after-if
---space-after-while
---space-special-semicolon
---start-left-side-of-comments
---struct-brace-indentation0
---tab-size8
--T AGLContext
--T CALLBACK
--T ClientData
--T Colormap
--T Display
--T GLXContext
--T GLbitfield
--T GLboolean
--T GLenum
--T GLfloat
--T GLint
--T GLuint
--T HDC
--T HGLRC
--T HWND
--T LPARAM
--T PIXELFORMATDESCRIPTOR
--T Tcl_Command
--T Tcl_Interp
--T TkClassCreateProc
--T TkClassGeometryProc
--T TkClassModalProc
--T TkClassProcs
--T TkWinColormap
--T Tk_ConfigSpec
--T Tk_Cursor
--T Tk_Window
--T Togl_Callback
--T Togl_CmdProc
--T UINT
--T WPARAM
--T WinFont
--T Window
--T XColor
--T XEvent
--T XVisualInfo
--T TOGL_EXTERN
--T Togl
diff --git a/ng/Togl-1.7/CMakeLists.txt b/ng/Togl-1.7/CMakeLists.txt
deleted file mode 100644
index 8ca9e0f4..00000000
--- a/ng/Togl-1.7/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-add_definitions("-DPACKAGE_NAME=\"Togl\" -DPACKAGE_TARNAME=\"togl\" -DPACKAGE_VERSION=\"1.7\" -DPACKAGE_STRING=\"Togl\ 1.7\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_IS_LONG=1 -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1")
-
-# include_directories("/usr/include/tcl8.5" "/usr/include/tcl8.5/tk-private/generic" "/usr/include/tcl8.5/tk-private/unix")
-# SET(CMAKE_CXX_FLAGS "-O2 -fomit-frame-pointer -Wall -Wno-implicit-int -fPIC -c")
-include_directories("${TCL_INCLUDE_PATH}/tk-private/generic" "${TCL_INCLUDE_PATH}/tk-private/unix")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fomit-frame-pointer -Wall -Wno-implicit-int")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -fomit-frame-pointer -Wall -Wno-implicit-int")
-add_library(togl togl.c)
-target_link_libraries(togl ${OPENGL_LIBRARIES})
-set_target_properties(togl PROPERTIES POSITION_INDEPENDENT_CODE ON )
-#
-# gcc -DPACKAGE_NAME=\"Togl\" -DPACKAGE_TARNAME=\"togl\" -DPACKAGE_VERSION=\"1.7\" -DPACKAGE_STRING=\"Togl\ 1.7\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_IS_LONG=1 -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1
-# -I"/usr/include/tcl8.6" -I"/usr/include/tcl8.6/tk-private/generic" -I"/usr/include/tcl8.6/tk-private/unix"
-# -O2 -fomit-frame-pointer -Wall -Wno-implicit-int -fPIC -c `echo togl.c` -o togl.o
-# rm -f libTogl1.7.so
-# gcc -pipe -shared -o libTogl1.7.so togl.o -lX11 -lGL -lXmu -L/usr/lib/x86_64-linux-gnu -ltclstub8.6 -L/usr/lib/x86_64-linux-gnu -ltkstub8.6
-# : libTogl1.7.so
-
-
diff --git a/ng/Togl-1.7/LICENSE b/ng/Togl-1.7/LICENSE
deleted file mode 100644
index e9badb74..00000000
--- a/ng/Togl-1.7/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-This software is copyrighted by Brian Paul (brian@mesa3d.org)
-and Benjamin Bederson (bederson@cs.umd.edu). The following
-terms apply to all files associated with the software unless explicitly
-disclaimed in individual files.
-
-The authors hereby grant permission to use, copy, modify, distribute,
-and license this software and its documentation for any purpose, provided
-that existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written agreement,
-license, or royalty fee is required for any of the authorized uses.
-Modifications to this software may be copyrighted by their authors
-and need not follow the licensing terms described here, provided that
-the new terms are clearly indicated on the first page of each file where
-they apply.
-
-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-MODIFICATIONS.
diff --git a/ng/Togl-1.7/README.stubs b/ng/Togl-1.7/README.stubs
deleted file mode 100644
index 4c1b8186..00000000
--- a/ng/Togl-1.7/README.stubs
+++ /dev/null
@@ -1,21 +0,0 @@
-This version of Togl is entirely free from
-dependencies on Tcl/Tk's internal functions. It uses the public stubs
-interface, witch means that the same binary works with any stubs-aware
-wish (i.e. version >= 8.1)
-
-It has been tested on Windows NT/2000 and Linux for several Tcl/Tk versions up
-to 8.4a3. I haven't been able to test the Mac port, it probably needs mending
-but I can't see why it shouldn't work in principle.
-
-Implementation wise, what differs from Togl 1.5 is that Togl_MakeWindowExist()
-is replaced by Togl_CreateWindow(), a function that gets registered in Tk as a callback for window creation. In Tk/Tk 8.4a3, there is a new public API call
-Tk_SetClassProcs() to register this callback, but for earlier versions of Tk
-one needs to do this using some pointer magic.
-There is a run-time check to determine which method to use, hence the
-same binary runs on all versions of Wish from 8.1 and up. For this to
-work you need to compile against the headers from Tcl/Tk 8.4a3 or later, or
-the binary will only work for Tcl/Tk 8.1-8.4a2.
-The tk8.4a3 public headers (tk8.4a3.h + tkDecls.h) are included for
-convenience, and they are used if the flag -DUSE_LOCAL_TK_H is specified.
-
-Jonas Beskow, December 2001
\ No newline at end of file
diff --git a/ng/Togl-1.7/TODO b/ng/Togl-1.7/TODO
deleted file mode 100644
index c525ddac..00000000
--- a/ng/Togl-1.7/TODO
+++ /dev/null
@@ -1,20 +0,0 @@
-In no particular order:
------------------------
-
-stubify C API.
-
-replace EPS support with TK photo image support
-
-Add command arguments for create, destroy, etc. so there would be a
--createcommand option to the togl command (etc.) (and phase out
-Togl_*Func from the C API)
-
-multisampling support (can be worked-around by passing in a pixelformat)
-
-add vertical sync control
-
-update documentation
- - update build instructions
- - update stereo documentation
- - separate Tcl API from C API
- - say togl hides window system dependent (glX/wgl/agl) calls
diff --git a/ng/Togl-1.7/Togl.html b/ng/Togl-1.7/Togl.html
deleted file mode 100644
index 5df48136..00000000
--- a/ng/Togl-1.7/Togl.html
+++ /dev/null
@@ -1,1081 +0,0 @@
-
-
-
-
-
-
- Togl
-
-
-
-
-
- Togl — a Tk OpenGL widget
- Copyright (C) 1996-2002 Brian Paul and Ben Bederson
-
-
-
-
- Contents
-
-
-
-
-
-
-
- Togl is a Tk widget for OpenGL rendering.
- Togl was originally based on OGLTK, written by Benjamin Bederson at
- the University of New Mexico.
- Togl adds the new features:
-
-
- color-index mode support including color allocation functions
- support for requesting stencil, accumulation, alpha buffers, etc
- multiple OpenGL drawing widgets
- OpenGL extension testing from Tcl
- simple, portable font support
- overlay plane support
-
-
-
- Togl allows one to create and manage a special Tk/OpenGL widget
- with Tcl and render into it with a C program. That is,
- a typical Togl program will have Tcl code for managing the user interface
- and a C program for computations and OpenGL rendering.
-
-
- Togl is copyrighted by
- Brian Paul
- (brian_e_paul@yahoo.com) and
- Benjamin Bederson
- (bederson@cs.umd.edu) .
- See the LICENSE file for details.
-
-
- The
- Togl project and
- home page are
- hosted by SourceForge .
-
-
-
-
-
-
- You should have
- Tcl and Tk
- installed on your computer. Togl works with Tcl/Tk
- version 8.0 and up. The Mac OS X version requires version 8.4.
-
-
- You must also have
- OpenGL or
- Mesa
- (a free alternative to OpenGL) installed on your computer.
-
-
- One should be familiar with Tcl, Tk, OpenGL, and C programming to use Togl
- effectively.
-
-
-
-
-
-
- The current version of Togl is 1.7.
- Togl can be downloaded from
-
- SourceForge .
-
-
-
-
-
-
- See the
- Togl project at SourceForge for mailing list information.
-
-
-
-
-
-
- There are basically two ways of using Togl with your application:
-
-
- Link or "compile in" Togl with your executable or shared library. In this
- case you must call Togl_Init() from your C code to initialize Togl. This
- is the way the included Togl examples are built.
-
-
- Install the Togl shared library and pkgIndex.tcl file
- (using make install ) and then load it into wish using
- package require Togl .
- Then, before creating the Togl widget, call functions in your application
- code (also a compiled into a shared library and loaded into wish )
- to setup the Togl widget for the OpenGL rendering.
- Create the blank Togl widget,
- and then you're managing redraws and buffer swapping from the Tcl level.
-
- Since Togl is compiled into a shared library using the Tcl/Tk stubs-interface,
- the same binary can be used with any version of Tck/Tk from 8.06 and up.
- See README.stubs
for more info.
-
- Unix/X11 usage
-
-
- Unix/X systems only need the togl.c
, togl.h
- and the public Tcl/Tk include files.
-
-
Windows 95/NT/2000/XP usage
-
-
- Windows platforms need tkWinInt.h
- and other internal Tk header files. So you need a Tcl/Tk
- source distribution in addition to the Togl distribution
- (or copy over the various include files).
-
- Here's the minimal way to build Togl with Tcl/Tk
- using the gcc that is distributed
- as part of the cygwin tools
- (Microsoft 's compilers work too):
-
-VER=8.4.12
-SRCDIR=`pwd`
-
-cd $SRCDIR/tcl$VER/win
-env 'CC=gcc -mno-cygwin' ./configure --enable-threads
-make libtclstub84.a
-
-cd $SRCDIR/tk$VER/win
-env 'CC=gcc -mno-cygwin' ./configure --enable-threads
-make libtkstub84.a
-
-cd $SRCDIR/Togl
-env 'CC=gcc -mno-cygwin' ./configure --with-tcl=../tcl$VER/win --with-tk=../tk$VER/win
-
-make
-
- The resulting Togl17.dll
and pkgIndex.tcl
- should be installed into your Tcl distribution just like any other package.
-
- Mac OS X usage
-
-
- These special instructions are for building the Aqua version of Togl.
- Mac OS X needs tkMacOSXInt.h
- and other internal Tk header files. Unfortunately, the Tcl and Tk
- frameworks that Apple distributes are missing the internal headers.
- So you need a Tcl/Tk source distribution in addition to the Togl
- distribution (or copy over the various include files).
- You would probably want a newer version of Tcl and Tk anyway
- because each minor revision of 8.4 has many Aqua bug fixes.
-
- Here's one way to build Tcl, Tk, and Togl on Mac OS X (assuming they
- are all in the same directory) to install in your home directory:
-
-VER=8.4.12
-
-mkdir -p ~/bin
-make -C tcl$VER/macosx install PREFIX="${HOME}" INSTALL_PATH="${HOME}/Library/Frameworks"
-make -C tk$VER/macosx install PREFIX="${HOME}" INSTALL_PATH="${HOME}/Library/Frameworks"
-
-(cd Togl; ./configure --prefix="${HOME}")
-make -C Togl install
-
-
-
-
-
-
-
- These are the Togl functions one may call from a C program.
-
-
-
- #include "togl.h"
-
-
-
-
- For portability, you should include the togl.h header
- before any other OpenGL header so that various
- Windows 95/NT/2000/XP stuff falls into place.
-
-
-
Setup and Initialization Functions
-
-
- int Togl_Init(Tcl_Interp *interp)
-
- Initializes the Togl module. This is typically called from the
- Tk_Main() function
- or via Tcl's package require
command.
-
-
-
- void Togl_CreateFunc(Togl_Callback *proc)
-
- void Togl_DisplayFunc(Togl_Callback *proc)
-
- void Togl_ReshapeFunc(Togl_Callback *proc)
-
- void Togl_DestroyFunc(Togl_Callback *proc)
-
-
- Register C functions to be called by Tcl/Tk when a widget is realized,
- must be redrawn, is resized, or is destroyed respectively.
-
- Each C callback must be of the form:
-
- void callback(Togl *togl)
- {
- ...your code...
- }
-
-
-
-
- void Togl_TimerFunc(Togl_Callback *proc)
-
- Register a C timer callback function which will be called every
- n milliseconds. The interval n is specified
- by the -time
option to the Togl Tcl command.
-
- The C callback must be of the form:
-
- void my_timer_callback(Togl *togl)
- {
- ...your code...
- }
-
-
-
-
- void Togl_ResetDefaultCallbacks(void)
-
- Reset all default callback pointers to NULL.
-
-
-
- void Togl_CreateCommand(char *cmd_name, Togl_CmdProc *cmd_proc)
-
- Used to create a new Togl sub-command. The C function which implements
- the command must be of the form:
-
-
- int callback(Togl *togl, int argc, char *argv[])
- {
- ...your code...
- return TCL_OK or TCL_ERROR;
- }
-
-
-
- Drawing-related Commands
-
-
- void Togl_PostRedisplay(Togl *togl)
-
- Signals that the widget should be redrawn. When Tk is next idle the
- user's C render callback will be invoked. This is typically called
- from within a Togl sub-command which was registered with
- Togl_CreateCommand().
-
-
-
- void Togl_SwapBuffers(const Togl *togl)
-
- Swaps the front and back color buffers for a double-buffered widget.
- glFlush() is executed if the window is single-buffered. This is
- typically called in the rendering function which was registered with
- Togl_DisplayFunc().
-
-
-
- void Togl_MakeCurrent(const Togl *togl)
-
- Sets the current rendering context to the given widget. This is done
- automatically before the Togl callback functions are called. So the
- call is only needed if you have multiple widgets with separate OpenGL
- contexts. If the argument is NULL, then the rendering context is cleared
- and subsequent OpenGL commands will fail.
-
-
- Query Functions
-
-
- char *Togl_Ident(const Togl *togl)
-
- Returns a pointer to the identification string associated with a Togl
- widget or NULL if there's no identifier string.
-
-
-
- int Togl_Width(const Togl *togl)
-
- Returns the width of the given Togl widget. Typically called in the
- function registered with Togl_ReshapeFunc().
-
-
-
- int Togl_Height(const Togl *togl)
-
- Returns the height of the given Togl widget. Typically called in the
- function registered with Togl_ReshapeFunc().
-
-
-
- Tcl_Interp *Togl_Interp(const Togl *togl)
-
- Returns the Tcl interpreter associated with the given Togl widget.
-
-
-
- Tk_Window Togl_TkWin(const Togl *togl)
-
- Returns the Tk window associated with the given Togl widget.
-
-
- Color Index Mode Functions
-
-
- These functions are only used for color index mode.
-
-
- unsigned long Togl_AllocColor(Togl *togl, float red, float green, float blue)
-
- Allocate a color from a read-only colormap. Given a color specified
- by red, green, and blue return a colormap index (aka pixel value)
- whose entry most closely matches the red, green, blue color. Red,
- green, and blue are values in [0,1]. This function is only used in
- color index mode when the -privatecmap
option is false.
-
-
-
- void Togl_FreeColor(Togl *togl, unsigned long index)
-
- Free a color in a read-only colormap. Index is a value which was
- returned by the Togl_AllocColor() function. This function is only
- used in color index mode when the -privatecmap
option
- is false.
-
-
-
- void Togl_SetColor(Togl *togl,
- int index, float red, float green, float blue)
-
- Load the colormap entry specified by index with the given red, green
- and blue values. Red, green, and blue are values in [0,1]. This
- function is only used in color index mode when the
- -privatecmap
option is true.
-
-
-
- Font Functions
-
-
- GLuint Togl_LoadBitmapFont(Togl *togl,
- const char *fontname)
-
- Load the named font as a set of glBitmap display lists.
- fontname may be one of
-
-
- TOGL_BITMAP_8_BY_13
- TOGL_BITMAP_9_BY_15
- TOGL_BITMAP_TIMES_ROMAN_10
- TOGL_BITMAP_TIMES_ROMAN_24
- TOGL_BITMAP_HELVETICA_10
- TOGL_BITMAP_HELVETICA_12
- TOGL_BITMAP_HELVETICA_18
-
- or any X11 font name
-
- Zero is returned if this function fails.
-
- After Togl_LoadBitmapFont() has been called, returning fontbase ,
- you can render a string s with:
-
-
- glListBase(fontbase);
-
- glCallLists(strlen(s), GL_BYTE, s);
-
-
- To maximize the portability of your application it is best to use one
- of the predefined TOGL_BITMAP_* fonts.
-
-
-
- void Togl_UnloadBitmapFont(Togl *togl, GLuint fontbase)
-
-
- Destroys the bitmap display lists created by by Togl_LoadBitmapFont().
-
-
- Client Data Functions
-
-
- void Togl_SetClientData(Togl *togl, ClientData clientData)
-
- clientData is a pointer to an arbitrary user data structure.
- Each Togl struct has such a pointer.
- This function sets the Togl widget's client data pointer.
-
-
-
- ClientData Togl_GetClientData(const Togl *togl)
-
- clientData is a pointer to an arbitrary user data structure.
- Each Togl struct has such a pointer.
- This function returns the Togl widget's client data pointer.
-
-
-
- void Togl_ClientData(ClientData clientData)
-
- clientData is a pointer to an arbitrary user data structure.
- Set default client data pointer for subsequent new Togl widgets.
- Default value is NULL.
-
-
-
- Overlay Functions
-
-
- These functions are modelled after GLUT's overlay sub-API.
-
-
- void Togl_UseLayer(Togl *togl, int layer)
-
- Select the layer into which subsequent OpenGL rendering will be
- directed. layer may be either TOGL_OVERLAY or
- TOGL_NORMAL .
-
-
-
- void Togl_ShowOverlay(Togl *togl)
-
- Display the overlay planes, if any.
-
-
-
- void Togl_HideOverlay(Togl *togl)
-
- Hide the overlay planes, if any.
-
-
-
- void Togl_PostOverlayRedisplay(Togl *togl)
-
- Signal that the overlay planes should be redraw.
- When Tk is next idle the user's C overlay display callback will be invoked.
- This is typically called from within a Togl sub-command which was
- registered with Togl_CreateCommand().
-
-
-
- void Togl_OverlayDisplayFunc(Togl_Callback *proc)
-
- Registers the C callback function which should be called to redraw the
- overlay planes. This is the function which will be called in
- response to Togl_PostOverlayRedisplay().
- The callback must be of the form:
-
-
- void RedrawOverlay(Togl *togl)
- {
- ...your code...
- }
-
-
-
-
- int Togl_ExistsOverlay(Togl *togl)
-
- Returns 1 if overlay planes exist, 0 otherwise.
-
-
-
- int Togl_GetOverlayTransparentValue(const Togl *togl)
-
- Returns the color index of the overlay's transparent pixel value.
-
-
-
- int Togl_IsMappedOverlay(const Togl *togl)
-
- Returns 1 if the overlay planes are currently displayed, 0 otherwise.
-
-
-
- unsigned long Togl_AllocColorOverlay(const Togl *togl,
- float red, float green, float blue)
-
- Allocate a color in the overlay planes. Red, green, and blue are
- values in [0,1]. Return the color index or -1 if the allocation
- fails.
-
-
-
- void Togl_FreeColorOverlay(const Togl *togl, unsigned long index)
-
- Free a color which was allocated with Togl_AllocColorOverlay().
-
-
-
- X11-only Functions
-
-
- These functions are only implemented on systems using the X Window System.
- We recommend that you avoid using these functions in your application since
- they are not portable to other operating/window systems
- (use Togl_TkWin()
and normal Tk functions instead).
-
-
-
- Display *Togl_Display(const Togl *togl)
-
- Returns the X Display of a Togl widget.
-
-
-
- Screen *Togl_Screen(const Togl *togl)
-
- Returns the X Screen of a Togl widget.
-
-
-
- int Togl_ScreenNumber(const Togl *togl)
-
- Returns the X screen number of a Togl widget.
-
-
-
- Colormap Togl_Colormap(const Togl *togl)
-
- Returns the X Colormap used by a Togl widget.
-
-
-
- Postscript Output
-
-
-
- int Togl_DumpToEpsFile(const Togl *togl,
- const char *filename, int rgbFlag, void (*user_redraw)())
-
- Generate an encapsulated Postscript file of the image in a Togl widget.
- filename is the name of the file to generate.
- If rgbFlag is non-zero then an RGB image file is written,
- else a grayscale image file is written.
- user_redraw is a pointer to the function which will render the
- desired image. This will typically be the same as the function passed
- to Togl_DisplayFunc().
-
-
-
-
-
-
-
- These are the Togl commands one may call from a Tcl program.
-
-
- togl pathName [options]
-
- Creates a new togl widget with name pathName and
- an optional list of configuration options. Options include:
-
-
-
-
-
-
-
-
- Option Default Comments
-
-
- -width
400
- Width of widget in pixels.
-
-
- -height
400
- Height of widget in pixels.
-
-
-
-
- -ident
""
- A user identification string. This is used match widgets
- for the -sharecontext
- and the -sharelist
options (see below).
- This is also useful in your callback functions
- to determine which Togl widget is the caller.
-
-
-
-
-
- -rgba
true
- If true, use RGB(A) mode, otherwise use Color Index mode.
-
-
- -redsize
1
- Minimum number of bits in red component.
-
-
- -greensize
1
- Minimum number of bits in green component.
-
-
- -bluesize
1
- Minimum number of bits in blue component.
-
-
- -alpha
1
- If true and -rgba
is true, request an alpha channel.
-
-
- -alphasize
1
- Minimum number of bits in alpha component.
-
-
-
-
- -double
false
- If true, request a double-buffered window, otherwise
- request a single-buffered window.
-
-
-
-
- -depth
false
- If true, request a depth buffer.
-
-
- -depthsize
1
- Minimum number of bits in depth buffer.
-
-
-
-
- -accum
false
- If true, request an accumulation buffer.
-
-
- -accumredsize
1
- Minimum number of bits in accumulation buffer red component.
-
-
- -accumgreensize
1
- Minimum number of bits in accumulation buffer green component.
-
-
- -accumbluesize
1
- Minimum number of bits in accumulation buffer blue component.
-
-
- -accumalphasize
1
- Minimum number of bits in accumulation buffer alpha component.
-
-
-
-
- -stencil
false
- If true, request a stencil buffer.
-
-
- -stencilsize
1
- Minimum number of bits in stencil component.
-
-
-
-
- -auxbuffers
0
- Desired number of auxiliary buffers.
-
-
-
-
- -privatecmap
false
- Only applicable in color index mode.
- If false, use a shared read-only colormap.
- If true, use a private read/write colormap.
-
-
-
-
-
- -overlay
false
- If true, request overlay planes.
-
-
-
-
- -stereo
false
- If true, request a stereo-capable window.
-
-
- -oldstereo
false
- On SGI workstations only: if true, request divided-screen stereo.
-
-
-
-
-
- -time
1
- Specifies the interval, in milliseconds, for
- calling the C timer callback function which
- was registered with Togl_TimerFunc.
-
-
-
-
- -sharelist
""
- Name of an existing Togl widget with which to
- share display lists.
-
-
-
- -sharecontext
""
- Name of an existing Togl widget with which to
- share the OpenGL context. NOTE: most other
- attributes such as double buffering, RGBA vs CI,
- ancillary buffer specs, etc are then ignored.
-
-
-
-
-
- -indirect
false
- If present, request an indirect rendering context.
- A direct rendering context is normally requested.
- Only significant on Unix/X11.
-
-
-
-
-
- -cursor
""
- Set the cursor in the widget window.
-
-
-
-
- -pixelformat
0
- Set the pixel format to the (platform-dependent) given value.
-
-
-
-
-
-
-
- pathName configure
-
- Returns all configuration records for the named togl widget.
-
-
-
- pathName configure -option
-
- Returns configuration information for the specified option
- which may be one of:
-
- -width
-
- Returns the width configuration of the widget in the form:
-
- -width width Width W w
-
- where W is the default width in pixels
- and w is the current width in pixels
-
-
- -height
-
- Returns the height configuration of the widget in the form:
-
- -height height Height H h
-
- where H is the default height in pixels
- and h is the current height in pixels
-
-
- -extensions
-
- Returns a list of OpenGL extensions available. For example:
- GL_EXT_polygon_offset GL_EXT_vertex_array
-
-
-
-
- pathName configure -option value
-
- Reconfigure a Togl widget. option may be any one of the
- options listed in the togl
command above.
-
-
-
- pathName render
-
- Causes the render callback function to be called for pathName .
-
-
-
- pathName swapbuffers
-
- Causes front/back buffers to be swapped if in double buffer mode.
- And flushes the OpenGL command buffer if in single buffer mode.
- (So this is appropriate to call after every frame is drawn.)
-
-
-
- pathName makecurrent
-
- Make the widget specified by pathName and its OpenGL context
- the current ones.
-
-
-
-
-
-
-
- There are six demo programs:
-
-
-
-
-
-
-
-
- double.tcl
- — compares single vs double buffering with two Togl widgets
-
-
- texture.tcl
- — lets you play with texture mapping options
-
-
- index.tcl
- — demo of using color index mode
-
-
- overlay.tcl
- — example of using overlay planes (requires overlay hardware)
-
-
- stereo.tcl
- — stereo example
-
-
- gears.tcl
- — spinning gears demo
-
-
-
-
-
- To compile the demos, edit the Makefile to suit your system, then
- type make demos
.
- The demos are compiled into shared libraries,
- that can are loaded into the Tcl interpreter as Tcl/Tk-extensions.
- Demos are started by running the corresponding Tcl script.
- To run a demo just type ./double.tcl
or ./texture.tcl
etc.
-
-
-
-
-
-
- Quad-buffered stereo-in-a-window is supported. Quad-buffer stereo
- is only available on workstation-class graphics cards
- (3Dlabs Wildcat series,
- ATI FireGL series,
- NVidia Quadro series,
- and SGI workstations).
- Legacy support for divided-screen stereo on SGI workstations is
- available via the -oldstereo
option.
- Developers for SGI workstations might also like the
-
- autostereo package to automatically switch the display
- in and out of stereo (other systems already do it automatically).
-
- Full-screen stereo that gaming graphics cards support (ATI Radeon,
- NVidia GeForce) is not supported.
-
-
-
-
-
- If you have something to add to this section please let us know.
-
-
Bad Match X errors on Sun systems
-
- There's a bug in Sun's XmuLookupStandardColormap X library function.
- If you compile togl.c with the SOLARIS_BUG symbol defined (-DSOLARIS_BUG)
- this function call will be omitted.
-
-
-
-
-
-
- There is a bug database on the
- Togl Project Page .
- You may also discuss bugs on the mailing list.
-
- When reporting bugs please provide as much information as possible.
- Also, it's very helpful to us if you can provide an example program
- which demonstrates the problem.
-
-
-
-
-
- Version 1.0 — March, 1996
-
-
- Version 1.1 (never officially released)
-
- Added Togl_LoadBitmapFont function
- Fixed a few bugs
-
-
- Version 1.2 — November, 1996
-
- added swapbuffers and makecurrent Tcl commands
- More bug fixes
- Upgraded to support Tcl 7.6 and Tk 4.2
- Added stereo and overlay plane support
- Added Togl_Get/SetClientData() functions
- Added Togl_DestroyFunc()
-
-
- Version 1.3 — May 2, 1997
-
- fixed a bug in Togl_Configure()
- fixed a compilation problem in using Tcl_PkgProvide() with Tcl < 7.4
- new overlay functions: Togl_ExistsOverlay, Togl_GetOverlayTransparentValue,
- Togl_IsMappedOverlay, Togl_AllocColorOverlay, Togl_FreeColorOverlay
- added X11 functions: Togl_Display, Togl_Screen, Togl_ScreenNumber,
- Togl_Colormap
- added Togl_DumpToEpsFile function
- fixed a C++ compilation problem
- more robust overlay code
- added timers (Togl_TimerFunc) from Peter Dern and Elmar Gerwalin
-
-
- Version 1.4 — September 17, 1997
-
- Ported to Windows NT (Robert Casto)
- Updated for Tcl/Tk 8.0
- Added many config flags (-redsize, -depthsize, etc) (Matthias Ott)
- Added Togl_Set*Func() functions to reassign callback functions (Matthias Ott)
- Added Togl_ResetDefaultCallbacks() and Togl_ClientData() functions (Greg Couch)
-
-
- Version 1.5 — September 18, 1998
-
- Fixed a few Unix and Windows compilation bugs
- Added Ben Evan's SGI stereo functions
- Multiple expose events now reduced to one redraw
- Destroying Togl widgets caused problems, patched by Adrian J. Chung
- Added Togl_TkWin() function
- Updated for Tcl/Tk 8.0p2
- Added gears demo from Philip Quaife
- Added -sharelist
and -sharecontext
config flags
- Fixed a few overlay update bugs
- Added -indirect
config flag
-
-
- Version 1.6 — May 7, 2003
-
- Added Togl_SetTimerFunc function
- Updated for Tcl/Tk 8.0.5 and 8.1
- Context sharing added for Windows
- Macintosh support (by Paul Thiessen)
- Tcl/Tk stubs support — see README.tcl (by Jonas Beskow)
-
-
- Version 1.7 — Jan 2006
-
- Added Mac OS X support
- Enabled asking for quad-buffered stereo pixel formats on all platforms
- (use -oldstereo on SGIs for splitscreen stereo — C API changed too)
- Configuring the cursor is no longer slow
- Added -pixelformat
config flag
- Added setgrid support (unfortunately many window managers can't cope with 1x1 pixel grid)
- Only free context when last reference is gone
- Switched to TEA-based configure (instead of editing make files)
-
-
- Version 2.0 — ??? 2006
-
-
-
- Future plans
-
- add callback command options for create/display/reshape/destroy
- add vertical sync control
- multisampling support (can be worked-around by passing in a pixelformat)
- replace EPS support with TK photo image support
- simplify C API by requiring callback command options
- stubify C API
- Use Tcl object interface for callbacks
- allow (require?) private colormap to given with TK photo image
-
-
-
-
-
-
-
- Several people have contributed new features to Togl. Among them are:
-
-
- Ramon Ramsan — overlay plane support
- Miguel A. De Riera Pasenau — more overlay functions, X11 functions
- and EPS output
- Peter Dern and Elmar Gerwalin — Togl_TimerFunc and related code
- Robert Casto — Windows NT port
- Geza Groma — Windows 95/NT patches
- Ben Evans — SGI stereo support
- Paul Thiessen — Macintosh support
- Jonas Beskow — Tcl/Tk stubs support
- Paul Kienzle — TEA debugging and patches
- Greg Couch — version 1.7
-
-
- Many others have contributed bug fixes. Thanks for your contributions!
-
-
-
- Last edited on 25 October 2005 by Greg Couch.
-
-
-
diff --git a/ng/Togl-1.7/aclocal.m4 b/ng/Togl-1.7/aclocal.m4
deleted file mode 100644
index 0b057391..00000000
--- a/ng/Togl-1.7/aclocal.m4
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Include the TEA standard macro set
-#
-
-builtin(include,tclconfig/tcl.m4)
-
-#
-# Add here whatever m4 macros you want to define for your package
-#
diff --git a/ng/Togl-1.7/ben.rgb b/ng/Togl-1.7/ben.rgb
deleted file mode 100644
index 4eb067a2..00000000
Binary files a/ng/Togl-1.7/ben.rgb and /dev/null differ
diff --git a/ng/Togl-1.7/configure.in b/ng/Togl-1.7/configure.in
deleted file mode 100644
index 5a89c64a..00000000
--- a/ng/Togl-1.7/configure.in
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/bin/bash -norc
-dnl This file is an input file used by the GNU "autoconf" program to
-dnl generate the file "configure", which is run during Tcl installation
-dnl to configure the system for the local environment.
-#
-# RCS: @(#) $Id: configure.in,v 1.6 2006/01/06 00:09:00 gregcouch Exp $
-
-#-----------------------------------------------------------------------
-# Sample configure.in for Tcl Extensions. The only places you should
-# need to modify this file are marked by the string __CHANGE__
-#-----------------------------------------------------------------------
-
-#-----------------------------------------------------------------------
-# __CHANGE__
-# Set your package name and version numbers here.
-#
-# This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION
-# set as provided. These will also be added as -D defs in your Makefile
-# so you can encode the package version directly into the source files.
-#-----------------------------------------------------------------------
-
-AC_INIT([Togl], [1.7])
-
-#--------------------------------------------------------------------
-# Call TEA_INIT as the first TEA_ macro to set up initial vars.
-# This will define a ${TEA_PLATFORM} variable == "unix" or "windows"
-# as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE.
-#--------------------------------------------------------------------
-
-TEA_INIT([3.4])
-
-AC_CONFIG_AUX_DIR(tclconfig)
-
-#--------------------------------------------------------------------
-# Load the tclConfig.sh file
-#--------------------------------------------------------------------
-
-TEA_PATH_TCLCONFIG
-TEA_LOAD_TCLCONFIG
-
-#--------------------------------------------------------------------
-# Load the tkConfig.sh file if necessary (Tk extension)
-#--------------------------------------------------------------------
-
-TEA_PATH_TKCONFIG
-TEA_LOAD_TKCONFIG
-
-#-----------------------------------------------------------------------
-# Handle the --prefix=... option by defaulting to what Tcl gave.
-# Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER.
-#-----------------------------------------------------------------------
-
-TEA_PREFIX
-
-#-----------------------------------------------------------------------
-# Standard compiler checks.
-# This sets up CC by using the CC env var, or looks for gcc otherwise.
-# This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create
-# the basic setup necessary to compile executables.
-#-----------------------------------------------------------------------
-
-TEA_SETUP_COMPILER
-
-#-----------------------------------------------------------------------
-# __CHANGE__
-# Specify the C source files to compile in TEA_ADD_SOURCES,
-# public headers that need to be installed in TEA_ADD_HEADERS,
-# stub library C source files to compile in TEA_ADD_STUB_SOURCES,
-# and runtime Tcl library files in TEA_ADD_TCL_SOURCES.
-# This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS
-# and PKG_TCL_SOURCES.
-#-----------------------------------------------------------------------
-
-TEA_ADD_SOURCES([togl.c])
-# togl_ws.h is added in Makefile.in because it is generated
-TEA_ADD_HEADERS([togl.h])
-TEA_ADD_INCLUDES([])
-TEA_ADD_LIBS([])
-TEA_ADD_CFLAGS([])
-TEA_ADD_STUB_SOURCES([])
-TEA_ADD_TCL_SOURCES([])
-
-#--------------------------------------------------------------------
-# __CHANGE__
-# A few miscellaneous platform-specific items:
-#
-# Define a special symbol for Windows (BUILD_sample in this case) so
-# that we create the export library with the dll.
-#
-# Windows creates a few extra files that need to be cleaned up.
-# You can add more files to clean if your extension creates any extra
-# files.
-#
-# TEA_ADD_* any platform specific compiler/build info here.
-#--------------------------------------------------------------------
-
-if test "${TEA_PLATFORM}" = "windows" ; then
- AC_DEFINE(BUILD_togl, 1, [Build windows export dll])
- CLEANFILES="pkgIndex.tcl togl_ws.h *.lib *.dll *.exp *.ilk *.pdb vc*.pch"
- #TEA_ADD_SOURCES([win/winFile.c])
- #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"])
-else
- CLEANFILES="pkgIndex.tcl togl_ws.h so_locations"
- #TEA_ADD_SOURCES([unix/unixFile.c])
- #TEA_ADD_LIBS([-lsuperfly])
-fi
-AC_SUBST(CLEANFILES)
-
-#--------------------------------------------------------------------
-# __CHANGE__
-# Choose which headers you need. Extension authors should try very
-# hard to only rely on the Tcl public header files. Internal headers
-# contain private data structures and are subject to change without
-# notice.
-# This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG
-#--------------------------------------------------------------------
-
-TEA_PUBLIC_TCL_HEADERS
-#TEA_PRIVATE_TCL_HEADERS
-
-#TEA_PUBLIC_TK_HEADERS
-TEA_PRIVATE_TK_HEADERS
-TEA_PATH_X
-
-#--------------------------------------------------------------------
-# __CHANGE__
-# Choose OpenGL platform
-#--------------------------------------------------------------------
-
-case "${TEA_WINDOWINGSYSTEM}" in
- aqua)
- AC_SUBST(TOGL_WINDOWINGSYSTEM,TOGL_AGL)
- TEA_ADD_LIBS([-framework AGL -framework OpenGL -framework ApplicationServices])
- # libGLU is implicit in OpenGL framework
- LIBGLU=
- ;;
- x11)
- AC_SUBST(TOGL_WINDOWINGSYSTEM,TOGL_X11)
- TEA_ADD_LIBS([-lGL -lXmu])
- LIBGLU=-lGLU
- ;;
- win32)
- AC_SUBST(TOGL_WINDOWINGSYSTEM,TOGL_WGL)
- TEA_ADD_LIBS([opengl32.lib user32.lib gdi32.lib])
- if test "$GCC" = "yes" ; then
- LIBGLU=-lglu32
- else
- LIBGLU=glu32.lib
- fi
- ;;
- *)
- AC_MSG_ERROR([Unsupported windowing system: ${TEA_WINDOWINGSYSTEM}])
- ;;
-esac
-AC_SUBST(LIBGLU)
-
-#--------------------------------------------------------------------
-# Check whether --enable-threads or --disable-threads was given.
-# This auto-enables if Tcl was compiled threaded.
-#--------------------------------------------------------------------
-
-TEA_ENABLE_THREADS
-
-#--------------------------------------------------------------------
-# The statement below defines a collection of symbols related to
-# building as a shared library instead of a static library.
-#--------------------------------------------------------------------
-
-TEA_ENABLE_SHARED
-
-#--------------------------------------------------------------------
-# This macro figures out what flags to use with the compiler/linker
-# when building shared/static debug/optimized objects. This information
-# can be taken from the tclConfig.sh file, but this figures it all out.
-#--------------------------------------------------------------------
-
-TEA_CONFIG_CFLAGS
-# should be part of TEA_CONFIG_CFLAGS, but more visible modification here
-AC_SUBST(SHLIB_SUFFIX)
-
-#--------------------------------------------------------------------
-# Set the default compiler switches based on the --enable-symbols option.
-#--------------------------------------------------------------------
-
-TEA_ENABLE_SYMBOLS
-
-#--------------------------------------------------------------------
-# Everyone should be linking against the Tcl stub library. If you
-# can't for some reason, remove this definition. If you aren't using
-# stubs, you also need to modify the SHLIB_LD_LIBS setting below to
-# link against the non-stubbed Tcl library. Add Tk too if necessary.
-#--------------------------------------------------------------------
-
-AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
-AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs])
-
-#--------------------------------------------------------------------
-# This macro generates a line to use when building a library. It
-# depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS,
-# and TEA_LOAD_TCLCONFIG macros above.
-#--------------------------------------------------------------------
-
-TEA_MAKE_LIB
-
-#--------------------------------------------------------------------
-# Determine the name of the tclsh and/or wish executables in the
-# Tcl and Tk build directories or the location they were installed
-# into. These paths are used to support running test cases only,
-# the Makefile should not be making use of these paths to generate
-# a pkgIndex.tcl file or anything else at extension build time.
-#--------------------------------------------------------------------
-
-TEA_PROG_TCLSH
-TEA_PROG_WISH
-
-#--------------------------------------------------------------------
-# Finally, substitute all of the various values into the Makefile.
-# You may alternatively have a special pkgIndex.tcl.in or other files
-# which require substituting th AC variables in. Include these here.
-#--------------------------------------------------------------------
-
-AC_OUTPUT([Makefile pkgIndex.tcl togl_ws.h])
diff --git a/ng/Togl-1.7/double.c b/ng/Togl-1.7/double.c
deleted file mode 100644
index ba072570..00000000
--- a/ng/Togl-1.7/double.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/* $Id: double.c,v 1.14 2005/04/23 07:49:13 gregcouch Exp $ */
-
-/*
- * Togl - a Tk OpenGL widget
- * Copyright (C) 1996-1997 Brian Paul and Ben Bederson
- * See the LICENSE file for copyright details.
- */
-
-#include "togl.h"
-#include
-#include
-
-/*
- * The following variable is a special hack that is needed in order for
- * Sun shared libraries to be used for Tcl.
- */
-#ifdef SUN
-extern int matherr();
-int *tclDummyMathPtr = (int *) matherr;
-#endif
-
-static GLuint FontBase;
-static float xAngle = 0.0, yAngle = 0.0, zAngle = 0.0;
-static GLfloat CornerX, CornerY, CornerZ; /* where to print strings */
-
-
-/*
- * Togl widget create callback. This is called by Tcl/Tk when the widget has
- * been realized. Here's where one may do some one-time context setup or
- * initializations.
- */
-void
-create_cb(Togl *togl)
-{
-
- FontBase = Togl_LoadBitmapFont(togl, TOGL_BITMAP_8_BY_13);
- if (!FontBase) {
- printf("Couldn't load font!\n");
- exit(1);
- }
-}
-
-
-/*
- * Togl widget reshape callback. This is called by Tcl/Tk when the widget
- * has been resized. Typically, we call glViewport and perhaps setup the
- * projection matrix.
- */
-void
-reshape_cb(Togl *togl)
-{
- int width = Togl_Width(togl);
- int height = Togl_Height(togl);
- float aspect = (float) width / (float) height;
-
- glViewport(0, 0, width, height);
-
- /* Set up projection transform */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-aspect, aspect, -1.0, 1.0, 1.0, 10.0);
-
- CornerX = -aspect;
- CornerY = -1.0;
- CornerZ = -1.1;
-
- /* Change back to model view transform for rendering */
- glMatrixMode(GL_MODELVIEW);
-}
-
-
-
-static void
-print_string(const char *s)
-{
- glCallLists(strlen(s), GL_UNSIGNED_BYTE, s);
-}
-
-
-/*
- * Togl widget display callback. This is called by Tcl/Tk when the widget's
- * contents have to be redrawn. Typically, we clear the color and depth
- * buffers, render our objects, then swap the front/back color buffers.
- */
-void
-display_cb(Togl *togl)
-{
- static GLuint cubeList = 0;
- const char *ident;
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glLoadIdentity(); /* Reset modelview matrix to the identity
- * matrix */
- glTranslatef(0.0, 0.0, -3.0); /* Move the camera back three units */
- glRotatef(xAngle, 1.0, 0.0, 0.0); /* Rotate by X, Y, and Z angles */
- glRotatef(yAngle, 0.0, 1.0, 0.0);
- glRotatef(zAngle, 0.0, 0.0, 1.0);
-
- glEnable(GL_DEPTH_TEST);
-
- if (!cubeList) {
- cubeList = glGenLists(1);
- glNewList(cubeList, GL_COMPILE);
-
- /* Front face */
- glBegin(GL_QUADS);
- glColor3f(0.0, 0.7, 0.1); /* Green */
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- /* Back face */
- glColor3f(0.9, 1.0, 0.0); /* Yellow */
- glVertex3f(-1.0, 1.0, -1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- /* Top side face */
- glColor3f(0.2, 0.2, 1.0); /* Blue */
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- /* Bottom side face */
- glColor3f(0.7, 0.0, 0.1); /* Red */
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glEnd();
-
- glEndList();
-
- }
- glCallList(cubeList);
-
- glDisable(GL_DEPTH_TEST);
- glLoadIdentity();
- glColor3f(1.0, 1.0, 1.0);
- glRasterPos3f(CornerX, CornerY, CornerZ);
- glListBase(FontBase);
- ident = Togl_Ident(togl);
- if (strcmp(ident, "Single") == 0) {
- print_string("Single buffered");
- } else {
- print_string("Double buffered");
- }
- Togl_SwapBuffers(togl);
-}
-
-
-
-
-int
-setXrot_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName setXrot ?angle?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- xAngle = atof(argv[2]);
-
- /* printf( "before %f ", xAngle ); */
-
- if (xAngle < 0.0) {
- xAngle += 360.0;
- } else if (xAngle > 360.0) {
- xAngle -= 360.0;
- }
-
- /* printf( "after %f \n", xAngle ); */
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-
-int
-setYrot_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName setYrot ?angle?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- yAngle = atof(argv[2]);
-
- if (yAngle < 0.0) {
- yAngle += 360.0;
- } else if (yAngle > 360.0) {
- yAngle -= 360.0;
- }
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-int
-getXrot_cb(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
-{
- sprintf(interp->result, "%d", (int) xAngle);
- return TCL_OK;
-}
-
-int
-getYrot_cb(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
-{
- sprintf(interp->result, "%d", (int) yAngle);
- return TCL_OK;
-}
-
-/*
- * Called by Tk_Main() to let me initialize the modules (Togl) I will need.
- */
-TOGL_EXTERN int
-Double_Init(Tcl_Interp *interp)
-{
-#ifdef USE_TCL_STUBS
- if (Tcl_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-#ifdef USE_TK_STUBS
- if (Tk_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-
- if (Togl_Init(interp) == TCL_ERROR) {
- return TCL_ERROR;
- }
-#ifdef macintosh
- Togl_MacSetupMainInterp(interp);
-#endif
-
- /*
- * Specify the C callback functions for widget creation, display,
- * and reshape.
- */
- Togl_CreateFunc(create_cb);
- Togl_DisplayFunc(display_cb);
- Togl_ReshapeFunc(reshape_cb);
-
- /*
- * Make a new Togl widget command so the Tcl code can set a C variable.
- */
-
- Togl_CreateCommand("setXrot", setXrot_cb);
- Togl_CreateCommand("setYrot", setYrot_cb);
-
- /*
- * Call Tcl_CreateCommand for application-specific commands, if
- * they weren't already created by the init procedures called above.
- */
-
- Tcl_CreateCommand(interp, "getXrot", (Tcl_CmdProc *) getXrot_cb,
- (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
- Tcl_CreateCommand(interp, "getYrot", (Tcl_CmdProc *) getYrot_cb,
- (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
- return TCL_OK;
-}
diff --git a/ng/Togl-1.7/double.tcl b/ng/Togl-1.7/double.tcl
deleted file mode 100644
index 88987f7c..00000000
--- a/ng/Togl-1.7/double.tcl
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/sh
-# the next line restarts using wish \
-exec wish "$0" "$@"
-
-# $Id: double.tcl,v 1.5 2001/12/20 13:59:31 beskow Exp $
-
-# Togl - a Tk OpenGL widget
-# Copyright (C) 1996 Brian Paul and Ben Bederson
-# See the LICENSE file for copyright details.
-
-
-# $Log: double.tcl,v $
-# Revision 1.5 2001/12/20 13:59:31 beskow
-# Improved error-handling in togl.c in case of window creation failure
-# Added pkgIndex target to makefile
-# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs)
-# Added tk8.4a3 headers
-# Removed obsolete Tk internal headers
-#
-# Revision 1.4 2001/01/29 18:11:53 brianp
-# Jonas Beskow's changes to use Tcl/Tk stub interface
-#
-# Revision 1.3 1998/03/12 03:52:31 brianp
-# now sharing display lists between the widgets
-#
-# Revision 1.2 1996/10/23 23:31:56 brianp
-# added -ident options to togl calls
-#
-# Revision 1.1 1996/10/23 23:17:22 brianp
-# Initial revision
-#
-
-
-# An Tk/OpenGL widget demo with two windows, one single buffered and the
-# other double buffered.
-
-load [file dirname [info script]]/double[info sharedlibextension]
-
-proc setup {} {
- wm title . "Single vs Double Buffering"
-
- frame .f1
-
- # create first Togl widget
- togl .f1.o1 -width 200 -height 200 -rgba true -double false -depth true -ident Single
-
- # create second Togl widget, share display lists with first widget
- togl .f1.o2 -width 200 -height 200 -rgba true -double true -depth true -ident Double -sharelist Single
-
- scale .sx -label {X Axis} -from 0 -to 360 -command {setAngle x} -orient horizontal
- scale .sy -label {Y Axis} -from 0 -to 360 -command {setAngle y} -orient horizontal
- button .btn -text Quit -command exit
-
- bind .f1.o1 {
- motion_event [lindex [%W config -width] 4] \
- [lindex [%W config -height] 4] \
- %x %y
- }
-
- bind .f1.o2 {
- motion_event [lindex [%W config -width] 4] \
- [lindex [%W config -height] 4] \
- %x %y
- }
-
- pack .f1.o1 .f1.o2 -side left -padx 3 -pady 3 -fill both -expand t
- pack .f1 -fill both -expand t
- pack .sx -fill x
- pack .sy -fill x
- pack .btn -fill x
-}
-
-
-
-# This is called when mouse button 1 is pressed and moved in either of
-# the OpenGL windows.
-proc motion_event { width height x y } {
- .f1.o1 setXrot [expr 360.0 * $y / $height]
- .f1.o2 setXrot [expr 360.0 * $y / $height]
- .f1.o1 setYrot [expr 360.0 * ($width - $x) / $width]
- .f1.o2 setYrot [expr 360.0 * ($width - $x) / $width]
-
-# .sx set [expr 360.0 * $y / $height]
-# .sy set [expr 360.0 * ($width - $x) / $width]
-
- .sx set [getXrot]
- .sy set [getYrot]
-}
-
-# This is called when a slider is changed.
-proc setAngle {axis value} {
- global xAngle yAngle zAngle
-
- switch -exact $axis {
- x {.f1.o1 setXrot $value
- .f1.o2 setXrot $value}
- y {.f1.o1 setYrot $value
- .f1.o2 setYrot $value}
- }
-}
-
-# Execution starts here!
-setup
diff --git a/ng/Togl-1.7/gears.c b/ng/Togl-1.7/gears.c
deleted file mode 100644
index 9999a720..00000000
--- a/ng/Togl-1.7/gears.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/* gears.c */
-
-/*
- * 3-D gear wheels. This program is in the public domain.
- *
- * Brian Paul
- *
- *
- * Modified to work under Togl as a widget for TK 1997
- *
- * Philip Quaife
- *
- */
-
-#include "togl.h"
-#include
-#include
-#include
-
-#ifndef M_PI
-# define M_PI 3.14159265
-#endif
-
-struct WHIRLYGIZMO
-{
- GLint Gear1, Gear2, Gear3;
- GLfloat Rotx, Roty, Rotz;
- GLfloat Angle;
- int Height, Width;
-};
-
-/*
- * Draw a gear wheel. You'll probably want to call this function when
- * building a display list since we do a lot of trig here.
- *
- * Input: inner_radius - radius of hole at center
- * outer_radius - radius at center of teeth
- * width - width of gear
- * teeth - number of teeth
- * tooth_depth - depth of tooth
- */
-static void
-gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
- GLint teeth, GLfloat tooth_depth)
-{
- GLint i;
- GLfloat r0, r1, r2;
- GLfloat angle, da;
- GLfloat u, v, len;
-
- r0 = inner_radius;
- r1 = outer_radius - tooth_depth / 2.0;
- r2 = outer_radius + tooth_depth / 2.0;
-
- da = 2.0 * M_PI / teeth / 4.0;
-
- glShadeModel(GL_FLAT);
-
- glNormal3f(0.0, 0.0, 1.0);
-
- /* draw front face */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- }
- glEnd();
-
- /* draw front sides of teeth */
- glBegin(GL_QUADS);
- da = 2.0 * M_PI / teeth / 4.0;
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- }
- glEnd();
-
-
- glNormal3f(0.0, 0.0, -1.0);
-
- /* draw back face */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- }
- glEnd();
-
- /* draw back sides of teeth */
- glBegin(GL_QUADS);
- da = 2.0 * M_PI / teeth / 4.0;
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- -width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- }
- glEnd();
-
-
- /* draw outward faces of teeth */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- u = r2 * cos(angle + da) - r1 * cos(angle);
- v = r2 * sin(angle + da) - r1 * sin(angle);
- len = sqrt(u * u + v * v);
- u /= len;
- v /= len;
- glNormal3f(v, -u, 0.0);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
- glNormal3f(cos(angle), sin(angle), 0.0);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- -width * 0.5);
- u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
- v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
- glNormal3f(v, -u, 0.0);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glNormal3f(cos(angle), sin(angle), 0.0);
- }
-
- glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
- glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
-
- glEnd();
-
-
- glShadeModel(GL_SMOOTH);
-
- /* draw inside radius cylinder */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glNormal3f(-cos(angle), -sin(angle), 0.0);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- }
- glEnd();
-
-}
-
-/*
- * static GLfloat view_rotx=20.0, view_roty=30.0, view_rotz=0.0; static GLint
- * gear1, gear2, gear3; static GLfloat angle = 0.0; */
-static GLuint limit;
-static GLuint count = 1;
-
-static GLubyte polycolor[4] = { 255, 255, 255, 255 };
-
-static void
-draw(Togl *togl)
-{
- struct WHIRLYGIZMO *Wg;
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- Wg = Togl_GetClientData(togl);
- glDisable(GL_TEXTURE_2D);
- glPushMatrix();
- glRotatef(Wg->Rotx, 1.0, 0.0, 0.0);
- glRotatef(Wg->Roty, 0.0, 1.0, 0.0);
- glRotatef(Wg->Rotz, 0.0, 0.0, 1.0);
-
- glPushMatrix();
- glTranslatef(-3.0, -2.0, 0.0);
- glRotatef(Wg->Angle, 0.0, 0.0, 1.0);
- glEnable(GL_DEPTH_TEST);
- glCallList(Wg->Gear1);
- glEnable(GL_DEPTH_TEST);
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(3.1, -2.0, 0.0);
- glRotatef(-2.0 * Wg->Angle - 9.0, 0.0, 0.0, 1.0);
- glCallList(Wg->Gear2);
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(-3.1, 4.2, 0.0);
- glRotatef(-2.0 * Wg->Angle - 25.0, 0.0, 0.0, 1.0);
- glCallList(Wg->Gear3);
- glPopMatrix();
-
- glPopMatrix();
-
- Togl_SwapBuffers(togl);
-
-}
-
-
-static void
-zap(Togl *togl)
-{
- struct WHIRLYGIZMO *Wg;
-
- Wg = Togl_GetClientData(togl);
- free(Wg);
-}
-
-
-static void
-idle(Togl *togl)
-{
- struct WHIRLYGIZMO *Wg;
-
- Wg = Togl_GetClientData(togl);
- Wg->Angle += 2.0;
- Togl_PostRedisplay(togl);
-}
-
-
-/* change view angle, exit upon ESC */
-/*
- * static GLenum key(int k, GLenum mask) { switch (k) { case TK_UP: view_rotx
- * += 5.0; return GL_TRUE; case TK_DOWN: view_rotx -= 5.0; return GL_TRUE; case
- * TK_LEFT: view_roty += 5.0; return GL_TRUE; case TK_RIGHT: view_roty -= 5.0;
- * return GL_TRUE; case TK_z: view_rotz += 5.0; return GL_TRUE; case TK_Z:
- * view_rotz -= 5.0; return GL_TRUE; } return GL_FALSE; } */
-
-/* new window size or exposure */
-static void
-reshape(Togl *togl)
-{
- int width, height;
-
- width = Togl_Width(togl);
- height = Togl_Height(togl);
- glViewport(0, 0, (GLint) width, (GLint) height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- if (width > height) {
- GLfloat w = (GLfloat) width / (GLfloat) height;
-
- glFrustum(-w, w, -1.0, 1.0, 5.0, 60.0);
- } else {
- GLfloat h = (GLfloat) height / (GLfloat) width;
-
- glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
- }
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -40.0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-}
-
-
-static void
-init(Togl *togl)
-{
- struct WHIRLYGIZMO *Wg;
-
- static GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 };
- static GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 };
- static GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 };
- static GLfloat pos[4] = { 5.0, 5.0, 10.0, 0.0 };
- glLightfv(GL_LIGHT0, GL_POSITION, pos);
- glEnable(GL_CULL_FACE);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_DEPTH_TEST);
- /* make the gears */
- Wg = malloc(sizeof (*Wg));
- if (!Wg) {
- Tcl_SetResult(Togl_Interp(togl),
- "\"Cannot allocate client data for widget\"", TCL_STATIC);
- }
- Wg->Gear1 = glGenLists(1);
- glNewList(Wg->Gear1, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
- gear(1.0, 4.0, 1.0, 20, 0.7);
- glEndList();
-
- Wg->Gear2 = glGenLists(1);
- glNewList(Wg->Gear2, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
- gear(0.5, 2.0, 2.0, 10, 0.7);
- glEndList();
-
- Wg->Gear3 = glGenLists(1);
- glNewList(Wg->Gear3, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
- gear(1.3, 2.0, 0.5, 10, 0.7);
- glEndList();
-
- glEnable(GL_NORMALIZE);
- Wg->Height = Togl_Height(togl);
- Wg->Width = Togl_Width(togl);
- Wg->Angle = 0.0;
- Wg->Rotx = 0.0;
- Wg->Roty = 0.0;
- Wg->Rotz = 0.0;
- Togl_SetClientData(togl, (ClientData) Wg);
-}
-
-int
-position(Togl *togl, int argc, CONST84 char *argv[])
-{
- struct WHIRLYGIZMO *Wg;
- Tcl_Interp *interp = Togl_Interp(togl);
- char Result[100];
-
- Wg = Togl_GetClientData(togl);
- /* error checking */
- if (argc != 2) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName \"", TCL_STATIC);
- return TCL_ERROR;
- }
-
- /* Let result string equal value */
- sprintf(Result, "%g %g", Wg->Roty, Wg->Rotx);
-
- Tcl_SetResult(interp, Result, TCL_VOLATILE);
- return TCL_OK;
-}
-
-int
-rotate(Togl *togl, int argc, CONST84 char *argv[])
-{
- struct WHIRLYGIZMO *Wg;
- Tcl_Interp *interp = Togl_Interp(togl);
-
- Wg = Togl_GetClientData(togl);
- /* error checking */
- if (argc != 4) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName xrot yrot\"", TCL_STATIC);
- return TCL_ERROR;
- }
-
- Wg->Roty = atof(argv[2]);
- Wg->Rotx = atof(argv[3]);
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-TOGL_EXTERN int
-Gears_Init(Tcl_Interp *interp)
-{
- /*
- * Initialize Tcl, Tk, and the Togl widget module.
- */
-#ifdef USE_TCL_STUBS
- if (Tcl_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-#ifdef USE_TK_STUBS
- if (Tk_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-
- if (Togl_Init(interp) == TCL_ERROR) {
- return TCL_ERROR;
- }
-
- /*
- * Specify the C callback functions for widget creation, display,
- * and reshape.
- */
- Togl_CreateFunc(init);
- Togl_DestroyFunc(zap);
- Togl_DisplayFunc(draw);
- Togl_ReshapeFunc(reshape);
- Togl_TimerFunc(idle);
- Togl_CreateCommand("rotate", rotate);
- Togl_CreateCommand("position", position);
- return TCL_OK;
-}
diff --git a/ng/Togl-1.7/gears.tcl b/ng/Togl-1.7/gears.tcl
deleted file mode 100755
index ddb2729d..00000000
--- a/ng/Togl-1.7/gears.tcl
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/sh
-# the next line restarts using wish \
-exec wish "$0" "$@"
-
-# Togl - a Tk OpenGL widget
-# Copyright (C) 1996-1997 Brian Paul and Ben Bederson
-# See the LICENSE file for copyright details.
-
-
-#
-# Test Togl using GL Gears Demo
-#
-# Copyright (C) 1997 Philip Quaife
-#
-
-load [file dirname [info script]]/gears[info sharedlibextension]
-
-proc setup {} {
- global startx starty xangle0 yangle0 xangle yangle RotCnt
- global vTime
- set RotCnt 1
- set xangle 0.0
- set yangle 0.0
- set vTime 100
- wm title . "Rotating Gear Widget Test"
-
- label .t -text "Click and drag to rotate image"
- pack .t -side top -padx 2 -pady 10
- frame .f
- pack .f -side top
- button .f.n1 -text " Add " -command AutoRot
- button .f.r1 -text "Remove" -command DelRot
- button .f.b1 -text " Quit " -command exit
- entry .f.t -width 4 -textvariable vTime
- pack .f.n1 .f.t .f.r1 .f.b1 -side left -anchor w -padx 5
- newRot .w0 10
-
-}
-proc AutoRot {} {
- global RotCnt vTime
- newRot .w$RotCnt $vTime
- set RotCnt [expr $RotCnt + 1]
-}
-
-proc DelRot {} {
- global RotCnt vTime
- if { $RotCnt != 0 } {
- set RotCnt [expr $RotCnt - 1]
- destroy .w$RotCnt
- }
-}
-
-proc newRot {win {tick 100} } {
- togl $win -width 200 -height 200 -rgba true -double true -depth true -privatecmap false -time $tick
- bind $win {RotStart %x %y %W}
- bind $win {RotMove %x %y %W}
- pack $win -expand true -fill both
-}
-
-proc RotStart {x y W } {
- global startx starty xangle0 yangle0 xangle yangle
- set startx $x
- set starty $y
- set vPos [$W position]
- set xangle0 [lindex $vPos 0]
- set yangle0 [lindex $vPos 1]
- }
-
-proc RotMove {x y W} {
- global startx starty xangle0 yangle0 xangle yangle
- set xangle [expr $xangle0 + ($x - $startx) ]
- set yangle [expr $yangle0 + ($y - $starty) ]
- $W rotate $xangle $yangle
- }
-
-setup
diff --git a/ng/Togl-1.7/image.c b/ng/Togl-1.7/image.c
deleted file mode 100644
index a4027ce7..00000000
--- a/ng/Togl-1.7/image.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * SGI rgb file reader borrowed from gltk library
- */
-
-#include "togl.h" /* added by GG to include windows.h */
-#include
-#include
-#include
-#include "image.h"
-
-#ifndef SEEK_SET
-# define SEEK_SET 0
-#endif
-
-
-static void
-tkQuit(void)
-{
- exit(0);
-}
-
-
-/******************************************************************************/
-
-typedef struct _rawImageRec
-{
- unsigned short imagic;
- unsigned short type;
- unsigned short dim;
- unsigned short sizeX, sizeY, sizeZ;
- unsigned long min, max;
- unsigned long wasteBytes;
- char name[80];
- unsigned long colorMap;
- FILE *file;
- unsigned char *tmp, *tmpR, *tmpG, *tmpB, *tmpA;
- unsigned long rleEnd;
- GLuint *rowStart;
- GLint *rowSize;
-} rawImageRec;
-
-
-/******************************************************************************/
-
-static void
-ConvertShort(unsigned short *array, long length)
-{
- unsigned long b1, b2;
- unsigned char *ptr;
-
- ptr = (unsigned char *) array;
- while (length--) {
- b1 = *ptr++;
- b2 = *ptr++;
- *array++ = (b1 << 8) | (b2);
- }
-}
-
-static void
-ConvertLong(GLuint *array, long length)
-{
- unsigned long b1, b2, b3, b4;
- unsigned char *ptr;
-
- ptr = (unsigned char *) array;
- while (length--) {
- b1 = *ptr++;
- b2 = *ptr++;
- b3 = *ptr++;
- b4 = *ptr++;
- *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4);
- }
-}
-
-static rawImageRec *
-RawImageOpen(char *fileName)
-{
- union
- {
- int testWord;
- char testByte[4];
- } endianTest;
- rawImageRec *raw;
- GLenum swapFlag;
- int x;
-
- endianTest.testWord = 1;
- if (endianTest.testByte[0] == 1) {
- swapFlag = GL_TRUE;
- } else {
- swapFlag = GL_FALSE;
- }
-
- raw = (rawImageRec *) malloc(sizeof (rawImageRec));
- if (raw == NULL) {
- fprintf(stderr, "Out of memory!\n");
- tkQuit();
- }
- if ((raw->file = fopen(fileName, "rb")) == NULL) {
- perror(fileName);
- tkQuit();
- }
-
- fread(raw, 1, 12, raw->file);
-
- if (swapFlag) {
- ConvertShort(&raw->imagic, 6);
- }
-
- raw->tmp = (unsigned char *) malloc(raw->sizeX * 256);
- raw->tmpR = (unsigned char *) malloc(raw->sizeX * 256);
- raw->tmpG = (unsigned char *) malloc(raw->sizeX * 256);
- raw->tmpB = (unsigned char *) malloc(raw->sizeX * 256);
- raw->tmpA = (unsigned char *) malloc(raw->sizeX * 256);
- if (raw->tmp == NULL || raw->tmpR == NULL || raw->tmpG == NULL ||
- raw->tmpB == NULL || raw->tmpA == NULL) {
- fprintf(stderr, "Out of memory!\n");
- tkQuit();
- }
-
- if ((raw->type & 0xFF00) == 0x0100) {
- x = raw->sizeY * raw->sizeZ * sizeof (GLuint);
- raw->rowStart = (GLuint *) malloc(x);
- raw->rowSize = (GLint *) malloc(x);
- if (raw->rowStart == NULL || raw->rowSize == NULL) {
- fprintf(stderr, "Out of memory!\n");
- tkQuit();
- }
- raw->rleEnd = 512 + (2 * x);
- fseek(raw->file, 512, SEEK_SET);
- fread(raw->rowStart, 1, x, raw->file);
- fread(raw->rowSize, 1, x, raw->file);
- if (swapFlag) {
- ConvertLong(raw->rowStart, x / sizeof (GLuint));
- ConvertLong((GLuint *) raw->rowSize, x / sizeof (GLint));
- }
- }
- return raw;
-}
-
-static void
-RawImageClose(rawImageRec * raw)
-{
-
- fclose(raw->file);
- free(raw->tmp);
- free(raw->tmpR);
- free(raw->tmpG);
- free(raw->tmpB);
- free(raw->tmpA);
- free(raw);
-}
-
-static void
-RawImageGetRow(rawImageRec * raw, unsigned char *buf, int y, int z)
-{
- unsigned char *iPtr, *oPtr, pixel;
- int count;
-
- if ((raw->type & 0xFF00) == 0x0100) {
- fseek(raw->file, raw->rowStart[y + z * raw->sizeY], SEEK_SET);
- fread(raw->tmp, 1, (unsigned int) raw->rowSize[y + z * raw->sizeY],
- raw->file);
-
- iPtr = raw->tmp;
- oPtr = buf;
- while (1) {
- pixel = *iPtr++;
- count = (int) (pixel & 0x7F);
- if (!count) {
- return;
- }
- if (pixel & 0x80) {
- while (count--) {
- *oPtr++ = *iPtr++;
- }
- } else {
- pixel = *iPtr++;
- while (count--) {
- *oPtr++ = pixel;
- }
- }
- }
- } else {
- fseek(raw->file, 512 + (y * raw->sizeX) + (z * raw->sizeX * raw->sizeY),
- SEEK_SET);
- fread(buf, 1, raw->sizeX, raw->file);
- }
-}
-
-static void
-RawImageGetData(rawImageRec * raw, TK_RGBImageRec * final)
-{
- unsigned char *ptr;
- int i, j;
-
- final->data =
- (unsigned char *) malloc((raw->sizeX + 1) * (raw->sizeY + 1) * 4);
- if (final->data == NULL) {
- fprintf(stderr, "Out of memory!\n");
- tkQuit();
- }
-
- ptr = final->data;
- for (i = 0; i < (int) (raw->sizeY); i++) {
- RawImageGetRow(raw, raw->tmpR, i, 0);
- RawImageGetRow(raw, raw->tmpG, i, 1);
- RawImageGetRow(raw, raw->tmpB, i, 2);
- if (raw->sizeZ == 4) {
- /* 4 components */
- RawImageGetRow(raw, raw->tmpA, i, 3);
- for (j = 0; j < (int) (raw->sizeX); j++) {
- *ptr++ = *(raw->tmpR + j);
- *ptr++ = *(raw->tmpG + j);
- *ptr++ = *(raw->tmpB + j);
- *ptr++ = *(raw->tmpA + j);
- }
- } else {
- /* 3 components */
- for (j = 0; j < (int) (raw->sizeX); j++) {
- *ptr++ = *(raw->tmpR + j);
- *ptr++ = *(raw->tmpG + j);
- *ptr++ = *(raw->tmpB + j);
- }
- }
- }
-}
-
-TK_RGBImageRec *
-tkRGBImageLoad(char *fileName)
-{
- rawImageRec *raw;
- TK_RGBImageRec *final;
-
- raw = RawImageOpen(fileName);
- final = (TK_RGBImageRec *) malloc(sizeof (TK_RGBImageRec));
- if (final == NULL) {
- fprintf(stderr, "Out of memory!\n");
- tkQuit();
- }
- final->sizeX = raw->sizeX;
- final->sizeY = raw->sizeY;
- final->sizeZ = raw->sizeZ;
- RawImageGetData(raw, final);
- RawImageClose(raw);
- return final;
-}
-
-/******************************************************************************/
diff --git a/ng/Togl-1.7/image.h b/ng/Togl-1.7/image.h
deleted file mode 100644
index 47babb74..00000000
--- a/ng/Togl-1.7/image.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* image.h */
-
-#ifndef IMAGE_H
-# define IMAGE_H
-
-typedef struct _TK_RGBImageRec
-{
- int sizeX, sizeY, sizeZ;
- unsigned char *data;
-} TK_RGBImageRec;
-
-extern TK_RGBImageRec *tkRGBImageLoad(char *fileName);
-
-#endif
diff --git a/ng/Togl-1.7/index.c b/ng/Togl-1.7/index.c
deleted file mode 100644
index 8e26e26c..00000000
--- a/ng/Togl-1.7/index.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* $Id: index.c,v 1.10 2005/04/23 07:49:13 gregcouch Exp $ */
-
-/*
- * Togl - a Tk OpenGL widget
- * Copyright (C) 1996-1997 Brian Paul and Ben Bederson
- * See the LICENSE file for copyright details.
- */
-
-
-/*
- * An example Togl program using color-index mode.
- */
-
-
-#include "togl.h"
-#include
-#include
-
-
-/*
- * The following variable is a special hack that is needed in order for
- * Sun shared libraries to be used for Tcl.
- */
-#ifdef SUN
-extern int matherr();
-int *tclDummyMathPtr = (int *) matherr;
-#endif
-
-
-/* Our color indexes: */
-static unsigned long black, red, green, blue;
-
-/* Rotation angle */
-static float Angle = 0.0;
-
-
-/*
- * Togl widget create callback. This is called by Tcl/Tk when the widget has
- * been realized. Here's where one may do some one-time context setup or
- * initializations.
- */
-void
-create_cb(Togl *togl)
-{
- /* allocate color indexes */
- black = Togl_AllocColor(togl, 0.0, 0.0, 0.0);
- red = Togl_AllocColor(togl, 1.0, 0.0, 0.0);
- green = Togl_AllocColor(togl, 0.0, 1.0, 0.0);
- blue = Togl_AllocColor(togl, 0.0, 0.0, 1.0);
-
- /* If we were using a private read/write colormap we'd setup our color
- * table with something like this: */
- /*
- * black = 1; Togl_SetColor( togl, black, 0.0, 0.0, 0.0 ); red = 2;
- * Togl_SetColor( togl, red, 1.0, 0.0, 0.0 ); green = 3; Togl_SetColor(
- * togl, green, 0.0, 1.0, 0.0 ); blue = 4; Togl_SetColor( togl, blue, 0.0,
- * 0.0, 1.0 ); */
-
- glShadeModel(GL_FLAT);
- glDisable(GL_DITHER);
-}
-
-
-/*
- * Togl widget reshape callback. This is called by Tcl/Tk when the widget
- * has been resized. Typically, we call glViewport and perhaps setup the
- * projection matrix.
- */
-void
-reshape_cb(Togl *togl)
-{
- int width = Togl_Width(togl);
- int height = Togl_Height(togl);
- float aspect = (float) width / (float) height;
-
- glViewport(0, 0, width, height);
-
- /* Set up projection transform */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0);
-
- /* Change back to model view transform for rendering */
- glMatrixMode(GL_MODELVIEW);
-}
-
-
-/*
- * Togl widget display callback. This is called by Tcl/Tk when the widget's
- * contents have to be redrawn. Typically, we clear the color and depth
- * buffers, render our objects, then swap the front/back color buffers.
- */
-void
-display_cb(Togl *togl)
-{
- glClearIndex(black);
- glClear(GL_COLOR_BUFFER_BIT);
-
- glPushMatrix();
- glTranslatef(0.3, -0.3, 0.0);
- glRotatef(Angle, 0.0, 0.0, 1.0);
- glIndexi(red);
- glBegin(GL_TRIANGLES);
- glVertex2f(-0.5, -0.3);
- glVertex2f(0.5, -0.3);
- glVertex2f(0.0, 0.6);
- glEnd();
- glPopMatrix();
-
- glPushMatrix();
- glRotatef(Angle, 0.0, 0.0, 1.0);
- glIndexi(green);
- glBegin(GL_TRIANGLES);
- glVertex2f(-0.5, -0.3);
- glVertex2f(0.5, -0.3);
- glVertex2f(0.0, 0.6);
- glEnd();
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(-0.3, 0.3, 0.0);
- glRotatef(Angle, 0.0, 0.0, 1.0);
- glIndexi(blue);
- glBegin(GL_TRIANGLES);
- glVertex2f(-0.5, -0.3);
- glVertex2f(0.5, -0.3);
- glVertex2f(0.0, 0.6);
- glEnd();
- glPopMatrix();
-
- glFlush();
- Togl_SwapBuffers(togl);
-}
-
-
-void
-timer_cb(Togl *togl)
-{
- Angle += 5.0;
- Togl_PostRedisplay(togl);
-}
-
-
-TOGL_EXTERN int
-Index_Init(Tcl_Interp *interp)
-{
- /*
- * Initialize Tcl, Tk, and the Togl widget module.
- */
-#ifdef USE_TCL_STUBS
- if (Tcl_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-#ifdef USE_TK_STUBS
- if (Tk_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-
- if (Togl_Init(interp) == TCL_ERROR) {
- return TCL_ERROR;
- }
-
- /*
- * Specify the C callback functions for widget creation, display,
- * and reshape.
- */
- Togl_CreateFunc(create_cb);
- Togl_DisplayFunc(display_cb);
- Togl_ReshapeFunc(reshape_cb);
- Togl_TimerFunc(timer_cb);
-
- /*
- * Make a new Togl widget command so the Tcl code can set a C variable.
- */
- /* NONE */
-
- /*
- * Call Tcl_CreateCommand for application-specific commands, if
- * they weren't already created by the init procedures called above.
- */
- return TCL_OK;
-}
diff --git a/ng/Togl-1.7/index.tcl b/ng/Togl-1.7/index.tcl
deleted file mode 100644
index ce6b7a7f..00000000
--- a/ng/Togl-1.7/index.tcl
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-# the next line restarts using wish \
-exec wish "$0" "$@"
-
-# $Id: index.tcl,v 1.5 2001/12/20 13:59:31 beskow Exp $
-
-# Togl - a Tk OpenGL widget
-# Copyright (C) 1996 Brian Paul and Ben Bederson
-# See the LICENSE file for copyright details.
-
-
-# $Log: index.tcl,v $
-# Revision 1.5 2001/12/20 13:59:31 beskow
-# Improved error-handling in togl.c in case of window creation failure
-# Added pkgIndex target to makefile
-# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs)
-# Added tk8.4a3 headers
-# Removed obsolete Tk internal headers
-#
-# Revision 1.4 2001/01/29 18:11:53 brianp
-# Jonas Beskow's changes to use Tcl/Tk stub interface
-#
-# Revision 1.3 1998/01/24 14:05:50 brianp
-# added quit button (Ben Bederson)
-#
-# Revision 1.2 1997/04/11 01:37:34 brianp
-# added a timer to rotate the triangles
-#
-# Revision 1.1 1996/10/23 23:18:11 brianp
-# Initial revision
-#
-
-
-# A Tk/OpenGL widget demo using color-index mode.
-
-load [file dirname [info script]]/index[info sharedlibextension]
-
-proc setup {} {
- wm title . "Color index demo"
-
- togl .win -width 200 -height 200 -rgba false -double true -privatecmap false -time 10
- button .btn -text Quit -command exit
-
- pack .win -expand true -fill both
- pack .btn -expand true -fill both
-}
-
-
-
-# Execution starts here!
-setup
diff --git a/ng/Togl-1.7/overlay.c b/ng/Togl-1.7/overlay.c
deleted file mode 100644
index c4f403ff..00000000
--- a/ng/Togl-1.7/overlay.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* $Id: overlay.c,v 1.7 2005/04/23 07:49:13 gregcouch Exp $ */
-
-/*
- * Togl - a Tk OpenGL widget
- * Copyright (C) 1996-1997 Brian Paul and Ben Bederson
- * See the LICENSE file for copyright details.
- */
-
-
-/*
- * An example Togl program using an overlay.
- */
-
-
-#include "togl.h"
-#include
-#include
-
-
-/*
- * The following variable is a special hack that is needed in order for
- * Sun shared libraries to be used for Tcl.
- */
-#ifdef SUN
-extern int matherr();
-int *tclDummyMathPtr = (int *) matherr;
-#endif
-
-
-/* Overlay color indexes: */
-static unsigned long Red, Green;
-
-
-/*
- * Togl widget create callback. This is called by Tcl/Tk when the widget has
- * been realized. Here's where one may do some one-time context setup or
- * initializations.
- */
-void
-create_cb(Togl *togl)
-{
- /* allocate overlay color indexes */
- Red = Togl_AllocColorOverlay(togl, 1.0, 0.0, 0.0);
- Green = Togl_AllocColorOverlay(togl, 0.0, 1.0, 0.0);
-
- /* in this demo we always show the overlay */
- if (Togl_ExistsOverlay(togl)) {
- Togl_ShowOverlay(togl);
- printf("Red and green lines are in the overlay\n");
- } else {
- printf("Sorry, this display doesn't support overlays\n");
- }
-}
-
-
-/*
- * Togl widget reshape callback. This is called by Tcl/Tk when the widget
- * has been resized. Typically, we call glViewport and perhaps setup the
- * projection matrix.
- */
-void
-reshape_cb(Togl *togl)
-{
- int width = Togl_Width(togl);
- int height = Togl_Height(togl);
- float aspect = (float) width / (float) height;
-
- /* Set up viewing for normal plane's context */
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0);
- glMatrixMode(GL_MODELVIEW);
-
- /* Set up viewing for overlay plane's context */
- if (Togl_ExistsOverlay(togl)) {
- Togl_UseLayer(togl, TOGL_OVERLAY);
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
- glMatrixMode(GL_MODELVIEW);
- Togl_UseLayer(togl, TOGL_NORMAL);
- }
-}
-
-
-/*
- * Togl widget overlay display callback. This is called by Tcl/Tk when the
- * overlay has to be redrawn.
- */
-void
-overlay_display_cb(Togl *togl)
-{
- glClear(GL_COLOR_BUFFER_BIT);
-
- glIndexi(Red);
- glBegin(GL_LINES);
- glVertex2f(-1.0, -1.0);
- glVertex2f(1.0, 1.0);
- glVertex2f(-1.0, 1.0);
- glVertex2f(1.0, -1.0);
- glEnd();
-
- glIndexi(Green);
- glBegin(GL_LINE_LOOP);
- glVertex2f(-0.5, -0.5);
- glVertex2f(0.5, -0.5);
- glVertex2f(0.5, 0.5);
- glVertex2f(-0.5, 0.5);
- glEnd();
- glFlush();
-}
-
-
-/*
- * Togl widget display callback. This is called by Tcl/Tk when the widget's
- * contents have to be redrawn. Typically, we clear the color and depth
- * buffers, render our objects, then swap the front/back color buffers.
- */
-void
-display_cb(Togl *togl)
-{
- glClear(GL_COLOR_BUFFER_BIT);
-
- glLoadIdentity();
-
- glBegin(GL_TRIANGLES);
-
- glColor3f(1.0, 0.0, 1.0);
- glVertex2f(-0.5, -0.3);
- glVertex2f(0.5, -0.3);
- glVertex2f(0.0, 0.6);
-
- glColor3f(1.0, 1.0, 0.0);
- glVertex2f(-0.5 + 0.2, -0.3 - 0.2);
- glVertex2f(0.5 + 0.2, -0.3 - 0.2);
- glVertex2f(0.0 + 0.2, 0.6 - 0.2);
-
- glColor3f(0.0, 1.0, 1.0);
- glVertex2f(-0.5 + 0.4, -0.3 - 0.4);
- glVertex2f(0.5 + 0.4, -0.3 - 0.4);
- glVertex2f(0.0 + 0.4, 0.6 - 0.4);
-
- glEnd();
-
- glFlush();
-}
-
-
-/*
- * Called by Tk_Main() to let me initialize the modules (Togl) I will need.
- */
-TOGL_EXTERN int
-Overlay_Init(Tcl_Interp *interp)
-{
- /*
- * Initialize Tcl, Tk, and the Togl widget module.
- */
-#ifdef USE_TCL_STUBS
- if (Tcl_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-#ifdef USE_TK_STUBS
- if (Tk_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
- if (Togl_Init(interp) == TCL_ERROR) {
- return TCL_ERROR;
- }
-
- /*
- * Specify the C callback functions for widget creation, display,
- * and reshape.
- */
- Togl_CreateFunc(create_cb);
- Togl_DisplayFunc(display_cb);
- Togl_ReshapeFunc(reshape_cb);
-
- Togl_OverlayDisplayFunc(overlay_display_cb);
-
- /*
- * Make a new Togl widget command so the Tcl code can set a C variable.
- */
- /* NONE */
-
- /*
- * Call Tcl_CreateCommand for application-specific commands, if
- * they weren't already created by the init procedures called above.
- */
- return TCL_OK;
-}
diff --git a/ng/Togl-1.7/overlay.tcl b/ng/Togl-1.7/overlay.tcl
deleted file mode 100644
index 0be48bc6..00000000
--- a/ng/Togl-1.7/overlay.tcl
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/sh
-# the next line restarts using wish \
-exec wish "$0" "$@"
-
-# $Id: overlay.tcl,v 1.4 2001/12/20 13:59:31 beskow Exp $
-
-# Togl - a Tk OpenGL widget
-# Copyright (C) 1996 Brian Paul and Ben Bederson
-# See the LICENSE file for copyright details.
-
-
-# $Log: overlay.tcl,v $
-# Revision 1.4 2001/12/20 13:59:31 beskow
-# Improved error-handling in togl.c in case of window creation failure
-# Added pkgIndex target to makefile
-# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs)
-# Added tk8.4a3 headers
-# Removed obsolete Tk internal headers
-#
-# Revision 1.3 2001/01/29 18:11:53 brianp
-# Jonas Beskow's changes to use Tcl/Tk stub interface
-#
-# Revision 1.2 1998/01/24 14:05:50 brianp
-# added quit button (Ben Bederson)
-#
-# Revision 1.1 1997/03/07 01:26:38 brianp
-# Initial revision
-#
-#
-
-
-# A Tk/OpenGL widget demo using an overlay.
-
-load [file dirname [info script]]/overlay[info sharedlibextension]
-
-proc setup {} {
- wm title . "Overlay demo"
-
- togl .win -width 200 -height 200 -rgba true -double false -overlay true
- button .btn -text Quit -command exit
-
- pack .win -expand true -fill both
- pack .btn -expand true -fill both
-}
-
-
-
-# Execution starts here!
-setup
diff --git a/ng/Togl-1.7/pkgIndex.tcl.in b/ng/Togl-1.7/pkgIndex.tcl.in
deleted file mode 100644
index af071e36..00000000
--- a/ng/Togl-1.7/pkgIndex.tcl.in
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Tcl package index file
-#
-package ifneeded @PACKAGE_NAME@ @PACKAGE_VERSION@ \
- [list load [file join $dir @PKG_LIB_FILE@]]
diff --git a/ng/Togl-1.7/stereo.c b/ng/Togl-1.7/stereo.c
deleted file mode 100644
index 0a33f1ee..00000000
--- a/ng/Togl-1.7/stereo.c
+++ /dev/null
@@ -1,352 +0,0 @@
-/* $Id: stereo.c,v 1.6 2005/04/23 07:49:13 gregcouch Exp $ */
-
-/*
- * Togl - a Tk OpenGL widget
- * Copyright (C) 1996-1997 Brian Paul and Ben Bederson
- * See the LICENSE file for copyright details.
- */
-
-#include "togl.h"
-#include
-#include
-
-/*
- * The following variable is a special hack that is needed in order for
- * Sun shared libraries to be used for Tcl.
- */
-#ifdef SUN
-extern int matherr();
-int *tclDummyMathPtr = (int *) matherr;
-#endif
-
-
-static GLuint FontBase;
-static float xAngle = 0.0, yAngle = 0.0, zAngle = 0.0;
-static GLfloat CornerX, CornerY, CornerZ; /* where to print strings */
-static GLfloat scale = 1.0;
-
-
-
-/*
- * Togl widget create callback. This is called by Tcl/Tk when the widget has
- * been realized. Here's where one may do some one-time context setup or
- * initializations.
- */
-void
-create_cb(Togl *togl)
-{
- FontBase = Togl_LoadBitmapFont(togl, TOGL_BITMAP_8_BY_13);
- if (!FontBase) {
- printf("Couldn't load font!\n");
- exit(1);
- }
-}
-
-
-/*
- * Togl widget reshape callback. This is called by Tcl/Tk when the widget
- * has been resized. Typically, we call glViewport and perhaps setup the
- * projection matrix.
- */
-void
-reshape_cb(Togl *togl)
-{
- int width = Togl_Width(togl);
- int height = Togl_Height(togl);
- float aspect = (float) width / (float) height;
-
- glViewport(0, 0, width, height);
-
- /* Set up projection transform */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-aspect, aspect, -1.0, 1.0, 1.0, 10.0);
-
- CornerX = -aspect;
- CornerY = -1.0;
- CornerZ = -1.1;
-
- /* Change back to model view transform for rendering */
- glMatrixMode(GL_MODELVIEW);
-}
-
-
-
-static void
-print_string(const char *s)
-{
- glCallLists(strlen(s), GL_UNSIGNED_BYTE, s);
-}
-
-
-/*
- * Togl widget display callback. This is called by Tcl/Tk when the widget's
- * contents have to be redrawn. Typically, we clear the color and depth
- * buffers, render our objects, then swap the front/back color buffers.
- */
-void
-display_cb(Togl *togl)
-{
- const char *ident;
- GLfloat eyeDist = 2.0;
- GLfloat eyeOffset = 0.05;
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glLoadIdentity(); /* Reset modelview matrix to the identity
- * matrix */
- glTranslatef(0.0, 0.0, -3.0); /* Move the camera back three units */
- glScalef(scale, scale, scale); /* Zoom in and out */
- glRotatef(xAngle, 1.0, 0.0, 0.0); /* Rotate by X, Y, and Z angles */
- glRotatef(yAngle, 0.0, 1.0, 0.0);
- glRotatef(zAngle, 0.0, 0.0, 1.0);
-
- glEnable(GL_DEPTH_TEST);
-
- /* stereo right eye */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- Togl_StereoFrustum(-1, 1, -1, 1, 1, 10, eyeDist, eyeOffset);
- glMatrixMode(GL_MODELVIEW);
-#ifdef OLD_STEREO
- Togl_OldStereoDrawBuffer(GL_BACK_RIGHT);
- Togl_OldStereoClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-#else
- glDrawBuffer(GL_BACK_RIGHT);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-#endif
-
- /* Front face */
- glBegin(GL_QUADS);
- glColor3f(0.0, 0.7, 0.1); /* Green */
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- /* Back face */
- glColor3f(0.9, 1.0, 0.0); /* Yellow */
- glVertex3f(-1.0, 1.0, -1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- /* Top side face */
- glColor3f(0.2, 0.2, 1.0); /* Blue */
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- /* Bottom side face */
- glColor3f(0.7, 0.0, 0.1); /* Red */
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glEnd();
-
- /* stereo left eye */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- Togl_StereoFrustum(-1, 1, -1, 1, 1, 10, eyeDist, -eyeOffset);
- glMatrixMode(GL_MODELVIEW);
-
-#ifdef OLD_STEREO
- Togl_OldStereoDrawBuffer(GL_BACK_LEFT);
- Togl_OldStereoClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-#else
- glDrawBuffer(GL_BACK_LEFT);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-#endif
-
- /* Front face */
- glBegin(GL_QUADS);
- glColor3f(0.0, 0.7, 0.1); /* Green */
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- /* Back face */
- glColor3f(0.9, 1.0, 0.0); /* Yellow */
- glVertex3f(-1.0, 1.0, -1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- /* Top side face */
- glColor3f(0.2, 0.2, 1.0); /* Blue */
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- /* Bottom side face */
- glColor3f(0.7, 0.0, 0.1); /* Red */
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glEnd();
-
-
- glDisable(GL_DEPTH_TEST);
- glLoadIdentity();
- glColor3f(1.0, 1.0, 1.0);
- glRasterPos3f(CornerX, CornerY, CornerZ);
- glListBase(FontBase);
- /* ident = Togl_Ident( togl ); if (strcmp(ident,"Single")==0) {
- * print_string( "Single buffered" ); } else { print_string( "Double
- * buffered" ); } */
- print_string(Togl_Ident(togl));
- Togl_SwapBuffers(togl);
-}
-
-
-int
-setXrot_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName setXrot ?angle?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- xAngle = atof(argv[2]);
-
- /* printf( "before %f ", xAngle ); */
-
- if (xAngle < 0.0) {
- xAngle += 360.0;
- } else if (xAngle > 360.0) {
- xAngle -= 360.0;
- }
-
- /* printf( "after %f \n", xAngle ); */
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-int
-setYrot_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName setYrot ?angle?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- yAngle = atof(argv[2]);
-
- if (yAngle < 0.0) {
- yAngle += 360.0;
- } else if (yAngle > 360.0) {
- yAngle -= 360.0;
- }
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-int
-getXrot_cb(ClientData clientData, Tcl_Interp *interp,
- int argc, CONST84 char *argv[])
-{
- sprintf(interp->result, "%d", (int) xAngle);
- return TCL_OK;
-}
-
-
-int
-getYrot_cb(ClientData clientData, Tcl_Interp *interp,
- int argc, CONST84 char *argv[])
-{
- sprintf(interp->result, "%d", (int) yAngle);
- return TCL_OK;
-}
-
-
-int
-scale_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName scale ?value?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- scale = atof(argv[2]);
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-TOGL_EXTERN int
-Stereo_Init(Tcl_Interp *interp)
-{
- /*
- * Initialize Tcl, Tk, and the Togl widget module.
- */
-#ifdef USE_TCL_STUBS
- if (Tcl_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-#ifdef USE_TK_STUBS
- if (Tk_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-
- if (Togl_Init(interp) == TCL_ERROR) {
- return TCL_ERROR;
- }
-
- /*
- * Specify the C callback functions for widget creation, display,
- * and reshape.
- */
- Togl_CreateFunc(create_cb);
- Togl_DisplayFunc(display_cb);
- Togl_ReshapeFunc(reshape_cb);
-
- /*
- * Make a new Togl widget command so the Tcl code can set a C variable.
- */
-
- Togl_CreateCommand("setXrot", setXrot_cb);
- Togl_CreateCommand("setYrot", setYrot_cb);
- Togl_CreateCommand("scale", scale_cb);
-
- /*
- * Call Tcl_CreateCommand for application-specific commands, if
- * they weren't already created by the init procedures called above.
- */
-
- Tcl_CreateCommand(interp, "getXrot", getXrot_cb, (ClientData) NULL,
- (Tcl_CmdDeleteProc *) NULL);
- Tcl_CreateCommand(interp, "getYrot", getYrot_cb, (ClientData) NULL,
- (Tcl_CmdDeleteProc *) NULL);
-
- return TCL_OK;
-}
diff --git a/ng/Togl-1.7/stereo.tcl b/ng/Togl-1.7/stereo.tcl
deleted file mode 100644
index ea5fc89f..00000000
--- a/ng/Togl-1.7/stereo.tcl
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/bin/sh
-# the next line restarts using wish \
-exec wish "$0" "$@"
-
-# $Id: stereo.tcl,v 1.4 2004/12/21 05:28:39 gregcouch Exp $
-
-# Togl - a Tk OpenGL widget
-# Copyright (C) 1996 Brian Paul and Ben Bederson
-# See the LICENSE file for copyright details.
-
-
-# $Log: stereo.tcl,v $
-# Revision 1.4 2004/12/21 05:28:39 gregcouch
-# Apply outstanding patches and Mac OS X support.
-#
-# Revision 1.3 2001/12/20 13:59:31 beskow
-# Improved error-handling in togl.c in case of window creation failure
-# Added pkgIndex target to makefile
-# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs)
-# Added tk8.4a3 headers
-# Removed obsolete Tk internal headers
-#
-# Revision 1.2 2001/01/29 18:11:53 brianp
-# Jonas Beskow's changes to use Tcl/Tk stub interface
-#
-# Revision 1.1 1997/10/01 02:53:12 brianp
-# Initial revision
-#
-#
-# Revision 1.1 1997/9/28 18:54:46 Ben Evans
-# Initial revision. Based on double.tcl
-#
-
-
-# An Tk/OpenGL widget demo with two windows, one single buffered and the
-# other double buffered.
-
-load [file dirname [info script]]/stereo[info sharedlibextension]
-
-proc setup {} {
- global scale
- set scale 1.0
- wm title . "Full Screen Stereo Buffering"
-
- frame .f1
- togl .f1.o1 -width 200 -height 200 -rgba true -stereo true -double true -depth true -ident "stereo buffer"
-
- scale .sx -label {X Axis} -from 0 -to 360 -command {setAngle x} -orient horizontal
- scale .sy -label {Y Axis} -from 0 -to 360 -command {setAngle y} -orient horizontal
- button .btn -text Quit -command exit
-
- bind .f1.o1 {
- motion_event [lindex [%W config -width] 4] \
- [lindex [%W config -height] 4] \
- %x %y
- }
-
- bind .f1.o1 {
- set startx %x
- set starty %y
- set scale0 $scale
- }
-
- bind .f1.o1 {
- set q [ expr ($starty - %y) / 400.0 ]
- set scale [expr $scale0 * exp($q)]
- .f1.o1 scale $scale
- }
-
- pack .f1.o1 -side left -padx 3 -pady 3 -fill both -expand t
- pack .f1 -fill both -expand t
- pack .sx -fill x
- pack .sy -fill x
- pack .btn -fill x
-
- if {[string first $::tcl_platform(os) IRIX] != -1} {
- puts "use /usr/gfx/setmon -n 60 to reset display and /usr/gfx/setmon -n STR_RECT to put in display in stereo mode"
- }
-
-}
-
-
-
-# This is called when mouse button 1 is pressed and moved in either of
-# the OpenGL windows.
-proc motion_event { width height x y } {
- .f1.o1 setXrot [expr 360.0 * $y / $height]
- .f1.o1 setYrot [expr 360.0 * ($width - $x) / $width]
-
-# .sx set [expr 360.0 * $y / $height]
-# .sy set [expr 360.0 * ($width - $x) / $width]
-
- .sx set [getXrot]
- .sy set [getYrot]
-}
-
-# This is called when a slider is changed.
-proc setAngle {axis value} {
- global xAngle yAngle zAngle
-
- switch -exact $axis {
- x {.f1.o1 setXrot $value}
- y {.f1.o1 setYrot $value}
- }
-}
-
-# Execution starts here!
-setup
diff --git a/ng/Togl-1.7/tclconfig/README.txt b/ng/Togl-1.7/tclconfig/README.txt
deleted file mode 100644
index 59b5a3e8..00000000
--- a/ng/Togl-1.7/tclconfig/README.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-These files comprise the basic building blocks for a Tcl Extension
-Architecture (TEA) extension. For more information on TEA see:
-
- http://www.tcl.tk/doc/tea/
-
-This package is part of the Tcl project at SourceForge, and latest
-sources should be available there:
-
- http://tcl.sourceforge.net/
-
-This package is a freely available open source package. You can do
-virtually anything you like with it, such as modifying it, redistributing
-it, and selling it either in whole or in part.
-
-CONTENTS
-========
-The following is a short description of the files you will find in
-the sample extension.
-
-README.txt This file
-
-install-sh Program used for copying binaries and script files
- to their install locations.
-
-tcl.m4 Collection of Tcl autoconf macros. Included by a package's
- aclocal.m4 to define TEA_* macros.
diff --git a/ng/Togl-1.7/tclconfig/install-sh b/ng/Togl-1.7/tclconfig/install-sh
deleted file mode 100644
index 0ff4b6a0..00000000
--- a/ng/Togl-1.7/tclconfig/install-sh
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/sh
-
-#
-# install - install a program, script, or datafile
-# This comes from X11R5; it is not part of GNU.
-#
-# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-#
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-
-instcmd="$mvprog"
-chmodcmd=""
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-fi
-
-if [ x"$dst" = x ]
-then
- echo "install: no destination specified"
- exit 1
-fi
-
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-if [ -d $dst ]
-then
- dst="$dst"/`basename $src`
-fi
-
-# Make a temp file name in the proper directory.
-
-dstdir=`dirname $dst`
-dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-$doit $instcmd $src $dsttmp
-
-# and set any options; do chmod last to preserve setuid bits
-
-if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi
-if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi
-if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi
-if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi
-
-# Now rename the file to the real destination.
-
-$doit $rmcmd $dst
-$doit $mvcmd $dsttmp $dst
-
-
-exit 0
diff --git a/ng/Togl-1.7/tclconfig/tcl.m4 b/ng/Togl-1.7/tclconfig/tcl.m4
deleted file mode 100644
index 2862ae18..00000000
--- a/ng/Togl-1.7/tclconfig/tcl.m4
+++ /dev/null
@@ -1,3959 +0,0 @@
-# tcl.m4 --
-#
-# This file provides a set of autoconf macros to help TEA-enable
-# a Tcl extension.
-#
-# Copyright (c) 1999-2000 Ajuba Solutions.
-# Copyright (c) 2002-2005 ActiveState Corporation.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# RCS: @(#) $Id: tcl.m4,v 1.4 2006/01/06 00:09:00 gregcouch Exp $
-
-AC_PREREQ(2.50)
-
-# Possible values for key variables defined:
-#
-# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
-# TEA_PLATFORM - windows unix
-#
-
-#------------------------------------------------------------------------
-# TEA_PATH_TCLCONFIG --
-#
-# Locate the tclConfig.sh file and perform a sanity check on
-# the Tcl compile flags
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --with-tcl=...
-#
-# Defines the following vars:
-# TCL_BIN_DIR Full path to the directory containing
-# the tclConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PATH_TCLCONFIG, [
- dnl Make sure we are initialized
- AC_REQUIRE([TEA_INIT])
- #
- # Ok, lets find the tcl configuration
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-tcl
- #
-
- if test x"${no_tcl}" = x ; then
- # we reset no_tcl in case something fails here
- no_tcl=true
- AC_ARG_WITH(tcl, [ --with-tcl directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval})
- AC_MSG_CHECKING([for Tcl configuration])
- AC_CACHE_VAL(ac_cv_c_tclconfig,[
-
- # First check to see if --with-tcl was specified.
- if test x"${with_tclconfig}" != x ; then
- case ${with_tclconfig} in
- */tclConfig.sh )
- if test -f ${with_tclconfig}; then
- AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
- with_tclconfig=`echo ${with_tclconfig} | sed 's!/tclConfig\.sh$!!'`
- fi ;;
- esac
- if test -f "${with_tclconfig}/tclConfig.sh" ; then
- ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)`
- else
- AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
- fi
- fi
-
- # then check for a private Tcl installation
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in \
- ../tcl \
- `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
- ../../tcl \
- `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
- ../../../tcl \
- `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
- if test -f "$i/unix/tclConfig.sh" ; then
- ac_cv_c_tclconfig=`(cd $i/unix; pwd)`
- break
- fi
- done
- fi
-
- # on Darwin, check in Framework installation locations
- if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
- `ls -d /Library/Frameworks 2>/dev/null` \
- `ls -d /Network/Library/Frameworks 2>/dev/null` \
- `ls -d /System/Library/Frameworks 2>/dev/null` \
- ; do
- if test -f "$i/Tcl.framework/tclConfig.sh" ; then
- ac_cv_c_tclconfig=`(cd $i/Tcl.framework; pwd)`
- break
- fi
- done
- fi
-
- # check in a few common install locations
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d ${libdir} 2>/dev/null` \
- `ls -d ${exec_prefix}/lib 2>/dev/null` \
- `ls -d ${prefix}/lib 2>/dev/null` \
- `ls -d /usr/local/lib 2>/dev/null` \
- `ls -d /usr/contrib/lib 2>/dev/null` \
- `ls -d /usr/lib 2>/dev/null` \
- ; do
- if test -f "$i/tclConfig.sh" ; then
- ac_cv_c_tclconfig=`(cd $i; pwd)`
- break
- fi
- done
- fi
-
- # check in a few other private locations
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in \
- ${srcdir}/../tcl \
- `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
- if test -f "$i/unix/tclConfig.sh" ; then
- ac_cv_c_tclconfig=`(cd $i/unix; pwd)`
- break
- fi
- done
- fi
- ])
-
- if test x"${ac_cv_c_tclconfig}" = x ; then
- TCL_BIN_DIR="# no Tcl configs found"
- AC_MSG_WARN("Cannot find Tcl configuration definitions")
- exit 0
- else
- no_tcl=
- TCL_BIN_DIR=${ac_cv_c_tclconfig}
- AC_MSG_RESULT([found $TCL_BIN_DIR/tclConfig.sh])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_TKCONFIG --
-#
-# Locate the tkConfig.sh file
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --with-tk=...
-#
-# Defines the following vars:
-# TK_BIN_DIR Full path to the directory containing
-# the tkConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PATH_TKCONFIG, [
- #
- # Ok, lets find the tk configuration
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-tk
- #
-
- if test x"${no_tk}" = x ; then
- # we reset no_tk in case something fails here
- no_tk=true
- AC_ARG_WITH(tk, [ --with-tk directory containing tk configuration (tkConfig.sh)], with_tkconfig=${withval})
- AC_MSG_CHECKING([for Tk configuration])
- AC_CACHE_VAL(ac_cv_c_tkconfig,[
-
- # First check to see if --with-tkconfig was specified.
- if test x"${with_tkconfig}" != x ; then
- case ${with_tkconfig} in
- */tkConfig.sh )
- if test -f ${with_tkconfig}; then
- AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
- with_tkconfig=`echo ${with_tkconfig} | sed 's!/tkConfig\.sh$!!'`
- fi ;;
- esac
- if test -f "${with_tkconfig}/tkConfig.sh" ; then
- ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)`
- else
- AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
- fi
- fi
-
- # then check for a private Tk library
- if test x"${ac_cv_c_tkconfig}" = x ; then
- for i in \
- ../tk \
- `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
- ../../tk \
- `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
- ../../../tk \
- `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
- if test -f "$i/unix/tkConfig.sh" ; then
- ac_cv_c_tkconfig=`(cd $i/unix; pwd)`
- break
- fi
- done
- fi
-
- # on Darwin, check in Framework installation locations
- if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
- for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
- `ls -d /Library/Frameworks 2>/dev/null` \
- `ls -d /Network/Library/Frameworks 2>/dev/null` \
- `ls -d /System/Library/Frameworks 2>/dev/null` \
- ; do
- if test -f "$i/Tk.framework/tkConfig.sh" ; then
- ac_cv_c_tkconfig=`(cd $i/Tk.framework; pwd)`
- break
- fi
- done
- fi
-
- # check in a few common install locations
- if test x"${ac_cv_c_tkconfig}" = x ; then
- for i in `ls -d ${libdir} 2>/dev/null` \
- `ls -d ${exec_prefix}/lib 2>/dev/null` \
- `ls -d ${prefix}/lib 2>/dev/null` \
- `ls -d /usr/local/lib 2>/dev/null` \
- `ls -d /usr/contrib/lib 2>/dev/null` \
- `ls -d /usr/lib 2>/dev/null` \
- ; do
- if test -f "$i/tkConfig.sh" ; then
- ac_cv_c_tkconfig=`(cd $i; pwd)`
- break
- fi
- done
- fi
- # check in a few other private locations
- if test x"${ac_cv_c_tkconfig}" = x ; then
- for i in \
- ${srcdir}/../tk \
- `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
- if test -f "$i/unix/tkConfig.sh" ; then
- ac_cv_c_tkconfig=`(cd $i/unix; pwd)`
- break
- fi
- done
- fi
- ])
-
- if test x"${ac_cv_c_tkconfig}" = x ; then
- TK_BIN_DIR="# no Tk configs found"
- AC_MSG_WARN("Cannot find Tk configuration definitions")
- exit 0
- else
- no_tk=
- TK_BIN_DIR=${ac_cv_c_tkconfig}
- AC_MSG_RESULT([found $TK_BIN_DIR/tkConfig.sh])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TCLCONFIG --
-#
-# Load the tclConfig.sh file
-#
-# Arguments:
-#
-# Requires the following vars to be set:
-# TCL_BIN_DIR
-#
-# Results:
-#
-# Subst the following vars:
-# TCL_BIN_DIR
-# TCL_SRC_DIR
-# TCL_LIB_FILE
-#
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_LOAD_TCLCONFIG, [
- AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh])
-
- if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then
- AC_MSG_RESULT([loading])
- . $TCL_BIN_DIR/tclConfig.sh
- else
- AC_MSG_RESULT([file not found])
- fi
-
- #
- # If the TCL_BIN_DIR is the build directory (not the install directory),
- # then set the common variable name to the value of the build variables.
- # For example, the variable TCL_LIB_SPEC will be set to the value
- # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
- # instead of TCL_BUILD_LIB_SPEC since it will work with both an
- # installed and uninstalled version of Tcl.
- #
-
- if test -f $TCL_BIN_DIR/Makefile ; then
- TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC}
- TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC}
- TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH}
- fi
-
- #
- # eval is required to do the TCL_DBGX substitution
- #
-
- eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
- eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
- eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
-
- eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
- eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
- eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
-
- AC_SUBST(TCL_VERSION)
- AC_SUBST(TCL_BIN_DIR)
- AC_SUBST(TCL_SRC_DIR)
-
- AC_SUBST(TCL_LIB_FILE)
- AC_SUBST(TCL_LIB_FLAG)
- AC_SUBST(TCL_LIB_SPEC)
-
- AC_SUBST(TCL_STUB_LIB_FILE)
- AC_SUBST(TCL_STUB_LIB_FLAG)
- AC_SUBST(TCL_STUB_LIB_SPEC)
-
- AC_SUBST(TCL_LIBS)
- AC_SUBST(TCL_DEFS)
- AC_SUBST(TCL_EXTRA_CFLAGS)
- AC_SUBST(TCL_LD_FLAGS)
- AC_SUBST(TCL_SHLIB_LD_LIBS)
- #AC_SUBST(TCL_BUILD_LIB_SPEC)
- #AC_SUBST(TCL_BUILD_STUB_LIB_SPEC)
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TKCONFIG --
-#
-# Load the tkConfig.sh file
-#
-# Arguments:
-#
-# Requires the following vars to be set:
-# TK_BIN_DIR
-#
-# Results:
-#
-# Sets the following vars that should be in tkConfig.sh:
-# TK_BIN_DIR
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_LOAD_TKCONFIG, [
- AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
-
- if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
- AC_MSG_RESULT([loading])
- . $TK_BIN_DIR/tkConfig.sh
- else
- AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
- fi
-
- #
- # If the TK_BIN_DIR is the build directory (not the install directory),
- # then set the common variable name to the value of the build variables.
- # For example, the variable TK_LIB_SPEC will be set to the value
- # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
- # instead of TK_BUILD_LIB_SPEC since it will work with both an
- # installed and uninstalled version of Tcl.
- #
-
- if test -f $TK_BIN_DIR/Makefile ; then
- TK_LIB_SPEC=${TK_BUILD_LIB_SPEC}
- TK_STUB_LIB_SPEC=${TK_BUILD_STUB_LIB_SPEC}
- TK_STUB_LIB_PATH=${TK_BUILD_STUB_LIB_PATH}
- fi
-
- # Ensure windowingsystem is defined
- if test "${TEA_PLATFORM}" = "unix" ; then
- case ${TK_DEFS} in
- *MAC_OSX_TK*)
- AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
- TEA_WINDOWINGSYSTEM="aqua"
- ;;
- *)
- TEA_WINDOWINGSYSTEM="x11"
- ;;
- esac
- elif test "${TEA_PLATFORM}" = "windows" ; then
- TEA_WINDOWINGSYSTEM="win32"
- fi
-
- #
- # eval is required to do the TK_DBGX substitution
- #
-
- eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
- eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
- eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
-
- eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
- eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
- eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
-
- AC_SUBST(TK_VERSION)
- AC_SUBST(TK_BIN_DIR)
- AC_SUBST(TK_SRC_DIR)
-
- AC_SUBST(TK_LIB_FILE)
- AC_SUBST(TK_LIB_FLAG)
- AC_SUBST(TK_LIB_SPEC)
-
- AC_SUBST(TK_STUB_LIB_FILE)
- AC_SUBST(TK_STUB_LIB_FLAG)
- AC_SUBST(TK_STUB_LIB_SPEC)
-
- AC_SUBST(TK_LIBS)
- AC_SUBST(TK_XINCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SHARED --
-#
-# Allows the building of shared libraries
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --enable-shared=yes|no
-#
-# Defines the following vars:
-# STATIC_BUILD Used for building import/export libraries
-# on Windows.
-#
-# Sets the following vars:
-# SHARED_BUILD Value of 1 or 0
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_ENABLE_SHARED, [
- AC_MSG_CHECKING([how to build libraries])
- AC_ARG_ENABLE(shared,
- [ --enable-shared build and link with shared libraries [--enable-shared]],
- [tcl_ok=$enableval], [tcl_ok=yes])
-
- if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- tcl_ok=$enableval
- else
- tcl_ok=yes
- fi
-
- if test "$tcl_ok" = "yes" ; then
- AC_MSG_RESULT([shared])
- SHARED_BUILD=1
- else
- AC_MSG_RESULT([static])
- SHARED_BUILD=0
- AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?])
- fi
- AC_SUBST(SHARED_BUILD)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_THREADS --
-#
-# Specify if thread support should be enabled. If "yes" is specified
-# as an arg (optional), threads are enabled by default, "no" means
-# threads are disabled. "yes" is the default.
-#
-# TCL_THREADS is checked so that if you are compiling an extension
-# against a threaded core, your extension must be compiled threaded
-# as well.
-#
-# Note that it is legal to have a thread enabled extension run in a
-# threaded or non-threaded Tcl core, but a non-threaded extension may
-# only run in a non-threaded Tcl core.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --enable-threads
-#
-# Sets the following vars:
-# THREADS_LIBS Thread library(s)
-#
-# Defines the following vars:
-# TCL_THREADS
-# _REENTRANT
-#
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_ENABLE_THREADS, [
- AC_ARG_ENABLE(threads, [ --enable-threads build with threads],
- [tcl_ok=$enableval], [tcl_ok=yes])
-
- if test "${enable_threads+set}" = set; then
- enableval="$enable_threads"
- tcl_ok=$enableval
- else
- tcl_ok=yes
- fi
-
- if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
- TCL_THREADS=1
-
- if test "${TEA_PLATFORM}" != "windows" ; then
- # We are always OK on Windows, so check what this platform wants.
- AC_DEFINE(USE_THREAD_ALLOC, 1,
- [Do we want to use the threaded memory allocator?])
- AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
- AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
- AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
- if test "$tcl_ok" = "no"; then
- # Check a little harder for __pthread_mutex_init in the
- # same library, as some systems hide it there until
- # pthread.h is defined. We could alternatively do an
- # AC_TRY_COMPILE with pthread.h, but that will work with
- # libpthread really doesn't exist, like AIX 4.2.
- # [Bug: 4359]
- AC_CHECK_LIB(pthread, __pthread_mutex_init,
- tcl_ok=yes, tcl_ok=no)
- fi
-
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -lpthread"
- else
- AC_CHECK_LIB(pthreads, pthread_mutex_init,
- tcl_ok=yes, tcl_ok=no)
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -lpthreads"
- else
- AC_CHECK_LIB(c, pthread_mutex_init,
- tcl_ok=yes, tcl_ok=no)
- if test "$tcl_ok" = "no"; then
- AC_CHECK_LIB(c_r, pthread_mutex_init,
- tcl_ok=yes, tcl_ok=no)
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -pthread"
- else
- TCL_THREADS=0
- AC_MSG_WARN("Don t know how to find pthread lib on your system - thread support disabled")
- fi
- fi
- fi
- fi
-
-dnl # Not needed in TEA
-dnl # Does the pthread-implementation provide
-dnl # 'pthread_attr_setstacksize' ?
-dnl
-dnl ac_saved_libs=$LIBS
-dnl LIBS="$LIBS $THREADS_LIBS"
-dnl AC_CHECK_FUNCS(pthread_attr_setstacksize)
-dnl LIBS=$ac_saved_libs
- fi
- else
- TCL_THREADS=0
- fi
- # Do checking message here to not mess up interleaved configure output
- AC_MSG_CHECKING([for building with threads])
- if test "${TCL_THREADS}" = "1"; then
- AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
- #LIBS="$LIBS $THREADS_LIBS"
- AC_MSG_RESULT([yes (default)])
- else
- AC_MSG_RESULT([no])
- fi
- # TCL_THREADS sanity checking. See if our request for building with
- # threads is the same as the way Tcl was built. If not, warn the user.
- case ${TCL_DEFS} in
- *THREADS=1*)
- if test "${TCL_THREADS}" = "0"; then
- AC_MSG_WARN([
- Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
- that IS thread-enabled. It is recommended to use --enable-threads.])
- fi
- ;;
- *)
- if test "${TCL_THREADS}" = "1"; then
- AC_MSG_WARN([
- --enable-threads requested, but building against a Tcl that is NOT
- thread-enabled. This is an OK configuration that will also run in
- a thread-enabled core.])
- fi
- ;;
- esac
- AC_SUBST(TCL_THREADS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SYMBOLS --
-#
-# Specify if debugging symbols should be used
-# Memory (TCL_MEM_DEBUG) debugging can also be enabled.
-#
-# Arguments:
-# none
-#
-# Requires the following vars to be set:
-# CFLAGS_DEBUG
-# CFLAGS_OPTIMIZE
-# LDFLAGS_DEBUG
-# LDFLAGS_OPTIMIZE
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --enable-symbols
-#
-# Defines the following vars:
-# CFLAGS_DEFAULT Sets to CFLAGS_DEBUG if true
-# Sets to CFLAGS_OPTIMIZE if false
-# LDFLAGS_DEFAULT Sets to LDFLAGS_DEBUG if true
-# Sets to LDFLAGS_OPTIMIZE if false
-# DBGX Formerly used as debug library extension;
-# always blank now.
-#
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_ENABLE_SYMBOLS, [
- dnl Make sure we are initialized
- AC_REQUIRE([TEA_CONFIG_CFLAGS])
-
- DBGX=""
-
- AC_MSG_CHECKING([for build with symbols])
- AC_ARG_ENABLE(symbols, [ --enable-symbols build with debugging symbols [--disable-symbols]], [tcl_ok=$enableval], [tcl_ok=no])
- if test "$tcl_ok" = "no"; then
- CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE}"
- LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
- AC_MSG_RESULT([no])
- else
- CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
- LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
- if test "$tcl_ok" = "yes"; then
- AC_MSG_RESULT([yes (standard debugging)])
- fi
- fi
- if test "${TEA_PLATFORM}" != "windows" ; then
- LDFLAGS_DEFAULT="${LDFLAGS}"
- fi
-
- AC_SUBST(TCL_DBGX)
- AC_SUBST(CFLAGS_DEFAULT)
- AC_SUBST(LDFLAGS_DEFAULT)
-
- if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
- AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
- fi
-
- if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
- if test "$tcl_ok" = "all"; then
- AC_MSG_RESULT([enabled symbols mem debugging])
- else
- AC_MSG_RESULT([enabled $tcl_ok debugging])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_LANGINFO --
-#
-# Allows use of modern nl_langinfo check for better l10n.
-# This is only relevant for Unix.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --enable-langinfo=yes|no (default is yes)
-#
-# Defines the following vars:
-# HAVE_LANGINFO Triggers use of nl_langinfo if defined.
-#
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_ENABLE_LANGINFO, [
- AC_ARG_ENABLE(langinfo,
- [ --enable-langinfo use nl_langinfo if possible to determine
- encoding at startup, otherwise use old heuristic],
- [langinfo_ok=$enableval], [langinfo_ok=yes])
-
- HAVE_LANGINFO=0
- if test "$langinfo_ok" = "yes"; then
- AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
- fi
- AC_MSG_CHECKING([whether to use nl_langinfo])
- if test "$langinfo_ok" = "yes"; then
- AC_CACHE_VAL(tcl_cv_langinfo_h,
- AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);],
- [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no]))
- AC_MSG_RESULT($tcl_cv_langinfo_h)
- if test $tcl_cv_langinfo_h = yes; then
- AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
- fi
- else
- AC_MSG_RESULT([$langinfo_ok])
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_CFLAGS
-#
-# Try to determine the proper flags to pass to the compiler
-# for building shared libraries and other such nonsense.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines the following vars:
-#
-# DL_OBJS - Name of the object file that implements dynamic
-# loading for Tcl on this system.
-# DL_LIBS - Library file(s) to include in tclsh and other base
-# applications in order for the "load" command to work.
-# LDFLAGS - Flags to pass to the compiler when linking object
-# files into an executable application binary such
-# as tclsh.
-# LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
-# that tell the run-time dynamic linker where to look
-# for shared libraries such as libtcl.so. Depends on
-# the variable LIB_RUNTIME_DIR in the Makefile.
-# SHLIB_CFLAGS - Flags to pass to cc when compiling the components
-# of a shared library (may request position-independent
-# code, among other things).
-# SHLIB_LD - Base command to use for combining object files
-# into a shared library.
-# SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
-# creating shared libraries. This symbol typically
-# goes at the end of the "ld" commands that build
-# shared libraries. The value of the symbol is
-# "${LIBS}" if all of the dependent libraries should
-# be specified when creating a shared library. If
-# dependent libraries should not be specified (as on
-# SunOS 4.x, where they cause the link to fail, or in
-# general if Tcl and Tk aren't themselves shared
-# libraries), then this symbol has an empty string
-# as its value.
-# SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable
-# extensions. An empty string means we don't know how
-# to use shared libraries on this platform.
-# TCL_LIB_FILE - Name of the file that contains the Tcl library, such
-# as libtcl7.8.so or libtcl7.8.a.
-# TCL_LIB_SUFFIX -Specifies everything that comes after the "libtcl"
-# in the shared library name, using the
-# ${PACKAGE_VERSION} variable to put the version in
-# the right place. This is used by platforms that
-# need non-standard library names.
-# Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD,
-# since it needs to have a version after the .so, and
-# ${PACKAGE_VERSION}.a on AIX, since the Tcl shared
-# library needs to have a .a extension whereas shared
-# objects for loadable extensions have a .so
-# extension. Defaults to
-# ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
-# TCL_NEEDS_EXP_FILE -
-# 1 means that an export file is needed to link to a
-# shared library.
-# TCL_EXP_FILE - The name of the installed export / import file which
-# should be used to link to the Tcl shared library.
-# Empty if Tcl is unshared.
-# TCL_BUILD_EXP_FILE -
-# The name of the built export / import file which
-# should be used to link to the Tcl shared library.
-# Empty if Tcl is unshared.
-# CFLAGS_DEBUG -
-# Flags used when running the compiler in debug mode
-# CFLAGS_OPTIMIZE -
-# Flags used when running the compiler in optimize mode
-# CFLAGS - We add CFLAGS to pass to the compiler
-#
-# Subst's the following vars:
-# DL_LIBS
-# CFLAGS_DEBUG
-# CFLAGS_OPTIMIZE
-# CFLAGS_WARNING
-#
-# STLIB_LD
-# SHLIB_LD
-# SHLIB_CFLAGS
-# LDFLAGS_DEBUG
-# LDFLAGS_OPTIMIZE
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_CONFIG_CFLAGS, [
- dnl Make sure we are initialized
- AC_REQUIRE([TEA_INIT])
-
- # Step 0: Enable 64 bit support?
-
- AC_MSG_CHECKING([if 64bit support is enabled])
- AC_ARG_ENABLE(64bit,[ --enable-64bit enable 64bit support (where applicable)], [do64bit=$enableval], [do64bit=no])
- AC_MSG_RESULT([$do64bit])
-
- # Step 0.b: Enable Solaris 64 bit VIS support?
-
- AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
- AC_ARG_ENABLE(64bit-vis,[ --enable-64bit-vis enable 64bit Sparc VIS support], [do64bitVIS=$enableval], [do64bitVIS=no])
- AC_MSG_RESULT([$do64bitVIS])
-
- if test "$do64bitVIS" = "yes"; then
- # Force 64bit on with VIS
- do64bit=yes
- fi
-
- # Step 0.c: Cross-compiling options for Windows/CE builds?
-
- if test "${TEA_PLATFORM}" = "windows" ; then
- AC_MSG_CHECKING([if Windows/CE build is requested])
- AC_ARG_ENABLE(wince,[ --enable-wince enable Win/CE support (where applicable)], [doWince=$enableval], [doWince=no])
- AC_MSG_RESULT($doWince)
- fi
-
- # Step 1: set the variable "system" to hold the name and version number
- # for the system. This can usually be done via the "uname" command, but
- # there are a few systems, like Next, where this doesn't work.
-
- AC_MSG_CHECKING([system version (for dynamic loading)])
- if test -f /usr/lib/NextStep/software_version; then
- system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
- else
- system=`uname -s`-`uname -r`
- if test "$?" -ne 0 ; then
- AC_MSG_RESULT([unknown (can't find uname command)])
- system=unknown
- else
- # Special check for weird MP-RAS system (uname returns weird
- # results, and the version is kept in special file).
-
- if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
- system=MP-RAS-`awk '{print $3}' /etc/.relid`
- fi
- if test "`uname -s`" = "AIX" ; then
- system=AIX-`uname -v`.`uname -r`
- fi
- if test "${TEA_PLATFORM}" = "windows" ; then
- system=windows
- fi
- AC_MSG_RESULT([$system])
- fi
- fi
-
- # Step 2: check for existence of -ldl library. This is needed because
- # Linux can use either -ldl or -ldld for dynamic loading.
-
- AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
-
- # Step 3: set configuration options based on system name and version.
- # This is similar to Tcl's unix/tcl.m4 except that we've added a
- # "windows" case and CC_SEARCH_FLAGS becomes LD_SEARCH_FLAGS for us
- # (and we have no CC_SEARCH_FLAGS).
-
- do64bit_ok=no
- LDFLAGS_ORIG="$LDFLAGS"
- TCL_EXPORT_FILE_SUFFIX=""
- UNSHARED_LIB_SUFFIX=""
- TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
- ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
- TCL_LIB_VERSIONS_OK=ok
- CFLAGS_DEBUG=-g
- if test "$GCC" = "yes" ; then
- CFLAGS_OPTIMIZE=-O2
- CFLAGS_WARNING="-Wall -Wno-implicit-int"
- else
- CFLAGS_OPTIMIZE=-O
- CFLAGS_WARNING=""
- fi
- TCL_NEEDS_EXP_FILE=0
- TCL_BUILD_EXP_FILE=""
- TCL_EXP_FILE=""
-dnl FIXME: Replace AC_CHECK_PROG with AC_CHECK_TOOL once cross compiling is fixed.
-dnl AC_CHECK_TOOL(AR, ar, :)
- AC_CHECK_PROG(AR, ar, ar)
- STLIB_LD='${AR} cr'
- LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
- case $system in
- windows)
- # This is a 2-stage check to make sure we have the 64-bit SDK
- # We have to know where the SDK is installed.
- # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
- # MACHINE is IX86 for LINK, but this is used by the manifest,
- # which requires x86|amd64|ia64.
- MACHINE="X86"
- if test "$do64bit" != "no" ; then
- if test "x${MSSDK}x" = "xx" ; then
- MSSDK="C:/Progra~1/Microsoft Platform SDK"
- fi
- MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'`
- PATH64=""
- case "$do64bit" in
- amd64|x64|yes)
- MACHINE="AMD64" ; # default to AMD64 64-bit build
- PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
- ;;
- ia64)
- MACHINE="IA64"
- PATH64="${MSSDK}/Bin/Win64"
- ;;
- esac
- if test ! -d "${PATH64}" ; then
- AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
- AC_MSG_WARN([Ensure latest Platform SDK is installed])
- do64bit="no"
- else
- AC_MSG_RESULT([ Using 64-bit $MACHINE mode])
- do64bit_ok="yes"
- fi
- fi
-
- if test "$doWince" != "no" ; then
- if test "$do64bit" != "no" ; then
- AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
- fi
- if test "$GCC" = "yes" ; then
- AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
- fi
- TEA_PATH_CELIB
- # Set defaults for common evc4/PPC2003 setup
- # Currently Tcl requires 300+, possibly 420+ for sockets
- CEVERSION=420; # could be 211 300 301 400 420 ...
- TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ...
- ARCH=ARM; # could be ARM MIPS X86EM ...
- PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
- if test "$doWince" != "yes"; then
- # If !yes then the user specified something
- # Reset ARCH to allow user to skip specifying it
- ARCH=
- eval `echo $doWince | awk -F, '{ \
- if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
- if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
- if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
- if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
- if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
- }'`
- if test "x${ARCH}" = "x" ; then
- ARCH=$TARGETCPU;
- fi
- fi
- OSVERSION=WCE$CEVERSION;
- if test "x${WCEROOT}" = "x" ; then
- WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
- if test ! -d "${WCEROOT}" ; then
- WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
- fi
- fi
- if test "x${SDKROOT}" = "x" ; then
- SDKROOT="C:/Program Files/Windows CE Tools"
- if test ! -d "${SDKROOT}" ; then
- SDKROOT="C:/Windows CE Tools"
- fi
- fi
- WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
- SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
- if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
- -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
- AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
- doWince="no"
- else
- # We could PATH_NOSPACE these, but that's not important,
- # as long as we quote them when used.
- CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
- if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
- CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
- fi
- CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
- fi
- fi
-
- if test "$GCC" != "yes" ; then
- if test "${SHARED_BUILD}" = "0" ; then
- runtime=-MT
- else
- runtime=-MD
- fi
-
- if test "$do64bit" != "no" ; then
- # All this magic is necessary for the Win64 SDK RC1 - hobbs
- CC="\"${PATH64}/cl.exe\""
- CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
- RC="\"${MSSDK}/bin/rc.exe\""
- lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
- LINKBIN="\"${PATH64}/link.exe\""
- CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
- CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
- # Avoid 'unresolved external symbol __security_cookie'
- # errors, c.f. http://support.microsoft.com/?id=894573
- TEA_ADD_LIBS([bufferoverflowU.lib])
- elif test "$doWince" != "no" ; then
- CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
- if test "${TARGETCPU}" = "X86"; then
- CC="\"${CEBINROOT}/cl.exe\""
- else
- CC="\"${CEBINROOT}/cl${ARCH}.exe\""
- fi
- CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
- RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
- arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
- defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
- if test "${SHARED_BUILD}" = "1" ; then
- # Static CE builds require static celib as well
- defs="${defs} _DLL"
- fi
- for i in $defs ; do
- AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
- done
- AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
- AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
- CFLAGS_DEBUG="-nologo -Zi -Od"
- CFLAGS_OPTIMIZE="-nologo -Ox"
- lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
- lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
- LINKBIN="\"${CEBINROOT}/link.exe\""
- AC_SUBST(CELIB_DIR)
- else
- RC="rc"
- lflags="-nologo"
- LINKBIN="link"
- CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
- CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
- fi
- fi
-
- if test "$GCC" = "yes"; then
- # mingw gcc mode
- RC="windres"
- CFLAGS_DEBUG="-g"
- CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
- SHLIB_LD="$CC -shared"
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
- LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
- else
- SHLIB_LD="${LINKBIN} -dll ${lflags}"
- # link -lib only works when -lib is the first arg
- STLIB_LD="${LINKBIN} -lib ${lflags}"
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
- PATHTYPE=-w
- # For information on what debugtype is most useful, see:
- # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
- # This essentially turns it all on.
- LDFLAGS_DEBUG="-debug:full -debugtype:both -warn:2"
- LDFLAGS_OPTIMIZE="-release"
- if test "$doWince" != "no" ; then
- LDFLAGS_CONSOLE="-link ${lflags}"
- LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
- else
- LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
- LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
- fi
- fi
-
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".dll"
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
-
- TCL_LIB_VERSIONS_OK=nodots
- # Bogus to avoid getting this turned off
- DL_OBJS="tclLoadNone.obj"
- ;;
- AIX-*)
- if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then
- # AIX requires the _r compiler when gcc isn't being used
- case "${CC}" in
- *_r)
- # ok ...
- ;;
- *)
- CC=${CC}_r
- ;;
- esac
- AC_MSG_RESULT([Using $CC for compiling with threads])
- fi
- LIBS="$LIBS -lc"
- SHLIB_CFLAGS=""
- SHLIB_SUFFIX=".so"
- SHLIB_LD_LIBS='${LIBS}'
-
- DL_OBJS="tclLoadDl.o"
- LD_LIBRARY_PATH_VAR="LIBPATH"
-
- # AIX v<=4.1 has some different flags than 4.2+
- if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then
- #LIBOBJS="$LIBOBJS tclLoadAix.o"
- AC_LIBOBJ([tclLoadAix])
- DL_LIBS="-lld"
- fi
-
- # Check to enable 64-bit flags for compiler/linker on AIX 4+
- if test "$do64bit" = "yes" -a "`uname -v`" -gt "3" ; then
- if test "$GCC" = "yes" ; then
- AC_MSG_WARN("64bit mode not supported with GCC on $system")
- else
- do64bit_ok=yes
- CFLAGS="$CFLAGS -q64"
- LDFLAGS="$LDFLAGS -q64"
- RANLIB="${RANLIB} -X64"
- AR="${AR} -X64"
- SHLIB_LD_FLAGS="-b64"
- fi
- fi
-
- if test "`uname -m`" = "ia64" ; then
- # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
- SHLIB_LD="/usr/ccs/bin/ld -G -z text"
- # AIX-5 has dl* in libc.so
- DL_LIBS=""
- if test "$GCC" = "yes" ; then
- LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- else
- LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
- fi
- else
- if test "$GCC" = "yes" ; then
- SHLIB_LD="gcc -shared"
- else
- SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry"
- fi
- SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix ${SHLIB_LD} ${SHLIB_LD_FLAGS}"
- DL_LIBS="-ldl"
- LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- TCL_NEEDS_EXP_FILE=1
- TCL_EXPORT_FILE_SUFFIX='${PACKAGE_VERSION}.exp'
- fi
-
- # On AIX <=v4 systems, libbsd.a has to be linked in to support
- # non-blocking file IO. This library has to be linked in after
- # the MATH_LIBS or it breaks the pow() function. The way to
- # insure proper sequencing, is to add it to the tail of MATH_LIBS.
- # This library also supplies gettimeofday.
- #
- # AIX does not have a timezone field in struct tm. When the AIX
- # bsd library is used, the timezone global and the gettimeofday
- # methods are to be avoided for timezone deduction instead, we
- # deduce the timezone by comparing the localtime result on a
- # known GMT value.
-
- AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no)
- if test $libbsd = yes; then
- MATH_LIBS="$MATH_LIBS -lbsd"
- AC_DEFINE(USE_DELTA_FOR_TZ, 1, [Do we need a special AIX hack for timezones?])
- fi
- ;;
- BeOS*)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD="${CC} -nostart"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- ;;
- BSD/OS-2.1*|BSD/OS-3*)
- SHLIB_CFLAGS=""
- SHLIB_LD="shlicc -r"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- LD_SEARCH_FLAGS=""
- ;;
- BSD/OS-4.*)
- SHLIB_CFLAGS="-export-dynamic -fPIC"
- SHLIB_LD="cc -shared"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- LDFLAGS="$LDFLAGS -export-dynamic"
- LD_SEARCH_FLAGS=""
- ;;
- dgux*)
- SHLIB_CFLAGS="-K PIC"
- SHLIB_LD="cc -G"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- LD_SEARCH_FLAGS=""
- ;;
- HP-UX-*.11.*)
- # Use updated header definitions where possible
- AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
-
- SHLIB_SUFFIX=".sl"
- AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
- if test "$tcl_ok" = yes; then
- SHLIB_CFLAGS="+z"
- SHLIB_LD="ld -b"
- SHLIB_LD_LIBS='${LIBS}'
- DL_OBJS="tclLoadShl.o"
- DL_LIBS="-ldld"
- LDFLAGS="$LDFLAGS -Wl,-E"
- LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
- LD_LIBRARY_PATH_VAR="SHLIB_PATH"
- fi
- if test "$GCC" = "yes" ; then
- SHLIB_LD="gcc -shared"
- SHLIB_LD_LIBS='${LIBS}'
- LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
- fi
-
- # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
- #CFLAGS="$CFLAGS +DAportable"
-
- # Check to enable 64-bit flags for compiler/linker
- if test "$do64bit" = "yes" ; then
- if test "$GCC" = "yes" ; then
- hpux_arch=`${CC} -dumpmachine`
- case $hpux_arch in
- hppa64*)
- # 64-bit gcc in use. Fix flags for GNU ld.
- do64bit_ok=yes
- SHLIB_LD="${CC} -shared"
- SHLIB_LD_LIBS='${LIBS}'
- ;;
- *)
- AC_MSG_WARN("64bit mode not supported with GCC on $system")
- ;;
- esac
- else
- do64bit_ok=yes
- CFLAGS="$CFLAGS +DD64"
- LDFLAGS="$LDFLAGS +DD64"
- fi
- fi
- ;;
- HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*)
- SHLIB_SUFFIX=".sl"
- AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
- if test "$tcl_ok" = yes; then
- SHLIB_CFLAGS="+z"
- SHLIB_LD="ld -b"
- SHLIB_LD_LIBS=""
- DL_OBJS="tclLoadShl.o"
- DL_LIBS="-ldld"
- LDFLAGS="$LDFLAGS -Wl,-E"
- LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
- fi
- LD_LIBRARY_PATH_VAR="SHLIB_PATH"
- ;;
- IRIX-4.*)
- SHLIB_CFLAGS="-G 0"
- SHLIB_SUFFIX=".a"
- SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
- SHLIB_LD_LIBS='${LIBS}'
- DL_OBJS="tclLoadAout.o"
- DL_LIBS=""
- LDFLAGS="$LDFLAGS -Wl,-D,08000000"
- LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- SHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'
- ;;
- IRIX-5.*)
- SHLIB_CFLAGS=""
- SHLIB_LD="ld -shared -rdata_shared"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- ;;
- IRIX-6.*|IRIX64-6.5*)
- SHLIB_CFLAGS=""
- SHLIB_LD="ld -n32 -shared -rdata_shared"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- if test "$GCC" = "yes" ; then
- CFLAGS="$CFLAGS -mabi=n32"
- LDFLAGS="$LDFLAGS -mabi=n32"
- else
- case $system in
- IRIX-6.3)
- # Use to build 6.2 compatible binaries on 6.3.
- CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
- ;;
- *)
- CFLAGS="$CFLAGS -n32"
- ;;
- esac
- LDFLAGS="$LDFLAGS -n32"
- fi
- ;;
- IRIX64-6.*)
- SHLIB_CFLAGS=""
- SHLIB_LD="ld -n32 -shared -rdata_shared"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-
- # Check to enable 64-bit flags for compiler/linker
-
- if test "$do64bit" = "yes" ; then
- if test "$GCC" = "yes" ; then
- AC_MSG_WARN([64bit mode not supported by gcc])
- else
- do64bit_ok=yes
- SHLIB_LD="ld -64 -shared -rdata_shared"
- CFLAGS="$CFLAGS -64"
- LDFLAGS="$LDFLAGS -64"
- fi
- fi
- ;;
- Linux*)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
-
- CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
- # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings
- # when you inline the string and math operations. Turn this off to
- # get rid of the warnings.
-
- #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
-
- if test "$have_dl" = yes; then
- SHLIB_LD="${CC} -shared"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- else
- AC_CHECK_HEADER(dld.h, [
- SHLIB_LD="ld -shared"
- DL_OBJS="tclLoadDld.o"
- DL_LIBS="-ldld"
- LD_SEARCH_FLAGS=""])
- fi
- if test "`uname -m`" = "alpha" ; then
- CFLAGS="$CFLAGS -mieee"
- fi
-
- # The combo of gcc + glibc has a bug related
- # to inlining of functions like strtod(). The
- # -fno-builtin flag should address this problem
- # but it does not work. The -fno-inline flag
- # is kind of overkill but it works.
- # Disable inlining only when one of the
- # files in compat/*.c is being linked in.
- if test x"${USE_COMPAT}" != x ; then
- CFLAGS="$CFLAGS -fno-inline"
- fi
-
- ;;
- GNU*)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
-
- if test "$have_dl" = yes; then
- SHLIB_LD="${CC} -shared"
- DL_OBJS=""
- DL_LIBS="-ldl"
- LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
- LD_SEARCH_FLAGS=""
- else
- AC_CHECK_HEADER(dld.h, [
- SHLIB_LD="ld -shared"
- DL_OBJS=""
- DL_LIBS="-ldld"
- LD_SEARCH_FLAGS=""])
- fi
- if test "`uname -m`" = "alpha" ; then
- CFLAGS="$CFLAGS -mieee"
- fi
- ;;
- MP-RAS-02*)
- SHLIB_CFLAGS="-K PIC"
- SHLIB_LD="cc -G"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- LD_SEARCH_FLAGS=""
- ;;
- MP-RAS-*)
- SHLIB_CFLAGS="-K PIC"
- SHLIB_LD="cc -G"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- LDFLAGS="$LDFLAGS -Wl,-Bexport"
- LD_SEARCH_FLAGS=""
- ;;
- NetBSD-*|FreeBSD-[[1-2]].*)
- # Not available on all versions: check for include file.
- AC_CHECK_HEADER(dlfcn.h, [
- # NetBSD/SPARC needs -fPIC, -fpic will not do.
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD="ld -Bshareable -x"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- AC_MSG_CHECKING([for ELF])
- AC_EGREP_CPP(yes, [
-#ifdef __ELF__
- yes
-#endif
- ],
- AC_MSG_RESULT([yes])
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so',
- AC_MSG_RESULT([no])
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0'
- )
- ], [
- SHLIB_CFLAGS=""
- SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".a"
- DL_OBJS="tclLoadAout.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- ])
-
- # FreeBSD doesn't handle version numbers with dots.
-
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- OpenBSD-*)
- SHLIB_LD="${CC} -shared"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS=""
- AC_MSG_CHECKING(for ELF)
- AC_EGREP_CPP(yes, [
-#ifdef __ELF__
- yes
-#endif
- ],
- [AC_MSG_RESULT(yes)
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0'],
- [AC_MSG_RESULT(no)
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0']
- )
-
- # OpenBSD doesn't do version numbers with dots.
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- FreeBSD-*)
- # FreeBSD 3.* and greater have ELF.
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD="ld -Bshareable -x"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LDFLAGS="$LDFLAGS -export-dynamic"
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- if test "${TCL_THREADS}" = "1" ; then
- # The -pthread needs to go in the CFLAGS, not LIBS
- LIBS=`echo $LIBS | sed s/-pthread//`
- CFLAGS="$CFLAGS -pthread"
- LDFLAGS="$LDFLAGS -pthread"
- fi
- case $system in
- FreeBSD-3.*)
- # FreeBSD-3 doesn't handle version numbers with dots.
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so'
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- esac
- ;;
- Darwin-*)
- CFLAGS_OPTIMIZE="-Os"
- SHLIB_CFLAGS="-fno-common"
- if test $do64bit = yes; then
- do64bit_ok=yes
- CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
- fi
- SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS}'
- AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
- hold_ldflags=$LDFLAGS
- LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
- AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
- LDFLAGS=$hold_ldflags])
- if test $tcl_cv_ld_single_module = yes; then
- SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
- fi
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".dylib"
- DL_OBJS="tclLoadDyld.o"
- DL_LIBS=""
- # Don't use -prebind when building for Mac OS X 10.4 or later only:
- test -z "${MACOSX_DEPLOYMENT_TARGET}" || \
- test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F. '{print [$]2}'`" -lt 4 && \
- LDFLAGS="$LDFLAGS -prebind"
- LDFLAGS="$LDFLAGS -headerpad_max_install_names"
- AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [
- hold_ldflags=$LDFLAGS
- LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
- AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no)
- LDFLAGS=$hold_ldflags])
- if test $tcl_cv_ld_search_paths_first = yes; then
- LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
- fi
- LD_SEARCH_FLAGS=""
- LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
- ;;
- NEXTSTEP-*)
- SHLIB_CFLAGS=""
- SHLIB_LD="cc -nostdlib -r"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadNext.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS=""
- ;;
- OS/390-*)
- CFLAGS_OPTIMIZE="" # Optimizer is buggy
- AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h
- [Should OS/390 do the right thing with sockets?])
- ;;
- OSF1-1.0|OSF1-1.1|OSF1-1.2)
- # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1
- SHLIB_CFLAGS=""
- # Hack: make package name same as library name
- SHLIB_LD='ld -R -export $@:'
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadOSF.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS=""
- ;;
- OSF1-1.*)
- # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2
- SHLIB_CFLAGS="-fPIC"
- if test "$SHARED_BUILD" = "1" ; then
- SHLIB_LD="ld -shared"
- else
- SHLIB_LD="ld -non_shared"
- fi
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS=""
- ;;
- OSF1-V*)
- # Digital OSF/1
- SHLIB_CFLAGS=""
- if test "$SHARED_BUILD" = "1" ; then
- SHLIB_LD="${CC} -shared"
- else
- SHLIB_LD="${CC} -non_shared"
- fi
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
- if test "$GCC" = "yes" ; then
- CFLAGS="$CFLAGS -mieee"
- else
- CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"
- fi
- # see pthread_intro(3) for pthread support on osf1, k.furukawa
- if test "${TCL_THREADS}" = "1" ; then
- CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
- CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
- LIBS=`echo $LIBS | sed s/-lpthreads//`
- if test "$GCC" = "yes" ; then
- LIBS="$LIBS -lpthread -lmach -lexc"
- else
- CFLAGS="$CFLAGS -pthread"
- LDFLAGS="$LDFLAGS -pthread"
- fi
- fi
-
- ;;
- QNX-6*)
- # QNX RTP
- # This may work for all QNX, but it was only reported for v6.
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD="ld -Bshareable -x"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- # dlopen is in -lc on QNX
- DL_LIBS=""
- LD_SEARCH_FLAGS=""
- ;;
- RISCos-*)
- SHLIB_CFLAGS="-G 0"
- SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".a"
- DL_OBJS="tclLoadAout.o"
- DL_LIBS=""
- LDFLAGS="$LDFLAGS -Wl,-D,08000000"
- LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- ;;
- SCO_SV-3.2*)
- # Note, dlopen is available only on SCO 3.2.5 and greater. However,
- # this test works, since "uname -s" was non-standard in 3.2.4 and
- # below.
- if test "$GCC" = "yes" ; then
- SHLIB_CFLAGS="-fPIC -melf"
- LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
- else
- SHLIB_CFLAGS="-Kpic -belf"
- LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
- fi
- SHLIB_LD="ld -G"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS=""
- LD_SEARCH_FLAGS=""
- ;;
- SINIX*5.4*)
- SHLIB_CFLAGS="-K PIC"
- SHLIB_LD="cc -G"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- LD_SEARCH_FLAGS=""
- ;;
- SunOS-4*)
- SHLIB_CFLAGS="-PIC"
- SHLIB_LD="ld"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
-
- # SunOS can't handle version numbers with dots in them in library
- # specs, like -ltcl7.5, so use -ltcl75 instead. Also, it
- # requires an extra version number at the end of .so file names.
- # So, the library has to have a name like libtcl75.so.1.0
-
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0'
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- SunOS-5.[[0-6]])
- # Careful to not let 5.10+ fall into this case
-
- # Note: If _REENTRANT isn't defined, then Solaris
- # won't define thread-safe library routines.
-
- AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
- AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
- [Do we really want to follow the standard? Yes we do!])
-
- SHLIB_CFLAGS="-KPIC"
-
- # Note: need the LIBS below, otherwise Tk won't find Tcl's
- # symbols when dynamically loaded into tclsh.
-
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- if test "$GCC" = "yes" ; then
- SHLIB_LD="$CC -shared"
- LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- else
- SHLIB_LD="/usr/ccs/bin/ld -G -z text"
- LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
- fi
- ;;
- SunOS-5*)
-
- # Note: If _REENTRANT isn't defined, then Solaris
- # won't define thread-safe library routines.
-
- AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
- AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
- [Do we really want to follow the standard? Yes we do!])
-
- SHLIB_CFLAGS="-KPIC"
-
- # Check to enable 64-bit flags for compiler/linker
- if test "$do64bit" = "yes" ; then
- arch=`isainfo`
- if test "$arch" = "sparcv9 sparc" ; then
- if test "$GCC" = "yes" ; then
- if test "`gcc -dumpversion` | awk -F. '{print $1}'" -lt "3" ; then
- AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
- else
- do64bit_ok=yes
- CFLAGS="$CFLAGS -m64 -mcpu=v9"
- LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
- SHLIB_CFLAGS="-fPIC"
- fi
- else
- do64bit_ok=yes
- if test "$do64bitVIS" = "yes" ; then
- CFLAGS="$CFLAGS -xarch=v9a"
- LDFLAGS="$LDFLAGS -xarch=v9a"
- else
- CFLAGS="$CFLAGS -xarch=v9"
- LDFLAGS="$LDFLAGS -xarch=v9"
- fi
- # Solaris 64 uses this as well
- #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
- fi
- elif test "$arch" = "amd64 i386" ; then
- if test "$GCC" = "yes" ; then
- AC_MSG_WARN([64bit mode not supported with GCC on $system])
- else
- do64bit_ok=yes
- CFLAGS="$CFLAGS -xarch=amd64"
- LDFLAGS="$LDFLAGS -xarch=amd64"
- fi
- else
- AC_MSG_WARN([64bit mode not supported for $arch])
- fi
- fi
-
- # Note: need the LIBS below, otherwise Tk won't find Tcl's
- # symbols when dynamically loaded into tclsh.
-
- SHLIB_LD_LIBS='${LIBS}'
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- if test "$GCC" = "yes" ; then
- SHLIB_LD="$CC -shared"
- LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- if test "$do64bit" = "yes" ; then
- # We need to specify -static-libgcc or we need to
- # add the path to the sparv9 libgcc.
- # JH: static-libgcc is necessary for core Tcl, but may
- # not be necessary for extensions.
- SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
- # for finding sparcv9 libgcc, get the regular libgcc
- # path, remove so name and append 'sparcv9'
- #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
- #LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS},-R,$v9gcclibdir"
- fi
- else
- SHLIB_LD="/usr/ccs/bin/ld -G -z text"
- LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
- fi
- ;;
- ULTRIX-4.*)
- SHLIB_CFLAGS="-G 0"
- SHLIB_SUFFIX=".a"
- SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
- SHLIB_LD_LIBS='${LIBS}'
- DL_OBJS="tclLoadAout.o"
- DL_LIBS=""
- LDFLAGS="$LDFLAGS -Wl,-D,08000000"
- LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- if test "$GCC" != "yes" ; then
- CFLAGS="$CFLAGS -DHAVE_TZSET -std1"
- fi
- ;;
- UNIX_SV* | UnixWare-5*)
- SHLIB_CFLAGS="-KPIC"
- SHLIB_LD="cc -G"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- DL_OBJS="tclLoadDl.o"
- DL_LIBS="-ldl"
- # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
- # that don't grok the -Bexport option. Test that it does.
- hold_ldflags=$LDFLAGS
- AC_MSG_CHECKING(for ld accepts -Bexport flag)
- LDFLAGS="$LDFLAGS -Wl,-Bexport"
- AC_TRY_LINK(, [int i;], [found=yes],
- [LDFLAGS=$hold_ldflags found=no])
- AC_MSG_RESULT([$found])
- LD_SEARCH_FLAGS=""
- ;;
- esac
-
- if test "$do64bit" != "no" -a "$do64bit_ok" = "no" ; then
- AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
- fi
-
- # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic
- # Loading for Tcl -- What Became of It?". Proc. 2nd Tcl/Tk Workshop,
- # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need
- # to determine which of several header files defines the a.out file
- # format (a.out.h, sys/exec.h, or sys/exec_aout.h). At present, we
- # support only a file format that is more or less version-7-compatible.
- # In particular,
- # - a.out files must begin with `struct exec'.
- # - the N_TXTOFF on the `struct exec' must compute the seek address
- # of the text segment
- # - The `struct exec' must contain a_magic, a_text, a_data, a_bss
- # and a_entry fields.
- # The following compilation should succeed if and only if either sys/exec.h
- # or a.out.h is usable for the purpose.
- #
- # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the
- # `struct exec' includes a second header that contains information that
- # duplicates the v7 fields that are needed.
-
- if test "x$DL_OBJS" = "xtclLoadAout.o" ; then
- AC_MSG_CHECKING([sys/exec.h])
- AC_TRY_COMPILE([#include ],[
- struct exec foo;
- unsigned long seek;
- int flag;
-#if defined(__mips) || defined(mips)
- seek = N_TXTOFF (foo.ex_f, foo.ex_o);
-#else
- seek = N_TXTOFF (foo);
-#endif
- flag = (foo.a_magic == OMAGIC);
- return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
- ], tcl_ok=usable, tcl_ok=unusable)
- AC_MSG_RESULT([$tcl_ok])
- if test $tcl_ok = usable; then
- AC_DEFINE(USE_SYS_EXEC_H, 1,
- [Should we use when doing dynamic loading?])
- else
- AC_MSG_CHECKING([a.out.h])
- AC_TRY_COMPILE([#include ],[
- struct exec foo;
- unsigned long seek;
- int flag;
-#if defined(__mips) || defined(mips)
- seek = N_TXTOFF (foo.ex_f, foo.ex_o);
-#else
- seek = N_TXTOFF (foo);
-#endif
- flag = (foo.a_magic == OMAGIC);
- return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
- ], tcl_ok=usable, tcl_ok=unusable)
- AC_MSG_RESULT([$tcl_ok])
- if test $tcl_ok = usable; then
- AC_DEFINE(USE_A_OUT_H, 1,
- [Should we use when doing dynamic loading?])
- else
- AC_MSG_CHECKING([sys/exec_aout.h])
- AC_TRY_COMPILE([#include ],[
- struct exec foo;
- unsigned long seek;
- int flag;
-#if defined(__mips) || defined(mips)
- seek = N_TXTOFF (foo.ex_f, foo.ex_o);
-#else
- seek = N_TXTOFF (foo);
-#endif
- flag = (foo.a_midmag == OMAGIC);
- return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
- ], tcl_ok=usable, tcl_ok=unusable)
- AC_MSG_RESULT([$tcl_ok])
- if test $tcl_ok = usable; then
- AC_DEFINE(USE_SYS_EXEC_AOUT_H, 1,
- [Should we use when doing dynamic loading?])
- else
- DL_OBJS=""
- fi
- fi
- fi
- fi
-
- # Step 5: disable dynamic loading if requested via a command-line switch.
-
- AC_ARG_ENABLE(load, [ --disable-load disallow dynamic loading and "load" command],
- [tcl_ok=$enableval], [tcl_ok=yes])
- if test "$tcl_ok" = "no"; then
- DL_OBJS=""
- fi
-
- if test "x$DL_OBJS" != "x" ; then
- BUILD_DLTEST="\$(DLTEST_TARGETS)"
- else
- echo "Can't figure out how to do dynamic loading or shared libraries"
- echo "on this system."
- SHLIB_CFLAGS=""
- SHLIB_LD=""
- SHLIB_SUFFIX=""
- DL_OBJS="tclLoadNone.o"
- DL_LIBS=""
- LDFLAGS="$LDFLAGS_ORIG"
- LD_SEARCH_FLAGS=""
- BUILD_DLTEST=""
- fi
-
- # If we're running gcc, then change the C flags for compiling shared
- # libraries to the right flags for gcc, instead of those for the
- # standard manufacturer compiler.
-
- if test "$DL_OBJS" != "tclLoadNone.o" ; then
- if test "$GCC" = "yes" ; then
- case $system in
- AIX-*)
- ;;
- BSD/OS*)
- ;;
- IRIX*)
- ;;
- NetBSD-*|FreeBSD-*)
- ;;
- Darwin-*)
- ;;
- RISCos-*)
- ;;
- SCO_SV-3.2*)
- ;;
- ULTRIX-4.*)
- ;;
- windows)
- ;;
- *)
- SHLIB_CFLAGS="-fPIC"
- ;;
- esac
- fi
- fi
-
- if test "$SHARED_LIB_SUFFIX" = "" ; then
- SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'
- fi
- if test "$UNSHARED_LIB_SUFFIX" = "" ; then
- UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'
- fi
-
- AC_SUBST(DL_LIBS)
- AC_SUBST(CFLAGS_DEBUG)
- AC_SUBST(CFLAGS_OPTIMIZE)
- AC_SUBST(CFLAGS_WARNING)
-
- AC_SUBST(STLIB_LD)
- AC_SUBST(SHLIB_LD)
- AC_SUBST(SHLIB_CFLAGS)
- AC_SUBST(SHLIB_LD_LIBS)
- AC_SUBST(LDFLAGS_DEBUG)
- AC_SUBST(LDFLAGS_OPTIMIZE)
- AC_SUBST(LD_LIBRARY_PATH_VAR)
-
- # These must be called after we do the basic CFLAGS checks and
- # verify any possible 64-bit or similar switches are necessary
- TEA_TCL_EARLY_FLAGS
- TEA_TCL_64BIT_FLAGS
-])
-
-#--------------------------------------------------------------------
-# TEA_SERIAL_PORT
-#
-# Determine which interface to use to talk to the serial port.
-# Note that #include lines must begin in leftmost column for
-# some compilers to recognize them as preprocessor directives,
-# and some build environments have stdin not pointing at a
-# pseudo-terminal (usually /dev/null instead.)
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines only one of the following vars:
-# HAVE_SYS_MODEM_H
-# USE_TERMIOS
-# USE_TERMIO
-# USE_SGTTY
-#
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_SERIAL_PORT, [
- AC_CHECK_HEADERS(sys/modem.h)
- AC_MSG_CHECKING([termios vs. termio vs. sgtty])
- AC_CACHE_VAL(tcl_cv_api_serial, [
- AC_TRY_RUN([
-#include
-
-int main() {
- struct termios t;
- if (tcgetattr(0, &t) == 0) {
- cfsetospeed(&t, 0);
- t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- if test $tcl_cv_api_serial = no ; then
- AC_TRY_RUN([
-#include
-
-int main() {
- struct termio t;
- if (ioctl(0, TCGETA, &t) == 0) {
- t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- fi
- if test $tcl_cv_api_serial = no ; then
- AC_TRY_RUN([
-#include
-
-int main() {
- struct sgttyb t;
- if (ioctl(0, TIOCGETP, &t) == 0) {
- t.sg_ospeed = 0;
- t.sg_flags |= ODDP | EVENP | RAW;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
- fi
- if test $tcl_cv_api_serial = no ; then
- AC_TRY_RUN([
-#include
-#include
-
-int main() {
- struct termios t;
- if (tcgetattr(0, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- cfsetospeed(&t, 0);
- t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- fi
- if test $tcl_cv_api_serial = no; then
- AC_TRY_RUN([
-#include
-#include
-
-int main() {
- struct termio t;
- if (ioctl(0, TCGETA, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
- }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- fi
- if test $tcl_cv_api_serial = no; then
- AC_TRY_RUN([
-#include
-#include
-
-int main() {
- struct sgttyb t;
- if (ioctl(0, TIOCGETP, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- t.sg_ospeed = 0;
- t.sg_flags |= ODDP | EVENP | RAW;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
- fi])
- case $tcl_cv_api_serial in
- termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
- termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
- sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
- esac
- AC_MSG_RESULT([$tcl_cv_api_serial])
-])
-
-#--------------------------------------------------------------------
-# TEA_MISSING_POSIX_HEADERS
-#
-# Supply substitutes for missing POSIX header files. Special
-# notes:
-# - stdlib.h doesn't define strtol, strtoul, or
-# strtod insome versions of SunOS
-# - some versions of string.h don't declare procedures such
-# as strstr
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines some of the following vars:
-# NO_DIRENT_H
-# NO_ERRNO_H
-# NO_VALUES_H
-# HAVE_LIMITS_H or NO_LIMITS_H
-# NO_STDLIB_H
-# NO_STRING_H
-# NO_SYS_WAIT_H
-# NO_DLFCN_H
-# HAVE_SYS_PARAM_H
-#
-# HAVE_STRING_H ?
-#
-# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
-# CHECK on limits.h
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_MISSING_POSIX_HEADERS, [
- AC_MSG_CHECKING([dirent.h])
- AC_CACHE_VAL(tcl_cv_dirent_h,
- AC_TRY_LINK([#include
-#include ], [
-#ifndef _POSIX_SOURCE
-# ifdef __Lynx__
- /*
- * Generate compilation error to make the test fail: Lynx headers
- * are only valid if really in the POSIX environment.
- */
-
- missing_procedure();
-# endif
-#endif
-DIR *d;
-struct dirent *entryPtr;
-char *p;
-d = opendir("foobar");
-entryPtr = readdir(d);
-p = entryPtr->d_name;
-closedir(d);
-], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no))
-
- if test $tcl_cv_dirent_h = no; then
- AC_DEFINE(NO_DIRENT_H, 1, [Do we have ?])
- fi
-
- AC_MSG_RESULT([$tcl_ok])
- AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have ?])])
- AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have ?])])
- AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have ?])])
- AC_CHECK_HEADER(limits.h,
- [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have ?])],
- [AC_DEFINE(NO_LIMITS_H, 1, [Do we have ?])])
- AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
- AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
- AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
- AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
- if test $tcl_ok = 0; then
- AC_DEFINE(NO_STDLIB_H, 1, [Do we have ?])
- fi
- AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
- AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
- AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
-
- # See also memmove check below for a place where NO_STRING_H can be
- # set and why.
-
- if test $tcl_ok = 0; then
- AC_DEFINE(NO_STRING_H, 1, [Do we have ?])
- fi
-
- AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have ?])])
- AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have ?])])
-
- # OS/390 lacks sys/param.h (and doesn't need it, by chance).
- AC_HAVE_HEADERS(sys/param.h)
-
-])
-
-#--------------------------------------------------------------------
-# TEA_PATH_X
-#
-# Locate the X11 header files and the X11 library archive. Try
-# the ac_path_x macro first, but if it doesn't find the X stuff
-# (e.g. because there's no xmkmf program) then check through
-# a list of possible directories. Under some conditions the
-# autoconf macro will return an include directory that contains
-# no include files, so double-check its result just to be safe.
-#
-# This should be called after TEA_CONFIG_CFLAGS as setting the
-# LIBS line can confuse some configure macro magic.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Sets the following vars:
-# XINCLUDES
-# XLIBSW
-# LIBS (appends to)
-# TEA_WINDOWINGSYSTEM
-#
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_PATH_X, [
- if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
- TEA_PATH_UNIX_X
- fi
-])
-
-AC_DEFUN(TEA_PATH_UNIX_X, [
- AC_PATH_X
- not_really_there=""
- if test "$no_x" = ""; then
- if test "$x_includes" = ""; then
- AC_TRY_CPP([#include ], , not_really_there="yes")
- else
- if test ! -r $x_includes/X11/Intrinsic.h; then
- not_really_there="yes"
- fi
- fi
- fi
- if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
- AC_MSG_CHECKING([for X11 header files])
- XINCLUDES="# no special path needed"
- AC_TRY_CPP([#include ], , XINCLUDES="nope")
- if test "$XINCLUDES" = nope; then
- dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include"
- for i in $dirs ; do
- if test -r $i/X11/Intrinsic.h; then
- AC_MSG_RESULT([$i])
- XINCLUDES=" -I$i"
- break
- fi
- done
- fi
- else
- if test "$x_includes" != ""; then
- XINCLUDES=-I$x_includes
- else
- XINCLUDES="# no special path needed"
- fi
- fi
- if test "$XINCLUDES" = nope; then
- AC_MSG_RESULT([could not find any!])
- XINCLUDES="# no include files found"
- fi
-
- if test "$no_x" = yes; then
- AC_MSG_CHECKING([for X11 libraries])
- XLIBSW=nope
- dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib"
- for i in $dirs ; do
- if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then
- AC_MSG_RESULT([$i])
- XLIBSW="-L$i -lX11"
- x_libraries="$i"
- break
- fi
- done
- else
- if test "$x_libraries" = ""; then
- XLIBSW=-lX11
- else
- XLIBSW="-L$x_libraries -lX11"
- fi
- fi
- if test "$XLIBSW" = nope ; then
- AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
- fi
- if test "$XLIBSW" = nope ; then
- AC_MSG_RESULT([could not find any! Using -lX11.])
- XLIBSW=-lX11
- fi
- if test x"${XLIBSW}" != x ; then
- PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BLOCKING_STYLE
-#
-# The statements below check for systems where POSIX-style
-# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
-# On these systems (mostly older ones), use the old BSD-style
-# FIONBIO approach instead.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines some of the following vars:
-# HAVE_SYS_IOCTL_H
-# HAVE_SYS_FILIO_H
-# USE_FIONBIO
-# O_NONBLOCK
-#
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_BLOCKING_STYLE, [
- AC_CHECK_HEADERS(sys/ioctl.h)
- AC_CHECK_HEADERS(sys/filio.h)
- AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
- if test -f /usr/lib/NextStep/software_version; then
- system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
- else
- system=`uname -s`-`uname -r`
- if test "$?" -ne 0 ; then
- system=unknown
- else
- # Special check for weird MP-RAS system (uname returns weird
- # results, and the version is kept in special file).
-
- if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
- system=MP-RAS-`awk '{print $3}' /etc/.relid`
- fi
- if test "`uname -s`" = "AIX" ; then
- system=AIX-`uname -v`.`uname -r`
- fi
- fi
- fi
- case $system in
- # There used to be code here to use FIONBIO under AIX. However, it
- # was reported that FIONBIO doesn't work under AIX 3.2.5. Since
- # using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO
- # code (JO, 5/31/97).
-
- OSF*)
- AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
- AC_MSG_RESULT([FIONBIO])
- ;;
- SunOS-4*)
- AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
- AC_MSG_RESULT([FIONBIO])
- ;;
- ULTRIX-4.*)
- AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
- AC_MSG_RESULT([FIONBIO])
- ;;
- *)
- AC_MSG_RESULT([O_NONBLOCK])
- ;;
- esac
-])
-
-#--------------------------------------------------------------------
-# TEA_TIME_HANLDER
-#
-# Checks how the system deals with time.h, what time structures
-# are used on the system, and what fields the structures have.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines some of the following vars:
-# USE_DELTA_FOR_TZ
-# HAVE_TM_GMTOFF
-# HAVE_TM_TZADJ
-# HAVE_TIMEZONE_VAR
-#
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_TIME_HANDLER, [
- AC_CHECK_HEADERS(sys/time.h)
- AC_HEADER_TIME
- AC_STRUCT_TIMEZONE
-
- AC_CHECK_FUNCS(gmtime_r localtime_r)
-
- AC_MSG_CHECKING([tm_tzadj in struct tm])
- AC_CACHE_VAL(tcl_cv_member_tm_tzadj,
- AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;],
- tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no))
- AC_MSG_RESULT([$tcl_cv_member_tm_tzadj])
- if test $tcl_cv_member_tm_tzadj = yes ; then
- AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
- fi
-
- AC_MSG_CHECKING([tm_gmtoff in struct tm])
- AC_CACHE_VAL(tcl_cv_member_tm_gmtoff,
- AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;],
- tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no))
- AC_MSG_RESULT([$tcl_cv_member_tm_gmtoff])
- if test $tcl_cv_member_tm_gmtoff = yes ; then
- AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
- fi
-
- #
- # Its important to include time.h in this check, as some systems
- # (like convex) have timezone functions, etc.
- #
- AC_MSG_CHECKING([long timezone variable])
- AC_CACHE_VAL(tcl_cv_timezone_long,
- AC_TRY_COMPILE([#include ],
- [extern long timezone;
- timezone += 1;
- exit (0);],
- tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no))
- AC_MSG_RESULT([$tcl_cv_timezone_long])
- if test $tcl_cv_timezone_long = yes ; then
- AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
- else
- #
- # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
- #
- AC_MSG_CHECKING([time_t timezone variable])
- AC_CACHE_VAL(tcl_cv_timezone_time,
- AC_TRY_COMPILE([#include ],
- [extern time_t timezone;
- timezone += 1;
- exit (0);],
- tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no))
- AC_MSG_RESULT([$tcl_cv_timezone_time])
- if test $tcl_cv_timezone_time = yes ; then
- AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
- fi
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BUGGY_STRTOD
-#
-# Under Solaris 2.4, strtod returns the wrong value for the
-# terminating character under some conditions. Check for this
-# and if the problem exists use a substitute procedure
-# "fixstrtod" (provided by Tcl) that corrects the error.
-# Also, on Compaq's Tru64 Unix 5.0,
-# strtod(" ") returns 0.0 instead of a failure to convert.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Might defines some of the following vars:
-# strtod (=fixstrtod)
-#
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_BUGGY_STRTOD, [
- AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
- if test "$tcl_strtod" = 1; then
- AC_MSG_CHECKING([for Solaris2.4/Tru64 strtod bugs])
- AC_CACHE_VAL(tcl_cv_strtod_buggy,[
- AC_TRY_RUN([
- extern double strtod();
- int main()
- {
- char *string = "NaN", *spaceString = " ";
- char *term;
- double value;
- value = strtod(string, &term);
- if ((term != string) && (term[-1] == 0)) {
- exit(1);
- }
- value = strtod(spaceString, &term);
- if (term == (spaceString+1)) {
- exit(1);
- }
- exit(0);
- }], tcl_cv_strtod_buggy=1, tcl_cv_strtod_buggy=0, tcl_cv_strtod_buggy=0)])
- if test "$tcl_cv_strtod_buggy" = 1; then
- AC_MSG_RESULT([ok])
- else
- AC_MSG_RESULT([buggy])
- #LIBOBJS="$LIBOBJS fixstrtod.o"
- AC_LIBOBJ([fixstrtod])
- USE_COMPAT=1
- AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
- fi
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_LINK_LIBS
-#
-# Search for the libraries needed to link the Tcl shell.
-# Things like the math library (-lm) and socket stuff (-lsocket vs.
-# -lnsl) are dealt with here.
-#
-# Arguments:
-# Requires the following vars to be set in the Makefile:
-# DL_LIBS
-# LIBS
-# MATH_LIBS
-#
-# Results:
-#
-# Subst's the following var:
-# TCL_LIBS
-# MATH_LIBS
-#
-# Might append to the following vars:
-# LIBS
-#
-# Might define the following vars:
-# HAVE_NET_ERRNO_H
-#
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_TCL_LINK_LIBS, [
- #--------------------------------------------------------------------
- # On a few very rare systems, all of the libm.a stuff is
- # already in libc.a. Set compiler flags accordingly.
- # Also, Linux requires the "ieee" library for math to work
- # right (and it must appear before "-lm").
- #--------------------------------------------------------------------
-
- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
- AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
-
- #--------------------------------------------------------------------
- # Interactive UNIX requires -linet instead of -lsocket, plus it
- # needs net/errno.h to define the socket-related error codes.
- #--------------------------------------------------------------------
-
- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
- AC_CHECK_HEADER(net/errno.h, [
- AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have ?])])
-
- #--------------------------------------------------------------------
- # Check for the existence of the -lsocket and -lnsl libraries.
- # The order here is important, so that they end up in the right
- # order in the command line generated by make. Here are some
- # special considerations:
- # 1. Use "connect" and "accept" to check for -lsocket, and
- # "gethostbyname" to check for -lnsl.
- # 2. Use each function name only once: can't redo a check because
- # autoconf caches the results of the last check and won't redo it.
- # 3. Use -lnsl and -lsocket only if they supply procedures that
- # aren't already present in the normal libraries. This is because
- # IRIX 5.2 has libraries, but they aren't needed and they're
- # bogus: they goof up name resolution if used.
- # 4. On some SVR4 systems, can't use -lsocket without -lnsl too.
- # To get around this problem, check for both libraries together
- # if -lsocket doesn't work by itself.
- #--------------------------------------------------------------------
-
- tcl_checkBoth=0
- AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
- if test "$tcl_checkSocket" = 1; then
- AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
- LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
- fi
- if test "$tcl_checkBoth" = 1; then
- tk_oldLibs=$LIBS
- LIBS="$LIBS -lsocket -lnsl"
- AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
- fi
- AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
- [LIBS="$LIBS -lnsl"])])
-
- # Don't perform the eval of the libraries here because DL_LIBS
- # won't be set until we call TEA_CONFIG_CFLAGS
-
- TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
- AC_SUBST(TCL_LIBS)
- AC_SUBST(MATH_LIBS)
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_EARLY_FLAGS
-#
-# Check for what flags are needed to be passed so the correct OS
-# features are available.
-#
-# Arguments:
-# None
-#
-# Results:
-#
-# Might define the following vars:
-# _ISOC99_SOURCE
-# _LARGEFILE64_SOURCE
-#
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_TCL_EARLY_FLAG,[
- AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
- AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
- AC_TRY_COMPILE([[#define ]$1[ 1
-]$2], $3,
- [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
- [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
- if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
- AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
- tcl_flags="$tcl_flags $1"
- fi
-])
-
-AC_DEFUN(TEA_TCL_EARLY_FLAGS,[
- AC_MSG_CHECKING([for required early compiler flags])
- tcl_flags=""
- TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ],
- [char *p = (char *)strtoll; char *q = (char *)strtoull;])
- TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ],
- [struct stat64 buf; int i = stat64("/", &buf);])
- if test "x${tcl_flags}" = "x" ; then
- AC_MSG_RESULT([none])
- else
- AC_MSG_RESULT([${tcl_flags}])
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_64BIT_FLAGS
-#
-# Check for what is defined in the way of 64-bit features.
-#
-# Arguments:
-# None
-#
-# Results:
-#
-# Might define the following vars:
-# TCL_WIDE_INT_IS_LONG
-# TCL_WIDE_INT_TYPE
-# HAVE_STRUCT_DIRENT64
-# HAVE_STRUCT_STAT64
-# HAVE_TYPE_OFF64_T
-#
-#--------------------------------------------------------------------
-
-AC_DEFUN(TEA_TCL_64BIT_FLAGS, [
- AC_MSG_CHECKING([for 64-bit integer type])
- AC_CACHE_VAL(tcl_cv_type_64bit,[
- tcl_cv_type_64bit=none
- # See if the compiler knows natively about __int64
- AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
- tcl_type_64bit=__int64, tcl_type_64bit="long long")
- # See if we should use long anyway Note that we substitute in the
- # type that is our current guess for a 64-bit type inside this check
- # program, so it should be modified only carefully...
- AC_TRY_COMPILE(,[switch (0) {
- case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
- }],tcl_cv_type_64bit=${tcl_type_64bit})])
- if test "${tcl_cv_type_64bit}" = none ; then
- AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
- AC_MSG_RESULT([using long])
- elif test "${tcl_cv_type_64bit}" = "__int64" \
- -a "${TEA_PLATFORM}" = "windows" ; then
- # We actually want to use the default tcl.h checks in this
- # case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
- AC_MSG_RESULT([using Tcl header defaults])
- else
- AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
- [What type should be used to define wide integers?])
- AC_MSG_RESULT([${tcl_cv_type_64bit}])
-
- # Now check for auxiliary declarations
- AC_MSG_CHECKING([for struct dirent64])
- AC_CACHE_VAL(tcl_cv_struct_dirent64,[
- AC_TRY_COMPILE([#include
-#include ],[struct dirent64 p;],
- tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
- if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
- AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?])
- fi
- AC_MSG_RESULT([${tcl_cv_struct_dirent64}])
-
- AC_MSG_CHECKING([for struct stat64])
- AC_CACHE_VAL(tcl_cv_struct_stat64,[
- AC_TRY_COMPILE([#include ],[struct stat64 p;
-],
- tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
- if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
- AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in ?])
- fi
- AC_MSG_RESULT([${tcl_cv_struct_stat64}])
-
- AC_MSG_CHECKING([for off64_t])
- AC_CACHE_VAL(tcl_cv_type_off64_t,[
- AC_TRY_COMPILE([#include ],[off64_t offset;
-],
- tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
- if test "x${tcl_cv_type_off64_t}" = "xyes" ; then
- AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in ?])
- fi
- AC_MSG_RESULT([${tcl_cv_type_off64_t}])
- fi
-])
-
-##
-## Here ends the standard Tcl configuration bits and starts the
-## TEA specific functions
-##
-
-#------------------------------------------------------------------------
-# TEA_INIT --
-#
-# Init various Tcl Extension Architecture (TEA) variables.
-# This should be the first called TEA_* macro.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines and substs the following vars:
-# CYGPATH
-# EXEEXT
-# Defines only:
-# TEA_INITED
-# TEA_PLATFORM (windows or unix)
-#
-# "cygpath" is used on windows to generate native path names for include
-# files. These variables should only be used with the compiler and linker
-# since they generate native path names.
-#
-# EXEEXT
-# Select the executable extension based on the host type. This
-# is a lightweight replacement for AC_EXEEXT that doesn't require
-# a compiler.
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_INIT, [
- # TEA extensions pass this us the version of TEA they think they
- # are compatible with.
- TEA_VERSION="3.4"
-
- AC_MSG_CHECKING([for correct TEA configuration])
- if test x"${PACKAGE_NAME}" = x ; then
- AC_MSG_ERROR([
-The PACKAGE_NAME variable must be defined by your TEA configure.in])
- fi
- if test x"$1" = x ; then
- AC_MSG_ERROR([
-TEA version not specified.])
- elif test "$1" != "${TEA_VERSION}" ; then
- AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"])
- else
- AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
- fi
- case "`uname -s`" in
- *win32*|*WIN32*|*CYGWIN_NT*|*CYGWIN_9*|*CYGWIN_ME*|*MINGW32_*)
- AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo)
- EXEEXT=".exe"
- TEA_PLATFORM="windows"
- ;;
- *)
- CYGPATH=echo
- EXEEXT=""
- TEA_PLATFORM="unix"
- ;;
- esac
-
- # Check if exec_prefix is set. If not use fall back to prefix.
- # Note when adjusted, so that TEA_PREFIX can correct for this.
- # This is needed for recursive configures, since autoconf propagates
- # $prefix, but not $exec_prefix (doh!).
- if test x$exec_prefix = xNONE ; then
- exec_prefix_default=yes
- exec_prefix=$prefix
- fi
-
- AC_SUBST(EXEEXT)
- AC_SUBST(CYGPATH)
-
- # This package name must be replaced statically for AC_SUBST to work
- AC_SUBST(PKG_LIB_FILE)
- # Substitute STUB_LIB_FILE in case package creates a stub library too.
- AC_SUBST(PKG_STUB_LIB_FILE)
-
- # We AC_SUBST these here to ensure they are subst'ed,
- # in case the user doesn't call TEA_ADD_...
- AC_SUBST(PKG_STUB_SOURCES)
- AC_SUBST(PKG_STUB_OBJECTS)
- AC_SUBST(PKG_TCL_SOURCES)
- AC_SUBST(PKG_HEADERS)
- AC_SUBST(PKG_INCLUDES)
- AC_SUBST(PKG_LIBS)
- AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_SOURCES --
-#
-# Specify one or more source files. Users should check for
-# the right platform before adding to their list.
-# It is not important to specify the directory, as long as it is
-# in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_SOURCES
-# PKG_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_ADD_SOURCES, [
- vars="$@"
- for i in $vars; do
- case $i in
- [\$]*)
- # allow $-var names
- PKG_SOURCES="$PKG_SOURCES $i"
- PKG_OBJECTS="$PKG_OBJECTS $i"
- ;;
- *)
- # check for existence - allows for generic/win/unix VPATH
- if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
- -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
- ; then
- AC_MSG_ERROR([could not find source file '$i'])
- fi
- PKG_SOURCES="$PKG_SOURCES $i"
- # this assumes it is in a VPATH dir
- i=`basename $i`
- # handle user calling this before or after TEA_SETUP_COMPILER
- if test x"${OBJEXT}" != x ; then
- j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
- else
- j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
- fi
- PKG_OBJECTS="$PKG_OBJECTS $j"
- ;;
- esac
- done
- AC_SUBST(PKG_SOURCES)
- AC_SUBST(PKG_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_STUB_SOURCES --
-#
-# Specify one or more source files. Users should check for
-# the right platform before adding to their list.
-# It is not important to specify the directory, as long as it is
-# in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_STUB_SOURCES
-# PKG_STUB_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_ADD_STUB_SOURCES, [
- vars="$@"
- for i in $vars; do
- # check for existence - allows for generic/win/unix VPATH
- if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
- -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
- ; then
- AC_MSG_ERROR([could not find stub source file '$i'])
- fi
- PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
- # this assumes it is in a VPATH dir
- i=`basename $i`
- # handle user calling this before or after TEA_SETUP_COMPILER
- if test x"${OBJEXT}" != x ; then
- j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
- else
- j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
- fi
- PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
- done
- AC_SUBST(PKG_STUB_SOURCES)
- AC_SUBST(PKG_STUB_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_TCL_SOURCES --
-#
-# Specify one or more Tcl source files. These should be platform
-# independent runtime files.
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_TCL_SOURCES
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_ADD_TCL_SOURCES, [
- vars="$@"
- for i in $vars; do
- # check for existence, be strict because it is installed
- if test ! -f "${srcdir}/$i" ; then
- AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
- fi
- PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
- done
- AC_SUBST(PKG_TCL_SOURCES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_HEADERS --
-#
-# Specify one or more source headers. Users should check for
-# the right platform before adding to their list.
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_HEADERS
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_ADD_HEADERS, [
- vars="$@"
- for i in $vars; do
- # check for existence, be strict because it is installed
- if test ! -f "${srcdir}/$i" ; then
- AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
- fi
- PKG_HEADERS="$PKG_HEADERS $i"
- done
- AC_SUBST(PKG_HEADERS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_INCLUDES --
-#
-# Specify one or more include dirs. Users should check for
-# the right platform before adding to their list.
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_INCLUDES
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_ADD_INCLUDES, [
- vars="$@"
- for i in $vars; do
- PKG_INCLUDES="$PKG_INCLUDES $i"
- done
- AC_SUBST(PKG_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_LIBS --
-#
-# Specify one or more libraries. Users should check for
-# the right platform before adding to their list. For Windows,
-# libraries provided in "foo.lib" format will be converted to
-# "-lfoo" when using GCC (mingw).
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_LIBS
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_ADD_LIBS, [
- vars="$@"
- for i in $vars; do
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
- # Convert foo.lib to -lfoo for GCC. No-op if not *.lib
- i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
- fi
- PKG_LIBS="$PKG_LIBS $i"
- done
- AC_SUBST(PKG_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CFLAGS --
-#
-# Specify one or more CFLAGS. Users should check for
-# the right platform before adding to their list.
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_CFLAGS
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_ADD_CFLAGS, [
- PKG_CFLAGS="$PKG_CFLAGS $@"
- AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_PREFIX --
-#
-# Handle the --prefix=... option by defaulting to what Tcl gave
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# If --prefix or --exec-prefix was not specified, $prefix and
-# $exec_prefix will be set to the values given to Tcl when it was
-# configured.
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_PREFIX, [
- if test "${prefix}" = "NONE"; then
- prefix_default=yes
- if test x"${TCL_PREFIX}" != x; then
- AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
- prefix=${TCL_PREFIX}
- else
- AC_MSG_NOTICE([--prefix defaulting to /usr/local])
- prefix=/usr/local
- fi
- fi
- if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
- -o x"${exec_prefix_default}" = x"yes" ; then
- if test x"${TCL_EXEC_PREFIX}" != x; then
- AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
- exec_prefix=${TCL_EXEC_PREFIX}
- else
- AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
- exec_prefix=$prefix
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER_CC --
-#
-# Do compiler checks the way we want. This is just a replacement
-# for AC_PROG_CC in TEA configure.in files to make them cleaner.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_SETUP_COMPILER_CC, [
- # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
- # in this macro, they need to go into TEA_SETUP_COMPILER instead.
-
- # If the user did not set CFLAGS, set it now to keep
- # the AC_PROG_CC macro from adding "-g -O2".
- if test "${CFLAGS+set}" != "set" ; then
- CFLAGS=""
- fi
-
- AC_PROG_CC
- AC_PROG_CPP
-
- AC_PROG_INSTALL
-
- #--------------------------------------------------------------------
- # Checks to see if the make program sets the $MAKE variable.
- #--------------------------------------------------------------------
-
- AC_PROG_MAKE_SET
-
- #--------------------------------------------------------------------
- # Find ranlib
- #--------------------------------------------------------------------
-
- AC_PROG_RANLIB
-
- #--------------------------------------------------------------------
- # Determines the correct binary file extension (.o, .obj, .exe etc.)
- #--------------------------------------------------------------------
-
- AC_OBJEXT
- AC_EXEEXT
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER --
-#
-# Do compiler checks that use the compiler. This must go after
-# TEA_SETUP_COMPILER_CC, which does the actual compiler check.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN(TEA_SETUP_COMPILER, [
- # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
- AC_REQUIRE([TEA_SETUP_COMPILER_CC])
-
- #------------------------------------------------------------------------
- # If we're using GCC, see if the compiler understands -pipe. If so, use it.
- # It makes compiling go faster. (This is only a performance feature.)
- #------------------------------------------------------------------------
-
- if test -z "$no_pipe" -a -n "$GCC"; then
- AC_MSG_CHECKING([if the compiler understands -pipe])
- OLDCC="$CC"
- CC="$CC -pipe"
- AC_TRY_COMPILE(,, AC_MSG_RESULT([yes]), CC="$OLDCC"
- AC_MSG_RESULT([no]))
- fi
-
- #--------------------------------------------------------------------
- # Common compiler flag setup
- #--------------------------------------------------------------------
-
- AC_C_BIGENDIAN
- if test "${TEA_PLATFORM}" = "unix" ; then
- TEA_TCL_LINK_LIBS
- TEA_MISSING_POSIX_HEADERS
- # Let the user call this, because if it triggers, they will
- # need a compat/strtod.c that is correct. Users can also
- # use Tcl_GetDouble(FromObj) instead.
- #TEA_BUGGY_STRTOD
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_MAKE_LIB --
-#
-# Generate a line that can be used to build a shared/unshared library
-# in a platform independent manner.
-#
-# Arguments:
-# none
-#
-# Requires:
-#
-# Results:
-#
-# Defines the following vars:
-# CFLAGS - Done late here to note disturb other AC macros
-# MAKE_LIB - Command to execute to build the Tcl library;
-# differs depending on whether or not Tcl is being
-# compiled as a shared library.
-# MAKE_SHARED_LIB Makefile rule for building a shared library
-# MAKE_STATIC_LIB Makefile rule for building a static library
-# MAKE_STUB_LIB Makefile rule for building a stub library
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_MAKE_LIB, [
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
- MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
- MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
- MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)"
- else
- MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
- MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
- MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
- fi
-
- if test "${SHARED_BUILD}" = "1" ; then
- MAKE_LIB="${MAKE_SHARED_LIB} "
- else
- MAKE_LIB="${MAKE_STATIC_LIB} "
- fi
-
- #--------------------------------------------------------------------
- # Shared libraries and static libraries have different names.
- # Use the double eval to make sure any variables in the suffix is
- # substituted. (@@@ Might not be necessary anymore)
- #--------------------------------------------------------------------
-
- if test "${TEA_PLATFORM}" = "windows" ; then
- if test "${SHARED_BUILD}" = "1" ; then
- # We force the unresolved linking of symbols that are really in
- # the private libraries of Tcl and Tk.
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
- if test x"${TK_BIN_DIR}" != x ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
- fi
- eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
- else
- eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
- fi
- # Some packages build there own stubs libraries
- eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
- # These aren't needed on Windows (either MSVC or gcc)
- RANLIB=:
- RANLIB_STUB=:
- else
- RANLIB_STUB="${RANLIB}"
- if test "${SHARED_BUILD}" = "1" ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
- if test x"${TK_BIN_DIR}" != x ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
- fi
- eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
- RANLIB=:
- else
- eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
- fi
- # Some packages build there own stubs libraries
- eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
- fi
-
- # These are escaped so that only CFLAGS is picked up at configure time.
- # The other values will be substituted at make time.
- CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
- if test "${SHARED_BUILD}" = "1" ; then
- CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
- fi
-
- AC_SUBST(MAKE_LIB)
- AC_SUBST(MAKE_SHARED_LIB)
- AC_SUBST(MAKE_STATIC_LIB)
- AC_SUBST(MAKE_STUB_LIB)
- AC_SUBST(RANLIB_STUB)
-])
-
-#------------------------------------------------------------------------
-# TEA_LIB_SPEC --
-#
-# Compute the name of an existing object library located in libdir
-# from the given base name and produce the appropriate linker flags.
-#
-# Arguments:
-# basename The base name of the library without version
-# numbers, extensions, or "lib" prefixes.
-# extra_dir Extra directory in which to search for the
-# library. This location is used first, then
-# $prefix/$exec-prefix, then some defaults.
-#
-# Requires:
-# TEA_INIT and TEA_PREFIX must be called first.
-#
-# Results:
-#
-# Defines the following vars:
-# ${basename}_LIB_NAME The computed library name.
-# ${basename}_LIB_SPEC The computed linker flags.
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_LIB_SPEC, [
- AC_MSG_CHECKING([for $1 library])
-
- # Look in exec-prefix for the library (defined by TEA_PREFIX).
-
- tea_lib_name_dir="${exec_prefix}/lib"
-
- # Or in a user-specified location.
-
- if test x"$2" != x ; then
- tea_extra_lib_dir=$2
- else
- tea_extra_lib_dir=NONE
- fi
-
- for i in \
- `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
- `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
- `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
- `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
- if test -f "$i" ; then
- tea_lib_name_dir=`dirname $i`
- $1_LIB_NAME=`basename $i`
- $1_LIB_PATH_NAME=$i
- break
- fi
- done
-
- if test "${TEA_PLATFORM}" = "windows"; then
- $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
- else
- # Strip off the leading "lib" and trailing ".a" or ".so"
-
- tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
- $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
- fi
-
- if test "x${$1_LIB_NAME}" = x ; then
- AC_MSG_ERROR([not found])
- else
- AC_MSG_RESULT([${$1_LIB_SPEC}])
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TCL_HEADERS --
-#
-# Locate the private Tcl include files
-#
-# Arguments:
-#
-# Requires:
-# TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has
-# already been called.
-#
-# Results:
-#
-# Substs the following vars:
-# TCL_TOP_DIR_NATIVE
-# TCL_GENERIC_DIR_NATIVE
-# TCL_UNIX_DIR_NATIVE
-# TCL_WIN_DIR_NATIVE
-# TCL_BMAP_DIR_NATIVE
-# TCL_TOOL_DIR_NATIVE
-# TCL_PLATFORM_DIR_NATIVE
-# TCL_BIN_DIR_NATIVE
-# TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PRIVATE_TCL_HEADERS, [
- AC_MSG_CHECKING([for Tcl private include files])
-
- TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
- TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
- TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
- TCL_UNIX_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
- TCL_WIN_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
- TCL_BMAP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/bitmaps\"
- TCL_TOOL_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/tools\"
- TCL_COMPAT_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/compat\"
-
- if test "${TEA_PLATFORM}" = "windows"; then
- TCL_PLATFORM_DIR_NATIVE=${TCL_WIN_DIR_NATIVE}
- else
- TCL_PLATFORM_DIR_NATIVE=${TCL_UNIX_DIR_NATIVE}
- fi
- # We want to ensure these are substituted so as not to require
- # any *_NATIVE vars be defined in the Makefile
- TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
- if test "`uname -s`" = "Darwin"; then
- # If Tcl was built as a framework, attempt to use
- # the framework's Headers and PrivateHeaders directories
- case ${TCL_DEFS} in
- *TCL_FRAMEWORK*)
- if test -d "${TCL_BIN_DIR}/Headers" -a -d "${TCL_BIN_DIR}/PrivateHeaders"; then
- TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"; else
- TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"; fi
- ;;
- esac
- fi
-
- AC_SUBST(TCL_TOP_DIR_NATIVE)
- AC_SUBST(TCL_GENERIC_DIR_NATIVE)
- AC_SUBST(TCL_UNIX_DIR_NATIVE)
- AC_SUBST(TCL_WIN_DIR_NATIVE)
- AC_SUBST(TCL_BMAP_DIR_NATIVE)
- AC_SUBST(TCL_TOOL_DIR_NATIVE)
- AC_SUBST(TCL_PLATFORM_DIR_NATIVE)
-
- AC_SUBST(TCL_INCLUDES)
- AC_MSG_RESULT([Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TCL_HEADERS --
-#
-# Locate the installed public Tcl header files
-#
-# Arguments:
-# None.
-#
-# Requires:
-# CYGPATH must be set
-#
-# Results:
-#
-# Adds a --with-tclinclude switch to configure.
-# Result is cached.
-#
-# Substs the following vars:
-# TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PUBLIC_TCL_HEADERS, [
- AC_MSG_CHECKING([for Tcl public headers])
-
- AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval})
-
- AC_CACHE_VAL(ac_cv_c_tclh, [
- # Use the value from --with-tclinclude, if it was given
-
- if test x"${with_tclinclude}" != x ; then
- if test -f "${with_tclinclude}/tcl.h" ; then
- ac_cv_c_tclh=${with_tclinclude}
- else
- AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
- fi
- else
- # If Tcl was built as a framework, attempt to use
- # the framework's Headers directory
- case ${TCL_DEFS} in
- *TCL_FRAMEWORK*)
- list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
- ;;
- *)
- list=""
- ;;
- esac
-
- # Look in the source dir only if Tcl is not installed,
- # and in that situation, look there before installed locations.
- if test -f "$TCL_BIN_DIR/Makefile" ; then
- list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
- fi
-
- # Check order: pkg --prefix location, Tcl's --prefix location,
- # relative to directory of tclConfig.sh.
-
- eval "temp_includedir=${includedir}"
- list="$list \
- `ls -d ${temp_includedir} 2>/dev/null` \
- `ls -d ${TCL_PREFIX}/include 2>/dev/null` \
- `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
- if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
- list="$list /usr/local/include /usr/include"
- if test x"${TCL_INCLUDE_SPEC}" != x ; then
- d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
- list="$list `ls -d ${d} 2>/dev/null`"
- fi
- fi
- for i in $list ; do
- if test -f "$i/tcl.h" ; then
- ac_cv_c_tclh=$i
- break
- fi
- done
- fi
- ])
-
- # Print a message based on how we determined the include path
-
- if test x"${ac_cv_c_tclh}" = x ; then
- AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude])
- else
- AC_MSG_RESULT([${ac_cv_c_tclh}])
- fi
-
- # Convert to a native path and substitute into the output files.
-
- INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
-
- TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
- AC_SUBST(TCL_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TK_HEADERS --
-#
-# Locate the private Tk include files
-#
-# Arguments:
-#
-# Requires:
-# TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has
-# already been called.
-#
-# Results:
-#
-# Substs the following vars:
-# TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PRIVATE_TK_HEADERS, [
- AC_MSG_CHECKING([for Tk private include files])
-
- TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
- TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
- TK_UNIX_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
- TK_WIN_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
- TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
- TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
- if test "${TEA_PLATFORM}" = "windows"; then
- TK_PLATFORM_DIR_NATIVE=${TK_WIN_DIR_NATIVE}
- else
- TK_PLATFORM_DIR_NATIVE=${TK_UNIX_DIR_NATIVE}
- fi
- # We want to ensure these are substituted so as not to require
- # any *_NATIVE vars be defined in the Makefile
- TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
- if test "${TEA_WINDOWINGSYSTEM}" = "win32" \
- -o "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
- TK_INCLUDES="${TK_INCLUDES} -I${TK_XLIB_DIR_NATIVE}"
- fi
- if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
- TK_INCLUDES="${TK_INCLUDES} -I${TK_SRC_DIR_NATIVE}/macosx"
- fi
- if test "`uname -s`" = "Darwin"; then
- # If Tk was built as a framework, attempt to use
- # the framework's Headers and PrivateHeaders directories
- case ${TK_DEFS} in
- *TK_FRAMEWORK*)
- if test -d "${TK_BIN_DIR}/Headers" -a -d "${TK_BIN_DIR}/PrivateHeaders"; then
- TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"; fi
- ;;
- esac
- fi
-
- AC_SUBST(TK_TOP_DIR_NATIVE)
- AC_SUBST(TK_UNIX_DIR_NATIVE)
- AC_SUBST(TK_WIN_DIR_NATIVE)
- AC_SUBST(TK_GENERIC_DIR_NATIVE)
- AC_SUBST(TK_XLIB_DIR_NATIVE)
- AC_SUBST(TK_PLATFORM_DIR_NATIVE)
-
- AC_SUBST(TK_INCLUDES)
- AC_MSG_RESULT([Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TK_HEADERS --
-#
-# Locate the installed public Tk header files
-#
-# Arguments:
-# None.
-#
-# Requires:
-# CYGPATH must be set
-#
-# Results:
-#
-# Adds a --with-tkinclude switch to configure.
-# Result is cached.
-#
-# Substs the following vars:
-# TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PUBLIC_TK_HEADERS, [
- AC_MSG_CHECKING([for Tk public headers])
-
- AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files.], with_tkinclude=${withval})
-
- AC_CACHE_VAL(ac_cv_c_tkh, [
- # Use the value from --with-tkinclude, if it was given
-
- if test x"${with_tkinclude}" != x ; then
- if test -f "${with_tkinclude}/tk.h" ; then
- ac_cv_c_tkh=${with_tkinclude}
- else
- AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
- fi
- else
- # If Tk was built as a framework, attempt to use
- # the framework's Headers directory.
- case ${TK_DEFS} in
- *TK_FRAMEWORK*)
- list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
- ;;
- *)
- list=""
- ;;
- esac
-
- # Look in the source dir only if Tk is not installed,
- # and in that situation, look there before installed locations.
- if test -f "$TK_BIN_DIR/Makefile" ; then
- list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
- fi
-
- # Check order: pkg --prefix location, Tk's --prefix location,
- # relative to directory of tkConfig.sh, Tcl's --prefix location,
- # relative to directory of tclConfig.sh.
-
- eval "temp_includedir=${includedir}"
- list="$list \
- `ls -d ${temp_includedir} 2>/dev/null` \
- `ls -d ${TK_PREFIX}/include 2>/dev/null` \
- `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \
- `ls -d ${TCL_PREFIX}/include 2>/dev/null` \
- `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
- if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
- list="$list /usr/local/include /usr/include"
- fi
- for i in $list ; do
- if test -f "$i/tk.h" ; then
- ac_cv_c_tkh=$i
- break
- fi
- done
- fi
- ])
-
- # Print a message based on how we determined the include path
-
- if test x"${ac_cv_c_tkh}" = x ; then
- AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude])
- else
- AC_MSG_RESULT([${ac_cv_c_tkh}])
- fi
-
- # Convert to a native path and substitute into the output files.
-
- INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
-
- TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
- AC_SUBST(TK_INCLUDES)
-
- if test "${TEA_WINDOWINGSYSTEM}" = "win32" \
- -o "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
- # On Windows and Aqua, we need the X compat headers
- AC_MSG_CHECKING([for X11 header files])
- if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
- INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
- TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
- AC_SUBST(TK_XINCLUDES)
- fi
- AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_TCLSH
-# Determine the fully qualified path name of the tclsh executable
-# in the Tcl build directory or the tclsh installed in a bin
-# directory. This macro will correctly determine the name
-# of the tclsh executable even if tclsh has not yet been
-# built in the build directory. The tclsh found is always
-# associated with a tclConfig.sh file. This tclsh should be used
-# only for running extension test cases. It should never be
-# or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments
-# none
-#
-# Results
-# Subst's the following values:
-# TCLSH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PROG_TCLSH, [
- AC_MSG_CHECKING([for tclsh])
- if test -f "${TCL_BIN_DIR}/Makefile" ; then
- # tclConfig.sh is in Tcl build directory
- if test "${TEA_PLATFORM}" = "windows"; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
- else
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
- fi
- else
- # tclConfig.sh is in install location
- if test "${TEA_PLATFORM}" = "windows"; then
- TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
- else
- TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
- fi
- list="`ls -d ${TCL_PREFIX}/bin 2>/dev/null` \
- `ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null`"
- for i in $list ; do
- if test -f "$i/${TCLSH_PROG}" ; then
- REAL_TCL_BIN_DIR="`cd "$i"; pwd`"
- break
- fi
- done
- TCLSH_PROG="${REAL_TCL_BIN_DIR}/${TCLSH_PROG}"
- fi
- AC_MSG_RESULT(${TCLSH_PROG})
- AC_SUBST(TCLSH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_WISH
-# Determine the fully qualified path name of the wish executable
-# in the Tk build directory or the wish installed in a bin
-# directory. This macro will correctly determine the name
-# of the wish executable even if wish has not yet been
-# built in the build directory. The wish found is always
-# associated with a tkConfig.sh file. This wish should be used
-# only for running extension test cases. It should never be
-# or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments
-# none
-#
-# Results
-# Subst's the following values:
-# WISH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PROG_WISH, [
- AC_MSG_CHECKING([for wish])
- if test -f "${TK_BIN_DIR}/Makefile" ; then
- # tkConfig.sh is in Tk build directory
- if test "${TEA_PLATFORM}" = "windows"; then
- WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
- else
- WISH_PROG="${TK_BIN_DIR}/wish"
- fi
- else
- # tkConfig.sh is in install location
- if test "${TEA_PLATFORM}" = "windows"; then
- WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
- else
- WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
- fi
- list="`ls -d ${TK_PREFIX}/bin 2>/dev/null` \
- `ls -d ${TK_BIN_DIR}/../bin 2>/dev/null`"
- for i in $list ; do
- if test -f "$i/${WISH_PROG}" ; then
- REAL_TK_BIN_DIR="`cd "$i"; pwd`"
- break
- fi
- done
- WISH_PROG="${REAL_TK_BIN_DIR}/${WISH_PROG}"
- fi
- AC_MSG_RESULT(${WISH_PROG})
- AC_SUBST(WISH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_CONFIG --
-#
-# Locate the ${1}Config.sh file and perform a sanity check on
-# the ${1} compile flags. These are used by packages like
-# [incr Tk] that load *Config.sh files from more than Tcl and Tk.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --with-$1=...
-#
-# Defines the following vars:
-# $1_BIN_DIR Full path to the directory containing
-# the $1Config.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PATH_CONFIG, [
- #
- # Ok, lets find the $1 configuration
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-$1
- #
-
- if test x"${no_$1}" = x ; then
- # we reset no_$1 in case something fails here
- no_$1=true
- AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
- AC_MSG_CHECKING([for $1 configuration])
- AC_CACHE_VAL(ac_cv_c_$1config,[
-
- # First check to see if --with-$1 was specified.
- if test x"${with_$1config}" != x ; then
- case ${with_$1config} in
- */$1Config.sh )
- if test -f ${with_$1config}; then
- AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
- with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
- fi;;
- esac
- if test -f "${with_$1config}/$1Config.sh" ; then
- ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
- else
- AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
- fi
- fi
-
- # then check for a private $1 installation
- if test x"${ac_cv_c_$1config}" = x ; then
- for i in \
- ../$1 \
- `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
- `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
- `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
- ../../$1 \
- `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
- `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
- `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
- ../../../$1 \
- `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
- `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
- `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
- ${srcdir}/../$1 \
- `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
- `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
- `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
- ; do
- if test -f "$i/$1Config.sh" ; then
- ac_cv_c_$1config=`(cd $i; pwd)`
- break
- fi
- if test -f "$i/unix/$1Config.sh" ; then
- ac_cv_c_$1config=`(cd $i/unix; pwd)`
- break
- fi
- done
- fi
-
- # check in a few common install locations
- if test x"${ac_cv_c_$1config}" = x ; then
- for i in `ls -d ${libdir} 2>/dev/null` \
- `ls -d ${exec_prefix}/lib 2>/dev/null` \
- `ls -d ${prefix}/lib 2>/dev/null` \
- `ls -d /usr/local/lib 2>/dev/null` \
- `ls -d /usr/contrib/lib 2>/dev/null` \
- `ls -d /usr/lib 2>/dev/null` \
- ; do
- if test -f "$i/$1Config.sh" ; then
- ac_cv_c_$1config=`(cd $i; pwd)`
- break
- fi
- done
- fi
- ])
-
- if test x"${ac_cv_c_$1config}" = x ; then
- $1_BIN_DIR="# no $1 configs found"
- AC_MSG_WARN("Cannot find $1 configuration definitions")
- exit 0
- else
- no_$1=
- $1_BIN_DIR=${ac_cv_c_$1config}
- AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG --
-#
-# Load the $1Config.sh file
-#
-# Arguments:
-#
-# Requires the following vars to be set:
-# $1_BIN_DIR
-#
-# Results:
-#
-# Subst the following vars:
-# $1_SRC_DIR
-# $1_LIB_FILE
-# $1_LIB_SPEC
-#
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_LOAD_CONFIG, [
- AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
-
- if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
- AC_MSG_RESULT([loading])
- . ${$1_BIN_DIR}/$1Config.sh
- else
- AC_MSG_RESULT([file not found])
- fi
-
- #
- # If the $1_BIN_DIR is the build directory (not the install directory),
- # then set the common variable name to the value of the build variables.
- # For example, the variable $1_LIB_SPEC will be set to the value
- # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
- # instead of $1_BUILD_LIB_SPEC since it will work with both an
- # installed and uninstalled version of Tcl.
- #
-
- if test -f ${$1_BIN_DIR}/Makefile ; then
- AC_MSG_WARN([Found Makefile - using build library specs for $1])
- $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
- $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
- $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
- fi
-
- AC_SUBST($1_VERSION)
- AC_SUBST($1_BIN_DIR)
- AC_SUBST($1_SRC_DIR)
-
- AC_SUBST($1_LIB_FILE)
- AC_SUBST($1_LIB_SPEC)
-
- AC_SUBST($1_STUB_LIB_FILE)
- AC_SUBST($1_STUB_LIB_SPEC)
- AC_SUBST($1_STUB_LIB_PATH)
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_CELIB --
-#
-# Locate Keuchel's celib emulation layer for targeting Win/CE
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --with-celib=...
-#
-# Defines the following vars:
-# CELIB_DIR Full path to the directory containing
-# the include and platform lib files
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_PATH_CELIB, [
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-celib
-
- if test x"${no_celib}" = x ; then
- # we reset no_celib in case something fails here
- no_celib=true
- AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval})
- AC_MSG_CHECKING([for Windows/CE celib directory])
- AC_CACHE_VAL(ac_cv_c_celibconfig,[
- # First check to see if --with-celibconfig was specified.
- if test x"${with_celibconfig}" != x ; then
- if test -d "${with_celibconfig}/inc" ; then
- ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
- else
- AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
- fi
- fi
-
- # then check for a celib library
- if test x"${ac_cv_c_celibconfig}" = x ; then
- for i in \
- ../celib-palm-3.0 \
- ../celib \
- ../../celib-palm-3.0 \
- ../../celib \
- `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
- ${srcdir}/../celib-palm-3.0 \
- ${srcdir}/../celib \
- `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
- ; do
- if test -d "$i/inc" ; then
- ac_cv_c_celibconfig=`(cd $i; pwd)`
- break
- fi
- done
- fi
- ])
- if test x"${ac_cv_c_celibconfig}" = x ; then
- AC_MSG_ERROR([Cannot find celib support library directory])
- else
- no_celib=
- CELIB_DIR=${ac_cv_c_celibconfig}
- CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
- AC_MSG_RESULT([found $CELIB_DIR])
- fi
- fi
-])
diff --git a/ng/Togl-1.7/texture.c b/ng/Togl-1.7/texture.c
deleted file mode 100644
index 6a6f39f9..00000000
--- a/ng/Togl-1.7/texture.c
+++ /dev/null
@@ -1,608 +0,0 @@
-/* $Id: texture.c,v 1.10 2005/04/23 07:49:14 gregcouch Exp $ */
-
-/*
- * Togl - a Tk OpenGL widget
- * Copyright (C) 1996-1997 Brian Paul and Ben Bederson
- * See the LICENSE file for copyright details.
- */
-
-
-/*
- * An example Togl program demonstrating texture mapping
- */
-
-
-#include "togl.h"
-#include
-#include
-#if defined(TOGL_AGL) || defined(TOGL_AGL_CLASSIC)
-# include
-#else
-# include
-#endif
-#include "image.h"
-
-
-/*
- * The following variable is a special hack that is needed in order for
- * Sun shared libraries to be used for Tcl.
- */
-#ifdef SUN
-extern int matherr();
-int *tclDummyMathPtr = (int *) matherr;
-#endif
-
-#define CHECKER 0
-#define FACE 1
-#define TREE 2
-
-
-static GLenum minfilter = GL_NEAREST_MIPMAP_LINEAR;
-static GLenum magfilter = GL_LINEAR;
-static GLenum swrap = GL_REPEAT;
-static GLenum twrap = GL_REPEAT;
-static GLenum envmode = GL_MODULATE;
-static GLubyte polycolor[4] = { 255, 255, 255, 255 };
-static int image = CHECKER;
-static GLfloat coord_scale = 1.0;
-static GLfloat xrot = 0.0;
-static GLfloat yrot = 0.0;
-static GLfloat scale = 1.0;
-
-static GLint width, height;
-
-static GLboolean blend = GL_FALSE;
-
-
-/*
- * Load a texture image. n is one of CHECKER, FACE or TREE.
- */
-void
-texture_image(int n)
-{
- if (n == CHECKER) {
-#define WIDTH 64
-#define HEIGHT 64
- GLubyte teximage[WIDTH * HEIGHT][4];
- int i, j;
-
- for (i = 0; i < HEIGHT; i++) {
- for (j = 0; j < WIDTH; j++) {
- GLubyte value;
-
- value = ((i / 4 + j / 4) % 2) ? 0xff : 0x00;
- teximage[i * WIDTH + j][0] = value;
- teximage[i * WIDTH + j][1] = value;
- teximage[i * WIDTH + j][2] = value;
- teximage[i * WIDTH + j][3] = value;
- }
- }
-
- glEnable(GL_TEXTURE_2D);
- gluBuild2DMipmaps(GL_TEXTURE_2D, 4, WIDTH, HEIGHT,
- GL_RGBA, GL_UNSIGNED_BYTE, teximage);
- blend = GL_FALSE;
-
-#undef WIDTH
-#undef HEIGHT
- } else if (n == FACE) {
- TK_RGBImageRec *img = tkRGBImageLoad("ben.rgb");
-
- if (img) {
- glEnable(GL_TEXTURE_2D);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- gluBuild2DMipmaps(GL_TEXTURE_2D, img->sizeZ, img->sizeX, img->sizeY,
- img->sizeZ == 3 ? GL_RGB : GL_RGBA,
- GL_UNSIGNED_BYTE, img->data);
-
- blend = GL_TRUE;
- }
- } else if (n == TREE) {
- TK_RGBImageRec *img = tkRGBImageLoad("tree2.rgba");
-
- if (img) {
- glEnable(GL_TEXTURE_2D);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- gluBuild2DMipmaps(GL_TEXTURE_2D, img->sizeZ, img->sizeX, img->sizeY,
- img->sizeZ == 3 ? GL_RGB : GL_RGBA,
- GL_UNSIGNED_BYTE, img->data);
-
- blend = GL_TRUE;
- }
- } else {
- abort();
- }
-}
-
-
-/*
- * Togl widget create callback. This is called by Tcl/Tk when the widget has
- * been realized. Here's where one may do some one-time context setup or
- * initializations.
- */
-void
-create_cb(Togl *togl)
-{
- glEnable(GL_DEPTH_TEST); /* Enable depth buffering */
-
- texture_image(CHECKER);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magfilter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minfilter);
-}
-
-
-/*
- * Togl widget reshape callback. This is called by Tcl/Tk when the widget
- * has been resized. Typically, we call glViewport and perhaps setup the
- * projection matrix.
- */
-void
-reshape_cb(Togl *togl)
-{
- width = Togl_Width(togl);
- height = Togl_Height(togl);
-
- glViewport(0, 0, width, height);
-
-}
-
-
-static void
-check_error(char *where)
-{
- GLenum error;
-
- while (1) {
- error = glGetError();
- if (error == GL_NO_ERROR) {
- break;
- }
- printf("OpenGL error near %s: %s\n", where, gluErrorString(error));
- }
-}
-
-
-
-/*
- * Togl widget display callback. This is called by Tcl/Tk when the widget's
- * contents have to be redrawn. Typically, we clear the color and depth
- * buffers, render our objects, then swap the front/back color buffers.
- */
-void
-display_cb(Togl *togl)
-{
- float aspect = (float) width / (float) height;
-
- check_error("begin display\n");
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- /* Draw background image */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_DEPTH_TEST);
- glBegin(GL_POLYGON);
- glColor3f(0.0, 0.0, 0.3);
- glVertex2f(-1.0, -1.0);
- glColor3f(0.0, 0.0, 0.3);
- glVertex2f(1.0, -1.0);
- glColor3f(0.0, 0.0, 0.9);
- glVertex2f(1.0, 1.0);
- glColor3f(0.0, 0.0, 0.9);
- glVertex2f(-1.0, 1.0);
- glEnd();
-
- /* draw textured object */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-aspect, aspect, -1.0, 1.0, 2.0, 10.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -5.0);
- glScalef(scale, scale, scale);
- glRotatef(yrot, 0.0, 1.0, 0.0);
- glRotatef(xrot, 1.0, 0.0, 0.0);
-
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_TEXTURE_2D);
- glColor4ubv(polycolor);
-
- if (blend) {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
- }
-
- glBegin(GL_POLYGON);
- glTexCoord2f(0.0, 0.0);
- glVertex2f(-1.0, -1.0);
- glTexCoord2f(coord_scale, 0.0);
- glVertex2f(1.0, -1.0);
- glTexCoord2f(coord_scale, coord_scale);
- glVertex2f(1.0, 1.0);
- glTexCoord2f(0.0, coord_scale);
- glVertex2f(-1.0, 1.0);
- glEnd();
-
- glDisable(GL_BLEND);
-
- Togl_SwapBuffers(togl);
-}
-
-
-/*
- * Called when a magnification filter radio button is pressed.
- */
-int
-magfilter_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- if (strcmp(argv[2], "GL_NEAREST") == 0) {
- magfilter = GL_NEAREST;
- } else if (strcmp(argv[2], "GL_LINEAR") == 0) {
- magfilter = GL_LINEAR;
- } else {
- Tcl_SetResult(interp, "unknown magnification filter type", TCL_STATIC);
- return TCL_ERROR;
- }
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magfilter);
- Togl_PostRedisplay(togl);
-
- return TCL_OK;
-}
-
-
-/*
- * Called when a minification filter radio button is pressed.
- */
-int
-minfilter_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- if (strcmp(argv[2], "GL_NEAREST") == 0) {
- minfilter = GL_NEAREST;
- } else if (strcmp(argv[2], "GL_LINEAR") == 0) {
- minfilter = GL_LINEAR;
- } else if (strcmp(argv[2], "GL_NEAREST_MIPMAP_NEAREST") == 0) {
- minfilter = GL_NEAREST_MIPMAP_NEAREST;
- } else if (strcmp(argv[2], "GL_LINEAR_MIPMAP_NEAREST") == 0) {
- minfilter = GL_LINEAR_MIPMAP_NEAREST;
- } else if (strcmp(argv[2], "GL_NEAREST_MIPMAP_LINEAR") == 0) {
- minfilter = GL_NEAREST_MIPMAP_LINEAR;
- } else if (strcmp(argv[2], "GL_LINEAR_MIPMAP_LINEAR") == 0) {
- minfilter = GL_LINEAR_MIPMAP_LINEAR;
- } else {
- Tcl_SetResult(interp, "unknown minification filter type", TCL_STATIC);
- return TCL_ERROR;
- }
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minfilter);
- Togl_PostRedisplay(togl);
-
- return TCL_OK;
-}
-
-
-int
-xrot_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName setXrot ?angle?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- xrot = atof(argv[2]);
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-int
-yrot_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName setYrot ?angle?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- yrot = atof(argv[2]);
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-int
-scale_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName scale ?value?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- scale = atof(argv[2]);
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-/*
- * Called when S texture coordinate wrapping is changed.
- */
-int
-swrap_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName swrap ?mode?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- if (strcmp(argv[2], "GL_CLAMP") == 0) {
- swrap = GL_CLAMP;
- } else if (strcmp(argv[2], "GL_REPEAT") == 0) {
- swrap = GL_REPEAT;
- } else {
- Tcl_SetResult(interp, "unknown wrap value", TCL_STATIC);
- return TCL_ERROR;
- }
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, swrap);
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-/*
- * Called when T texture coordinate wrapping is changed.
- */
-int
-twrap_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName twrap ?mode?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- if (strcmp(argv[2], "GL_CLAMP") == 0) {
- twrap = GL_CLAMP;
- } else if (strcmp(argv[2], "GL_REPEAT") == 0) {
- twrap = GL_REPEAT;
- } else {
- Tcl_SetResult(interp, "unknown wrap value", TCL_STATIC);
- return TCL_ERROR;
- }
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, twrap);
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-/*
- * Called when the texture environment mode is changed.
- */
-int
-envmode_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName envmode ?mode?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- if (strcmp(argv[2], "GL_MODULATE") == 0) {
- envmode = GL_MODULATE;
- } else if (strcmp(argv[2], "GL_DECAL") == 0) {
- envmode = GL_DECAL;
- } else if (strcmp(argv[2], "GL_BLEND") == 0) {
- envmode = GL_BLEND;
- } else {
- Tcl_SetResult(interp, "unknown texture env mode", TCL_STATIC);
- return TCL_ERROR;
- }
-
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, envmode);
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-/*
- * Called when the polygon color is changed.
- */
-int
-polycolor_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 5) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName polycolor ?r? ?g? ?b?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- polycolor[0] = atoi(argv[2]);
- polycolor[1] = atoi(argv[3]);
- polycolor[2] = atoi(argv[4]);
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-/*
- * Called when the texture image is to be changed
- */
-int
-image_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName image ?name?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- if (strcmp(argv[2], "CHECKER") == 0) {
- texture_image(CHECKER);
- } else if (strcmp(argv[2], "FACE") == 0) {
- texture_image(FACE);
- } else if (strcmp(argv[2], "TREE") == 0) {
- texture_image(TREE);
- } else {
- Tcl_SetResult(interp, "unknown texture image", TCL_STATIC);
- return TCL_ERROR;
- }
-
- Togl_PostRedisplay(togl);
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-/*
- * Called when the texture coordinate scale is changed.
- */
-int
-coord_scale_cb(Togl *togl, int argc, CONST84 char *argv[])
-{
- Tcl_Interp *interp = Togl_Interp(togl);
- float s;
-
- /* error checking */
- if (argc != 3) {
- Tcl_SetResult(interp,
- "wrong # args: should be \"pathName coord_scale ?scale?\"",
- TCL_STATIC);
- return TCL_ERROR;
- }
-
- s = atof(argv[2]);
- if (s > 0.0 && s < 10.0) {
- coord_scale = s;
- Togl_PostRedisplay(togl);
- }
-
- /* Let result string equal value */
- strcpy(interp->result, argv[2]);
- return TCL_OK;
-}
-
-
-TOGL_EXTERN int
-Texture_Init(Tcl_Interp *interp)
-{
- /*
- * Initialize Tcl, Tk, and the Togl widget module.
- */
-#ifdef USE_TCL_STUBS
- if (Tcl_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-#ifdef USE_TK_STUBS
- if (Tk_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-
- if (Togl_Init(interp) == TCL_ERROR) {
- return TCL_ERROR;
- }
-
- /*
- * Specify the C callback functions for widget creation, display,
- * and reshape.
- */
- Togl_CreateFunc(create_cb);
- Togl_DisplayFunc(display_cb);
- Togl_ReshapeFunc(reshape_cb);
-
- /*
- * Make a new Togl widget command so the Tcl code can set a C variable.
- */
- Togl_CreateCommand("min_filter", minfilter_cb);
- Togl_CreateCommand("mag_filter", magfilter_cb);
- Togl_CreateCommand("xrot", xrot_cb);
- Togl_CreateCommand("yrot", yrot_cb);
- Togl_CreateCommand("scale", scale_cb);
- Togl_CreateCommand("swrap", swrap_cb);
- Togl_CreateCommand("twrap", twrap_cb);
- Togl_CreateCommand("envmode", envmode_cb);
- Togl_CreateCommand("polycolor", polycolor_cb);
- Togl_CreateCommand("image", image_cb);
- Togl_CreateCommand("coord_scale", coord_scale_cb);
-
- /*
- * Call Tcl_CreateCommand for application-specific commands, if
- * they weren't already created by the init procedures called above.
- */
-
- return TCL_OK;
-}
diff --git a/ng/Togl-1.7/texture.tcl b/ng/Togl-1.7/texture.tcl
deleted file mode 100644
index 6333c069..00000000
--- a/ng/Togl-1.7/texture.tcl
+++ /dev/null
@@ -1,283 +0,0 @@
-#!/bin/sh
-# the next line restarts using wish \
-exec wish "$0" "$@"
-
-# $Id: texture.tcl,v 1.5 2001/12/20 13:59:31 beskow Exp $
-
-# Togl - a Tk OpenGL widget
-# Copyright (C) 1996 Brian Paul and Ben Bederson
-# See the LICENSE file for copyright details.
-
-
-# $Log: texture.tcl,v $
-# Revision 1.5 2001/12/20 13:59:31 beskow
-# Improved error-handling in togl.c in case of window creation failure
-# Added pkgIndex target to makefile
-# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs)
-# Added tk8.4a3 headers
-# Removed obsolete Tk internal headers
-#
-# Revision 1.4 2001/01/29 18:11:53 brianp
-# Jonas Beskow's changes to use Tcl/Tk stub interface
-#
-# Revision 1.3 1998/01/24 14:05:50 brianp
-# added quit button (Ben Bederson)
-#
-# Revision 1.2 1997/09/30 23:54:46 brianp
-# new layout
-#
-# Revision 1.1 1996/10/23 23:18:36 brianp
-# Initial revision
-#
-
-
-# Togl texture map demo
-
-load [file dirname [info script]]/texture[info sharedlibextension]
-
-
-# Called magnification filter changes
-proc new_magfilter {} {
- global magfilter
- .f1.view mag_filter $magfilter
-}
-
-
-# Called minification filter changes
-proc new_minfilter {} {
- global minfilter
- .f1.view min_filter $minfilter
-}
-
-
-# Called when texture image radio button changes
-proc new_image {} {
- global teximage
- .f1.view image $teximage
-}
-
-
-# Called when texture S wrap button changes
-proc new_swrap {} {
- global swrap
- .f1.view swrap $swrap
-}
-
-
-# Called when texture T wrap button changes
-proc new_twrap {} {
- global twrap
- .f1.view twrap $twrap
-}
-
-
-# Called when texture environment radio button selected
-proc new_env {} {
- global envmode
- .f1.view envmode $envmode
-}
-
-
-# Called when polygon color sliders change
-proc new_color { foo } {
- global poly_red poly_green poly_blue
- .f1.view polycolor $poly_red $poly_green $poly_blue
-}
-
-
-proc new_coord_scale { name element op } {
- global coord_scale
- .f1.view coord_scale $coord_scale
-}
-
-
-
-
-# Make the widgets
-proc setup {} {
- global magfilter
- global minfilter
- global teximage
- global swrap
- global twrap
- global envmode
- global poly_red
- global poly_green
- global poly_blue
- global coord_scale
- global startx starty # location of mouse when button pressed
- global xangle yangle
- global xangle0 yangle0
- global scale scale0
-
- wm title . "Texture Map Options"
-
- ### Two frames: top half and bottom half
- frame .f1
- frame .f2
-
- ### The OpenGL window
- togl .f1.view -width 250 -height 250 -rgba true -double true -depth true
-
-
- ### Filter radio buttons
- frame .f1.filter -relief ridge -borderwidth 3
-
- frame .f1.filter.mag -relief ridge -borderwidth 2
-
- label .f1.filter.mag.label -text "Magnification Filter" -anchor w
- radiobutton .f1.filter.mag.nearest -text GL_NEAREST -anchor w -variable magfilter -value GL_NEAREST -command new_magfilter
- radiobutton .f1.filter.mag.linear -text GL_LINEAR -anchor w -variable magfilter -value GL_LINEAR -command new_magfilter
-
- frame .f1.filter.min -relief ridge -borderwidth 2
-
- label .f1.filter.min.label -text "Minification Filter" -anchor w
- radiobutton .f1.filter.min.nearest -text GL_NEAREST -anchor w -variable minfilter -value GL_NEAREST -command new_minfilter
- radiobutton .f1.filter.min.linear -text GL_LINEAR -anchor w -variable minfilter -value GL_LINEAR -command new_minfilter
- radiobutton .f1.filter.min.nearest_mipmap_nearest -text GL_NEAREST_MIPMAP_NEAREST -anchor w -variable minfilter -value GL_NEAREST_MIPMAP_NEAREST -command new_minfilter
- radiobutton .f1.filter.min.linear_mipmap_nearest -text GL_LINEAR_MIPMAP_NEAREST -anchor w -variable minfilter -value GL_LINEAR_MIPMAP_NEAREST -command new_minfilter
- radiobutton .f1.filter.min.nearest_mipmap_linear -text GL_NEAREST_MIPMAP_LINEAR -anchor w -variable minfilter -value GL_NEAREST_MIPMAP_LINEAR -command new_minfilter
- radiobutton .f1.filter.min.linear_mipmap_linear -text GL_LINEAR_MIPMAP_LINEAR -anchor w -variable minfilter -value GL_LINEAR_MIPMAP_LINEAR -command new_minfilter
-
- pack .f1.filter.mag -fill x
- pack .f1.filter.mag.label -fill x
- pack .f1.filter.mag.nearest -side top -fill x
- pack .f1.filter.mag.linear -side top -fill x
-
- pack .f1.filter.min -fill both -expand true
- pack .f1.filter.min.label -side top -fill x
- pack .f1.filter.min.nearest -side top -fill x
- pack .f1.filter.min.linear -side top -fill x
- pack .f1.filter.min.nearest_mipmap_nearest -side top -fill x
- pack .f1.filter.min.linear_mipmap_nearest -side top -fill x
- pack .f1.filter.min.nearest_mipmap_linear -side top -fill x
- pack .f1.filter.min.linear_mipmap_linear -side top -fill x
-
-
- ### Texture coordinate scale and wrapping
- frame .f2.coord -relief ridge -borderwidth 3
- frame .f2.coord.scale -relief ridge -borderwidth 2
- label .f2.coord.scale.label -text "Max Texture Coord" -anchor w
- entry .f2.coord.scale.entry -textvariable coord_scale
- trace variable coord_scale w new_coord_scale
-
- frame .f2.coord.s -relief ridge -borderwidth 2
- label .f2.coord.s.label -text "GL_TEXTURE_WRAP_S" -anchor w
- radiobutton .f2.coord.s.repeat -text "GL_REPEAT" -anchor w -variable swrap -value GL_REPEAT -command new_swrap
- radiobutton .f2.coord.s.clamp -text "GL_CLAMP" -anchor w -variable swrap -value GL_CLAMP -command new_swrap
-
- frame .f2.coord.t -relief ridge -borderwidth 2
- label .f2.coord.t.label -text "GL_TEXTURE_WRAP_T" -anchor w
- radiobutton .f2.coord.t.repeat -text "GL_REPEAT" -anchor w -variable twrap -value GL_REPEAT -command new_twrap
- radiobutton .f2.coord.t.clamp -text "GL_CLAMP" -anchor w -variable twrap -value GL_CLAMP -command new_twrap
-
- pack .f2.coord.scale -fill both -expand true
- pack .f2.coord.scale.label -side top -fill x
- pack .f2.coord.scale.entry -side top -fill x
-
- pack .f2.coord.s -fill x
- pack .f2.coord.s.label -side top -fill x
- pack .f2.coord.s.repeat -side top -fill x
- pack .f2.coord.s.clamp -side top -fill x
-
- pack .f2.coord.t -fill x
- pack .f2.coord.t.label -side top -fill x
- pack .f2.coord.t.repeat -side top -fill x
- pack .f2.coord.t.clamp -side top -fill x
-
-
- ### Texture image radio buttons (just happens to fit into the coord frame)
- frame .f2.env -relief ridge -borderwidth 3
- frame .f2.env.image -relief ridge -borderwidth 2
- label .f2.env.image.label -text "Texture Image" -anchor w
- radiobutton .f2.env.image.checker -text "Checker" -anchor w -variable teximage -value CHECKER -command new_image
- radiobutton .f2.env.image.tree -text "Tree" -anchor w -variable teximage -value TREE -command new_image
- radiobutton .f2.env.image.face -text "Face" -anchor w -variable teximage -value FACE -command new_image
- pack .f2.env.image -fill x
- pack .f2.env.image.label -side top -fill x
- pack .f2.env.image.checker -side top -fill x
- pack .f2.env.image.tree -side top -fill x
- pack .f2.env.image.face -side top -fill x
-
-
- ### Texture Environment
- label .f2.env.label -text "GL_TEXTURE_ENV_MODE" -anchor w
- radiobutton .f2.env.modulate -text "GL_MODULATE" -anchor w -variable envmode -value GL_MODULATE -command new_env
- radiobutton .f2.env.decal -text "GL_DECAL" -anchor w -variable envmode -value GL_DECAL -command new_env
- radiobutton .f2.env.blend -text "GL_BLEND" -anchor w -variable envmode -value GL_BLEND -command new_env
- pack .f2.env.label -fill x
- pack .f2.env.modulate -side top -fill x
- pack .f2.env.decal -side top -fill x
- pack .f2.env.blend -side top -fill x
-
- ### Polygon color
- frame .f2.color -relief ridge -borderwidth 3
- label .f2.color.label -text "Polygon color" -anchor w
- scale .f2.color.red -label Red -from 0 -to 255 -orient horizontal -variable poly_red -command new_color
- scale .f2.color.green -label Green -from 0 -to 255 -orient horizontal -variable poly_green -command new_color
- scale .f2.color.blue -label Blue -from 0 -to 255 -orient horizontal -variable poly_blue -command new_color
- pack .f2.color.label -fill x
- pack .f2.color.red -side top -fill x
- pack .f2.color.green -side top -fill x
- pack .f2.color.blue -side top -fill x
-
-
- ### Main widgets
- pack .f1.view -side left -fill both -expand true
- pack .f1.filter -side left -fill y
- pack .f1 -side top -fill both -expand true
-
- pack .f2.coord .f2.env -side left -fill both
- pack .f2.color -fill x
- pack .f2 -side top -fill x
-
- button .btn -text Quit -command exit
- pack .btn -expand true -fill both
-
- bind .f1.view {
- set startx %x
- set starty %y
- set xangle0 $xangle
- set yangle0 $yangle
- }
-
- bind .f1.view {
- set xangle [expr $xangle0 + (%x - $startx) / 3.0 ]
- set yangle [expr $yangle0 + (%y - $starty) / 3.0 ]
- .f1.view yrot $xangle
- .f1.view xrot $yangle
- }
-
- bind .f1.view {
- set startx %x
- set starty %y
- set scale0 $scale
- }
-
- bind .f1.view {
- set q [ expr ($starty - %y) / 400.0 ]
- set scale [expr $scale0 * exp($q)]
- .f1.view scale $scale
- }
-
- # set default values:
- set minfilter GL_NEAREST_MIPMAP_LINEAR
- set magfilter GL_LINEAR
- set swrap GL_REPEAT
- set twrap GL_REPEAT
- set envmode GL_MODULATE
- set teximage CHECKER
- set poly_red 255
- set poly_green 255
- set poly_blue 255
- set coord_scale 1.0
-
- set xangle 0.0
- set yangle 0.0
- set scale 1.0
-}
-
-
-# Execution starts here!
-setup
-
diff --git a/ng/Togl-1.7/tkMacOSX.h b/ng/Togl-1.7/tkMacOSX.h
deleted file mode 100644
index 25e677e2..00000000
--- a/ng/Togl-1.7/tkMacOSX.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* This file isn't installed by default */
-/*
- * tkMacOSXInt.h --
- *
- * Declarations of Macintosh specific exported variables and procedures.
- *
- * Copyright (c) 1995-1997 Sun Microsystems, Inc.
- * Copyright 2001, Apple Computer, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: tkMacOSX.h,v 1.1 2005/04/22 02:00:07 gregcouch Exp $
- */
-
-#ifndef _TKMAC
-#define _TKMAC
-
-#include
-#include "tkInt.h"
-
-/*
- * Structures and function types for handling Netscape-type in process
- * embedding where Tk does not control the top-level
- */
-
-typedef int (Tk_MacOSXEmbedRegisterWinProc) (int winID, Tk_Window window);
-typedef GWorldPtr (Tk_MacOSXEmbedGetGrafPortProc) (Tk_Window window);
-typedef int (Tk_MacOSXEmbedMakeContainerExistProc) (Tk_Window window);
-typedef void (Tk_MacOSXEmbedGetClipProc) (Tk_Window window, RgnHandle rgn);
-typedef void (Tk_MacOSXEmbedGetOffsetInParentProc) (Tk_Window window, Point *ulCorner);
-
-#include "tkPlatDecls.h"
-
-#endif /* _TKMAC */
diff --git a/ng/Togl-1.7/togl.c b/ng/Togl-1.7/togl.c
deleted file mode 100644
index a1b75d1e..00000000
--- a/ng/Togl-1.7/togl.c
+++ /dev/null
@@ -1,4033 +0,0 @@
-/* $Id: togl.c,v 1.73 2005/10/26 07:40:22 gregcouch Exp $ */
-
-/* vi:set sw=4: */
-
-/*
- * Togl - a Tk OpenGL widget
- *
- * Copyright (C) 1996-2002 Brian Paul and Ben Bederson
- * See the LICENSE file for copyright details.
- */
-
-/*
- * Currently we support X11, Win32 and Macintosh only
- */
-
-#include "togl.h"
-
-/* Use TCL_STUPID to cast (const char *) to (char *) where the Tcl function
- * prototype argument should really be const */
-#define TCL_STUPID (char *)
-
-/* Use WIDGREC to cast widgRec arguments */
-#define WIDGREC (char *)
-
-/*** Windows headers ***/
-#if defined(TOGL_WGL)
-# define WIN32_LEAN_AND_MEAN
-# include
-# undef WIN32_LEAN_AND_MEAN
-# include
-
-/*** X Window System headers ***/
-#elif defined(TOGL_X11)
-# include
-# include
-# include /* for XA_RGB_DEFAULT_MAP atom */
-# if defined(__vms)
-# include /* for XmuLookupStandardColormap */
-# else
-# include /* for XmuLookupStandardColormap */
-# endif
-# include
-
-/*** Mac headers ***/
-#elif defined(TOGL_AGL_CLASSIC)
-# include
-# include
-# include
-# include
-
-#elif defined(TOGL_AGL)
-# define Cursor QDCursor
-# include
-# undef Cursor
-# include "tkMacOSX.h"
-# include /* usa MacDrawable */
-# include
-
-#else /* make sure only one platform defined */
-# error Unsupported platform, or confused platform defines...
-#endif
-
-/*** Standard C headers ***/
-#include
-#include
-#include
-
-#ifdef TOGL_WGL
-# include
-#endif
-
-#if TK_MAJOR_VERSION < 8
-# error Sorry Togl requires Tcl/Tk ver 8.0 or higher.
-#endif
-
-#if defined(TOGL_AGL_CLASSIC)
-# if TK_MAJOR_VERSION < 8 || (TK_MAJOR_VERSION == 8 && TK_MINOR_VERSION < 3)
-# error Sorry Mac classic version requires Tcl/Tk ver 8.3.0 or higher.
-# endif
-#endif /* TOGL_AGL_CLASSIC */
-
-#if defined(TOGL_AGL)
-# if TK_MAJOR_VERSION < 8 || (TK_MAJOR_VERSION == 8 && TK_MINOR_VERSION < 4)
-# error Sorry Mac Aqua version requires Tcl/Tk ver 8.4.0 or higher.
-# endif
-#endif /* TOGL_AGL */
-
-/* workaround for bug #123153 in tcl ver8.4a2 (tcl.h) */
-#if defined(Tcl_InitHashTable) && defined(USE_TCL_STUBS)
-# undef Tcl_InitHashTable
-# define Tcl_InitHashTable (tclStubsPtr->tcl_InitHashTable)
-#endif
-#if TK_MAJOR_VERSION > 8 || (TK_MAJOR_VERSION == 8 && TK_MINOR_VERSION >= 4)
-# define HAVE_TK_SETCLASSPROCS
-/* pointer to Tk_SetClassProcs function in the stub table */
-
-static void (*SetClassProcsPtr)
- _ANSI_ARGS_((Tk_Window, Tk_ClassProcs *, ClientData));
-#endif
-
-/*
- * Copy of TkClassProcs declarations form tkInt.h
- * (this is needed for Tcl ver =< 8.4a3)
- */
-
-typedef Window (TkClassCreateProc) _ANSI_ARGS_((Tk_Window tkwin,
- Window parent, ClientData instanceData));
-typedef void (TkClassGeometryProc) _ANSI_ARGS_((ClientData instanceData));
-typedef void (TkClassModalProc) _ANSI_ARGS_((Tk_Window tkwin,
- XEvent *eventPtr));
-typedef struct TkClassProcs
-{
- TkClassCreateProc *createProc;
- TkClassGeometryProc *geometryProc;
- TkClassModalProc *modalProc;
-} TkClassProcs;
-
-
-/* Defaults */
-#define DEFAULT_WIDTH "400"
-#define DEFAULT_HEIGHT "400"
-#define DEFAULT_IDENT ""
-#define DEFAULT_FONTNAME "fixed"
-#define DEFAULT_TIME "1"
-
-
-#ifdef TOGL_WGL
-/* Maximum size of a logical palette corresponding to a colormap in color index
- * mode. */
-# define MAX_CI_COLORMAP_SIZE 4096
-
-# if TOGL_USE_FONTS != 1
-/*
- * copy of TkWinColormap from tkWinInt.h
- */
-
-typedef struct
-{
- HPALETTE palette; /* Palette handle used when drawing. */
- UINT size; /* Number of entries in the palette. */
- int stale; /* 1 if palette needs to be realized, otherwise
- * 0. If the palette is stale, then an idle
- * handler is scheduled to realize the palette. */
- Tcl_HashTable refCounts; /* Hash table of palette entry reference counts
- * indexed by pixel value. */
-} TkWinColormap;
-# else
-# include "tkWinInt.h"
-# endif
-
-static LRESULT(CALLBACK *tkWinChildProc) (HWND hwnd, UINT message,
- WPARAM wParam, LPARAM lParam) = NULL;
-
-# define TK_WIN_CHILD_CLASS_NAME "TkChild"
-
-#endif /* TOGL_WGL */
-
-
-#define MAX(a,b) (((a)>(b))?(a):(b))
-
-#define TCL_ERR(interp, string) \
- do { \
- Tcl_ResetResult(interp); \
- Tcl_AppendResult(interp, string, NULL); \
- return TCL_ERROR; \
- } while (0)
-
-/* The constant DUMMY_WINDOW is used to signal window creation failure from the
- * Togl_CreateWindow() */
-#define DUMMY_WINDOW ((Window) -1)
-
-#define ALL_EVENTS_MASK \
- (KeyPressMask | \
- KeyReleaseMask | \
- ButtonPressMask | \
- ButtonReleaseMask | \
- EnterWindowMask | \
- LeaveWindowMask | \
- PointerMotionMask | \
- ExposureMask | \
- VisibilityChangeMask | \
- FocusChangeMask | \
- PropertyChangeMask | \
- ColormapChangeMask)
-
-struct Togl
-{
- Togl *Next; /* next in linked list */
-
-#if defined(TOGL_WGL)
- HDC tglGLHdc; /* Device context of device that OpenGL calls
- * will be drawn on */
- HGLRC tglGLHglrc; /* OpenGL rendering context to be made current */
- int CiColormapSize; /* (Maximum) size of colormap in color index
- * mode */
-#elif defined(TOGL_X11)
- GLXContext GlCtx; /* Normal planes GLX context */
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- AGLContext aglCtx;
-#endif /* TOGL_WGL */
-
- Display *display; /* X's token for the window's display. */
- Tk_Window TkWin; /* Tk window structure */
- Tcl_Interp *Interp; /* Tcl interpreter */
- Tcl_Command widgetCmd; /* Token for togl's widget command */
-#ifndef NO_TK_CURSOR
- Tk_Cursor Cursor; /* The widget's cursor */
-#endif
- int Width, Height; /* Dimensions of window */
- int SetGrid; /* positive is grid size for window manager */
- int TimerInterval; /* Time interval for timer in milliseconds */
-#if (TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION) >= 705
- Tcl_TimerToken timerHandler; /* Token for togl's timer handler */
-#else
- Tk_TimerToken timerHandler; /* Token for togl's timer handler */
-#endif
- Bool RgbaFlag; /* configuration flags (ala GLX parameters) */
- int RgbaRed;
- int RgbaGreen;
- int RgbaBlue;
- Bool DoubleFlag;
- Bool DepthFlag;
- int DepthSize;
- Bool AccumFlag;
- int AccumRed;
- int AccumGreen;
- int AccumBlue;
- int AccumAlpha;
- Bool AlphaFlag;
- int AlphaSize;
- Bool StencilFlag;
- int StencilSize;
- Bool PrivateCmapFlag;
- Bool OverlayFlag;
- Bool StereoFlag;
-#ifdef __sgi
- Bool OldStereoFlag;
-#endif
- int AuxNumber;
- Bool Indirect;
- int PixelFormat;
- const char *ShareList; /* name (ident) of Togl to share dlists with */
- const char *ShareContext; /* name (ident) to share OpenGL context with */
-
- const char *Ident; /* User's identification string */
- ClientData Client_Data; /* Pointer to user data */
-
- Bool UpdatePending; /* Should normal planes be redrawn? */
-
- Togl_Callback *CreateProc; /* Callback when widget is created */
- Togl_Callback *DisplayProc; /* Callback when widget is rendered */
- Togl_Callback *ReshapeProc; /* Callback when window size changes */
- Togl_Callback *DestroyProc; /* Callback when widget is destroyed */
- Togl_Callback *TimerProc; /* Callback when widget is idle */
-
- /* Overlay stuff */
-#if defined(TOGL_X11)
- GLXContext OverlayCtx; /* Overlay planes OpenGL context */
-#elif defined(TOGL_WGL)
- HGLRC tglGLOverlayHglrc;
-#endif /* TOGL_X11 */
-
- Window OverlayWindow; /* The overlay window, or 0 */
- Togl_Callback *OverlayDisplayProc; /* Overlay redraw proc */
- Bool OverlayUpdatePending; /* Should overlay be redrawn? */
- Colormap OverlayCmap; /* colormap for overlay is created */
- int OverlayTransparentPixel; /* transparent pixel */
- Bool OverlayIsMapped;
-
- /* for DumpToEpsFile: Added by Miguel A. de Riera Pasenau 10.01.1997 */
- XVisualInfo *VisInfo; /* Visual info of the current */
- /* context needed for DumpToEpsFile */
- GLfloat *EpsRedMap; /* Index2RGB Maps for Color index modes */
- GLfloat *EpsGreenMap;
- GLfloat *EpsBlueMap;
- GLint EpsMapSize; /* = Number of indices in our Togl */
-};
-
-
-/* NTNTNT need to change to handle Windows Data Types */
-/*
- * Prototypes for functions local to this file
- */
-static int Togl_Cmd(ClientData clientData, Tcl_Interp *interp,
- int argc, CONST84 char **argv);
-static void Togl_EventProc(ClientData clientData, XEvent *eventPtr);
-static Window Togl_CreateWindow(Tk_Window, Window, ClientData);
-static void Togl_WorldChanged(ClientData);
-
-#ifdef MESA_COLOR_HACK
-static int get_free_color_cells(Display *display, int screen,
- Colormap colormap);
-static void free_default_color_cells(Display *display, Colormap colormap);
-#endif
-static void ToglCmdDeletedProc(ClientData);
-
-
-
-#if defined(__sgi)
-/* SGI-only stereo */
-static void oldStereoMakeCurrent(Display *dpy, Window win, GLXContext ctx);
-static void oldStereoInit(Togl *togl, int stereoEnabled);
-#endif
-
-#if defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
-static void SetMacBufRect(Togl *togl);
-#endif
-
-
-/*
- * Setup Togl widget configuration options:
- */
-
-static Tk_ConfigSpec configSpecs[] = {
- {TK_CONFIG_PIXELS, TCL_STUPID "-height", "height", "Height",
- DEFAULT_HEIGHT, Tk_Offset(Togl, Height), 0, NULL},
-
- {TK_CONFIG_PIXELS, TCL_STUPID "-width", "width", "Width",
- DEFAULT_WIDTH, Tk_Offset(Togl, Width), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-setgrid", "setGrid", "SetGrid",
- "0", Tk_Offset(Togl, SetGrid), 0},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-rgba", "rgba", "Rgba",
- "true", Tk_Offset(Togl, RgbaFlag), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-redsize", "redsize", "RedSize",
- "1", Tk_Offset(Togl, RgbaRed), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-greensize", "greensize", "GreenSize",
- "1", Tk_Offset(Togl, RgbaGreen), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-bluesize", "bluesize", "BlueSize",
- "1", Tk_Offset(Togl, RgbaBlue), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-double", "double", "Double",
- "false", Tk_Offset(Togl, DoubleFlag), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-depth", "depth", "Depth",
- "false", Tk_Offset(Togl, DepthFlag), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-depthsize", "depthsize", "DepthSize",
- "1", Tk_Offset(Togl, DepthSize), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-accum", "accum", "Accum",
- "false", Tk_Offset(Togl, AccumFlag), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-accumredsize", "accumredsize", "AccumRedSize",
- "1", Tk_Offset(Togl, AccumRed), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-accumgreensize", "accumgreensize",
- "AccumGreenSize",
- "1", Tk_Offset(Togl, AccumGreen), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-accumbluesize", "accumbluesize",
- "AccumBlueSize",
- "1", Tk_Offset(Togl, AccumBlue), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-accumalphasize", "accumalphasize",
- "AccumAlphaSize",
- "1", Tk_Offset(Togl, AccumAlpha), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-alpha", "alpha", "Alpha",
- "false", Tk_Offset(Togl, AlphaFlag), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-alphasize", "alphasize", "AlphaSize",
- "1", Tk_Offset(Togl, AlphaSize), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-stencil", "stencil", "Stencil",
- "false", Tk_Offset(Togl, StencilFlag), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-stencilsize", "stencilsize", "StencilSize",
- "1", Tk_Offset(Togl, StencilSize), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-auxbuffers", "auxbuffers", "AuxBuffers",
- "0", Tk_Offset(Togl, AuxNumber), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-privatecmap", "privateCmap", "PrivateCmap",
- "false", Tk_Offset(Togl, PrivateCmapFlag), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-overlay", "overlay", "Overlay",
- "false", Tk_Offset(Togl, OverlayFlag), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-stereo", "stereo", "Stereo",
- "false", Tk_Offset(Togl, StereoFlag), 0, NULL},
-
-#ifdef __sgi
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-oldstereo", "oldstereo", "OldStereo",
- "false", Tk_Offset(Togl, OldStereoFlag), 0, NULL},
-#endif
-
-#ifndef NO_TK_CURSOR
- {TK_CONFIG_ACTIVE_CURSOR, TCL_STUPID "-cursor", "cursor", "Cursor",
- "", Tk_Offset(Togl, Cursor), TK_CONFIG_NULL_OK},
-#endif
-
- {TK_CONFIG_INT, TCL_STUPID "-time", "time", "Time",
- DEFAULT_TIME, Tk_Offset(Togl, TimerInterval), 0, NULL},
-
- {TK_CONFIG_STRING, TCL_STUPID "-sharelist", "sharelist", "ShareList",
- NULL, Tk_Offset(Togl, ShareList), 0, NULL},
-
- {TK_CONFIG_STRING, TCL_STUPID "-sharecontext", "sharecontext",
- "ShareContext", NULL, Tk_Offset(Togl, ShareContext), 0, NULL},
-
- {TK_CONFIG_STRING, TCL_STUPID "-ident", "ident", "Ident",
- DEFAULT_IDENT, Tk_Offset(Togl, Ident), 0, NULL},
-
- {TK_CONFIG_BOOLEAN, TCL_STUPID "-indirect", "indirect", "Indirect",
- "false", Tk_Offset(Togl, Indirect), 0, NULL},
-
- {TK_CONFIG_INT, TCL_STUPID "-pixelformat", "pixelFormat", "PixelFormat",
- "0", Tk_Offset(Togl, PixelFormat), 0, NULL},
-
- {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}
-};
-
-
-/*
- * Default callback pointers. When a new Togl widget is created it
- * will be assigned these initial callbacks.
- */
-static Togl_Callback *DefaultCreateProc = NULL;
-static Togl_Callback *DefaultDisplayProc = NULL;
-static Togl_Callback *DefaultReshapeProc = NULL;
-static Togl_Callback *DefaultDestroyProc = NULL;
-static Togl_Callback *DefaultOverlayDisplayProc = NULL;
-static Togl_Callback *DefaultTimerProc = NULL;
-static ClientData DefaultClientData = NULL;
-static Tcl_HashTable CommandTable;
-
-/*
- * Head of linked list of all Togl widgets
- */
-static Togl *ToglHead = NULL;
-
-/*
- * Add given togl widget to linked list.
- */
-static void
-AddToList(Togl *t)
-{
- t->Next = ToglHead;
- ToglHead = t;
-}
-
-/*
- * Remove given togl widget from linked list.
- */
-static void
-RemoveFromList(Togl *t)
-{
- Togl *prev = NULL;
- Togl *pos = ToglHead;
-
- while (pos) {
- if (pos == t) {
- if (prev) {
- prev->Next = pos->Next;
- } else {
- ToglHead = pos->Next;
- }
- return;
- }
- prev = pos;
- pos = pos->Next;
- }
-}
-
-/*
- * Return pointer to togl widget given a user identifier string.
- */
-static Togl *
-FindTogl(const char *ident)
-{
- Togl *t = ToglHead;
-
- while (t) {
- if (strcmp(t->Ident, ident) == 0)
- return t;
- t = t->Next;
- }
- return NULL;
-}
-
-
-#if defined(TOGL_X11)
-/*
- * Return pointer to another togl widget with same OpenGL context.
- */
-static Togl *
-FindToglWithSameContext(Togl *togl)
-{
- Togl *t;
-
- for (t = ToglHead; t != NULL; t = t->Next) {
- if (t == togl)
- continue;
-# if defined(TOGL_WGL)
- if (t->tglGLHglrc == togl->tglGLHglrc)
-# elif defined(TOGL_X11)
- if (t->GlCtx == togl->GlCtx)
-# elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- if (t->aglCtx == togl->aglCtx)
-# endif
- return t;
- }
- return NULL;
-}
-#endif
-
-#ifdef USE_OVERLAY
-/*
- * Return pointer to another togl widget with same OpenGL overlay context.
- */
-static Togl *
-FindToglWithSameOverlayContext(Togl *togl)
-{
- Togl *t;
-
- for (t = ToglHead; t != NULL; t = t->Next) {
- if (t == togl)
- continue;
-# if defined(TOGL_X11)
- if (t->OverlayCtx == togl->OverlayCtx)
-# elif defined(TOGL_WGL)
- if (t->tglGLOverlayHglrc == togl->tglGLOverlayHglrc)
-# endif
- return t;
- }
- return NULL;
-}
-#endif
-
-#if defined(TOGL_X11)
-/*
- * Return an X colormap to use for OpenGL RGB-mode rendering.
- * Input: dpy - the X display
- * scrnum - the X screen number
- * visinfo - the XVisualInfo as returned by glXChooseVisual()
- * Return: an X Colormap or 0 if there's a _serious_ error.
- */
-static Colormap
-get_rgb_colormap(Display *dpy,
- int scrnum, const XVisualInfo *visinfo, Tk_Window tkwin)
-{
- Atom hp_cr_maps;
- Status status;
- int numCmaps;
- int i;
- XStandardColormap *standardCmaps;
- Window root = XRootWindow(dpy, scrnum);
- Bool using_mesa;
-
- /*
- * First check if visinfo's visual matches the default/root visual.
- */
- if (visinfo->visual == Tk_Visual(tkwin)) {
- /* use the default/root colormap */
- Colormap cmap;
-
- cmap = Tk_Colormap(tkwin);
-# ifdef MESA_COLOR_HACK
- (void) get_free_color_cells(dpy, scrnum, cmap);
-# endif
- return cmap;
- }
-
- /*
- * Check if we're using Mesa.
- */
- if (strstr(glXQueryServerString(dpy, scrnum, GLX_VERSION), "Mesa")) {
- using_mesa = True;
- } else {
- using_mesa = False;
- }
-
- /*
- * Next, if we're using Mesa and displaying on an HP with the "Color
- * Recovery" feature and the visual is 8-bit TrueColor, search for a
- * special colormap initialized for dithering. Mesa will know how to
- * dither using this colormap.
- */
- if (using_mesa) {
- hp_cr_maps = XInternAtom(dpy, "_HP_RGB_SMOOTH_MAP_LIST", True);
- if (hp_cr_maps
-# ifdef __cplusplus
- && visinfo->visual->c_class == TrueColor
-# else
- && visinfo->visual->class == TrueColor
-# endif
- && visinfo->depth == 8) {
- status = XGetRGBColormaps(dpy, root, &standardCmaps,
- &numCmaps, hp_cr_maps);
- if (status) {
- for (i = 0; i < numCmaps; i++) {
- if (standardCmaps[i].visualid == visinfo->visual->visualid) {
- Colormap cmap = standardCmaps[i].colormap;
-
- (void) XFree(standardCmaps);
- return cmap;
- }
- }
- (void) XFree(standardCmaps);
- }
- }
- }
-
- /*
- * Next, try to find a standard X colormap.
- */
-# if !HP && !SUN
-# ifndef SOLARIS_BUG
- status = XmuLookupStandardColormap(dpy, visinfo->screen,
- visinfo->visualid, visinfo->depth, XA_RGB_DEFAULT_MAP,
- /* replace */ False, /* retain */ True);
- if (status == 1) {
- status = XGetRGBColormaps(dpy, root, &standardCmaps,
- &numCmaps, XA_RGB_DEFAULT_MAP);
- if (status == 1) {
- for (i = 0; i < numCmaps; i++) {
- if (standardCmaps[i].visualid == visinfo->visualid) {
- Colormap cmap = standardCmaps[i].colormap;
-
- (void) XFree(standardCmaps);
- return cmap;
- }
- }
- (void) XFree(standardCmaps);
- }
- }
-# endif
-# endif
-
- /*
- * If we get here, give up and just allocate a new colormap.
- */
- return XCreateColormap(dpy, root, visinfo->visual, AllocNone);
-}
-#elif defined(TOGL_WGL)
-
-/* Code to create RGB palette is taken from the GENGL sample program of Win32
- * SDK */
-
-static unsigned char threeto8[8] = {
- 0, 0111 >> 1, 0222 >> 1, 0333 >> 1, 0444 >> 1, 0555 >> 1, 0666 >> 1, 0377
-};
-
-static unsigned char twoto8[4] = {
- 0, 0x55, 0xaa, 0xff
-};
-
-static unsigned char oneto8[2] = {
- 0, 255
-};
-
-static int defaultOverride[13] = {
- 0, 3, 24, 27, 64, 67, 88, 173, 181, 236, 247, 164, 91
-};
-
-static PALETTEENTRY defaultPalEntry[20] = {
- {0, 0, 0, 0},
- {0x80, 0, 0, 0},
- {0, 0x80, 0, 0},
- {0x80, 0x80, 0, 0},
- {0, 0, 0x80, 0},
- {0x80, 0, 0x80, 0},
- {0, 0x80, 0x80, 0},
- {0xC0, 0xC0, 0xC0, 0},
-
- {192, 220, 192, 0},
- {166, 202, 240, 0},
- {255, 251, 240, 0},
- {160, 160, 164, 0},
-
- {0x80, 0x80, 0x80, 0},
- {0xFF, 0, 0, 0},
- {0, 0xFF, 0, 0},
- {0xFF, 0xFF, 0, 0},
- {0, 0, 0xFF, 0},
- {0xFF, 0, 0xFF, 0},
- {0, 0xFF, 0xFF, 0},
- {0xFF, 0xFF, 0xFF, 0}
-};
-
-static unsigned char
-ComponentFromIndex(int i, UINT nbits, UINT shift)
-{
- unsigned char val;
-
- val = (unsigned char) (i >> shift);
- switch (nbits) {
-
- case 1:
- val &= 0x1;
- return oneto8[val];
-
- case 2:
- val &= 0x3;
- return twoto8[val];
-
- case 3:
- val &= 0x7;
- return threeto8[val];
-
- default:
- return 0;
- }
-}
-
-static Colormap
-Win32CreateRgbColormap(PIXELFORMATDESCRIPTOR pfd)
-{
- TkWinColormap *cmap = (TkWinColormap *) ckalloc(sizeof (TkWinColormap));
- LOGPALETTE *pPal;
- int n, i;
-
- n = 1 << pfd.cColorBits;
- pPal = (PLOGPALETTE) LocalAlloc(LMEM_FIXED, sizeof (LOGPALETTE)
- + n * sizeof (PALETTEENTRY));
- pPal->palVersion = 0x300;
- pPal->palNumEntries = n;
- for (i = 0; i < n; i++) {
- pPal->palPalEntry[i].peRed =
- ComponentFromIndex(i, pfd.cRedBits, pfd.cRedShift);
- pPal->palPalEntry[i].peGreen =
- ComponentFromIndex(i, pfd.cGreenBits, pfd.cGreenShift);
- pPal->palPalEntry[i].peBlue =
- ComponentFromIndex(i, pfd.cBlueBits, pfd.cBlueShift);
- pPal->palPalEntry[i].peFlags = 0;
- }
-
- /* fix up the palette to include the default GDI palette */
- if ((pfd.cColorBits == 8)
- && (pfd.cRedBits == 3) && (pfd.cRedShift == 0)
- && (pfd.cGreenBits == 3) && (pfd.cGreenShift == 3)
- && (pfd.cBlueBits == 2) && (pfd.cBlueShift == 6)) {
- for (i = 1; i <= 12; i++)
- pPal->palPalEntry[defaultOverride[i]] = defaultPalEntry[i];
- }
-
- cmap->palette = CreatePalette(pPal);
- LocalFree(pPal);
- cmap->size = n;
- cmap->stale = 0;
-
- /* Since this is a private colormap of a fix size, we do not need a valid
- * hash table, but a dummy one */
-
- Tcl_InitHashTable(&cmap->refCounts, TCL_ONE_WORD_KEYS);
- return (Colormap) cmap;
-}
-
-static Colormap
-Win32CreateCiColormap(Togl *togl)
-{
- /* Create a colormap with size of togl->CiColormapSize and set all entries
- * to black */
-
- LOGPALETTE logPalette;
- TkWinColormap *cmap = (TkWinColormap *) ckalloc(sizeof (TkWinColormap));
-
- logPalette.palVersion = 0x300;
- logPalette.palNumEntries = 1;
- logPalette.palPalEntry[0].peRed = 0;
- logPalette.palPalEntry[0].peGreen = 0;
- logPalette.palPalEntry[0].peBlue = 0;
- logPalette.palPalEntry[0].peFlags = 0;
-
- cmap->palette = CreatePalette(&logPalette);
- cmap->size = togl->CiColormapSize;
- ResizePalette(cmap->palette, cmap->size); /* sets new entries to black */
- cmap->stale = 0;
-
- /* Since this is a private colormap of a fix size, we do not need a valid
- * hash table, but a dummy one */
-
- Tcl_InitHashTable(&cmap->refCounts, TCL_ONE_WORD_KEYS);
- return (Colormap) cmap;
-}
-#endif /* TOGL_X11 */
-
-
-
-/*
- * Togl_Init
- *
- * Called upon system startup to create Togl command.
- */
-int
-Togl_Init(Tcl_Interp *interp)
-{
- int major, minor, patchLevel, releaseType;
-
-#ifdef USE_TCL_STUBS
- if (Tcl_InitStubs(interp, "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-#ifdef USE_TK_STUBS
- if (Tk_InitStubs(interp, TCL_STUPID "8.1", 0) == NULL) {
- return TCL_ERROR;
- }
-#endif
-
- /* Skip all this on Tcl/Tk 8.0 or older. Seems to work */
-#if TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION > 800
- Tcl_GetVersion(&major, &minor, &patchLevel, &releaseType);
-
-# ifdef HAVE_TK_SETCLASSPROCS
- if (major > 8
- || (major == 8
- && (minor > 4
- || (minor == 4 && (releaseType > 0
- || patchLevel >= 2))))) {
-# ifdef USE_TK_STUBS
- SetClassProcsPtr = tkStubsPtr->tk_SetClassProcs;
-# else
- SetClassProcsPtr = Tk_SetClassProcs;
-# endif
- } else {
- SetClassProcsPtr = NULL;
- }
-# else
- if (major > 8
- || (major == 8
- && (minor > 4
- || (minor == 4 && (releaseType > 0
- || patchLevel >= 2))))) {
- TCL_ERR(interp,
- "Sorry, this instance of Togl was not compiled to work with Tcl/Tk 8.4a2 or higher.");
- }
-# endif
-
-#endif
-
- if (Tcl_PkgProvide(interp, "Togl", TOGL_VERSION) != TCL_OK) {
- return TCL_ERROR;
- }
-
- if (Tcl_CreateCommand(interp, "togl", Togl_Cmd,
- (ClientData) Tk_MainWindow(interp), NULL) == NULL)
- return TCL_ERROR;
-
- Tcl_InitHashTable(&CommandTable, TCL_STRING_KEYS);
-
- return TCL_OK;
-}
-
-
-/*
- * Register a C function to be called when an Togl widget is realized.
- */
-void
-Togl_CreateFunc(Togl_Callback *proc)
-{
- DefaultCreateProc = proc;
-}
-
-
-/*
- * Register a C function to be called when an Togl widget must be redrawn.
- */
-void
-Togl_DisplayFunc(Togl_Callback *proc)
-{
- DefaultDisplayProc = proc;
-}
-
-
-/*
- * Register a C function to be called when an Togl widget is resized.
- */
-void
-Togl_ReshapeFunc(Togl_Callback *proc)
-{
- DefaultReshapeProc = proc;
-}
-
-
-/*
- * Register a C function to be called when an Togl widget is destroyed.
- */
-void
-Togl_DestroyFunc(Togl_Callback *proc)
-{
- DefaultDestroyProc = proc;
-}
-
-
-/*
- * Register a C function to be called from TimerEventHandler.
- */
-void
-Togl_TimerFunc(Togl_Callback *proc)
-{
- DefaultTimerProc = proc;
-}
-
-
-/*
- * Reset default callback pointers to NULL.
- */
-void
-Togl_ResetDefaultCallbacks(void)
-{
- DefaultCreateProc = NULL;
- DefaultDisplayProc = NULL;
- DefaultReshapeProc = NULL;
- DefaultDestroyProc = NULL;
- DefaultOverlayDisplayProc = NULL;
- DefaultTimerProc = NULL;
- DefaultClientData = NULL;
-}
-
-
-/*
- * Change the create callback for a specific Togl widget.
- */
-void
-Togl_SetCreateFunc(Togl *togl, Togl_Callback *proc)
-{
- togl->CreateProc = proc;
-}
-
-
-/*
- * Change the display/redraw callback for a specific Togl widget.
- */
-void
-Togl_SetDisplayFunc(Togl *togl, Togl_Callback *proc)
-{
- togl->DisplayProc = proc;
-}
-
-
-/*
- * Change the reshape callback for a specific Togl widget.
- */
-void
-Togl_SetReshapeFunc(Togl *togl, Togl_Callback *proc)
-{
- togl->ReshapeProc = proc;
-}
-
-
-/*
- * Change the destroy callback for a specific Togl widget.
- */
-void
-Togl_SetDestroyFunc(Togl *togl, Togl_Callback *proc)
-{
- togl->DestroyProc = proc;
-}
-
-
-/*
- * Togl_Timer
- *
- * Gets called from Tk_CreateTimerHandler.
- */
-static void
-Togl_Timer(ClientData clientData)
-{
- Togl *togl = (Togl *) clientData;
-
- if (togl->TimerProc) {
- togl->TimerProc(togl);
-
- /* Re-register this callback since Tcl/Tk timers are "one-shot". That
- * is, after the timer callback is called it not normally called again.
- * * * * * * * * * That's not the behavior we want for Togl. */
-#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401
- togl->timerHandler =
- Tcl_CreateTimerHandler(togl->TimerInterval, Togl_Timer,
- (ClientData) togl);
-#else
- togl->timerHandler =
- Tk_CreateTimerHandler(togl->TimeInterval, Togl_Timer,
- (ClientData) togl);
-#endif
- }
-}
-
-
-/*
- * Change the timer callback for a specific Togl widget.
- * Pass NULL to disable the callback.
- */
-void
-Togl_SetTimerFunc(Togl *togl, Togl_Callback *proc)
-{
- togl->TimerProc = proc;
- if (proc) {
-#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401
- togl->timerHandler =
- Tcl_CreateTimerHandler(togl->TimerInterval, Togl_Timer,
- (ClientData) togl);
-#else
- togl->timerHandler =
- Tk_CreateTimerHandler(togl->TimeInterval, Togl_Timer,
- (ClientData) togl);
-#endif
- }
-}
-
-
-
-/*
- * Togl_CreateCommand
- *
- * Declares a new C sub-command of Togl callable from Tcl.
- * Every time the sub-command is called from Tcl, the
- * C routine will be called with all the arguments from Tcl.
- */
-void
-Togl_CreateCommand(char *cmd_name, Togl_CmdProc *cmd_proc)
-{
- int new_item;
- Tcl_HashEntry *entry;
-
- entry = Tcl_CreateHashEntry(&CommandTable, cmd_name, &new_item);
- Tcl_SetHashValue(entry, cmd_proc);
-}
-
-
-/*
- * Togl_MakeCurrent
- *
- * Bind the OpenGL rendering context to the specified
- * Togl widget.
- */
-void
-Togl_MakeCurrent(const Togl *togl)
-{
-#if defined(TOGL_WGL)
- int res = wglMakeCurrent(togl->tglGLHdc, togl->tglGLHglrc);
-
- assert(res == TRUE);
-
-#elif defined(TOGL_X11)
- if (!togl->GlCtx)
- return;
- (void) glXMakeCurrent(togl->display,
- togl->TkWin ? Tk_WindowId(togl->TkWin) : None, togl->GlCtx);
-# if defined(__sgi)
- if (togl->OldStereoFlag)
- oldStereoMakeCurrent(togl->display,
- togl->TkWin ? Tk_WindowId(togl->TkWin) : None, togl->GlCtx);
-
-# endif /*__sgi STEREO */
-
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- if (!togl->aglCtx)
- return;
- aglSetCurrentContext(togl->aglCtx);
-#endif
-}
-
-
-#ifdef TOGL_AGL_CLASSIC
-/* tell OpenGL which part of the Mac window to render to */
-static void
-SetMacBufRect(Togl *togl)
-{
- GLint wrect[4];
-
- /* set wrect[0,1] to lower left corner of widget */
- wrect[2] = ((TkWindow *) (togl->TkWin))->changes.width;
- wrect[3] = ((TkWindow *) (togl->TkWin))->changes.height;
- wrect[0] = ((TkWindow *) (togl->TkWin))->privatePtr->xOff;
- wrect[1] =
- ((TkWindow *) (togl->TkWin))->privatePtr->toplevel->portPtr->
- portRect.bottom - wrect[3] -
- ((TkWindow *) (togl->TkWin))->privatePtr->yOff;
- aglSetInteger(togl->aglCtx, AGL_BUFFER_RECT, wrect);
- aglEnable(togl->aglCtx, AGL_BUFFER_RECT);
- aglUpdateContext(togl->aglCtx);
-}
-#elif defined(TOGL_AGL)
-/* tell OpenGL which part of the Mac window to render to */
-static void
-SetMacBufRect(Togl *togl)
-{
- GLint wrect[4];
-
- /* set wrect[0,1] to lower left corner of widget */
- wrect[2] = Tk_Width(togl->TkWin);
- wrect[3] = Tk_Height(togl->TkWin);
- wrect[0] = ((TkWindow *) (togl->TkWin))->privatePtr->xOff;
-
- Rect r;
-
- GetPortBounds(((TkWindow *) (togl->TkWin))->privatePtr->toplevel->grafPtr,
- &r);
-
- wrect[1] = r.bottom -
- wrect[3] - ((TkWindow *) (togl->TkWin))->privatePtr->yOff;
-
- aglSetInteger(togl->aglCtx, AGL_BUFFER_RECT, wrect);
- aglEnable(togl->aglCtx, AGL_BUFFER_RECT);
- aglUpdateContext(togl->aglCtx);
-}
-#endif
-
-/*
- * Called when the widget's contents must be redrawn. Basically, we
- * just call the user's render callback function.
- *
- * Note that the parameter type is ClientData so this function can be
- * passed to Tk_DoWhenIdle().
- */
-static void
-Togl_Render(ClientData clientData)
-{
- Togl *togl = (Togl *) clientData;
-
- if (togl->DisplayProc) {
-
-#ifdef TOGL_AGL_CLASSIC
- /* Mac is complicated here because OpenGL needs to know what part of
- * the parent window to render into, and it seems that region need to
- * be invalidated before drawing, so that QuickDraw will allow OpenGL
- * to transfer pixels into that part of the window. I'm not even
- * totally sure how or why this works as it does, since this aspect of
- * Mac OpenGL seems to be totally undocumented. This was put together
- * by trial and error! (thiessen) */
- MacRegion r;
- RgnPtr rp = &r;
- GrafPtr curPort, parentWin;
-
- parentWin = (GrafPtr)
- (((MacDrawable *) (Tk_WindowId(togl->TkWin)))->toplevel->
- portPtr);
- if (!parentWin)
- return;
-#endif
-
- Togl_MakeCurrent(togl);
-
-#ifdef TOGL_AGL_CLASSIC
- /* Set QuickDraw port and clipping region */
- GetPort(&curPort);
- SetPort(parentWin);
- r.rgnBBox.left = ((TkWindow *) (togl->TkWin))->privatePtr->xOff;
- r.rgnBBox.right =
- r.rgnBBox.left + ((TkWindow *) (togl->TkWin))->changes.width -
- 1;
- r.rgnBBox.top = ((TkWindow *) (togl->TkWin))->privatePtr->yOff;
- r.rgnBBox.bottom =
- r.rgnBBox.top + ((TkWindow *) (togl->TkWin))->changes.height -
- 1;
- r.rgnSize = sizeof (Region);
- InvalRgn(&rp);
- SetClip(&rp);
- /* this may seem an odd place to put this, with possibly redundant
- * calls to aglSetInteger(AGL_BUFFER_RECT...), but for some reason
- * performance is actually a lot better if this is called before every
- * render... */
- SetMacBufRect(togl);
-#endif
-
-#ifdef TOGL_AGL
- SetMacBufRect(togl);
-#endif
-
- togl->DisplayProc(togl);
-
-#ifdef TOGL_AGL_CLASSIC
- SetPort(curPort); /* restore previous port */
-#endif
-
- }
-#if defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- else {
- /* Always need to update on resize */
- SetMacBufRect(togl);
- }
-#endif
- togl->UpdatePending = False;
-}
-
-
-static void
-RenderOverlay(ClientData clientData)
-{
- Togl *togl = (Togl *) clientData;
-
- if (togl->OverlayFlag && togl->OverlayDisplayProc) {
-
-#if defined(TOGL_WGL)
- int res = wglMakeCurrent(togl->tglGLHdc, togl->tglGLHglrc);
-
- assert(res == TRUE);
-
-#elif defined(TOGL_X11)
- (void) glXMakeCurrent(Tk_Display(togl->TkWin),
- togl->OverlayWindow, togl->OverlayCtx);
-# if defined(__sgi)
- if (togl->OldStereoFlag)
- oldStereoMakeCurrent(Tk_Display(togl->TkWin),
- togl->OverlayWindow, togl->OverlayCtx);
-
-# endif /*__sgi STEREO */
-
-#endif /* TOGL_WGL */
-
- togl->OverlayDisplayProc(togl);
- }
- togl->OverlayUpdatePending = False;
-}
-
-
-/*
- * It's possible to change with this function or in a script some
- * options like RGBA - ColorIndex ; Z-buffer and so on
- */
-int
-Togl_Configure(Tcl_Interp *interp, Togl *togl,
- int argc, const char *argv[], int flags)
-{
- Bool oldRgbaFlag = togl->RgbaFlag;
- int oldRgbaRed = togl->RgbaRed;
- int oldRgbaGreen = togl->RgbaGreen;
- int oldRgbaBlue = togl->RgbaBlue;
- Bool oldDoubleFlag = togl->DoubleFlag;
- Bool oldDepthFlag = togl->DepthFlag;
- int oldDepthSize = togl->DepthSize;
- Bool oldAccumFlag = togl->AccumFlag;
- int oldAccumRed = togl->AccumRed;
- int oldAccumGreen = togl->AccumGreen;
- int oldAccumBlue = togl->AccumBlue;
- int oldAccumAlpha = togl->AccumAlpha;
- Bool oldAlphaFlag = togl->AlphaFlag;
- int oldAlphaSize = togl->AlphaSize;
- Bool oldStencilFlag = togl->StencilFlag;
- int oldStencilSize = togl->StencilSize;
- int oldAuxNumber = togl->AuxNumber;
- int oldWidth = togl->Width;
- int oldHeight = togl->Height;
- int oldSetGrid = togl->SetGrid;
-
- if (Tk_ConfigureWidget(interp, togl->TkWin, configSpecs,
- argc, argv, WIDGREC togl, flags) == TCL_ERROR) {
- return (TCL_ERROR);
- }
-#ifndef USE_OVERLAY
- if (togl->OverlayFlag) {
- TCL_ERR(interp, "Sorry, overlay was disabled");
- }
-#endif
-
-
- if (togl->Width != oldWidth || togl->Height != oldHeight
- || togl->SetGrid != oldSetGrid) {
- Togl_WorldChanged((ClientData) togl);
- /* this added per Lou Arata */
- Tk_ResizeWindow(togl->TkWin, togl->Width, togl->Height);
-
- if (togl->ReshapeProc &&
-#if defined(TOGL_WGL)
- togl->tglGLHglrc
-#elif defined(TOGL_X11)
- togl->GlCtx
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- togl->aglCtx
-#endif
- ) {
- Togl_MakeCurrent(togl);
- togl->ReshapeProc(togl);
- }
- }
-
- if (togl->RgbaFlag != oldRgbaFlag
- || togl->RgbaRed != oldRgbaRed
- || togl->RgbaGreen != oldRgbaGreen
- || togl->RgbaBlue != oldRgbaBlue
- || togl->DoubleFlag != oldDoubleFlag
- || togl->DepthFlag != oldDepthFlag
- || togl->DepthSize != oldDepthSize
- || togl->AccumFlag != oldAccumFlag
- || togl->AccumRed != oldAccumRed
- || togl->AccumGreen != oldAccumGreen
- || togl->AccumBlue != oldAccumBlue
- || togl->AccumAlpha != oldAccumAlpha
- || togl->AlphaFlag != oldAlphaFlag
- || togl->AlphaSize != oldAlphaSize
- || togl->StencilFlag != oldStencilFlag
- || togl->StencilSize != oldStencilSize
- || togl->AuxNumber != oldAuxNumber) {
-#ifdef MESA_COLOR_HACK
- free_default_color_cells(Tk_Display(togl->TkWin),
- Tk_Colormap(togl->TkWin));
-#endif
- }
-#if defined(__sgi)
- oldStereoInit(togl, togl->OldStereoFlag);
-#endif
-
- return TCL_OK;
-}
-
-
-static int
-Togl_Widget(ClientData clientData, Tcl_Interp *interp, int argc,
- CONST84 char *argv[])
-{
- Togl *togl = (Togl *) clientData;
- int result = TCL_OK;
- Tcl_HashEntry *entry;
- Tcl_HashSearch search;
- Togl_CmdProc *cmd_proc;
-
- if (argc < 2) {
- Tcl_AppendResult(interp, "wrong # args: should be \"",
- argv[0], " ?options?\"", NULL);
- return TCL_ERROR;
- }
-
- Tk_Preserve((ClientData) togl);
-
- if (!strncmp(argv[1], "configure", MAX(1, strlen(argv[1])))) {
- if (argc == 2) {
- /* Return list of all configuration parameters */
- result = Tk_ConfigureInfo(interp, togl->TkWin, configSpecs,
- WIDGREC togl, (char *) NULL, 0);
- } else if (argc == 3) {
- if (strcmp(argv[2], "-extensions") == 0) {
- /* Return a list of OpenGL extensions available */
- const char *extensions;
-
- extensions = (const char *) glGetString(GL_EXTENSIONS);
- Tcl_SetResult(interp, TCL_STUPID extensions, TCL_STATIC);
- result = TCL_OK;
- } else {
- /* Return a specific configuration parameter */
- result = Tk_ConfigureInfo(interp, togl->TkWin, configSpecs,
- WIDGREC togl, argv[2], 0);
- }
- } else {
- /* Execute a configuration change */
- result = Togl_Configure(interp, togl, argc - 2, argv + 2,
- TK_CONFIG_ARGV_ONLY);
- }
- } else if (!strncmp(argv[1], "render", MAX(1, strlen(argv[1])))) {
- /* force the widget to be redrawn */
- Togl_Render((ClientData) togl);
- } else if (!strncmp(argv[1], "swapbuffers", MAX(1, strlen(argv[1])))) {
- /* force the widget to be redrawn */
- Togl_SwapBuffers(togl);
- } else if (!strncmp(argv[1], "makecurrent", MAX(1, strlen(argv[1])))) {
- /* force the widget to be redrawn */
- Togl_MakeCurrent(togl);
- }
-#if TOGL_USE_FONTS == 1
- else if (!strncmp(argv[1], "loadbitmapfont", MAX(1, strlen(argv[1])))) {
- if (argc == 3) {
- GLuint fontbase;
- Tcl_Obj *fontbaseAsTclObject;
-
- fontbase = Togl_LoadBitmapFont(togl, argv[2]);
- if (fontbase) {
- fontbaseAsTclObject = Tcl_NewIntObj(fontbase);
- Tcl_SetObjResult(interp, fontbaseAsTclObject);
- result = TCL_OK;
- } else {
- Tcl_AppendResult(interp, "Could not allocate font", NULL);
- result = TCL_ERROR;
- }
- } else {
- Tcl_AppendResult(interp, "wrong # args", NULL);
- result = TCL_ERROR;
- }
- } else if (!strncmp(argv[1], "unloadbitmapfont", MAX(1, strlen(argv[1])))) {
- if (argc == 3) {
- Togl_UnloadBitmapFont(togl, atoi(argv[2]));
- result = TCL_OK;
- } else {
- Tcl_AppendResult(interp, "wrong # args", NULL);
- result = TCL_ERROR;
- }
- }
-#endif /* TOGL_USE_FONTS */
- else {
- /* Probably a user-defined function */
- entry = Tcl_FindHashEntry(&CommandTable, argv[1]);
- if (entry != NULL) {
- cmd_proc = (Togl_CmdProc *) Tcl_GetHashValue(entry);
- result = cmd_proc(togl, argc, argv);
- } else {
- Tcl_AppendResult(interp, "Togl: Unknown option: ", argv[1], "\n",
- "Try: configure or render\n",
- "or one of the user-defined commands:\n", NULL);
- entry = Tcl_FirstHashEntry(&CommandTable, &search);
- while (entry) {
- Tcl_AppendResult(interp, " ",
- Tcl_GetHashKey(&CommandTable, entry), "\n", NULL);
- entry = Tcl_NextHashEntry(&search);
- }
- result = TCL_ERROR;
- }
- }
-
- Tk_Release((ClientData) togl);
- return result;
-}
-
-
-
-/*
- * Togl_Cmd
- *
- * Called when Togl is executed - creation of a Togl widget.
- * * Creates a new window
- * * Creates an 'Togl' data structure
- * * Creates an event handler for this window
- * * Creates a command that handles this object
- * * Configures this Togl for the given arguments
- */
-static int
-Togl_Cmd(ClientData clientData, Tcl_Interp *interp, int argc,
- CONST84 char **argv)
-{
- const char *name;
- Tk_Window mainwin = (Tk_Window) clientData;
- Tk_Window tkwin;
- Togl *togl;
-
- if (argc <= 1) {
- TCL_ERR(interp, "wrong # args: should be \"pathName read filename\"");
- }
-
- /* Create the window. */
- name = argv[1];
- tkwin = Tk_CreateWindowFromPath(interp, mainwin, name, (char *) NULL);
- if (tkwin == NULL) {
- return TCL_ERROR;
- }
-
- Tk_SetClass(tkwin, "Togl");
-
- /* Create Togl data structure */
- togl = (Togl *) malloc(sizeof (Togl));
- if (!togl) {
- return TCL_ERROR;
- }
-
- togl->Next = NULL;
-#if defined(TOGL_WGL)
- togl->tglGLHdc = NULL;
- togl->tglGLHglrc = NULL;
-#elif defined(TOGL_X11)
- togl->GlCtx = NULL;
- togl->OverlayCtx = NULL;
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- togl->aglCtx = NULL;
-#endif /* TOGL_WGL */
- togl->display = Tk_Display(tkwin);
- togl->TkWin = tkwin;
- togl->Interp = interp;
-#ifndef NO_TK_CURSOR
- togl->Cursor = None;
-#endif
- togl->Width = 0;
- togl->Height = 0;
- togl->SetGrid = 0;
- togl->TimerInterval = 0;
- togl->RgbaFlag = True;
- togl->RgbaRed = 1;
- togl->RgbaGreen = 1;
- togl->RgbaBlue = 1;
- togl->DoubleFlag = False;
- togl->DepthFlag = False;
- togl->DepthSize = 1;
- togl->AccumFlag = False;
- togl->AccumRed = 1;
- togl->AccumGreen = 1;
- togl->AccumBlue = 1;
- togl->AccumAlpha = 1;
- togl->AlphaFlag = False;
- togl->AlphaSize = 1;
- togl->StencilFlag = False;
- togl->StencilSize = 1;
- togl->OverlayFlag = False;
- togl->StereoFlag = False;
-#ifdef __sgi
- togl->OldStereoFlag = False;
-#endif
- togl->AuxNumber = 0;
- togl->Indirect = False;
- togl->PixelFormat = 0;
- togl->UpdatePending = False;
- togl->OverlayUpdatePending = False;
- togl->CreateProc = DefaultCreateProc;
- togl->DisplayProc = DefaultDisplayProc;
- togl->ReshapeProc = DefaultReshapeProc;
- togl->DestroyProc = DefaultDestroyProc;
- togl->TimerProc = DefaultTimerProc;
- togl->OverlayDisplayProc = DefaultOverlayDisplayProc;
- togl->ShareList = NULL;
- togl->ShareContext = NULL;
- togl->Ident = NULL;
- togl->Client_Data = DefaultClientData;
-
- /* for EPS Output */
- togl->EpsRedMap = togl->EpsGreenMap = togl->EpsBlueMap = NULL;
- togl->EpsMapSize = 0;
-
- /* Create command event handler */
- togl->widgetCmd = Tcl_CreateCommand(interp, Tk_PathName(tkwin),
- Togl_Widget, (ClientData) togl,
- (Tcl_CmdDeleteProc *) ToglCmdDeletedProc);
- /*
- * Setup the Tk_ClassProcs callbacks to point at our own window creation
- * function
- *
- * We need to check at runtime if we should use the new Tk_SetClassProcs()
- * API or if we need to modify the window structure directly */
-
-
-#ifdef HAVE_TK_SETCLASSPROCS
-
- if (SetClassProcsPtr != NULL) { /* use public API (Tk 8.4+) */
- Tk_ClassProcs *procsPtr;
-
- procsPtr = (Tk_ClassProcs *) Tcl_Alloc(sizeof (Tk_ClassProcs));
- procsPtr->size = sizeof (Tk_ClassProcs);
- procsPtr->createProc = Togl_CreateWindow;
- procsPtr->worldChangedProc = Togl_WorldChanged;
- procsPtr->modalProc = NULL;
- /* Tk_SetClassProcs(togl->TkWin,procsPtr,(ClientData)togl); */
- (SetClassProcsPtr) (togl->TkWin, procsPtr, (ClientData) togl);
- } else
-#endif
- { /* use private API */
- /*
- * We need to set these fields in the Tk_FakeWin structure: dummy17 =
- * classProcsPtr dummy18 = instanceData */
- TkClassProcs *procsPtr;
- Tk_FakeWin *winPtr = (Tk_FakeWin *) (togl->TkWin);
-
- procsPtr = (TkClassProcs *) Tcl_Alloc(sizeof (TkClassProcs));
- procsPtr->createProc = Togl_CreateWindow;
- procsPtr->geometryProc = Togl_WorldChanged;
- procsPtr->modalProc = NULL;
- winPtr->dummy17 = (char *) procsPtr;
- winPtr->dummy18 = (ClientData) togl;
- }
-
- Tk_CreateEventHandler(tkwin,
- ExposureMask | StructureNotifyMask, Togl_EventProc,
- (ClientData) togl);
-
- /* Configure Togl widget */
- if (Togl_Configure(interp, togl, argc - 2, argv + 2, 0) == TCL_ERROR) {
- Tk_DestroyWindow(tkwin);
- Tcl_AppendResult(interp, "Couldn't configure togl widget\n", NULL);
- goto error;
- }
-
- /*
- * If OpenGL window wasn't already created by Togl_Configure() we
- * create it now. We can tell by checking if the GLX context has
- * been initialized.
- */
- if (!
-#if defined(TOGL_WGL)
- togl->tglGLHdc
-#elif defined(TOGL_X11)
- togl->GlCtx
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- togl->aglCtx
-#endif
- ) {
- Tk_MakeWindowExist(togl->TkWin);
- if (Tk_WindowId(togl->TkWin) == DUMMY_WINDOW) {
- return TCL_ERROR;
- }
- Togl_MakeCurrent(togl);
- }
-
- /* If defined, call create callback */
- if (togl->CreateProc) {
- togl->CreateProc(togl);
- }
-
- /* If defined, call reshape proc */
- if (togl->ReshapeProc) {
- togl->ReshapeProc(togl);
- }
-
- /* If defined, setup timer */
- if (togl->TimerProc) {
- (void) Tk_CreateTimerHandler(togl->TimerInterval, Togl_Timer,
- (ClientData) togl);
- }
-
- Tcl_AppendResult(interp, Tk_PathName(tkwin), NULL);
-
- /* Add to linked list */
- AddToList(togl);
-
- return TCL_OK;
-
- error:
- (void) Tcl_DeleteCommand(interp, "togl");
- /* free(togl); Don't free it, if we do a crash occurs later... */
- return TCL_ERROR;
-}
-
-
-#ifdef USE_OVERLAY
-
-/*
- * Do all the setup for overlay planes
- * Return: TCL_OK or TCL_ERROR
- */
-static int
-SetupOverlay(Togl *togl)
-{
-# if defined(TOGL_X11)
-
-# ifdef GLX_TRANSPARENT_TYPE_EXT
- static int ovAttributeList[] = {
- GLX_BUFFER_SIZE, 2,
- GLX_LEVEL, 1,
- GLX_TRANSPARENT_TYPE_EXT, GLX_TRANSPARENT_INDEX_EXT,
- None
- };
-# else
- static int ovAttributeList[] = {
- GLX_BUFFER_SIZE, 2,
- GLX_LEVEL, 1,
- None
- };
-# endif
-
- Display *dpy;
- XVisualInfo *visinfo;
- TkWindow *winPtr = (TkWindow *) togl->TkWin;
-
- XSetWindowAttributes swa;
- Tcl_HashEntry *hPtr;
- int new_flag;
-
- dpy = Tk_Display(togl->TkWin);
-
- visinfo = glXChooseVisual(dpy, Tk_ScreenNumber(winPtr), ovAttributeList);
- if (!visinfo) {
- Tcl_AppendResult(togl->Interp, Tk_PathName(winPtr),
- ": No suitable overlay index visual available", (char *) NULL);
- togl->OverlayCtx = 0;
- togl->OverlayWindow = 0;
- togl->OverlayCmap = 0;
- return TCL_ERROR;
- }
-# ifdef GLX_TRANSPARENT_INDEX_EXT
- {
- int fail =
- glXGetConfig(dpy, visinfo, GLX_TRANSPARENT_INDEX_VALUE_EXT,
- &togl->OverlayTransparentPixel);
-
- if (fail)
- togl->OverlayTransparentPixel = 0; /* maybe, maybe ... */
- }
-# else
- togl->OverlayTransparentPixel = 0; /* maybe, maybe ... */
-# endif
-
- /* share display lists with normal layer context */
- togl->OverlayCtx =
- glXCreateContext(dpy, visinfo, togl->GlCtx, !togl->Indirect);
-
- swa.colormap = XCreateColormap(dpy, XRootWindow(dpy, visinfo->screen),
- visinfo->visual, AllocNone);
- togl->OverlayCmap = swa.colormap;
-
- swa.border_pixel = 0;
- swa.event_mask = ALL_EVENTS_MASK;
- togl->OverlayWindow = XCreateWindow(dpy, Tk_WindowId(togl->TkWin), 0, 0,
- togl->Width, togl->Height, 0,
- visinfo->depth, InputOutput,
- visinfo->visual, CWBorderPixel | CWColormap | CWEventMask, &swa);
-
- hPtr = Tcl_CreateHashEntry(&winPtr->dispPtr->winTable,
- (char *) togl->OverlayWindow, &new_flag);
- Tcl_SetHashValue(hPtr, winPtr);
-
- /* XMapWindow( dpy, togl->OverlayWindow ); */
- togl->OverlayIsMapped = False;
-
- /* Make sure window manager installs our colormap */
- XSetWMColormapWindows(dpy, togl->OverlayWindow, &togl->OverlayWindow, 1);
-
- return TCL_OK;
-
-# elif defined(TOGL_WGL) || defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- /* not yet implemented on these */
- return TCL_ERROR;
-# endif
-}
-
-#endif /* USE_OVERLAY */
-
-
-
-#ifdef TOGL_WGL
-# define TOGL_CLASS_NAME "Togl Class"
-static Bool ToglClassInitialized = False;
-
-static LRESULT CALLBACK
-Win32WinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- LONG result;
- Togl *togl = (Togl *) GetWindowLong(hwnd, 0);
- WNDCLASS childClass;
-
- switch (message) {
- case WM_WINDOWPOSCHANGED:
- /* Should be processed by DefWindowProc, otherwise a double buffered
- * context is not properly resized when the corresponding window is
- * resized. */
- break;
- case WM_DESTROY:
- if (togl->tglGLHglrc) {
- wglDeleteContext(togl->tglGLHglrc);
- }
- if (togl->tglGLHdc) {
- ReleaseDC(hwnd, togl->tglGLHdc);
- }
- free(togl);
- break;
- default:
-# if USE_STATIC_LIB
- return TkWinChildProc(hwnd, message, wParam, lParam);
-# else
- /*
- * OK, since TkWinChildProc is not explicitly exported in the
- * dynamic libraries, we have to retrieve it from the class info
- * registered with windows.
- *
- */
- if (tkWinChildProc == NULL) {
- GetClassInfo(Tk_GetHINSTANCE(), TK_WIN_CHILD_CLASS_NAME,
- &childClass);
- tkWinChildProc = childClass.lpfnWndProc;
- }
- return tkWinChildProc(hwnd, message, wParam, lParam);
-# endif
- }
- result = DefWindowProc(hwnd, message, wParam, lParam);
- Tcl_ServiceAll();
- return result;
-}
-#endif /* TOGL_WGL */
-
-
-
-/*
- * Togl_CreateWindow
- *
- * Window creation function, invoked as a callback from Tk_MakeWindowExist.
- * Creates an OpenGL window for the Togl widget.
- */
-static Window
-Togl_CreateWindow(Tk_Window tkwin, Window parent, ClientData instanceData)
-{
-
- Togl *togl = (Togl *) instanceData;
- XVisualInfo *visinfo = NULL;
- Display *dpy;
- Colormap cmap;
- int scrnum;
- Window window;
-
-#if defined(TOGL_X11)
- Bool directCtx = True;
- int attrib_list[1000];
- int attrib_count;
- int dummy;
- XSetWindowAttributes swa;
-
-# define MAX_ATTEMPTS 12
- static int ci_depths[MAX_ATTEMPTS] = {
- 8, 4, 2, 1, 12, 16, 8, 4, 2, 1, 12, 16
- };
- static int dbl_flags[MAX_ATTEMPTS] = {
- 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1
- };
-#elif defined(TOGL_WGL)
- HWND hwnd, parentWin;
- int pixelformat;
- HANDLE hInstance;
- WNDCLASS ToglClass;
- PIXELFORMATDESCRIPTOR pfd;
- XVisualInfo VisInf;
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- GLint attribs[20];
- int na;
- AGLPixelFormat fmt;
- XVisualInfo VisInf;
-#endif /* TOGL_X11 */
-
-
- dpy = Tk_Display(togl->TkWin);
-
-#if defined(TOGL_X11)
- /* Make sure OpenGL's GLX extension supported */
- if (!glXQueryExtension(dpy, &dummy, &dummy)) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "Togl: X server has no OpenGL GLX extension",
- TCL_STATIC);
- return DUMMY_WINDOW;
- }
-
- if (togl->ShareContext && FindTogl(togl->ShareContext)) {
- /* share OpenGL context with existing Togl widget */
- Togl *shareWith = FindTogl(togl->ShareContext);
-
- assert(shareWith != NULL);
- assert(shareWith->GlCtx != NULL);
- togl->GlCtx = shareWith->GlCtx;
- togl->VisInfo = shareWith->VisInfo;
- visinfo = togl->VisInfo;
- } else {
- if (togl->PixelFormat) {
- XVisualInfo template;
- int count = 1;
-
- template.visualid = togl->PixelFormat;
- visinfo = XGetVisualInfo(dpy, VisualIDMask, &template, &count);
- if (visinfo == NULL) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "Togl: couldn't choose pixel format",
- TCL_STATIC);
-
- return DUMMY_WINDOW;
- }
- /* fill in flags normally passed in that affect behavior */
- (void) glXGetConfig(dpy, visinfo, GLX_RGBA, &togl->RgbaFlag);
- (void) glXGetConfig(dpy, visinfo, GLX_DOUBLEBUFFER,
- &togl->DoubleFlag);
- (void) glXGetConfig(dpy, visinfo, GLX_STEREO, &togl->StereoFlag);
- } else {
- int attempt;
-
- /* It may take a few tries to get a visual */
- for (attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
- attrib_count = 0;
- attrib_list[attrib_count++] = GLX_USE_GL;
- if (togl->RgbaFlag) {
- /* RGB[A] mode */
- attrib_list[attrib_count++] = GLX_RGBA;
- attrib_list[attrib_count++] = GLX_RED_SIZE;
- attrib_list[attrib_count++] = togl->RgbaRed;
- attrib_list[attrib_count++] = GLX_GREEN_SIZE;
- attrib_list[attrib_count++] = togl->RgbaGreen;
- attrib_list[attrib_count++] = GLX_BLUE_SIZE;
- attrib_list[attrib_count++] = togl->RgbaBlue;
- if (togl->AlphaFlag) {
- attrib_list[attrib_count++] = GLX_ALPHA_SIZE;
- attrib_list[attrib_count++] = togl->AlphaSize;
- }
-
- /* for EPS Output */
- if (togl->EpsRedMap)
- free(togl->EpsRedMap);
- if (togl->EpsGreenMap)
- free(togl->EpsGreenMap);
- if (togl->EpsBlueMap)
- free(togl->EpsBlueMap);
- togl->EpsRedMap = togl->EpsGreenMap = togl->EpsBlueMap =
- NULL;
- togl->EpsMapSize = 0;
- } else {
- /* Color index mode */
- int depth;
-
- attrib_list[attrib_count++] = GLX_BUFFER_SIZE;
- depth = ci_depths[attempt];
- attrib_list[attrib_count++] = depth;
- }
- if (togl->DepthFlag) {
- attrib_list[attrib_count++] = GLX_DEPTH_SIZE;
- attrib_list[attrib_count++] = togl->DepthSize;
- }
- if (togl->DoubleFlag || dbl_flags[attempt]) {
- attrib_list[attrib_count++] = GLX_DOUBLEBUFFER;
- }
- if (togl->StencilFlag) {
- attrib_list[attrib_count++] = GLX_STENCIL_SIZE;
- attrib_list[attrib_count++] = togl->StencilSize;
- }
- if (togl->AccumFlag) {
- attrib_list[attrib_count++] = GLX_ACCUM_RED_SIZE;
- attrib_list[attrib_count++] = togl->AccumRed;
- attrib_list[attrib_count++] = GLX_ACCUM_GREEN_SIZE;
- attrib_list[attrib_count++] = togl->AccumGreen;
- attrib_list[attrib_count++] = GLX_ACCUM_BLUE_SIZE;
- attrib_list[attrib_count++] = togl->AccumBlue;
- if (togl->AlphaFlag) {
- attrib_list[attrib_count++] = GLX_ACCUM_ALPHA_SIZE;
- attrib_list[attrib_count++] = togl->AccumAlpha;
- }
- }
- if (togl->AuxNumber != 0) {
- attrib_list[attrib_count++] = GLX_AUX_BUFFERS;
- attrib_list[attrib_count++] = togl->AuxNumber;
- }
- if (togl->Indirect) {
- directCtx = False;
- }
-
- if (togl->StereoFlag) {
- attrib_list[attrib_count++] = GLX_STEREO;
- }
- attrib_list[attrib_count++] = None;
-
- visinfo = glXChooseVisual(dpy, Tk_ScreenNumber(togl->TkWin),
- attrib_list);
- if (visinfo) {
- /* found a GLX visual! */
- break;
- }
- }
-
- togl->VisInfo = visinfo;
-
- if (visinfo == NULL) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "Togl: couldn't get visual", TCL_STATIC);
- return DUMMY_WINDOW;
- }
-
- /*
- * Create a new OpenGL rendering context.
- */
- if (togl->ShareList) {
- /* share display lists with existing togl widget */
- Togl *shareWith = FindTogl(togl->ShareList);
- GLXContext shareCtx;
-
- if (shareWith)
- shareCtx = shareWith->GlCtx;
- else
- shareCtx = None;
- togl->GlCtx =
- glXCreateContext(dpy, visinfo, shareCtx, directCtx);
- } else {
- /* don't share display lists */
- togl->GlCtx = glXCreateContext(dpy, visinfo, None, directCtx);
- }
-
- if (togl->GlCtx == NULL) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "could not create rendering context",
- TCL_STATIC);
- return DUMMY_WINDOW;
- }
-
- }
- }
-
-
-#endif /* TOGL_X11 */
-
-#ifdef TOGL_WGL
- parentWin = Tk_GetHWND(parent);
- hInstance = Tk_GetHINSTANCE();
- if (!ToglClassInitialized) {
- ToglClassInitialized = True;
- ToglClass.style = CS_HREDRAW | CS_VREDRAW;
- ToglClass.cbClsExtra = 0;
- ToglClass.cbWndExtra = 4; /* to save struct Togl* */
- ToglClass.hInstance = hInstance;
- ToglClass.hbrBackground = NULL;
- ToglClass.lpszMenuName = NULL;
- ToglClass.lpszClassName = TOGL_CLASS_NAME;
- ToglClass.lpfnWndProc = Win32WinProc;
- ToglClass.hIcon = NULL;
- ToglClass.hCursor = NULL;
- if (!RegisterClass(&ToglClass)) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "unable register Togl window class", TCL_STATIC);
- return DUMMY_WINDOW;
- }
- }
-
- hwnd = CreateWindow(TOGL_CLASS_NAME, NULL,
- WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, 0,
- togl->Width, togl->Height, parentWin, NULL, hInstance, NULL);
- SetWindowLong(hwnd, 0, (LONG) togl);
- SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0,
- SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
-
- togl->tglGLHdc = GetDC(hwnd);
-
- pfd.nSize = sizeof (PIXELFORMATDESCRIPTOR);
- pfd.nVersion = 1;
- pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
- if (togl->DoubleFlag) {
- pfd.dwFlags |= PFD_DOUBLEBUFFER;
- }
- /* The stereo flag is not supported in the current generic OpenGL
- * implementation, but may be supported by specific hardware devices. */
- if (togl->StereoFlag) {
- pfd.dwFlags |= PFD_STEREO;
- }
-
- if (togl->PixelFormat) {
- pixelformat = togl->PixelFormat;
- } else {
- pfd.cColorBits = togl->RgbaRed + togl->RgbaGreen + togl->RgbaBlue;
- pfd.iPixelType = togl->RgbaFlag ? PFD_TYPE_RGBA : PFD_TYPE_COLORINDEX;
- /* Alpha bitplanes are not supported in the current generic OpenGL
- * implementation, but may be supported by specific hardware devices. */
- pfd.cAlphaBits = togl->AlphaFlag ? togl->AlphaSize : 0;
- pfd.cAccumBits = togl->AccumFlag ? (togl->AccumRed + togl->AccumGreen +
- togl->AccumBlue + togl->AccumAlpha) : 0;
- pfd.cDepthBits = togl->DepthFlag ? togl->DepthSize : 0;
- pfd.cStencilBits = togl->StencilFlag ? togl->StencilSize : 0;
- /* Auxiliary buffers are not supported in the current generic OpenGL
- * implementation, but may be supported by specific hardware devices. */
- pfd.cAuxBuffers = togl->AuxNumber;
- pfd.iLayerType = PFD_MAIN_PLANE;
-
- if ((pixelformat = ChoosePixelFormat(togl->tglGLHdc, &pfd)) == 0) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "Togl: couldn't choose pixel format",
- TCL_STATIC);
- return DUMMY_WINDOW;
- }
- }
- if (SetPixelFormat(togl->tglGLHdc, pixelformat, &pfd) == FALSE) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "Togl: couldn't choose pixel format", TCL_STATIC);
- return DUMMY_WINDOW;
- }
-
- /* Get the actual pixel format */
- DescribePixelFormat(togl->tglGLHdc, pixelformat, sizeof (pfd), &pfd);
- if (togl->PixelFormat) {
- /* fill in flags normally passed in that affect behavior */
- togl->RgbaFlag = pfd.iPixelType == PFD_TYPE_RGBA;
- togl->DoubleFlag = pfd.cDepthBits > 0;
- togl->StereoFlag = (pfd.dwFlags & PFD_STEREO) != 0;
- // TODO: set depth flag, and more
- } else if (togl->StereoFlag && (pfd.dwFlags & PFD_STEREO) == 0) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "Togl: couldn't choose stereo pixel format",
- TCL_STATIC);
- return DUMMY_WINDOW;
- }
-
- if (togl->ShareContext && FindTogl(togl->ShareContext)) {
- /* share OpenGL context with existing Togl widget */
- Togl *shareWith = FindTogl(togl->ShareContext);
-
- assert(shareWith);
- assert(shareWith->tglGLHglrc);
- togl->tglGLHglrc = shareWith->tglGLHglrc;
- togl->VisInfo = shareWith->VisInfo;
- visinfo = togl->VisInfo;
- } else {
- /*
- * Create a new OpenGL rendering context. And check to share lists.
- */
- togl->tglGLHglrc = wglCreateContext(togl->tglGLHdc);
-
- if (togl->ShareList) {
- /* share display lists with existing togl widget */
- Togl *shareWith = FindTogl(togl->ShareList);
-
- if (shareWith)
- wglShareLists(shareWith->tglGLHglrc, togl->tglGLHglrc);
- }
-
- if (!togl->tglGLHglrc) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "could not create rendering context",
- TCL_STATIC);
- return DUMMY_WINDOW;
- }
-
- /* Just for portability, define the simplest visinfo */
- visinfo = &VisInf;
- visinfo->visual = DefaultVisual(dpy, DefaultScreen(dpy));
- visinfo->depth = visinfo->visual->bits_per_rgb;
- togl->VisInfo = visinfo;
- }
-
-#endif /* TOGL_WGL */
-
-
- /*
- * find a colormap
- */
- scrnum = Tk_ScreenNumber(togl->TkWin);
- if (togl->RgbaFlag) {
- /* Colormap for RGB mode */
-#if defined(TOGL_X11)
- cmap = get_rgb_colormap(dpy, scrnum, visinfo, togl->TkWin);
-
-#elif defined(TOGL_WGL)
- if (pfd.dwFlags & PFD_NEED_PALETTE) {
- cmap = Win32CreateRgbColormap(pfd);
- } else {
- cmap = DefaultColormap(dpy, scrnum);
- }
- /* for EPS Output */
- if (togl->EpsRedMap)
- free(togl->EpsRedMap);
- if (togl->EpsGreenMap)
- free(togl->EpsGreenMap);
- if (togl->EpsBlueMap)
- free(togl->EpsBlueMap);
- togl->EpsRedMap = togl->EpsGreenMap = togl->EpsBlueMap = NULL;
- togl->EpsMapSize = 0;
-
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- cmap = DefaultColormap(dpy, scrnum);
- /* for EPS Output */
- if (togl->EpsRedMap)
- free(togl->EpsRedMap);
- if (togl->EpsGreenMap)
- free(togl->EpsGreenMap);
- if (togl->EpsBlueMap)
- free(togl->EpsBlueMap);
- togl->EpsRedMap = togl->EpsGreenMap = togl->EpsBlueMap = NULL;
- togl->EpsMapSize = 0;
-#endif /* TOGL_X11 */
- } else {
- /* Colormap for CI mode */
-#ifdef TOGL_WGL
- togl->CiColormapSize = 1 << pfd.cColorBits;
- togl->CiColormapSize = togl->CiColormapSize < MAX_CI_COLORMAP_SIZE ?
- togl->CiColormapSize : MAX_CI_COLORMAP_SIZE;
-
-#endif /* TOGL_WGL */
- if (togl->PrivateCmapFlag) {
- /* need read/write colormap so user can store own color entries */
-#if defined(TOGL_X11)
- cmap = XCreateColormap(dpy, XRootWindow(dpy, visinfo->screen),
- visinfo->visual, AllocAll);
-#elif defined(TOGL_WGL)
- cmap = Win32CreateCiColormap(togl);
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- /* need to figure out how to do this correctly on Mac... */
- cmap = DefaultColormap(dpy, scrnum);
-#endif /* TOGL_X11 */
- } else {
- if (visinfo->visual == DefaultVisual(dpy, scrnum)) {
- /* share default/root colormap */
- cmap = Tk_Colormap(togl->TkWin);
- } else {
- /* make a new read-only colormap */
- cmap = XCreateColormap(dpy, XRootWindow(dpy, visinfo->screen),
- visinfo->visual, AllocNone);
- }
- }
- }
-
-#if !defined(TOGL_AGL)
- /* Make sure Tk knows to switch to the new colormap when the cursor is over
- * this window when running in color index mode. */
- (void) Tk_SetWindowVisual(togl->TkWin, visinfo->visual, visinfo->depth,
- cmap);
-#endif
-
-#ifdef TOGL_WGL
- /* Install the colormap */
- SelectPalette(togl->tglGLHdc, ((TkWinColormap *) cmap)->palette, TRUE);
- RealizePalette(togl->tglGLHdc);
-#endif /* TOGL_WGL */
-
-#if defined(TOGL_X11)
- swa.colormap = cmap;
- swa.border_pixel = 0;
- swa.event_mask = ALL_EVENTS_MASK;
- window = XCreateWindow(dpy, parent,
- 0, 0, togl->Width, togl->Height,
- 0, visinfo->depth,
- InputOutput, visinfo->visual,
- CWBorderPixel | CWColormap | CWEventMask, &swa);
- /* Make sure window manager installs our colormap */
- (void) XSetWMColormapWindows(dpy, window, &window, 1);
-
-#elif defined(TOGL_WGL)
- window = Tk_AttachHWND(togl->TkWin, hwnd);
-
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- {
- TkWindow *winPtr = (TkWindow *) togl->TkWin;
-
- window = TkpMakeWindow(winPtr, parent);
- }
-#endif /* TOGL_X11 */
-
-#ifdef USE_OVERLAY
- if (togl->OverlayFlag) {
- if (SetupOverlay(togl) == TCL_ERROR) {
- fprintf(stderr, "Warning: couldn't setup overlay.\n");
- togl->OverlayFlag = False;
- }
- }
-#endif /* USE_OVERLAY */
-
- /* Request the X window to be displayed */
- (void) XMapWindow(dpy, window);
-
-#if defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- if (togl->ShareContext && FindTogl(togl->ShareContext)) {
- /* share OpenGL context with existing Togl widget */
- Togl *shareWith = FindTogl(togl->ShareContext);
-
- assert(shareWith);
- assert(shareWith->aglCtx);
- togl->aglCtx = shareWith->aglCtx;
- togl->VisInfo = shareWith->VisInfo;
- visinfo = togl->VisInfo;
-
- } else {
- AGLContext shareCtx = NULL;
-
- if (togl->PixelFormat) {
- /* fill in RgbaFlag, DoubleFlag, and StereoFlag */
- fmt = (AGLPixelFormat) togl->PixelFormat;
- GLint has_rgba, has_doublebuf, has_stereo;
-
- if (aglDescribePixelFormat(fmt, AGL_RGBA, &has_rgba) &&
- aglDescribePixelFormat(fmt, AGL_DOUBLEBUFFER,
- &has_doublebuf)
- && aglDescribePixelFormat(fmt, AGL_STEREO, &has_stereo)) {
- togl->RgbaFlag = (has_rgba ? True : False);
- togl->DoubleFlag = (has_doublebuf ? True : False);
- togl->StereoFlag = (has_stereo ? True : False);
- } else {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID
- "Togl: failed querying pixel format attributes",
- TCL_STATIC);
- return DUMMY_WINDOW;
- }
- } else {
-
- /* Need to do this after mapping window, so MacDrawable structure
- * is more completely filled in */
- na = 0;
- attribs[na++] = AGL_MINIMUM_POLICY;
- attribs[na++] = AGL_ROBUST;
- if (togl->RgbaFlag) {
- /* RGB[A] mode */
- attribs[na++] = AGL_RGBA;
- attribs[na++] = AGL_RED_SIZE;
- attribs[na++] = togl->RgbaRed;
- attribs[na++] = AGL_GREEN_SIZE;
- attribs[na++] = togl->RgbaGreen;
- attribs[na++] = AGL_BLUE_SIZE;
- attribs[na++] = togl->RgbaBlue;
- if (togl->AlphaFlag) {
- attribs[na++] = AGL_ALPHA_SIZE;
- attribs[na++] = togl->AlphaSize;
- }
- } else {
- /* Color index mode */
- attribs[na++] = AGL_BUFFER_SIZE;
- attribs[na++] = 8;
- }
- if (togl->DepthFlag) {
- attribs[na++] = AGL_DEPTH_SIZE;
- attribs[na++] = togl->DepthSize;
- }
- if (togl->DoubleFlag) {
- attribs[na++] = AGL_DOUBLEBUFFER;
- }
- if (togl->StencilFlag) {
- attribs[na++] = AGL_STENCIL_SIZE;
- attribs[na++] = togl->StencilSize;
- }
- if (togl->AccumFlag) {
- attribs[na++] = AGL_ACCUM_RED_SIZE;
- attribs[na++] = togl->AccumRed;
- attribs[na++] = AGL_ACCUM_GREEN_SIZE;
- attribs[na++] = togl->AccumGreen;
- attribs[na++] = AGL_ACCUM_BLUE_SIZE;
- attribs[na++] = togl->AccumBlue;
- if (togl->AlphaFlag) {
- attribs[na++] = AGL_ACCUM_ALPHA_SIZE;
- attribs[na++] = togl->AccumAlpha;
- }
- }
- if (togl->AuxNumber != 0) {
- attribs[na++] = AGL_AUX_BUFFERS;
- attribs[na++] = togl->AuxNumber;
- }
- attribs[na++] = AGL_NONE;
-
- if ((fmt = aglChoosePixelFormat(NULL, 0, attribs)) == NULL) {
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "Togl: couldn't choose pixel format",
- TCL_STATIC);
- return DUMMY_WINDOW;
- }
- }
-
- /*
- * Check whether to share lists.
- */
- if (togl->ShareList) {
- /* share display lists with existing togl widget */
- Togl *shareWith = FindTogl(togl->ShareList);
-
- if (shareWith)
- shareCtx = shareWith->aglCtx;
- }
- if ((togl->aglCtx = aglCreateContext(fmt, shareCtx)) == NULL) {
- GLenum err = aglGetError();
-
- aglDestroyPixelFormat(fmt);
- if (err == AGL_BAD_MATCH)
- Tcl_SetResult(togl->Interp,
- TCL_STUPID
- "Togl: couldn't create context, shared context doesn't match",
- TCL_STATIC);
- else if (err == AGL_BAD_CONTEXT)
- Tcl_SetResult(togl->Interp,
- TCL_STUPID
- "Togl: couldn't create context, bad shared context",
- TCL_STATIC);
- else if (err == AGL_BAD_PIXELFMT)
- Tcl_SetResult(togl->Interp,
- TCL_STUPID
- "Togl: couldn't create context, bad pixel format",
- TCL_STATIC);
- else
- Tcl_SetResult(togl->Interp,
- TCL_STUPID
- "Togl: couldn't create context, unknown reason",
- TCL_STATIC);
- return DUMMY_WINDOW;
- }
-
- aglDestroyPixelFormat(fmt);
- if (!aglSetDrawable(togl->aglCtx,
-# if defined(TOGL_AGL)
- ((MacDrawable *) (window))->toplevel->grafPtr
-# else
- ((MacDrawable *) (window))->toplevel->portPtr
-# endif
- )) {
- aglDestroyContext(togl->aglCtx);
- Tcl_SetResult(togl->Interp,
- TCL_STUPID "Togl: couldn't set drawable", TCL_STATIC);
- return DUMMY_WINDOW;
- }
-
- /* Just for portability, define the simplest visinfo */
- visinfo = &VisInf;
- visinfo->visual = DefaultVisual(dpy, DefaultScreen(dpy));
- visinfo->depth = visinfo->visual->bits_per_rgb;
-
- Tk_SetWindowVisual(togl->TkWin, visinfo->visual, visinfo->depth, cmap);
- }
-#endif /* TOGL_AGL_CLASSIC || TOGL_AGL */
-
-#if defined(TOGL_X11)
- /* Check for a single/double buffering snafu */
- {
- int dbl_flag;
-
- if (glXGetConfig(dpy, visinfo, GLX_DOUBLEBUFFER, &dbl_flag)) {
- if (!togl->DoubleFlag && dbl_flag) {
- /* We requested single buffering but had to accept a */
- /* double buffered visual. Set the GL draw buffer to */
- /* be the front buffer to simulate single buffering. */
- glDrawBuffer(GL_FRONT);
- }
- }
- }
-#endif /* TOGL_X11 */
-
- /* for EPS Output */
- if (!togl->RgbaFlag) {
- int index_size;
-
-#if defined(TOGL_X11) || defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- GLint index_bits;
-
- glGetIntegerv(GL_INDEX_BITS, &index_bits);
- index_size = 1 << index_bits;
-#elif defined(TOGL_WGL)
- index_size = togl->CiColormapSize;
-#endif /* TOGL_X11 */
- if (togl->EpsMapSize != index_size) {
- if (togl->EpsRedMap)
- free(togl->EpsRedMap);
- if (togl->EpsGreenMap)
- free(togl->EpsGreenMap);
- if (togl->EpsBlueMap)
- free(togl->EpsBlueMap);
- togl->EpsMapSize = index_size;
- togl->EpsRedMap = (GLfloat *) calloc(index_size, sizeof (GLfloat));
- togl->EpsGreenMap =
- (GLfloat *) calloc(index_size, sizeof (GLfloat));
- togl->EpsBlueMap = (GLfloat *) calloc(index_size, sizeof (GLfloat));
- }
- }
-
- return window;
-}
-
-/*
- * Togl_WorldChanged
- *
- * Add support for setgrid option.
- */
-static void
-Togl_WorldChanged(ClientData instanceData)
-{
- Togl *togl = (Togl *) instanceData;
-
- Tk_GeometryRequest(togl->TkWin, togl->Width, togl->Height);
- Tk_SetInternalBorder(togl->TkWin, 0);
- if (togl->SetGrid > 0) {
- Tk_SetGrid(togl->TkWin, togl->Width / togl->SetGrid,
- togl->Height / togl->SetGrid, togl->SetGrid, togl->SetGrid);
- } else {
- Tk_UnsetGrid(togl->TkWin);
- }
-}
-
-/*
- * ToglCmdDeletedProc
- *
- * This procedure is invoked when a widget command is deleted. If
- * the widget isn't already in the process of being destroyed,
- * this command destroys it.
- *
- * Results:
- * None.
- *
- * Side effects:
- * The widget is destroyed.
- *
- *----------------------------------------------------------------------
- */
-static void
-ToglCmdDeletedProc(ClientData clientData)
-{
- Togl *togl = (Togl *) clientData;
- Tk_Window tkwin = togl->TkWin;
-
- /*
- * This procedure could be invoked either because the window was
- * destroyed and the command was then deleted (in which case tkwin
- * is NULL) or because the command was deleted, and then this procedure
- * destroys the widget.
- */
-
- if (togl && tkwin) {
- Tk_DeleteEventHandler(tkwin,
- ExposureMask | StructureNotifyMask,
- Togl_EventProc, (ClientData) togl);
- }
-#if defined(TOGL_X11)
- if (togl->GlCtx) {
- if (FindToglWithSameContext(togl) == NULL)
- glXDestroyContext(togl->display, togl->GlCtx);
- togl->GlCtx = NULL;
- }
-# ifdef USE_OVERLAY
- if (togl->OverlayCtx) {
- Tcl_HashEntry *entryPtr;
- TkWindow *winPtr = (TkWindow *) togl->TkWin;
-
- if (winPtr) {
- entryPtr = Tcl_FindHashEntry(&winPtr->dispPtr->winTable,
- (char *) togl->OverlayWindow);
- Tcl_DeleteHashEntry(entryPtr);
- }
- if (FindToglWithSameOverlayContext(togl) == NULL)
- glXDestroyContext(togl->display, togl->OverlayCtx);
- togl->OverlayCtx = NULL;
- }
-# endif /* USE_OVERLAY */
-#endif
- /* TODO: delete contexts on other platforms */
-
- if (tkwin != NULL) {
- if (togl->SetGrid > 0) {
- Tk_UnsetGrid(tkwin);
- }
- togl->TkWin = NULL;
- Tk_DestroyWindow(tkwin);
- }
-}
-
-
-/*
- * Togl_Destroy
- *
- * Gets called when an Togl widget is destroyed.
- */
-static void
-Togl_Destroy(
-#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401
- char *
-#else
- ClientData
-#endif
- clientData)
-{
- Togl *togl = (Togl *) clientData;
-
- Tk_FreeOptions(configSpecs, WIDGREC togl, togl->display, 0);
-
-#ifndef NO_TK_CURSOR
- if (togl->Cursor != None) {
- Tk_FreeCursor(togl->display, togl->Cursor);
- }
-#endif
- if (togl->DestroyProc) {
- togl->DestroyProc(togl);
- }
-
- /* remove from linked list */
- RemoveFromList(togl);
-
-#if !defined(TOGL_WGL)
- /* TODO: why not on Windows? */
- free(togl);
-#endif
-}
-
-
-
-/*
- * This gets called to handle Togl window configuration events
- */
-static void
-Togl_EventProc(ClientData clientData, XEvent *eventPtr)
-{
- Togl *togl = (Togl *) clientData;
-
- switch (eventPtr->type) {
- case Expose:
- if (eventPtr->xexpose.count == 0) {
- if (!togl->UpdatePending
- && eventPtr->xexpose.window == Tk_WindowId(togl->TkWin)) {
- Togl_PostRedisplay(togl);
- }
-#if defined(TOGL_X11)
- if (!togl->OverlayUpdatePending && togl->OverlayFlag
- && togl->OverlayIsMapped
- && eventPtr->xexpose.window == togl->OverlayWindow) {
- Togl_PostOverlayRedisplay(togl);
- }
-#endif /* TOGL_X11 */
- }
- break;
- case ConfigureNotify:
- if (togl->Width != Tk_Width(togl->TkWin)
- || togl->Height != Tk_Height(togl->TkWin)) {
- togl->Width = Tk_Width(togl->TkWin);
- togl->Height = Tk_Height(togl->TkWin);
- (void) XResizeWindow(Tk_Display(togl->TkWin),
- Tk_WindowId(togl->TkWin), togl->Width, togl->Height);
-#if defined(TOGL_X11)
- if (togl->OverlayFlag) {
- (void) XResizeWindow(Tk_Display(togl->TkWin),
- togl->OverlayWindow, togl->Width, togl->Height);
- (void) XRaiseWindow(Tk_Display(togl->TkWin),
- togl->OverlayWindow);
- }
-#endif /* TOGL_X11 */
- Togl_MakeCurrent(togl);
- if (togl->ReshapeProc) {
- togl->ReshapeProc(togl);
- } else {
- glViewport(0, 0, togl->Width, togl->Height);
-#if defined(TOGL_X11)
- if (togl->OverlayFlag) {
- Togl_UseLayer(togl, TOGL_OVERLAY);
- glViewport(0, 0, togl->Width, togl->Height);
- Togl_UseLayer(togl, TOGL_NORMAL);
- }
-#endif /* TOGL_X11 */
- }
-#ifndef TOGL_WGL /* causes double redisplay on Win32 platform */
- Togl_PostRedisplay(togl);
-#endif /* TOGL_WGL */
- }
- break;
- case MapNotify:
-#if defined(TOGL_AGL)
- {
- /*
- * See comment for the UnmapNotify case below.
- */
- AGLDrawable d = TkMacOSXGetDrawablePort(Tk_WindowId(togl->TkWin));
-
- aglSetDrawable(togl->aglCtx, d);
- }
-#endif /* TOGL_AGL */
- break;
- case UnmapNotify:
-#if defined(TOGL_AGL)
- {
- /*
- * For Mac OS X Aqua, Tk subwindows are not implemented as
- * separate Aqua windows. They are just different regions of
- * a single Aqua window. To unmap them they are just not drawn.
- * Have to disconnect the AGL context otherwise they will continue
- * to be displayed directly by Aqua.
- */
- aglSetDrawable(togl->aglCtx, NULL);
- }
-#endif /* TOGL_AGL */
- break;
- case DestroyNotify:
- if (togl->TkWin != NULL) {
- if (togl->SetGrid > 0) {
- Tk_UnsetGrid(togl->TkWin);
- }
- togl->TkWin = NULL;
-#if (TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION) >= 800
- /* This function new in Tcl/Tk 8.0 */
- (void) Tcl_DeleteCommandFromToken(togl->Interp, togl->widgetCmd);
-#endif
- }
- if (togl->TimerProc != NULL) {
-#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401
- Tcl_DeleteTimerHandler(togl->timerHandler);
-#else
- Tk_DeleteTimerHandler(togl->timerHandler);
-#endif
-
- }
- if (togl->UpdatePending) {
-#if (TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION) >= 705
- Tcl_CancelIdleCall(Togl_Render, (ClientData) togl);
-#else
- Tk_CancelIdleCall(Togl_Render, (ClientData) togl);
-#endif
- }
-#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401
- Tcl_EventuallyFree((ClientData) togl, Togl_Destroy);
-#else
- Tk_EventuallyFree((ClientData) togl, Togl_Destroy);
-#endif
-
- break;
- default:
- /* nothing */
- ;
- }
-}
-
-
-
-void
-Togl_PostRedisplay(Togl *togl)
-{
- if (!togl->UpdatePending) {
- togl->UpdatePending = True;
- Tk_DoWhenIdle(Togl_Render, (ClientData) togl);
- }
-}
-
-
-
-void
-Togl_SwapBuffers(const Togl *togl)
-{
- if (togl->DoubleFlag) {
-#if defined(TOGL_WGL)
- int res = SwapBuffers(togl->tglGLHdc);
-
- assert(res == TRUE);
-#elif defined(TOGL_X11)
- glXSwapBuffers(Tk_Display(togl->TkWin), Tk_WindowId(togl->TkWin));
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- aglSwapBuffers(togl->aglCtx);
-#endif /* TOGL_WGL */
- } else {
- glFlush();
- }
-}
-
-
-
-const char *
-Togl_Ident(const Togl *togl)
-{
- return togl->Ident;
-}
-
-
-int
-Togl_Width(const Togl *togl)
-{
- return togl->Width;
-}
-
-
-int
-Togl_Height(const Togl *togl)
-{
- return togl->Height;
-}
-
-
-Tcl_Interp *
-Togl_Interp(const Togl *togl)
-{
- return togl->Interp;
-}
-
-
-Tk_Window
-Togl_TkWin(const Togl *togl)
-{
- return togl->TkWin;
-}
-
-
-#if defined(TOGL_X11)
-/*
- * A replacement for XAllocColor. This function should never
- * fail to allocate a color. When XAllocColor fails, we return
- * the nearest matching color. If we have to allocate many colors
- * this function isn't too efficient; the XQueryColors() could be
- * done just once.
- * Written by Michael Pichler, Brian Paul, Mark Kilgard
- * Input: dpy - X display
- * cmap - X colormap
- * cmapSize - size of colormap
- * In/Out: color - the XColor struct
- * Output: exact - 1=exact color match, 0=closest match
- */
-static void
-noFaultXAllocColor(Display *dpy, Colormap cmap, int cmapSize,
- XColor *color, int *exact)
-{
- XColor *ctable, subColor;
- int i, bestmatch;
- double mindist; /* 3*2^16^2 exceeds long int precision. */
-
- /* First try just using XAllocColor. */
- if (XAllocColor(dpy, cmap, color)) {
- *exact = 1;
- return;
- }
-
- /* Retrieve color table entries. */
- /* XXX alloca candidate. */
- ctable = (XColor *) malloc(cmapSize * sizeof (XColor));
- for (i = 0; i < cmapSize; i++) {
- ctable[i].pixel = i;
- }
- (void) XQueryColors(dpy, cmap, ctable, cmapSize);
-
- /* Find best match. */
- bestmatch = -1;
- mindist = 0;
- for (i = 0; i < cmapSize; i++) {
- double dr = (double) color->red - (double) ctable[i].red;
- double dg = (double) color->green - (double) ctable[i].green;
- double db = (double) color->blue - (double) ctable[i].blue;
- double dist = dr * dr + dg * dg + db * db;
-
- if (bestmatch < 0 || dist < mindist) {
- bestmatch = i;
- mindist = dist;
- }
- }
-
- /* Return result. */
- subColor.red = ctable[bestmatch].red;
- subColor.green = ctable[bestmatch].green;
- subColor.blue = ctable[bestmatch].blue;
- free(ctable);
- /* Try to allocate the closest match color. This should only fail if the
- * cell is read/write. Otherwise, we're incrementing the cell's reference
- * count. */
- if (!XAllocColor(dpy, cmap, &subColor)) {
- /* do this to work around a problem reported by Frank Ortega */
- subColor.pixel = (unsigned long) bestmatch;
- subColor.red = ctable[bestmatch].red;
- subColor.green = ctable[bestmatch].green;
- subColor.blue = ctable[bestmatch].blue;
- subColor.flags = DoRed | DoGreen | DoBlue;
- }
- *color = subColor;
-}
-
-#elif defined(TOGL_WGL)
-
-static UINT
-Win32AllocColor(const Togl *togl, float red, float green, float blue)
-{
- /* Modified version of XAllocColor emulation of Tk. - returns index,
- * instead of color itself - allocates logical palette entry even for
- * non-palette devices */
-
- TkWinColormap *cmap = (TkWinColormap *) Tk_Colormap(togl->TkWin);
- UINT index;
- COLORREF newColor, closeColor;
- PALETTEENTRY entry, closeEntry;
- int new, refCount;
- Tcl_HashEntry *entryPtr;
-
- entry.peRed = (unsigned char) (red * 255 + .5);
- entry.peGreen = (unsigned char) (green * 255 + .5);
- entry.peBlue = (unsigned char) (blue * 255 + .5);
- entry.peFlags = 0;
-
- /*
- * Find the nearest existing palette entry.
- */
-
- newColor = RGB(entry.peRed, entry.peGreen, entry.peBlue);
- index = GetNearestPaletteIndex(cmap->palette, newColor);
- GetPaletteEntries(cmap->palette, index, 1, &closeEntry);
- closeColor = RGB(closeEntry.peRed, closeEntry.peGreen, closeEntry.peBlue);
-
- /*
- * If this is not a duplicate and colormap is not full, allocate a new entry.
- */
-
- if (newColor != closeColor) {
- if (cmap->size == (unsigned int) togl->CiColormapSize) {
- entry = closeEntry;
- } else {
- cmap->size++;
- ResizePalette(cmap->palette, cmap->size);
- index = cmap->size - 1;
- SetPaletteEntries(cmap->palette, index, 1, &entry);
- SelectPalette(togl->tglGLHdc, cmap->palette, TRUE);
- RealizePalette(togl->tglGLHdc);
- }
- }
- newColor = PALETTERGB(entry.peRed, entry.peGreen, entry.peBlue);
- entryPtr = Tcl_CreateHashEntry(&cmap->refCounts, (char *) newColor, &new);
- if (new) {
- refCount = 1;
- } else {
- refCount = ((int) Tcl_GetHashValue(entryPtr)) + 1;
- }
- Tcl_SetHashValue(entryPtr, (ClientData) refCount);
-
- /* for EPS output */
- togl->EpsRedMap[index] = (GLfloat) (entry.peRed / 255.0);
- togl->EpsGreenMap[index] = (GLfloat) (entry.peGreen / 255.0);
- togl->EpsBlueMap[index] = (GLfloat) (entry.peBlue / 255.0);
- return index;
-}
-
-static void
-Win32FreeColor(const Togl *togl, unsigned long index)
-{
- TkWinColormap *cmap = (TkWinColormap *) Tk_Colormap(togl->TkWin);
- COLORREF cref;
- UINT count, refCount;
- PALETTEENTRY entry, *entries;
- Tcl_HashEntry *entryPtr;
-
- if (index >= cmap->size) {
- panic("Tried to free a color that isn't allocated.");
- }
- GetPaletteEntries(cmap->palette, index, 1, &entry);
- cref = PALETTERGB(entry.peRed, entry.peGreen, entry.peBlue);
- entryPtr = Tcl_FindHashEntry(&cmap->refCounts, (char *) cref);
- if (!entryPtr) {
- panic("Tried to free a color that isn't allocated.");
- }
- refCount = (int) Tcl_GetHashValue(entryPtr) - 1;
- if (refCount == 0) {
- count = cmap->size - index;
- entries = (PALETTEENTRY *) ckalloc(sizeof (PALETTEENTRY) * count);
- GetPaletteEntries(cmap->palette, index + 1, count, entries);
- SetPaletteEntries(cmap->palette, index, count, entries);
- SelectPalette(togl->tglGLHdc, cmap->palette, TRUE);
- RealizePalette(togl->tglGLHdc);
- ckfree((char *) entries);
- cmap->size--;
- Tcl_DeleteHashEntry(entryPtr);
- } else {
- Tcl_SetHashValue(entryPtr, (ClientData) refCount);
- }
-}
-
-static void
-Win32SetColor(const Togl *togl,
- unsigned long index, float red, float green, float blue)
-{
- TkWinColormap *cmap = (TkWinColormap *) Tk_Colormap(togl->TkWin);
- PALETTEENTRY entry;
-
- entry.peRed = (unsigned char) (red * 255 + .5);
- entry.peGreen = (unsigned char) (green * 255 + .5);
- entry.peBlue = (unsigned char) (blue * 255 + .5);
- entry.peFlags = 0;
- SetPaletteEntries(cmap->palette, index, 1, &entry);
- SelectPalette(togl->tglGLHdc, cmap->palette, TRUE);
- RealizePalette(togl->tglGLHdc);
-
- /* for EPS output */
- togl->EpsRedMap[index] = (GLfloat) (entry.peRed / 255.0);
- togl->EpsGreenMap[index] = (GLfloat) (entry.peGreen / 255.0);
- togl->EpsBlueMap[index] = (GLfloat) (entry.peBlue / 255.0);
-}
-#endif /* TOGL_X11 */
-
-
-unsigned long
-Togl_AllocColor(const Togl *togl, float red, float green, float blue)
-{
- if (togl->RgbaFlag) {
- (void) fprintf(stderr,
- "Error: Togl_AllocColor illegal in RGBA mode.\n");
- return 0;
- }
- /* TODO: maybe not... */
- if (togl->PrivateCmapFlag) {
- (void) fprintf(stderr,
- "Error: Togl_FreeColor illegal with private colormap\n");
- return 0;
- }
-#if defined(TOGL_X11)
- {
- XColor xcol;
- int exact;
-
- xcol.red = (short) (red * 65535.0);
- xcol.green = (short) (green * 65535.0);
- xcol.blue = (short) (blue * 65535.0);
-
- noFaultXAllocColor(Tk_Display(togl->TkWin), Tk_Colormap(togl->TkWin),
- Tk_Visual(togl->TkWin)->map_entries, &xcol, &exact);
- /* for EPS output */
- togl->EpsRedMap[xcol.pixel] = (float) xcol.red / 65535.0;
- togl->EpsGreenMap[xcol.pixel] = (float) xcol.green / 65535.0;
- togl->EpsBlueMap[xcol.pixel] = (float) xcol.blue / 65535.0;
-
- return xcol.pixel;
- }
-
-#elif defined(TOGL_WGL)
- return Win32AllocColor(togl, red, green, blue);
-
-#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- /* still need to implement this on Mac... */
- return 0;
-
-#endif /* TOGL_X11 */
-}
-
-
-
-void
-Togl_FreeColor(const Togl *togl, unsigned long pixel)
-{
- if (togl->RgbaFlag) {
- (void) fprintf(stderr,
- "Error: Togl_AllocColor illegal in RGBA mode.\n");
- return;
- }
- /* TODO: maybe not... */
- if (togl->PrivateCmapFlag) {
- (void) fprintf(stderr,
- "Error: Togl_FreeColor illegal with private colormap\n");
- return;
- }
-#if defined(TOGL_X11)
- (void) XFreeColors(Tk_Display(togl->TkWin), Tk_Colormap(togl->TkWin),
- &pixel, 1, 0);
-#elif defined(TOGL_WGL)
- Win32FreeColor(togl, pixel);
-#endif /* TOGL_X11 */
-}
-
-
-
-void
-Togl_SetColor(const Togl *togl,
- unsigned long index, float red, float green, float blue)
-{
-
- if (togl->RgbaFlag) {
- (void) fprintf(stderr,
- "Error: Togl_AllocColor illegal in RGBA mode.\n");
- return;
- }
- if (!togl->PrivateCmapFlag) {
- (void) fprintf(stderr,
- "Error: Togl_SetColor requires a private colormap\n");
- return;
- }
-#if defined(TOGL_X11)
- {
- XColor xcol;
-
- xcol.pixel = index;
- xcol.red = (short) (red * 65535.0);
- xcol.green = (short) (green * 65535.0);
- xcol.blue = (short) (blue * 65535.0);
- xcol.flags = DoRed | DoGreen | DoBlue;
-
- (void) XStoreColor(Tk_Display(togl->TkWin), Tk_Colormap(togl->TkWin),
- &xcol);
-
- /* for EPS output */
- togl->EpsRedMap[xcol.pixel] = (float) xcol.red / 65535.0;
- togl->EpsGreenMap[xcol.pixel] = (float) xcol.green / 65535.0;
- togl->EpsBlueMap[xcol.pixel] = (float) xcol.blue / 65535.0;
- }
-#elif defined(TOGL_WGL)
- Win32SetColor(togl, index, red, green, blue);
-#endif /* TOGL_X11 */
-}
-
-
-#if TOGL_USE_FONTS == 1
-
-# if defined(TOGL_WGL)
-# include "tkWinInt.h"
-# include "tkFont.h"
-
-/*
- * The following structure represents Windows' implementation of a font.
- */
-
-typedef struct WinFont
-{
- TkFont font; /* Stuff used by generic font package. Must be
- * first in structure. */
- HFONT hFont; /* Windows information about font. */
- HWND hwnd; /* Toplevel window of application that owns
- * this font, used for getting HDC. */
- int widths[256]; /* Widths of first 256 chars in this font. */
-} WinFont;
-# endif /* TOGL_WGL */
-
-
-# define MAX_FONTS 1000
-static GLuint ListBase[MAX_FONTS];
-static GLuint ListCount[MAX_FONTS];
-
-
-
-/*
- * Load the named bitmap font as a sequence of bitmaps in a display list.
- * fontname may be one of the predefined fonts like TOGL_BITMAP_8_BY_13
- * or an X font name, or a Windows font name, etc.
- */
-GLuint
-Togl_LoadBitmapFont(const Togl *togl, const char *fontname)
-{
- static Bool FirstTime = True;
-
-# if defined(TOGL_X11)
- XFontStruct *fontinfo;
-# elif defined(TOGL_WGL)
- WinFont *winfont;
- HFONT oldFont;
- TEXTMETRIC tm;
-# endif
- /* TOGL_X11 */
- int first, last, count;
- GLuint fontbase;
- const char *name;
-
- /* Initialize the ListBase and ListCount arrays */
- if (FirstTime) {
- int i;
-
- for (i = 0; i < MAX_FONTS; i++) {
- ListBase[i] = ListCount[i] = 0;
- }
- FirstTime = False;
- }
-
- /*
- * This method of selecting X fonts according to a TOGL_ font name
- * is a kludge. To be fixed when I find time...
- */
- if (fontname == TOGL_BITMAP_8_BY_13) {
- name = "8x13";
- } else if (fontname == TOGL_BITMAP_9_BY_15) {
- name = "9x15";
- } else if (fontname == TOGL_BITMAP_TIMES_ROMAN_10) {
- name = "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1";
- } else if (fontname == TOGL_BITMAP_TIMES_ROMAN_24) {
- name = "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1";
- } else if (fontname == TOGL_BITMAP_HELVETICA_10) {
- name = "-adobe-helvetica-medium-r-normal--10-100-75-75-p-57-iso8859-1";
- } else if (fontname == TOGL_BITMAP_HELVETICA_12) {
- name = "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1";
- } else if (fontname == TOGL_BITMAP_HELVETICA_18) {
- name = "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1";
- } else if (!fontname) {
- name = DEFAULT_FONTNAME;
- } else {
- name = (const char *) fontname;
- }
-
- assert(name);
-
-# if defined(TOGL_X11)
- fontinfo = (XFontStruct *) XLoadQueryFont(Tk_Display(togl->TkWin), name);
- if (!fontinfo) {
- return 0;
- }
- first = fontinfo->min_char_or_byte2;
- last = fontinfo->max_char_or_byte2;
-# elif defined(TOGL_WGL)
- winfont = (WinFont *) Tk_GetFont(togl->Interp, togl->TkWin, name);
- if (!winfont) {
- return 0;
- }
- oldFont = SelectObject(togl->tglGLHdc, winfont->hFont);
- GetTextMetrics(togl->tglGLHdc, &tm);
- first = tm.tmFirstChar;
- last = tm.tmLastChar;
-# elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- first = 10; /* don't know how to determine font range on
- * Mac... */
- last = 127;
-# endif
- /* TOGL_X11 */
-
- count = last - first + 1;
- fontbase = glGenLists((GLuint) (last + 1));
- if (fontbase == 0) {
-# ifdef TOGL_WGL
- SelectObject(togl->tglGLHdc, oldFont);
- Tk_FreeFont((Tk_Font) winfont);
-# endif
- /* TOGL_WGL */
- return 0;
- }
-# if defined(TOGL_WGL)
- wglUseFontBitmaps(togl->tglGLHdc, first, count, (int) fontbase + first);
- SelectObject(togl->tglGLHdc, oldFont);
- Tk_FreeFont((Tk_Font) winfont);
-# elif defined(TOGL_X11)
- glXUseXFont(fontinfo->fid, first, count, (int) fontbase + first);
-# elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL)
- aglUseFont(togl->aglCtx, 1, 0, 14, /* for now, only app font, regular
- * 14-point */
- 10, 118, fontbase + first);
-# endif
-
- /* Record the list base and number of display lists for
- * Togl_UnloadBitmapFont(). */
- {
- int i;
-
- for (i = 0; i < MAX_FONTS; i++) {
- if (ListBase[i] == 0) {
- ListBase[i] = fontbase;
- ListCount[i] = last + 1;
- break;
- }
- }
- }
-
- return fontbase;
-}
-
-
-
-/*
- * Release the display lists which were generated by Togl_LoadBitmapFont().
- */
-void
-Togl_UnloadBitmapFont(const Togl *togl, GLuint fontbase)
-{
- int i;
-
- (void) togl;
- for (i = 0; i < MAX_FONTS; i++) {
- if (ListBase[i] == fontbase) {
- glDeleteLists(ListBase[i], ListCount[i]);
- ListBase[i] = ListCount[i] = 0;
- return;
- }
- }
-}
-
-#endif /* TOGL_USE_FONTS */
-
-
-/*
- * Overlay functions
- */
-
-
-void
-Togl_UseLayer(Togl *togl, int layer)
-{
- if (!togl->OverlayWindow)
- return;
- if (layer == TOGL_OVERLAY) {
-#if defined(TOGL_WGL)
- int res = wglMakeCurrent(togl->tglGLHdc, togl->tglGLOverlayHglrc);
-
- assert(res == TRUE);
-#elif defined(TOGL_X11)
- (void) glXMakeCurrent(Tk_Display(togl->TkWin),
- togl->OverlayWindow, togl->OverlayCtx);
-# if defined(__sgi)
- if (togl->OldStereoFlag)
- oldStereoMakeCurrent(Tk_Display(togl->TkWin),
- togl->OverlayWindow, togl->OverlayCtx);
-# endif
- /* __sgi STEREO */
-#endif /* TOGL_WGL */
- } else if (layer == TOGL_NORMAL) {
-#if defined(TOGL_WGL)
- int res = wglMakeCurrent(togl->tglGLHdc, togl->tglGLHglrc);
-
- assert(res == TRUE);
-#elif defined(TOGL_X11)
- (void) glXMakeCurrent(Tk_Display(togl->TkWin),
- Tk_WindowId(togl->TkWin), togl->GlCtx);
-# if defined(__sgi)
- if (togl->OldStereoFlag)
- oldStereoMakeCurrent(Tk_Display(togl->TkWin),
- Tk_WindowId(togl->TkWin), togl->GlCtx);
-# endif
- /* __sgi STEREO */
-#endif /* TOGL_WGL */
- } else {
- /* error */
- }
-}
-
-
-void
-Togl_ShowOverlay(Togl *togl)
-{
-#if defined(TOGL_X11) /* not yet implemented on Windows */
- if (togl->OverlayWindow) {
- (void) XMapWindow(Tk_Display(togl->TkWin), togl->OverlayWindow);
- (void) XInstallColormap(Tk_Display(togl->TkWin), togl->OverlayCmap);
- togl->OverlayIsMapped = True;
- }
-#endif /* TOGL_X11 */
-}
-
-
-void
-Togl_HideOverlay(Togl *togl)
-{
- if (togl->OverlayWindow && togl->OverlayIsMapped) {
- (void) XUnmapWindow(Tk_Display(togl->TkWin), togl->OverlayWindow);
- togl->OverlayIsMapped = False;
- }
-}
-
-
-void
-Togl_PostOverlayRedisplay(Togl *togl)
-{
- if (!togl->OverlayUpdatePending
- && togl->OverlayWindow && togl->OverlayDisplayProc) {
- Tk_DoWhenIdle(RenderOverlay, (ClientData) togl);
- togl->OverlayUpdatePending = True;
- }
-}
-
-
-void
-Togl_OverlayDisplayFunc(Togl_Callback *proc)
-{
- DefaultOverlayDisplayProc = proc;
-}
-
-
-int
-Togl_ExistsOverlay(const Togl *togl)
-{
- return togl->OverlayFlag;
-}
-
-
-int
-Togl_GetOverlayTransparentValue(const Togl *togl)
-{
- return togl->OverlayTransparentPixel;
-}
-
-
-int
-Togl_IsMappedOverlay(const Togl *togl)
-{
- return togl->OverlayFlag && togl->OverlayIsMapped;
-}
-
-
-unsigned long
-Togl_AllocColorOverlay(const Togl *togl, float red, float green, float blue)
-{
-#if defined(TOGL_X11) /* not yet implemented on Windows */
- if (togl->OverlayFlag && togl->OverlayCmap) {
- XColor xcol;
-
- xcol.red = (short) (red * 65535.0);
- xcol.green = (short) (green * 65535.0);
- xcol.blue = (short) (blue * 65535.0);
- if (!XAllocColor(Tk_Display(togl->TkWin), togl->OverlayCmap, &xcol))
- return (unsigned long) -1;
- return xcol.pixel;
- }
-#endif /* TOGL_X11 */
- return (unsigned long) -1;
-}
-
-
-void
-Togl_FreeColorOverlay(const Togl *togl, unsigned long pixel)
-{
-#if defined(TOGL_X11) /* not yet implemented on Windows */
- if (togl->OverlayFlag && togl->OverlayCmap) {
- (void) XFreeColors(Tk_Display(togl->TkWin), togl->OverlayCmap, &pixel,
- 1, 0);
- }
-#endif /* TOGL_X11 */
-}
-
-
-/*
- * User client data
- */
-
-void
-Togl_ClientData(ClientData clientData)
-{
- DefaultClientData = clientData;
-}
-
-
-ClientData
-Togl_GetClientData(const Togl *togl)
-{
- return togl->Client_Data;
-}
-
-
-void
-Togl_SetClientData(Togl *togl, ClientData clientData)
-{
- togl->Client_Data = clientData;
-}
-
-
-/*
- * X11-only functions
- * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES)
- */
-
-Display *
-Togl_Display(const Togl *togl)
-{
- return Tk_Display(togl->TkWin);
-}
-
-Screen *
-Togl_Screen(const Togl *togl)
-{
- return Tk_Screen(togl->TkWin);
-}
-
-int
-Togl_ScreenNumber(const Togl *togl)
-{
- return Tk_ScreenNumber(togl->TkWin);
-}
-
-Colormap
-Togl_Colormap(const Togl *togl)
-{
- return Tk_Colormap(togl->TkWin);
-}
-
-
-
-#ifdef MESA_COLOR_HACK
-/*
- * Let's know how many free colors do we have
- */
-# if 0
-static unsigned char rojo[] = { 4, 39, 74, 110, 145, 181, 216, 251 }, verde[] = {
-4, 39, 74, 110, 145, 181, 216, 251}, azul[] = {
-4, 39, 74, 110, 145, 181, 216, 251};
-
-unsigned char rojo[] = { 4, 36, 72, 109, 145, 182, 218, 251 }, verde[] = {
-4, 36, 72, 109, 145, 182, 218, 251}, azul[] = {
-4, 36, 72, 109, 145, 182, 218, 251};
-
-azul[] = {
-0, 85, 170, 255};
-# endif
-
-# define RLEVELS 5
-# define GLEVELS 9
-# define BLEVELS 5
-
-/* to free dithered_rgb_colormap pixels allocated by Mesa */
-static unsigned long *ToglMesaUsedPixelCells = NULL;
-static int ToglMesaUsedFreeCells = 0;
-
-static int
-get_free_color_cells(Display *display, int screen, Colormap colormap)
-{
- if (!ToglMesaUsedPixelCells) {
- XColor xcol;
- int i;
- int colorsfailed, ncolors = XDisplayCells(display, screen);
-
- long r, g, b;
-
- ToglMesaUsedPixelCells =
- (unsigned long *) calloc(ncolors, sizeof (unsigned long));
-
- /* Allocate X colors and initialize color_table[], red_table[], etc */
- /* de Mesa 2.1: xmesa1.c setup_dithered_(...) */
- i = colorsfailed = 0;
- for (r = 0; r < RLEVELS; r++)
- for (g = 0; g < GLEVELS; g++)
- for (b = 0; b < BLEVELS; b++) {
- int exact;
-
- xcol.red = (r * 65535) / (RLEVELS - 1);
- xcol.green = (g * 65535) / (GLEVELS - 1);
- xcol.blue = (b * 65535) / (BLEVELS - 1);
- noFaultXAllocColor(display, colormap, ncolors,
- &xcol, &exact);
- ToglMesaUsedPixelCells[i++] = xcol.pixel;
- if (!exact) {
- colorsfailed++;
- }
- }
- ToglMesaUsedFreeCells = i;
-
- XFreeColors(display, colormap, ToglMesaUsedPixelCells,
- ToglMesaUsedFreeCells, 0x00000000);
- }
- return ToglMesaUsedFreeCells;
-}
-
-
-static void
-free_default_color_cells(Display *display, Colormap colormap)
-{
- if (ToglMesaUsedPixelCells) {
- XFreeColors(display, colormap, ToglMesaUsedPixelCells,
- ToglMesaUsedFreeCells, 0x00000000);
- free(ToglMesaUsedPixelCells);
- ToglMesaUsedPixelCells = NULL;
- ToglMesaUsedFreeCells = 0;
- }
-}
-#endif
-
-
-/*
- * Generate EPS file.
- * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES)
- */
-
-/* Function that creates a EPS File from a created pixmap on the current
- * context. Based on the code from Copyright (c) Mark J. Kilgard, 1996.
- * Parameters: name_file, b&w / Color flag, redraw function. The redraw
- * function is needed in order to draw things into the new created pixmap. */
-
-/* Copyright (c) Mark J. Kilgard, 1996. */
-
-static GLvoid *
-grabPixels(int inColor, unsigned int width, unsigned int height)
-{
- GLvoid *buffer;
- GLint swapbytes, lsbfirst, rowlength;
- GLint skiprows, skippixels, alignment;
- GLenum format;
- unsigned int size;
-
- if (inColor) {
- format = GL_RGB;
- size = width * height * 3;
- } else {
- format = GL_LUMINANCE;
- size = width * height * 1;
- }
-
- buffer = (GLvoid *) malloc(size);
- if (buffer == NULL)
- return NULL;
-
- /* Save current modes. */
- glGetIntegerv(GL_PACK_SWAP_BYTES, &swapbytes);
- glGetIntegerv(GL_PACK_LSB_FIRST, &lsbfirst);
- glGetIntegerv(GL_PACK_ROW_LENGTH, &rowlength);
- glGetIntegerv(GL_PACK_SKIP_ROWS, &skiprows);
- glGetIntegerv(GL_PACK_SKIP_PIXELS, &skippixels);
- glGetIntegerv(GL_PACK_ALIGNMENT, &alignment);
- /* Little endian machines (DEC Alpha for example) could benefit from
- * setting GL_PACK_LSB_FIRST to GL_TRUE instead of GL_FALSE, but this would
- * * * * * * * * * require changing the generated bitmaps too. */
- glPixelStorei(GL_PACK_SWAP_BYTES, GL_FALSE);
- glPixelStorei(GL_PACK_LSB_FIRST, GL_FALSE);
- glPixelStorei(GL_PACK_ROW_LENGTH, 0);
- glPixelStorei(GL_PACK_SKIP_ROWS, 0);
- glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
- glPixelStorei(GL_PACK_ALIGNMENT, 1);
-
- /* Actually read the pixels. */
- glReadPixels(0, 0, width, height, format,
- GL_UNSIGNED_BYTE, (GLvoid *) buffer);
-
- /* Restore saved modes. */
- glPixelStorei(GL_PACK_SWAP_BYTES, swapbytes);
- glPixelStorei(GL_PACK_LSB_FIRST, lsbfirst);
- glPixelStorei(GL_PACK_ROW_LENGTH, rowlength);
- glPixelStorei(GL_PACK_SKIP_ROWS, skiprows);
- glPixelStorei(GL_PACK_SKIP_PIXELS, skippixels);
- glPixelStorei(GL_PACK_ALIGNMENT, alignment);
- return buffer;
-}
-
-
-static int
-generateEPS(const char *filename, int inColor,
- unsigned int width, unsigned int height)
-{
- FILE *fp;
- GLvoid *pixels;
- unsigned char *curpix;
- unsigned int components, i;
- int pos;
- unsigned int bitpixel;
-
- pixels = grabPixels(inColor, width, height);
- if (pixels == NULL)
- return 1;
- if (inColor)
- components = 3; /* Red, green, blue. */
- else
- components = 1; /* Luminance. */
-
- fp = fopen(filename, "w");
- if (fp == NULL) {
- return 2;
- }
- (void) fprintf(fp, "%%!PS-Adobe-2.0 EPSF-1.2\n");
- (void) fprintf(fp, "%%%%Creator: OpenGL pixmap render output\n");
- (void) fprintf(fp, "%%%%BoundingBox: 0 0 %d %d\n", width, height);
- (void) fprintf(fp, "%%%%EndComments\n");
-
- i = (((width * height) + 7) / 8) / 40; /* # of lines, 40 bytes per
- * line */
- (void) fprintf(fp, "%%%%BeginPreview: %d %d %d %d\n%%", width, height, 1,
- i);
- pos = 0;
- curpix = (unsigned char *) pixels;
- for (i = 0; i < width * height * components;) {
- bitpixel = 0;
- if (inColor) {
- double pix = 0;
-
- pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] +
- 0.11 * (double) curpix[i + 2];
- i += 3;
- if (pix > 127.0)
- bitpixel |= 0x80;
- pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] +
- 0.11 * (double) curpix[i + 2];
- i += 3;
- if (pix > 127.0)
- bitpixel |= 0x40;
- pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] +
- 0.11 * (double) curpix[i + 2];
- i += 3;
- if (pix > 127.0)
- bitpixel |= 0x20;
- pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] +
- 0.11 * (double) curpix[i + 2];
- i += 3;
- if (pix > 127.0)
- bitpixel |= 0x10;
- pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] +
- 0.11 * (double) curpix[i + 2];
- i += 3;
- if (pix > 127.0)
- bitpixel |= 0x08;
- pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] +
- 0.11 * (double) curpix[i + 2];
- i += 3;
- if (pix > 127.0)
- bitpixel |= 0x04;
- pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] +
- 0.11 * (double) curpix[i + 2];
- i += 3;
- if (pix > 127.0)
- bitpixel |= 0x02;
- pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] +
- 0.11 * (double) curpix[i + 2];
- i += 3;
- if (pix > 127.0)
- bitpixel |= 0x01;
- } else {
- if (curpix[i++] > 0x7f)
- bitpixel |= 0x80;
- if (curpix[i++] > 0x7f)
- bitpixel |= 0x40;
- if (curpix[i++] > 0x7f)
- bitpixel |= 0x20;
- if (curpix[i++] > 0x7f)
- bitpixel |= 0x10;
- if (curpix[i++] > 0x7f)
- bitpixel |= 0x08;
- if (curpix[i++] > 0x7f)
- bitpixel |= 0x04;
- if (curpix[i++] > 0x7f)
- bitpixel |= 0x02;
- if (curpix[i++] > 0x7f)
- bitpixel |= 0x01;
- }
- (void) fprintf(fp, "%02x", bitpixel);
- if (++pos >= 40) {
- (void) fprintf(fp, "\n%%");
- pos = 0;
- }
- }
- if (pos)
- (void) fprintf(fp, "\n%%%%EndPreview\n");
- else
- (void) fprintf(fp, "%%EndPreview\n");
-
- (void) fprintf(fp, "gsave\n");
- (void) fprintf(fp, "/bwproc {\n");
- (void) fprintf(fp, " rgbproc\n");
- (void) fprintf(fp, " dup length 3 idiv string 0 3 0\n");
- (void) fprintf(fp, " 5 -1 roll {\n");
- (void) fprintf(fp, " add 2 1 roll 1 sub dup 0 eq\n");
- (void) fprintf(fp, " { pop 3 idiv 3 -1 roll dup 4 -1 roll dup\n");
- (void) fprintf(fp, " 3 1 roll 5 -1 roll put 1 add 3 0 }\n");
- (void) fprintf(fp, " { 2 1 roll } ifelse\n");
- (void) fprintf(fp, " } forall\n");
- (void) fprintf(fp, " pop pop pop\n");
- (void) fprintf(fp, "} def\n");
- (void) fprintf(fp, "systemdict /colorimage known not {\n");
- (void) fprintf(fp, " /colorimage {\n");
- (void) fprintf(fp, " pop\n");
- (void) fprintf(fp, " pop\n");
- (void) fprintf(fp, " /rgbproc exch def\n");
- (void) fprintf(fp, " { bwproc } image\n");
- (void) fprintf(fp, " } def\n");
- (void) fprintf(fp, "} if\n");
- (void) fprintf(fp, "/picstr %d string def\n", width * components);
- (void) fprintf(fp, "%d %d scale\n", width, height);
- (void) fprintf(fp, "%d %d %d\n", width, height, 8);
- (void) fprintf(fp, "[%d 0 0 %d 0 0]\n", width, height);
- (void) fprintf(fp, "{currentfile picstr readhexstring pop}\n");
- (void) fprintf(fp, "false %d\n", components);
- (void) fprintf(fp, "colorimage\n");
-
- curpix = (unsigned char *) pixels;
- pos = 0;
- for (i = width * height * components; i != 0; i--) {
- (void) fprintf(fp, "%02hx", *curpix++);
- if (++pos >= 40) {
- (void) fprintf(fp, "\n");
- pos = 0;
- }
- }
- if (pos)
- (void) fprintf(fp, "\n");
-
- (void) fprintf(fp, "grestore\n");
- free(pixels);
- if (fclose(fp) != 0)
- return 1;
- return 0;
-}
-
-
-/* int Togl_DumpToEpsFile( const Togl *togl, const char *filename, int inColor,
- * void (*user_redraw)(void)) */
-/* changed by GG */
-int
-Togl_DumpToEpsFile(const Togl *togl, const char *filename,
- int inColor, void (*user_redraw) (const Togl *))
-{
- Bool using_mesa = False;
-
-#if 0
- Pixmap eps_pixmap;
- GLXPixmap eps_glxpixmap;
- XVisualInfo *vi = togl->VisInfo;
- Window win = Tk_WindowId(togl->TkWin);
-#endif
- int retval;
- unsigned int width = togl->Width, height = togl->Height;
-
-#if defined(TOGL_X11)
- Display *dpy = Tk_Display(togl->TkWin);
- int scrnum = Tk_ScreenNumber(togl->TkWin);
-
- if (strstr(glXQueryServerString(dpy, scrnum, GLX_VERSION), "Mesa"))
- using_mesa = True;
- else
-#endif /* TOGL_X11 */
- using_mesa = False;
- /* I don't use Pixmap do drawn into, because the code should link with Mesa
- * libraries and OpenGL libraries, and the which library we use at run time
- * should not matter, but the name of the calls differs one from another:
- * MesaGl: glXCreateGLXPixmapMESA( dpy, vi, eps_pixmap,
- * Tk_Colormap(togl->TkWin)) OpenGl: glXCreateGLXPixmap( dpy, vi,
- * eps_pixmap); instead of this I read direct from back buffer of the
- * screeen. */
-#if 0
- eps_pixmap = XCreatePixmap(dpy, win, width, height, vi->depth);
- if (using_mesa)
- eps_glxpixmap =
- glXCreateGLXPixmapMESA(dpy, vi, eps_pixmap,
- Tk_Colormap(togl->TkWin));
- else
- eps_glxpixmap = glXCreateGLXPixmap(dpy, vi, eps_pixmap);
-
- glXMakeCurrent(dpy, eps_glxpixmap, togl->GlCtx);
- user_redraw();
-#endif
- if (!togl->RgbaFlag) {
-
-#if defined(TOGL_WGL)
- /* Due to the lack of a unique inverse mapping from the frame buffer to
- * the logical palette we need a translation map from the complete
- * logical palette. */
- {
- int n, i;
- TkWinColormap *cmap = (TkWinColormap *) Tk_Colormap(togl->TkWin);
- LPPALETTEENTRY entry =
- malloc(togl->EpsMapSize * sizeof (PALETTEENTRY));
- n = GetPaletteEntries(cmap->palette, 0, togl->EpsMapSize, entry);
- for (i = 0; i < n; i++) {
- togl->EpsRedMap[i] = (GLfloat) (entry[i].peRed / 255.0);
- togl->EpsGreenMap[i] = (GLfloat) (entry[i].peGreen / 255.0);
- togl->EpsBlueMap[i] = (GLfloat) (entry[i].peBlue / 255.0);
- }
- free(entry);
- }
-#endif /* TOGL_WGL */
-
- glPixelMapfv(GL_PIXEL_MAP_I_TO_R, togl->EpsMapSize, togl->EpsRedMap);
- glPixelMapfv(GL_PIXEL_MAP_I_TO_G, togl->EpsMapSize, togl->EpsGreenMap);
- glPixelMapfv(GL_PIXEL_MAP_I_TO_B, togl->EpsMapSize, togl->EpsBlueMap);
- }
- /* user_redraw(); */
- user_redraw(togl); /* changed by GG */
- /* glReadBuffer( GL_FRONT); */
- /* by default it read GL_BACK in double buffer mode */
- glFlush();
- retval = generateEPS(filename, inColor, width, height);
-#if 0
- glXMakeCurrent(dpy, win, togl->GlCtx);
- glXDestroyGLXPixmap(dpy, eps_glxpixmap);
- XFreePixmap(dpy, eps_pixmap);
-#endif
- return retval;
-}
-
-/*
- * Full screen stereo for SGI graphics
- * Contributed by Ben Evans (Ben.Evans@anusf.anu.edu.au)
- * This code was based on SGI's /usr/share/src/OpenGL/teach/stereo
- */
-
-#if defined(__sgi)
-
-static struct stereoStateRec
-{
- Bool useSGIStereo;
- Display *currentDisplay;
- Window currentWindow;
- GLXContext currentContext;
- GLenum currentDrawBuffer;
- int currentStereoBuffer;
- Bool enabled;
- char *stereoCommand;
- char *restoreCommand;
-} stereo;
-
-/* call instead of glDrawBuffer */
-void
-Togl_OldStereoDrawBuffer(GLenum mode)
-{
- if (stereo.useSGIStereo) {
- stereo.currentDrawBuffer = mode;
- switch (mode) {
- case GL_FRONT:
- case GL_BACK:
- case GL_FRONT_AND_BACK:
- /*
- ** Simultaneous drawing to both left and right buffers isn't
- ** really possible if we don't have a stereo capable visual.
- ** For now just fall through and use the left buffer.
- */
- case GL_LEFT:
- case GL_FRONT_LEFT:
- case GL_BACK_LEFT:
- stereo.currentStereoBuffer = STEREO_BUFFER_LEFT;
- break;
- case GL_RIGHT:
- case GL_FRONT_RIGHT:
- stereo.currentStereoBuffer = STEREO_BUFFER_RIGHT;
- mode = GL_FRONT;
- break;
- case GL_BACK_RIGHT:
- stereo.currentStereoBuffer = STEREO_BUFFER_RIGHT;
- mode = GL_BACK;
- break;
- default:
- break;
- }
- if (stereo.currentDisplay && stereo.currentWindow) {
- glXWaitGL(); /* sync with GL command stream before calling X
- */
- XSGISetStereoBuffer(stereo.currentDisplay,
- stereo.currentWindow, stereo.currentStereoBuffer);
- glXWaitX(); /* sync with X command stream before calling GL
- */
- }
- }
- glDrawBuffer(mode);
-}
-
-/* call instead of glClear */
-void
-Togl_OldStereoClear(GLbitfield mask)
-{
- GLenum drawBuffer;
-
- if (stereo.useSGIStereo) {
- drawBuffer = stereo.currentDrawBuffer;
- switch (drawBuffer) {
- case GL_FRONT:
- Togl_OldStereoDrawBuffer(GL_FRONT_RIGHT);
- glClear(mask);
- Togl_OldStereoDrawBuffer(drawBuffer);
- break;
- case GL_BACK:
- Togl_OldStereoDrawBuffer(GL_BACK_RIGHT);
- glClear(mask);
- Togl_OldStereoDrawBuffer(drawBuffer);
- break;
- case GL_FRONT_AND_BACK:
- Togl_OldStereoDrawBuffer(GL_RIGHT);
- glClear(mask);
- Togl_OldStereoDrawBuffer(drawBuffer);
- break;
- case GL_LEFT:
- case GL_FRONT_LEFT:
- case GL_BACK_LEFT:
- case GL_RIGHT:
- case GL_FRONT_RIGHT:
- case GL_BACK_RIGHT:
- default:
- break;
- }
- }
- glClear(mask);
-}
-
-static void
-oldStereoMakeCurrent(Display *dpy, Window win, GLXContext ctx)
-{
-
- if (dpy && (dpy != stereo.currentDisplay)) {
- int event, error;
-
- /* Make sure new Display supports SGIStereo */
- if (XSGIStereoQueryExtension(dpy, &event, &error) == False) {
- dpy = NULL;
- }
- }
- if (dpy && win && (win != stereo.currentWindow)) {
- /* Make sure new Window supports SGIStereo */
- if (XSGIQueryStereoMode(dpy, win) == X_STEREO_UNSUPPORTED) {
- win = None;
- }
- }
- if (ctx && (ctx != stereo.currentContext)) {
- GLint drawBuffer;
-
- glGetIntegerv(GL_DRAW_BUFFER, &drawBuffer);
- Togl_OldStereoDrawBuffer((GLenum) drawBuffer);
- }
- stereo.currentDisplay = dpy;
- stereo.currentWindow = win;
- stereo.currentContext = ctx;
-}
-
-
-/* call before using stereo */
-static void
-oldStereoInit(Togl *togl, int stereoEnabled)
-{
- stereo.useSGIStereo = stereoEnabled;
- stereo.currentDisplay = NULL;
- stereo.currentWindow = None;
- stereo.currentContext = NULL;
- stereo.currentDrawBuffer = GL_NONE;
- stereo.currentStereoBuffer = STEREO_BUFFER_NONE;
- stereo.enabled = False;
-}
-
-#endif /* __sgi STEREO */
-
-
-void
-Togl_StereoFrustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
- GLfloat zNear, GLfloat zFar, GLfloat eyeDist, GLfloat eyeOffset)
-{
- GLfloat eyeShift = (eyeDist - zNear) * (eyeOffset / eyeDist);
-
- glFrustum(left + eyeShift, right + eyeShift, bottom, top, zNear, zFar);
- glTranslatef(-eyeShift, 0, 0);
-}
-
-
-#ifdef TOGL_AGL_CLASSIC
-/* needed to make shared library on Mac with CodeWarrior; should be overridden
- * by user app */
-/*
- * int main(int argc, char *argv[]) { return -1; } */
-
-/* the following code is borrowed from tkMacAppInit.c */
-
-/*
- *----------------------------------------------------------------------
- *
- * MacintoshInit --
- *
- * This procedure calls Mac specific initialization calls. Most of
- * these calls must be made as soon as possible in the startup
- * process.
- *
- * Results:
- * Returns TCL_OK if everything went fine. If it didn't the
- * application should probably fail.
- *
- * Side effects:
- * Inits the application.
- *
- *----------------------------------------------------------------------
- */
-
-int
-Togl_MacInit(void)
-{
- int i;
- long result, mask = 0x0700; /* mask = system 7.x */
-
-# if GENERATING68K && !GENERATINGCFM
- SetApplLimit(GetApplLimit() - (TK_MAC_68K_STACK_GROWTH));
-# endif
- MaxApplZone();
- for (i = 0; i < 4; i++) {
- (void) MoreMasters();
- }
-
- /*
- * Tk needs us to set the qd pointer it uses. This is needed
- * so Tk doesn't have to assume the availability of the qd global
- * variable. Which in turn allows Tk to be used in code resources.
- */
- tcl_macQdPtr = &qd;
-
- /*
- * If appearance is present, then register Tk as an Appearance client
- * This means that the mapping from non-Appearance to Appearance cdefs
- * will be done for Tk regardless of the setting in the Appearance
- * control panel.
- */
- if (TkMacHaveAppearance()) {
- RegisterAppearanceClient();
- }
-
- InitGraf(&tcl_macQdPtr->thePort);
- InitFonts();
- InitWindows();
- InitMenus();
- InitDialogs((long) NULL);
- InitCursor();
-
- /*
- * Make sure we are running on system 7 or higher
- */
- if ((NGetTrapAddress(_Gestalt, ToolTrap) ==
- NGetTrapAddress(_Unimplemented, ToolTrap))
- || (((Gestalt(gestaltSystemVersion, &result) != noErr)
- || (result < mask)))) {
- panic("Tcl/Tk requires System 7 or higher.");
- }
-
- /*
- * Make sure we have color quick draw
- * (this means we can't run on 68000 macs)
- */
- if (((Gestalt(gestaltQuickdrawVersion, &result) != noErr)
- || (result < gestalt32BitQD13))) {
- panic("Tk requires Color QuickDraw.");
- }
-
- FlushEvents(everyEvent, 0);
- SetEventMask(everyEvent);
-
- Tcl_MacSetEventProc(TkMacConvertEvent);
- return TCL_OK;
-}
-
-int
-Togl_MacSetupMainInterp(Tcl_Interp *interp)
-{
- TkMacInitAppleEvents(interp);
- TkMacInitMenus(interp);
- return TCL_OK;
-}
-
-#endif /* TOGL_AGL_CLASSIC */
diff --git a/ng/Togl-1.7/togl.h b/ng/Togl-1.7/togl.h
deleted file mode 100644
index 0135c99f..00000000
--- a/ng/Togl-1.7/togl.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/* $Id: togl.h,v 1.28 2005/10/27 07:45:48 gregcouch Exp $ */
-
-/* vi:set sw=4: */
-
-/*
- * Togl - a Tk OpenGL widget
- *
- * Copyright (C) 1996-1998 Brian Paul and Ben Bederson
- * See the LICENSE file for copyright details.
- */
-
-
-#ifndef TOGL_H
-# define TOGL_H
-
-#if !defined TOGL_X11 && !defined TOGL_WGL && !defined TOGL_AGL_CLASSIC && !defined TOGL_AGL
-# include "togl_ws.h"
-#endif
-
-# ifdef TOGL_WGL
-# define WIN32_LEAN_AND_MEAN
-# include
-# undef WIN32_LEAN_AND_MEAN
-# if defined(_MSC_VER)
-# define DllEntryPoint DllMain
-# endif
-# endif
-
-# ifdef _WIN32
-# define TOGL_EXTERN __declspec(dllexport) extern
-# else
-# define TOGL_EXTERN extern
-# endif /* _WIN32 */
-
-# ifdef TOGL_AGL_CLASSIC
-# ifndef MAC_TCL
-# define MAC_TCL 1
-# endif
-# endif
-
-# ifdef TOGL_AGL
-# ifndef MAC_OSX_TCL
-# define MAC_OSX_TCL 1
-# endif
-# ifndef MAC_OSX_TK
-# define MAC_OSX_TK 1
-# endif
-# endif
-
-# include
-# include
-# if defined(TOGL_AGL) || defined(TOGL_AGL_CLASSIC)
-# include
-# else
-# include
-# endif
-
-# ifdef __sgi
-# include
-# include
-# endif
-
-# ifndef CONST84
-# define CONST84
-# endif
-
-# ifndef NULL
-# define NULL 0
-# endif
-
-# ifndef TOGL_USE_FONTS
-# define TOGL_USE_FONTS 1 /* needed for demos */
-# endif
-
-# ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-# endif
-
-# define TOGL_VERSION "1.7"
-# define TOGL_MAJOR_VERSION 1
-# define TOGL_MINOR_VERSION 7
-
-/*
- * "Standard" fonts which can be specified to Togl_LoadBitmapFont()
- */
-# define TOGL_BITMAP_8_BY_13 ((char *) 1)
-# define TOGL_BITMAP_9_BY_15 ((char *) 2)
-# define TOGL_BITMAP_TIMES_ROMAN_10 ((char *) 3)
-# define TOGL_BITMAP_TIMES_ROMAN_24 ((char *) 4)
-# define TOGL_BITMAP_HELVETICA_10 ((char *) 5)
-# define TOGL_BITMAP_HELVETICA_12 ((char *) 6)
-# define TOGL_BITMAP_HELVETICA_18 ((char *) 7)
-
-/*
- * Normal and overlay plane constants
- */
-# define TOGL_NORMAL 1
-# define TOGL_OVERLAY 2
-
-struct Togl;
-typedef struct Togl Togl;
-
-typedef void (Togl_Callback) (Togl *togl);
-typedef int (Togl_CmdProc) (Togl *togl, int argc, CONST84 char *argv[]);
-
-TOGL_EXTERN int Togl_Init(Tcl_Interp *interp);
-
-/*
- * Default/initial callback setup functions
- */
-
-TOGL_EXTERN void Togl_CreateFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_DisplayFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_ReshapeFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_DestroyFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_TimerFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_ResetDefaultCallbacks(void);
-
-/*
- * Change callbacks for existing widget
- */
-
-TOGL_EXTERN void Togl_SetCreateFunc(Togl *togl, Togl_Callback *proc);
-TOGL_EXTERN void Togl_SetDisplayFunc(Togl *togl, Togl_Callback *proc);
-TOGL_EXTERN void Togl_SetReshapeFunc(Togl *togl, Togl_Callback *proc);
-TOGL_EXTERN void Togl_SetDestroyFunc(Togl *togl, Togl_Callback *proc);
-TOGL_EXTERN void Togl_SetTimerFunc(Togl *togl, Togl_Callback *proc);
-
-/*
- * Miscellaneous
- */
-
-TOGL_EXTERN int Togl_Configure(Tcl_Interp *interp, Togl *togl,
- int argc, const char *argv[], int flags);
-TOGL_EXTERN void Togl_MakeCurrent(const Togl *togl);
-TOGL_EXTERN void Togl_CreateCommand(char *cmd_name, Togl_CmdProc *cmd_proc);
-TOGL_EXTERN void Togl_PostRedisplay(Togl *togl);
-TOGL_EXTERN void Togl_SwapBuffers(const Togl *togl);
-
-/*
- * Query functions
- */
-
-TOGL_EXTERN const char *Togl_Ident(const Togl *togl);
-TOGL_EXTERN int Togl_Width(const Togl *togl);
-TOGL_EXTERN int Togl_Height(const Togl *togl);
-TOGL_EXTERN Tcl_Interp *Togl_Interp(const Togl *togl);
-TOGL_EXTERN Tk_Window Togl_TkWin(const Togl *togl);
-
-/*
- * Color Index mode
- */
-
-TOGL_EXTERN unsigned long Togl_AllocColor(const Togl *togl, float red,
- float green, float blue);
-TOGL_EXTERN void Togl_FreeColor(const Togl *togl, unsigned long index);
-TOGL_EXTERN void Togl_SetColor(const Togl *togl, unsigned long index,
- float red, float green, float blue);
-
-# if TOGL_USE_FONTS == 1
-/*
- * Bitmap fonts
- */
-
-TOGL_EXTERN GLuint Togl_LoadBitmapFont(const Togl *togl, const char *fontname);
-TOGL_EXTERN void Togl_UnloadBitmapFont(const Togl *togl, GLuint fontbase);
-
-# endif
-/*
- * Overlay functions
- */
-
-TOGL_EXTERN void Togl_UseLayer(Togl *togl, int layer);
-TOGL_EXTERN void Togl_ShowOverlay(Togl *togl);
-TOGL_EXTERN void Togl_HideOverlay(Togl *togl);
-TOGL_EXTERN void Togl_PostOverlayRedisplay(Togl *togl);
-TOGL_EXTERN void Togl_OverlayDisplayFunc(Togl_Callback *proc);
-TOGL_EXTERN int Togl_ExistsOverlay(const Togl *togl);
-TOGL_EXTERN int Togl_GetOverlayTransparentValue(const Togl *togl);
-TOGL_EXTERN int Togl_IsMappedOverlay(const Togl *togl);
-TOGL_EXTERN unsigned long Togl_AllocColorOverlay(const Togl *togl,
- float red, float green, float blue);
-TOGL_EXTERN void Togl_FreeColorOverlay(const Togl *togl, unsigned long index);
-
-/*
- * User client data
- */
-
-TOGL_EXTERN void Togl_ClientData(ClientData clientData);
-TOGL_EXTERN ClientData Togl_GetClientData(const Togl *togl);
-TOGL_EXTERN void Togl_SetClientData(Togl *togl, ClientData clientData);
-
-# ifdef TOGL_X11
-/*
- * X11-only commands.
- * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES)
- */
-
-TOGL_EXTERN Display *Togl_Display(const Togl *togl);
-TOGL_EXTERN Screen *Togl_Screen(const Togl *togl);
-TOGL_EXTERN int Togl_ScreenNumber(const Togl *togl);
-TOGL_EXTERN Colormap Togl_Colormap(const Togl *togl);
-
-# endif
-# ifdef __sgi
-/*
- * SGI stereo-only commands.
- * Contributed by Ben Evans (Ben.Evans@anusf.anu.edu.au)
- */
-
-TOGL_EXTERN void Togl_OldStereoDrawBuffer(GLenum mode);
-TOGL_EXTERN void Togl_OldStereoClear(GLbitfield mask);
-# endif
-
-TOGL_EXTERN void Togl_StereoFrustum(GLfloat left, GLfloat right, GLfloat bottom,
- GLfloat top, GLfloat near, GLfloat far, GLfloat eyeDist,
- GLfloat eyeOffset);
-
-/*
- * Generate EPS file.
- * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES)
- */
-
-TOGL_EXTERN int Togl_DumpToEpsFile(const Togl *togl, const char *filename,
- int inColor, void (*user_redraw) (const Togl *));
-
-# ifdef TOGL_AGL_CLASSIC
-/*
- * Mac-specific setup functions
- */
-extern int Togl_MacInit(void);
-extern int Togl_MacSetupMainInterp(Tcl_Interp *interp);
-# endif
-
-# ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-# endif
-
-
-#endif
diff --git a/ng/Togl-1.7/togl_ws.h.in b/ng/Togl-1.7/togl_ws.h.in
deleted file mode 100644
index 3a01a9c3..00000000
--- a/ng/Togl-1.7/togl_ws.h.in
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef TOGL_WS_H
-# define TOGL_WS_H
-
-/* define windowing system togl is compiled with */
-# define @TOGL_WINDOWINGSYSTEM@
-
-#endif
diff --git a/ng/Togl-1.7/tree2.rgba b/ng/Togl-1.7/tree2.rgba
deleted file mode 100644
index 67b02799..00000000
Binary files a/ng/Togl-1.7/tree2.rgba and /dev/null differ
diff --git a/ng/drawing.tcl b/ng/drawing.tcl
index 3bc7c652..14d5d33b 100644
--- a/ng/drawing.tcl
+++ b/ng/drawing.tcl
@@ -27,14 +27,6 @@ if { [Ng_GetToglVersion] == 2 } {
# puts "have Togl 2.1"
set toglok 1
}
-} {
- # Togl 1.7
- if {[catch {togl .ndraw -width 400 -height 300 -rgba true -double true -depth true -privatecmap false -stereo false -indirect false }] } {
- puts "no OpenGL"
- } {
- # puts "have Togl 1.7"
- set toglok 1
- }
}
if { $toglok == 1} {
diff --git a/ng/togl_1_7.h b/ng/togl_1_7.h
deleted file mode 100644
index 0135c99f..00000000
--- a/ng/togl_1_7.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/* $Id: togl.h,v 1.28 2005/10/27 07:45:48 gregcouch Exp $ */
-
-/* vi:set sw=4: */
-
-/*
- * Togl - a Tk OpenGL widget
- *
- * Copyright (C) 1996-1998 Brian Paul and Ben Bederson
- * See the LICENSE file for copyright details.
- */
-
-
-#ifndef TOGL_H
-# define TOGL_H
-
-#if !defined TOGL_X11 && !defined TOGL_WGL && !defined TOGL_AGL_CLASSIC && !defined TOGL_AGL
-# include "togl_ws.h"
-#endif
-
-# ifdef TOGL_WGL
-# define WIN32_LEAN_AND_MEAN
-# include
-# undef WIN32_LEAN_AND_MEAN
-# if defined(_MSC_VER)
-# define DllEntryPoint DllMain
-# endif
-# endif
-
-# ifdef _WIN32
-# define TOGL_EXTERN __declspec(dllexport) extern
-# else
-# define TOGL_EXTERN extern
-# endif /* _WIN32 */
-
-# ifdef TOGL_AGL_CLASSIC
-# ifndef MAC_TCL
-# define MAC_TCL 1
-# endif
-# endif
-
-# ifdef TOGL_AGL
-# ifndef MAC_OSX_TCL
-# define MAC_OSX_TCL 1
-# endif
-# ifndef MAC_OSX_TK
-# define MAC_OSX_TK 1
-# endif
-# endif
-
-# include
-# include
-# if defined(TOGL_AGL) || defined(TOGL_AGL_CLASSIC)
-# include
-# else
-# include
-# endif
-
-# ifdef __sgi
-# include
-# include
-# endif
-
-# ifndef CONST84
-# define CONST84
-# endif
-
-# ifndef NULL
-# define NULL 0
-# endif
-
-# ifndef TOGL_USE_FONTS
-# define TOGL_USE_FONTS 1 /* needed for demos */
-# endif
-
-# ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-# endif
-
-# define TOGL_VERSION "1.7"
-# define TOGL_MAJOR_VERSION 1
-# define TOGL_MINOR_VERSION 7
-
-/*
- * "Standard" fonts which can be specified to Togl_LoadBitmapFont()
- */
-# define TOGL_BITMAP_8_BY_13 ((char *) 1)
-# define TOGL_BITMAP_9_BY_15 ((char *) 2)
-# define TOGL_BITMAP_TIMES_ROMAN_10 ((char *) 3)
-# define TOGL_BITMAP_TIMES_ROMAN_24 ((char *) 4)
-# define TOGL_BITMAP_HELVETICA_10 ((char *) 5)
-# define TOGL_BITMAP_HELVETICA_12 ((char *) 6)
-# define TOGL_BITMAP_HELVETICA_18 ((char *) 7)
-
-/*
- * Normal and overlay plane constants
- */
-# define TOGL_NORMAL 1
-# define TOGL_OVERLAY 2
-
-struct Togl;
-typedef struct Togl Togl;
-
-typedef void (Togl_Callback) (Togl *togl);
-typedef int (Togl_CmdProc) (Togl *togl, int argc, CONST84 char *argv[]);
-
-TOGL_EXTERN int Togl_Init(Tcl_Interp *interp);
-
-/*
- * Default/initial callback setup functions
- */
-
-TOGL_EXTERN void Togl_CreateFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_DisplayFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_ReshapeFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_DestroyFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_TimerFunc(Togl_Callback *proc);
-TOGL_EXTERN void Togl_ResetDefaultCallbacks(void);
-
-/*
- * Change callbacks for existing widget
- */
-
-TOGL_EXTERN void Togl_SetCreateFunc(Togl *togl, Togl_Callback *proc);
-TOGL_EXTERN void Togl_SetDisplayFunc(Togl *togl, Togl_Callback *proc);
-TOGL_EXTERN void Togl_SetReshapeFunc(Togl *togl, Togl_Callback *proc);
-TOGL_EXTERN void Togl_SetDestroyFunc(Togl *togl, Togl_Callback *proc);
-TOGL_EXTERN void Togl_SetTimerFunc(Togl *togl, Togl_Callback *proc);
-
-/*
- * Miscellaneous
- */
-
-TOGL_EXTERN int Togl_Configure(Tcl_Interp *interp, Togl *togl,
- int argc, const char *argv[], int flags);
-TOGL_EXTERN void Togl_MakeCurrent(const Togl *togl);
-TOGL_EXTERN void Togl_CreateCommand(char *cmd_name, Togl_CmdProc *cmd_proc);
-TOGL_EXTERN void Togl_PostRedisplay(Togl *togl);
-TOGL_EXTERN void Togl_SwapBuffers(const Togl *togl);
-
-/*
- * Query functions
- */
-
-TOGL_EXTERN const char *Togl_Ident(const Togl *togl);
-TOGL_EXTERN int Togl_Width(const Togl *togl);
-TOGL_EXTERN int Togl_Height(const Togl *togl);
-TOGL_EXTERN Tcl_Interp *Togl_Interp(const Togl *togl);
-TOGL_EXTERN Tk_Window Togl_TkWin(const Togl *togl);
-
-/*
- * Color Index mode
- */
-
-TOGL_EXTERN unsigned long Togl_AllocColor(const Togl *togl, float red,
- float green, float blue);
-TOGL_EXTERN void Togl_FreeColor(const Togl *togl, unsigned long index);
-TOGL_EXTERN void Togl_SetColor(const Togl *togl, unsigned long index,
- float red, float green, float blue);
-
-# if TOGL_USE_FONTS == 1
-/*
- * Bitmap fonts
- */
-
-TOGL_EXTERN GLuint Togl_LoadBitmapFont(const Togl *togl, const char *fontname);
-TOGL_EXTERN void Togl_UnloadBitmapFont(const Togl *togl, GLuint fontbase);
-
-# endif
-/*
- * Overlay functions
- */
-
-TOGL_EXTERN void Togl_UseLayer(Togl *togl, int layer);
-TOGL_EXTERN void Togl_ShowOverlay(Togl *togl);
-TOGL_EXTERN void Togl_HideOverlay(Togl *togl);
-TOGL_EXTERN void Togl_PostOverlayRedisplay(Togl *togl);
-TOGL_EXTERN void Togl_OverlayDisplayFunc(Togl_Callback *proc);
-TOGL_EXTERN int Togl_ExistsOverlay(const Togl *togl);
-TOGL_EXTERN int Togl_GetOverlayTransparentValue(const Togl *togl);
-TOGL_EXTERN int Togl_IsMappedOverlay(const Togl *togl);
-TOGL_EXTERN unsigned long Togl_AllocColorOverlay(const Togl *togl,
- float red, float green, float blue);
-TOGL_EXTERN void Togl_FreeColorOverlay(const Togl *togl, unsigned long index);
-
-/*
- * User client data
- */
-
-TOGL_EXTERN void Togl_ClientData(ClientData clientData);
-TOGL_EXTERN ClientData Togl_GetClientData(const Togl *togl);
-TOGL_EXTERN void Togl_SetClientData(Togl *togl, ClientData clientData);
-
-# ifdef TOGL_X11
-/*
- * X11-only commands.
- * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES)
- */
-
-TOGL_EXTERN Display *Togl_Display(const Togl *togl);
-TOGL_EXTERN Screen *Togl_Screen(const Togl *togl);
-TOGL_EXTERN int Togl_ScreenNumber(const Togl *togl);
-TOGL_EXTERN Colormap Togl_Colormap(const Togl *togl);
-
-# endif
-# ifdef __sgi
-/*
- * SGI stereo-only commands.
- * Contributed by Ben Evans (Ben.Evans@anusf.anu.edu.au)
- */
-
-TOGL_EXTERN void Togl_OldStereoDrawBuffer(GLenum mode);
-TOGL_EXTERN void Togl_OldStereoClear(GLbitfield mask);
-# endif
-
-TOGL_EXTERN void Togl_StereoFrustum(GLfloat left, GLfloat right, GLfloat bottom,
- GLfloat top, GLfloat near, GLfloat far, GLfloat eyeDist,
- GLfloat eyeOffset);
-
-/*
- * Generate EPS file.
- * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES)
- */
-
-TOGL_EXTERN int Togl_DumpToEpsFile(const Togl *togl, const char *filename,
- int inColor, void (*user_redraw) (const Togl *));
-
-# ifdef TOGL_AGL_CLASSIC
-/*
- * Mac-specific setup functions
- */
-extern int Togl_MacInit(void);
-extern int Togl_MacSetupMainInterp(Tcl_Interp *interp);
-# endif
-
-# ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-# endif
-
-
-#endif