Commit a08cb76c authored by Dave Love's avatar Dave Love
Browse files


parent 8cc3881f
This diff is collapsed.
/**/# Imakefile file for liblw.a, Copyright (c) 1992-1993 Lucid, Inc.
* If you have Motif and want to provide support for Motif widgets in lwlib,
* then define USE_MOTIF.
* If you have OpenLook and want to provide support for OpenLook widgets in
* lwlib, then define USE_OLIT.
* Otherwise, define USE_LUCID to use Lucid's own Motif-lookalike widgets,
* which are included in this directory.
* You cannot define USE_MOTIF and USE_OLIT at the same time, but USE_LUCID
* may be defined along with either of the other two.
* The OLIT menubar is slow, and possibly buggy. We recommend against using
* it unless you'd like to try to improve it (which we encourage.)
* The Lucid menubar is much faster than the Motif menubar, but is missing
* a few features (most notably stay-up menus and keyboard traversal.) But
* since it has the Motif look-and-feel, we recommend using it even if you
* have Motif.
* Currently, only the Motif widgets provide support for dialog boxes. If
* you don't have Motif, you will not be able to pop up dialog boxes from
* emacs. If you define both USE_LUCID and USE_MOTIF, then the menus will
* be implemented with Lucid widgets, and the dialog boxes will be
* implemented with Motif widgets.
* It shouldn't take much work to add support for non-Motif dialog boxes;
* all that one need do is add code that implements Athena versions of the
* xm_create_dialog(), xm_update_one_widget(), and xm_update_one_value()
* routines in lwlib-Xm.c. If you do this, please send us the code.
* If you have your X11 source tree online, then you should define
* INCLUDE_EXTENSIONS to cause this library to contain some useful functions
* which Xt should provide but doesn't. You can only do this if you have
* the source tree online, because these functions require access to internal
* Xt data structures that are not defined in the exported header files.
* If you define INCLUDE_EXTENSIONS, then the variable $TOP must point at the
* root of the X11 source tree.
* To build a "shared" version of lwlib as well, define BUILD_SHARED_LIB.
* If INCLUDE_EXTENSIONS is defined, and you want to link with a dynamic
* version of Xt, it may be necessary to build a shared version of lwlib as
* well, as the X libraries sometimes put *different code* in the dynamic
* and shared versions of their libraries, for some reason I don't understand.
* Remember, if you build and install a shared version of lwlib, you may need
* to run ldconfig(8) before anything will realize that it exists.
* To compile with support for Lucid's Energize Programming System, you must
#define USE_LUCID
/* #define USE_MOTIF */
/* #define USE_OLIT */
/* #define BUILD_SHARED_LIB */
/* #define ENERGIZE */
#ifdef INCLUDE_EXTENSIONS /* this is where it is at our site */
TOP = /$(WHICH_X)/mit
* You shouldn't need to edit anything below this point.
# if !defined(USE_LUCID) || !defined(USE_MOTIF) || !defined(INCLUDE_EXTENSIONS)
ERROR! Energize requires Lucid widgets, Motif, and X Extensions.
# endif
#endif /* ENERGIZE */
#if (ProjectX == 4)
STD_DEFINES = LibraryDefines
CDEBUGFLAGS = LibraryCDebugFlags
WHICH_X = x11r4
#define SpecialLibObjectRule SpecialObjectRule
#else /* !4 */
#if (ProjectX == 5)
# define DoSharedLib YES
# define DoNormalLib YES
#include <Library.tmpl>
WHICH_X = x11r5
#else /* !5 */
EXT_DEFINES = "ERROR! Imakefile was unable to determine whether this is X11r4 or X11r5."
#endif /* !5 */
#endif /* !4 */
LUCID_SRCS = lwlib-Xlw.c xlwmenu.c
LUCID_OBJS = lwlib-Xlw.o xlwmenu.o
MOTIF_SRCS = lwlib-Xm.c
MOTIF_OBJS = lwlib-Xm.o
OLIT_SRCS = lwlib-Xol.c lwlib-Xol-mb.c
OLIT_OBJS = lwlib-Xol.o lwlib-Xol-mb.o
EXT_SRCS = dispatch.c xrdb-cpp.c xrdb.c
EXT_OBJS = dispatch.o xrdb-cpp.o xrdb.o
#if (defined(USE_MOTIF) && defined(USE_OLIT))
TOOLKIT_DEFINES = "ERROR! You cannot define both USE_MOTIF and USE_OLIT at the same time (in Imakefile)."
# if (defined(USE_MOTIF) && defined(USE_LUCID))
# else
# if (defined(USE_OLIT) && defined(USE_LUCID))
# else
# if defined(USE_OLIT)
# else
# if defined(USE_MOTIF)
# else
# if defined(USE_LUCID)
# else
TOOLKIT_DEFINES = "ERROR! At least one of USE_MOTIF, USE_LUCID or USE_OLIT must be defined in Imakefile."
# endif
# endif
# endif
# endif
# endif
# ifndef USE_MOTIF
EZ_OBJS = "ERROR! ENERGIZE requires USE_MOTIF to be defined in Imakefile."
# else
EZ_OBJS = energize/blpsheet.o energize/build.o energize/classbr_ps.o \
energize/ctreebr_ps.o energize/debuggerps.o \
energize/editmode.o energize/leb_psheet.o \
energize/projectdisp.o energize/projectps.o \
energize/search.o energize/target.o
# endif
SRCS = lwlib.c $(TOOLKIT_SRCS) lwlib-utils.c $(EXT_SRCS)
OBJS = lwlib.o $(TOOLKIT_OBJS) lwlib-utils.o $(EXT_OBJS) $(EZ_OBJS)
LIBNAME = liblw.a
#if defined(ENERGIZE) && defined(BUILD_SHARED_LIB)
@if [ ! -d shared ]; then mkdir shared; else exit 0; fi
@if [ ! -d energize/shared ]; then mkdir energize/shared; \
else exit 0; fi
@if [ ! -h shared/energize ]; \
then cd shared ; ln -s ../energize/shared energize ; \
else exit 0; fi
$(RM) shared/energize
# if (ProjectX == 4)
SharedLibraryObjectRule ()
# else /* X != 4 */
LibraryObjectRule ()
# endif /* X != 4 */
#else /* !BUILD_SHARED_LIB */
NormalLibraryObjectRule ()
#endif /* !BUILD_SHARED_LIB */
NormalLibraryTarget (lw,$(OBJS))
MakefileSubdirs (energize)
DependTarget ()
-mkdir energize
-(cd energize ; sh -c "ln -s ../$(VPATH)/energize/* .")
/* #### we should automatically edit BUILD_SHARED_LIB into/out of the energize
Imakefile, since that's the only thing down there that changes */
energize/Makefile: energize/Imakefile Imakefile
$(MAKE) $(MFLAGS) Makefiles
$(RM) energize/Makefile
$(EZ_OBJS): energize/Makefile
${RM} $@ ; cd energize ; $(MAKE) $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)"
cd energize ; $(MAKE) $(MFLAGS) clean
#if defined(BUILD_SHARED_LIB) && (ProjectX == 4)
# define LWObjectRule SpecialSharedObjectRule
# define LWObjectRule SpecialLibObjectRule
LWObjectRule (lwlib.o, lwlib.c, $(TOOLKIT_DEFINES))
LWObjectRule (dispatch.o, dispatch.c, $(EXT_FLAGS))
LWObjectRule (xrdb-cpp.o, xrdb-cpp.c, $(EXT_FLAGS) "$(CPPDEFS)")
LWObjectRule (xrdb.o, xrdb.c, $(EXT_FLAGS))
LWObjectRule (lwlib-Xm.o, lwlib-Xm.c, $(ENERGIZEP))
lwlib-utils.o: lwlib-utils.h
lwlib.o: lwlib.h lwlib-internal.h
lwlib-Xlw.o: lwlib.h lwlib-internal.h
lwlib-Xm.o: lwlib.h lwlib-internal.h lwlib-utils.h
lwlib-Xol.o: lwlib.h lwlib-internal.h
lwlib-Xol-mb.o: lwlib-Xol-mb.h lwlib-Xol-mbP.h
This subdirectory contains the lwlib library which provides a uniform
interface to a few different X toolkits. The library was written by Lucid.
This version has changes in the makefile to fit in with Emacs's configure
script, and some source files have been renamed to fit in 14 characters.
Widget XtWidgetToDispatchTo (XEvent *);
/* A general interface to the widgets of different toolkits.
Copyright (C) 1992, 1993 Lucid, Inc.
This file is part of the Lucid Widget Library.
The Lucid Widget Library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
The Lucid Widget Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This code reads a resource database file and filters it through cpp
with the same set of preprocessor defines that `xrdb' uses.
Call lwlib_xrdb_initialize(dpy) once, and then call the function
lwlib_GetFileDatabase() instead of XrmGetFileDatabase(),
and lwlib_CombineFileDatabase() instead of XrmCombineFileDatabase().
#ifndef __STDC_EXTENDED__
#define __STDC_EXTENDED__
#include <stdio.h>
#include <ctype.h>
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Intrinsic.h>
#include <X11/Xmu/SysUtil.h>
#include <sys/stat.h>
extern char *index ();
static int
file_p (path)
char *path;
struct stat status;
return (access (path, R_OK) == 0 /* exists and is readable */
&& stat (path, &status) == 0 /* get the status */
&& (status.st_mode & S_IFDIR) == 0); /* not a directory */
#define CPP_PROGRAM "/lib/cpp"
static char cpp_string [BUFSIZ];
static char *cpp_file = 0;
#define Resolution(pixels, mm) ((((pixels) * 100000 / (mm)) + 50) / 100)
lwlib_xrdb_initialize (display)
Display *display;
Screen *screen;
Visual *visual;
char server [255];
char *colon, *s;
#define Push(str) \
(strncpy (s, str, sizeof(str)), s += (sizeof(str)-1))
#define Print(str, thing) \
(sprintf (s, str, thing), s = index (s, 0))
s = cpp_string;
Push (" -DCLIENTHOST=");
XmuGetHostname (s, sizeof (cpp_string) - (s - cpp_string));
s = index (s, 0);
Push (" -DSERVERHOST=");
strcpy (s, XDisplayName (DisplayString (display)));
colon = index (s, ':');
if (colon == s)
XmuGetHostname (s, sizeof (cpp_string) - (s - cpp_string));
s = index (s, 0);
else if (colon)
s = colon;
s = index (s, 0);
Print (" -DVERSION=%d", ProtocolVersion(display));
Print (" -DREVISION=%d", ProtocolRevision(display));
Print (" -DVENDOR=\"%s\"", ServerVendor(display));
Print (" -DRELEASE=%d", VendorRelease(display));
screen = DefaultScreenOfDisplay(display);
visual = DefaultVisualOfScreen(screen);
Print (" -DWIDTH=%d", screen->width);
Print (" -DHEIGHT=%d", screen->height);
Print (" -DX_RESOLUTION=%d", Resolution(screen->width,screen->mwidth));
Print (" -DY_RESOLUTION=%d", Resolution(screen->height,screen->mheight));
Print (" -DPLANES=%d", DisplayPlanes(display, DefaultScreen(display)));
Print (" -DBITS_PER_RGB=%d", visual->bits_per_rgb);
switch(visual->class) {
case StaticGray: Print (" -DCLASS=%s", "StaticGray"); break;
case GrayScale: Print (" -DCLASS=%s", "GrayScale"); break;
case StaticColor: Print (" -DCLASS=%s", "StaticColor");
Print (" -DCOLOR", 0); break;
case PseudoColor: Print (" -DCLASS=%s", "PseudoColor");
Print (" -DCOLOR", 0); break;
case TrueColor: Print (" -DCLASS=%s", "TrueColor");
Print (" -DCOLOR", 0); break;
case DirectColor: Print (" -DCLASS=%s", "DirectColor");
Print (" -DCOLOR", 0); break;
fprintf (stderr, "unexpected visual class=%d\n", visual->class);
exit (-1);
*s++ = ' ';
*s = 0;
cpp_file = s;
lwlib_GetFileDatabase (path)
char *path;
XrmDatabase db = 0;
char line [BUFSIZ];
char *s;
FILE *file;
if (! file_p (path))
return 0;
strcpy (cpp_file, path);
if (! (file = popen (cpp_string, "r")))
fprintf (stderr,
"couldn't execute %s; resource file %s file not munged.\n",
return XrmGetFileDatabase (path);
while (s = fgets (line, sizeof (line), file))
char ch, *tail;
if (*s == '!') continue;
for (; ((ch = *s) != '\n') && isspace(ch); s++);
if ((ch == '\0') || (ch == '\n') || (ch == '#')) continue;
tail = s + strlen (s);
if (tail - s < 3) continue; /* this would be syntactically incorrect */
while (*(tail-1) == '\n' && /* handle \ at end of line */
*(tail-2) == '\\')
if (! fgets (tail, sizeof (line) - (tail - line), file))
tail += strlen (tail);
XrmPutLineResource (&db, s);
pclose (file);
return db;
#ifdef THIS_IS_X11R5
lwlib_CombineFileDatabase (path, target_db, override)
char *path;
XrmDatabase *target_db;
Bool override;
XrmDatabase source_db = lwlib_GetFileDatabase (path);
if (! source_db)
return (! file_p (path));
XrmCombineDatabase (source_db, target_db, override);
return 1;
#endif /* r5 */
/* This file overrides the R4 or R5 mit/lib/Xt/Initialize.c, except that
the functions lwlib_GetFileDatabase(), lwlib_CombineFileDatabase(), and
lwlib_xrdb_initialize() are called. By doing this silly cpp hack, we
avoid version skew problems.
#include <X11/Xlib.h>
#include <X11/cursorfont.h>
#include <X11/Xutil.h>
#ifdef XlibSpecificationRelease
#if XlibSpecificationRelease >= 5
#define HAVE_X11R5
extern struct _XrmHashBucketRec *lwlib_GetFileDatabase ();
extern void lwlib_xrdb_initialize ();
/* Replace all calls to XrmGetFileDatabase() with lwlib_GetFileDatabase(),
calls to XrmCombineFileDatabase() with lwlib_CombineFileDatabase(), and
rename the defined _XtDisplayInitialize() function.
#define XrmGetFileDatabase lwlib_GetFileDatabase
#define XrmCombineFileDatabase lwlib_CombineFileDatabase
#define _XtDisplayInitialize _orig_XtDisplayInitialize
/* Suck in the original code. Don't change this: see comments in Imakefile. */
#include "Initialize.c"
#undef XrmGetFileDatabase
#undef XrmCombineFileDatabase
#undef _XtDisplayInitialize
/* Now provide a definition of _XtDisplayInitialize() which invokes the
original code after calling our initialization hook. Note that the R4
and R5 versions of _XtDisplayInitialize() take different arguments.
#ifndef HAVE_X11R5
void _XtDisplayInitialize(dpy, pd, name, class, urlist, num_urs, argc, argv)
Display *dpy;
XtPerDisplay pd;
String name, class;
XrmOptionDescRec *urlist;
Cardinal num_urs;
Cardinal *argc;
char *argv[];
_orig_XtDisplayInitialize(dpy, pd, name, class, urlist, num_urs, argc, argv);
#else /* HAVE_X11R5 */
void _XtDisplayInitialize(dpy, pd, name, urlist, num_urs, argc, argv)
Display *dpy;
XtPerDisplay pd;
String name;
XrmOptionDescRec *urlist;
Cardinal num_urs;
int *argc;
char **argv;
_orig_XtDisplayInitialize(dpy, pd, name, urlist, num_urs, argc, argv);
#endif /* HAVE_X11R5 */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment