summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Jennings <mej@kainx.org>2000-09-01 05:46:04 +0000
committerMichael Jennings <mej@kainx.org>2000-09-01 05:46:04 +0000
commitcdbb53b4bf6c7cb641777b5e7561a62df3e23b5f (patch)
treed9e8b2cc7aa6bd8c64424690ca3522b87c9cb8dd
parentd9812953687ef5c9e622811d63e0b957d3a6bfa6 (diff)
downloadeterm-cdbb53b4bf6c7cb641777b5e7561a62df3e23b5f.tar.gz
Thu Aug 31 23:02:10 PDT 2000 Michael Jennings <mej@eterm.org>
Still more big changes. Working on adding pixmap and GC tracking to libmej using the existing allocation tracking routines. SVN revision: 3291
-rw-r--r--ChangeLog6
-rw-r--r--acconfig.h1
-rw-r--r--configure.in145
-rw-r--r--libmej/Makefile.am2
-rw-r--r--libmej/libmej.h54
-rw-r--r--libmej/mem.c169
-rw-r--r--src/Makefile.am8
-rw-r--r--src/buttons.c2
-rw-r--r--src/command.c17
-rw-r--r--src/draw.c12
-rw-r--r--src/gdb.scr2
-rw-r--r--src/menus.c6
-rw-r--r--src/misc.c20
-rw-r--r--src/misc.h2
-rw-r--r--src/pixmap.c129
-rw-r--r--src/pixmap.h41
-rw-r--r--src/scrollbar.c10
-rw-r--r--src/term.c4
-rw-r--r--src/windows.c2
-rw-r--r--utils/Makefile.am4
20 files changed, 352 insertions, 284 deletions
diff --git a/ChangeLog b/ChangeLog
index 5ac2d00..c9f8d07 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3846,3 +3846,9 @@ Thu Aug 31 11:22:30 PDT 2000 Michael Jennings <mej@eterm.org>
Crap. That was not supposed to be committed.
-------------------------------------------------------------------------------
+Thu Aug 31 23:02:10 PDT 2000 Michael Jennings <mej@eterm.org>
+
+ Still more big changes. Working on adding pixmap and GC tracking to
+ libmej using the existing allocation tracking routines.
+
+-------------------------------------------------------------------------------
diff --git a/acconfig.h b/acconfig.h
index 130fd33..d7ce8e0 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -280,6 +280,7 @@
#undef NO_STACK_TRACE
#undef DBX
#undef GDB
+#undef GDB_CMD_FILE
#undef PSTACK
/* *BSD utmp stuff */
diff --git a/configure.in b/configure.in
index 6d9466c..f1ce45e 100644
--- a/configure.in
+++ b/configure.in
@@ -117,11 +117,19 @@ AC_C_CONST
AC_C_INLINE
AC_PATH_XTRA
-if test "$ac_cv_lib_socket_connect" = "yes" ; then
- SUBLIBS="-lsocket"
+if test ! -z "$X_CFLAGS"; then
+ if test -z "$CPPFLAGS"; then
+ CPPFLAGS="$X_CFLAGS"
+ else
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ fi
fi
-if test "$ac_cv_lib_nsl_gethostbyname" = "yes" ; then
- SUBLIBS="$SUBLIBS -lnsl"
+if test ! -z "$X_LIBS"; then
+ if test -z "$LDFLAGS"; then
+ LDFLAGS="$X_LIBS"
+ else
+ LDFLAGS="$LDFLAGS $X_LIBS"
+ fi
fi
dnl# Checks for header files.
@@ -146,20 +154,12 @@ seteuid memmove putenv strsep setresuid setresgid \
memmem usleep snprintf strcasestr strcasechr \
strcasepbrk strrev)
dps_snprintf_oflow()
-AC_CHECK_LIB(m, pow, LIBS="$LIBS -lm", , $SUBLIBS)
-
-dnl# Check for the need for -lutil on BSD systems
-AC_CHECK_FUNC(login,
- AC_DEFINE(HAVE_LOGIN)
-, AC_CHECK_LIB(util, login, LIBS="$LIBS -lutil" ;
- AC_DEFINE(HAVE_LOGIN)
-))
-AC_CHECK_FUNC(logout,
- AC_DEFINE(HAVE_LOGOUT)
-, AC_CHECK_LIB(util, logout, LIBS="$LIBS -lutil" ;
- AC_DEFINE(HAVE_LOGOUT)
-))
-AC_CHECK_FUNC(getpwuid, , AC_CHECK_LIB(sun, getpwuid, LIBS="$LIBS -lsun"))
+AC_CHECK_LIB(m, pow)
+
+dnl# Portability checks for various functions
+AC_SEARCH_LIBS(login, bsd ucb util)
+AC_SEARCH_LIBS(logout, util)
+AC_SEARCH_LIBS(getpwuid, sun)
dnl#
dnl# Utility stuff
@@ -238,6 +238,37 @@ AC_ARG_WITH(pty-group,
)
dnl#
+dnl# X LIBRARIES
+dnl#
+AC_CHECK_LIB(X11, XOpenDisplay, , [
+echo "ERROR: You need libX11 to build Eterm. Verify that you have libX11.a or";
+echo " libX11.so installed and that it is located in the X libraries";
+echo " directory shown above. If it is in a different directory, try using";
+echo " the --x-libraries parameter to configure.";
+ AC_MSG_ERROR([Fatal: libX11 not found.])])
+AC_CHECK_LIB(Xext, XextAddDisplay, , [
+echo "ERROR: You need libXext to build Eterm. Verify that you have libXext.a or";
+echo " libXext.so installed and that it is located in the X libraries";
+echo " directory shown above. If it is in a different directory, try using";
+echo " the --x-libraries parameter to configure.";
+ AC_MSG_ERROR([Fatal: libXext not found.])])
+
+AC_CHECK_LIB(Xext, XShapeQueryExtension, AC_DEFINE(HAVE_X_SHAPE_EXT))
+
+# check if we need X_LOCALE definition
+AC_CHECK_LIB(X11, _Xsetlocale, , AC_DEFINE(NO_XLOCALE))
+
+# For multibyte selection handling
+if test "$MULTICHAR_ENCODING" != "none"; then
+ AC_CHECK_LIB(Xmu, XmuInternAtom)
+fi
+
+# check X11R6 for XIM
+if test "$XIM" = "TRUE"; then
+ AC_CHECK_LIB(X11, XRegisterIMInstantiateCallback, AC_DEFINE(USE_X11R6_XIM))
+fi
+
+dnl#
dnl# FEATURES
dnl#
AC_MSG_CHECKING(if Pablo support is wanted)
@@ -283,7 +314,7 @@ AC_ARG_WITH(imlib,
if test "$withval" != "no"; then
AC_MSG_RESULT(yes)
if test "$withval" != "yes"; then
- CFLAGS="$CFLAGS -I${withval}/include"
+ CPPFLAGS="$CPPFLAGS -I${withval}/include"
LDFLAGS="$LDFLAGS -L${withval}/lib"
fi
USE_IMLIB=1
@@ -299,10 +330,11 @@ AC_ARG_WITH(imlib,
USE_IMLIB=1
)
if test $USE_IMLIB -eq 1 ; then
- AC_CHECK_LIB(dl, dlopen, GRLIBS="-ldl", , $SUBLIBS $X_LIBS $GRLIBS)
- AC_CHECK_LIB(ttf, TT_Init_FreeType, GRLIBS="-lttf $GRLIBS", , $SUBLIBS $X_LIBS $GRLIBS)
+ AC_CHECK_LIB(dl, dlopen, GRLIBS="-ldl", , $GRLIBS)
+ AC_CHECK_LIB(ttf, TT_Init_FreeType, GRLIBS="-lttf $GRLIBS", , $GRLIBS)
AC_CHECK_LIB(Imlib2, imlib_create_image,
GRLIBS="-lImlib2 $GRLIBS"
+ AC_DEFINE(HAVE_LIBIMLIB2)
AC_DEFINE(PIXMAP_SUPPORT)
AC_DEFINE(BACKING_STORE)
,
@@ -310,7 +342,7 @@ if test $USE_IMLIB -eq 1 ; then
AC_WARN(*** or could not be linked. Eterm should still work, but it will ***)
AC_WARN(*** not be very happy. Check config.log for more detailed ***)
AC_WARN(*** information on why my attempt to link with Imlib2 failed. ***)
- , $SUBLIBS $X_LIBS $GRLIBS)
+ , $GRLIBS)
fi
@@ -357,10 +389,7 @@ AC_ARG_ENABLE(utmp,
UTMP=1
)
if test $UTMP -eq 1; then
- AC_CHECK_LIB(utempter, addToUtmp,
- AC_DEFINE(HAVE_UTEMPTER)
- LIBS="$LIBS -lutempter"
- )
+ AC_CHECK_LIB(utempter, addToUtmp)
fi
AC_MSG_CHECKING(for backspace key configuration)
AC_ARG_WITH(backspace,
@@ -602,43 +631,12 @@ dnl# ;;
dnl# esac
dnl# , AC_MSG_RESULT(none))
dnl# if test "$THREADS_LIB" = "posix"; then
-dnl# AC_CHECK_LIB(pthread, pthread_create, CFLAGS="$CFLAGS -D_REENTRANT" ; THREADLIBS="-lpthread"
+dnl# AC_CHECK_LIB(pthread, pthread_create, CPPFLAGS="$CPPFLAGS -D_REENTRANT" ; THREADLIBS="-lpthread"
dnl# AC_DEFINE(USE_POSIX_THREADS)
dnl# AC_DEFINE(MUTEX_SYNCH)
dnl# , , -D_REENTRANT -L/usr/lib -L/lib -L/usr/local/lib)
dnl# fi
-dnl#
-dnl# X LIBRARIES
-dnl#
-AC_CHECK_LIB(X11, XOpenDisplay, X_LIBS="$X_LIBS -lX11", [
-echo "ERROR: You need libX11 to build Eterm. Verify that you have libX11.a or";
-echo " libX11.so installed and that it is located in the X libraries";
-echo " directory shown above. If it is in a different directory, try using";
-echo " the --x-libraries parameter to configure.";
- AC_MSG_ERROR([Fatal: libX11 not found.])], $X_LIBS $SUBLIBS)
-AC_CHECK_LIB(Xext, XextAddDisplay, X_LIBS="-lXext $X_LIBS", [
-echo "ERROR: You need libXext to build Eterm. Verify that you have libXext.a or";
-echo " libXext.so installed and that it is located in the X libraries";
-echo " directory shown above. If it is in a different directory, try using";
-echo " the --x-libraries parameter to configure.";
- AC_MSG_ERROR([Fatal: libXext not found.])], $X_LIBS $SUBLIBS)
-
-AC_CHECK_LIB(Xext, XShapeQueryExtension, AC_DEFINE(HAVE_X_SHAPE_EXT), , $X_LIBS $SUBLIBS)
-
-# check if we need X_LOCALE definition
-AC_CHECK_LIB(X11, _Xsetlocale, , AC_DEFINE(NO_XLOCALE), $X_LIBS $SUBLIBS)
-
-# For multibyte selection handling
-if test "$MULTICHAR_ENCODING" != "none"; then
- AC_CHECK_LIB(Xmu, XmuInternAtom, X_LIBS="-lXmu $X_LIBS", , $X_LIBS $SUBLIBS)
-fi
-
-# check X11R6 for XIM
-if test "$XIM" = "TRUE"; then
- AC_CHECK_LIB(X11, XRegisterIMInstantiateCallback, AC_DEFINE(USE_X11R6_XIM), , $X_LIBS $SUBLIBS)
-fi
-
AC_PREFIX(Eterm)
AC_PREFIX(gcc)
if test "$prefix" = "NONE"; then
@@ -709,18 +707,27 @@ if test "X$PKGDATADIR" = "X" ; then
fi
export PKGDATADIR
AC_DEFINE_UNQUOTED(PKGDATADIR, "$PKGDATADIR")
+if test "$GDB" != "no"; then
+ GDB_CMD_FILE="$PKGDATADIR/gdb.scr"
+ AC_DEFINE_UNQUOTED(GDB_CMD_FILE, "$GDB_CMD_FILE")
+else
+ GDB_CMD_FILE=""
+fi
+AC_SUBST(GDB_CMD_FILE)
+CPPFLAGS=`eval eval eval eval eval echo "-I$includedir -I$prefix/include $CPPFLAGS"`
+CPPFLAGS=`echo $CPPFLAGS | tr ' ' '\n' | uniq | tr '\n' ' '`
CFLAGS=${CFLAGS--O}
-LDFLAGS=${LDFLAGS--O}
+LDFLAGS=`eval eval eval eval eval echo "-L$libdir -L$prefix/lib ${LDFLAGS--O}"`
+LDFLAGS=`echo $LDFLAGS | tr ' ' '\n' | uniq | tr '\n' ' '`
+LIBS="$GRLIBS $X_PRE_LIBS $LIBS $X_EXTRA_LIBS"
-CPPFLAGS="$CPPFLAGS"
AC_SUBST(CC)
AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LDFLAGS)
AC_SUBST(LIBS)
AC_SUBST(THREADLIBS)
-AC_SUBST(GRLIBS)
basedir=.
@@ -733,6 +740,8 @@ AC_OUTPUT(Makefile bg/Makefile doc/Makefile utils/Makefile libmej/Makefile
BINDIR=`eval eval eval eval echo ${bindir}`
export BINDIR bindir prefix exec_prefix datadir PACKAGE
+# The awk-fu below replaces @VAR@ in theme config files with the corresponding
+# environment variables, kinda like AC_OUTPUT above.
changequote(%&, &%)dnl
%&
for i in utils/kEsetroot themes/Eterm/theme.cfg themes/auto/theme.cfg themes/cEterm/theme.cfg \
@@ -758,19 +767,17 @@ if test -z "$GRLIBS"; then
mv doc/Makefile.new doc/Makefile
fi
-test $USE_IMLIB = 0 && GRLIBS="*** WARNING: Pixmap support disabled! ***"
-
echo "
$PACKAGE $VERSION
Configuration:
--------------
- Source code location: ${srcdir}
- Compiler: ${CC} ${CFLAGS}
- Host System Type: ${host}
- Graphics libraries: ${GRLIBS}
- X libraries/paths: ${X_LIBS}
- Install path: ${prefix}
+ Source code location: $srcdir
+ Host System Type: $host
+ Preprocessor: $CC $CPPFLAGS
+ Compiler: $CC $CFLAGS
+ Linker: $CC $LDFLAGS $LIBS
+ Install path: $prefix
See src/feature.h for further configuration information.
diff --git a/libmej/Makefile.am b/libmej/Makefile.am
index b22848c..8963f73 100644
--- a/libmej/Makefile.am
+++ b/libmej/Makefile.am
@@ -5,6 +5,6 @@ include_HEADERS = libmej.h
libmej_la_SOURCES = debug.c mem.c msgs.c strings.c snprintf.c libmej.h
-INCLUDES = -I. -I.. -I$(includedir) -I$(prefix)/include
+LIBS = -lm
libmej_la_LDFLAGS = -release $(VERSION)
diff --git a/libmej/libmej.h b/libmej/libmej.h
index 21087b3..4c17102 100644
--- a/libmej/libmej.h
+++ b/libmej/libmej.h
@@ -61,6 +61,13 @@
# include <malloc.h>
#endif
+#include <X11/Xatom.h>
+#include <X11/X.h>
+#include <X11/Intrinsic.h>
+#ifdef HAVE_LIBIMLIB2
+# include <Imlib2.h>
+#endif
+
/******************************* GENERIC GOOP *********************************/
#ifndef TRUE
# define TRUE ((unsigned char)(1))
@@ -193,27 +200,40 @@ typedef struct ptr_struct {
size_t size;
} ptr_t;
typedef struct memrec_struct {
- unsigned char init;
unsigned long cnt;
ptr_t *ptrs;
} memrec_t;
#if (DEBUG >= DEBUG_MEM)
-# define MALLOC(sz) libmej_malloc(__FILE__, __LINE__, (sz))
-# define CALLOC(type,n) libmej_calloc(__FILE__, __LINE__, (n), (sizeof(type)))
-# define REALLOC(mem,sz) libmej_realloc(#mem, __FILE__, __LINE__, (mem), (sz))
-# define FREE(ptr) do { libmej_free(#ptr, __FILE__, __LINE__, (ptr)); (ptr) = NULL; } while (0)
-# define STRDUP(s) libmej_strdup(#s, __FILE__, __LINE__, (s))
+# define MALLOC(sz) libmej_malloc(__FILE__, __LINE__, (sz))
+# define CALLOC(type,n) libmej_calloc(__FILE__, __LINE__, (n), (sizeof(type)))
+# define REALLOC(mem,sz) libmej_realloc(#mem, __FILE__, __LINE__, (mem), (sz))
+# define FREE(ptr) do { libmej_free(#ptr, __FILE__, __LINE__, (ptr)); (ptr) = NULL; } while (0)
+# define STRDUP(s) libmej_strdup(#s, __FILE__, __LINE__, (s))
+# define MALLOC_DUMP() libmej_dump_mem_tables()
+# define X_CREATE_PIXMAP(d, win, w, h, depth) libmej_x_create_pixmap(__FILE__, __LINE__, (d), (win), (w), (h), (depth))
+# define X_FREE_PIXMAP(d, p) libmej_x_free_pixmap(#p, __FILE__, __LINE__, (d), (p))
+# define PIXMAP_DUMP() libmej_dump_pixmap_tables()
+# define X_CREATE_GC(d, win, f, gcv) libmej_x_create_gc(__FILE__, __LINE__, (d), (win), (f), (gcv))
+# define X_FREE_GC(d, gc) libmej_x_free_gc(#gc, __FILE__, __LINE__, (d), (gc))
+# define GC_DUMP() libmej_dump_gc_tables()
# define MALLOC_MOD 25
# define REALLOC_MOD 25
# define CALLOC_MOD 25
# define FREE_MOD 25
#else
-# define MALLOC(sz) malloc(sz)
-# define CALLOC(type,n) calloc((n),(sizeof(type)))
-# define REALLOC(mem,sz) ((sz) ? ((mem) ? (realloc((mem), (sz))) : (malloc(sz))) : ((mem) ? (free(mem), NULL) : (NULL)))
-# define FREE(ptr) do { free(ptr); (ptr) = NULL; } while (0)
-# define STRDUP(s) strdup(s)
+# define MALLOC(sz) malloc(sz)
+# define CALLOC(type,n) calloc((n),(sizeof(type)))
+# define REALLOC(mem,sz) ((sz) ? ((mem) ? (realloc((mem), (sz))) : (malloc(sz))) : ((mem) ? (free(mem), NULL) : (NULL)))
+# define FREE(ptr) do { free(ptr); (ptr) = NULL; } while (0)
+# define STRDUP(s) strdup(s)
+# define MALLOC_DUMP() NOP
+# define X_CREATE_PIXMAP(d, win, w, h, depth) XCreatePixmap((d), (win), (w), (h), (depth))
+# define X_FREE_PIXMAP(d, p) XFreePixmap((d), (p))
+# define PIXMAP_DUMP() NOP
+# define X_CREATE_GC(d, win, f, gcv) XCreateGC((d), (win), (f), (gcv))
+# define X_FREE_GC(d, gc) XFreeGC((d), (gc))
+# define GC_DUMP() NOP
#endif
/* Fast memset() macro contributed by vendu */
@@ -289,16 +309,18 @@ extern unsigned int DEBUG_LEVEL;
/* mem.c */
extern void memrec_init(void);
-extern void memrec_add_var(void *, size_t);
-extern void memrec_rem_var(const char *, const char *, unsigned long, void *);
-extern void memrec_chg_var(const char *, const char *, unsigned long, void *, void *, size_t);
-extern void memrec_dump(void);
extern void *libmej_malloc(const char *, unsigned long, size_t);
extern void *libmej_realloc(const char *, const char *, unsigned long, void *, size_t);
extern void *libmej_calloc(const char *, unsigned long, size_t, size_t);
extern void libmej_free(const char *, const char *, unsigned long, void *);
extern char *libmej_strdup(const char *, const char *, unsigned long, const char *);
-extern void libmej_handle_sigsegv(int);
+extern void libmej_dump_mem_tables(void);
+extern Pixmap libmej_x_create_pixmap(const char *, unsigned long, Display *, Drawable, unsigned int, unsigned int, unsigned int);
+extern void libmej_x_free_pixmap(const char *, const char *, unsigned long, Display *, Pixmap);
+extern void libmej_dump_pixmap_tables(void);
+extern GC libmej_x_create_gc(const char *, unsigned long, Display *, Drawable, unsigned long, XGCValues *);
+extern void libmej_x_free_gc(const char *, const char *, unsigned long, Display *, GC);
+extern void libmej_dump_gc_tables(void);
/* strings.c */
extern char *left_str(const char *, unsigned long);
diff --git a/libmej/mem.c b/libmej/mem.c
index 8be1fe4..c986110 100644
--- a/libmej/mem.c
+++ b/libmej/mem.c
@@ -30,6 +30,11 @@ static const char cvs_ident[] = "$Id$";
#include "libmej.h"
+static void memrec_add_var(memrec_t *, void *, size_t);
+static void memrec_rem_var(memrec_t *, const char *, const char *, unsigned long, void *);
+static void memrec_chg_var(memrec_t *, const char *, const char *, unsigned long, void *, void *, size_t);
+static void memrec_dump(memrec_t *);
+
/*
* These're added for a pretty obvious reason -- they're implemented towards
* The beginning of each one's respective function. (The ones with capitalized
@@ -42,40 +47,43 @@ static int realloc_count = 0;
static int free_count = 0;
#endif
-static memrec_t memrec;
+static memrec_t malloc_rec, pixmap_rec, gc_rec;
void
memrec_init(void)
{
- D_MEM(("Constructing memrec\n"));
- memrec.ptrs = (ptr_t *) malloc(sizeof(ptr_t));
- memrec.init = 1;
+ D_MEM(("Constructing memory allocation records\n"));
+ malloc_rec.ptrs = (ptr_t *) malloc(sizeof(ptr_t));
+ pixmap_rec.ptrs = (ptr_t *) malloc(sizeof(ptr_t));
+ gc_rec.ptrs = (ptr_t *) malloc(sizeof(ptr_t));
}
-void
-memrec_add_var(void *ptr, size_t size)
+static void
+memrec_add_var(memrec_t *memrec, void *ptr, size_t size)
{
register ptr_t *p;
- memrec.cnt++;
- if ((memrec.ptrs = (ptr_t *) realloc(memrec.ptrs, sizeof(ptr_t) * memrec.cnt)) == NULL) {
+ ASSERT(memrec != NULL);
+ memrec->cnt++;
+ if ((memrec->ptrs = (ptr_t *) realloc(memrec->ptrs, sizeof(ptr_t) * memrec->cnt)) == NULL) {
D_MEM(("Unable to reallocate pointer list -- %s\n", strerror(errno)));
}
D_MEM(("Adding variable of size %lu at %8p\n", size, ptr));
- p = memrec.ptrs + memrec.cnt - 1;
+ p = memrec->ptrs + memrec->cnt - 1;
p->ptr = ptr;
p->size = size;
}
-void
-memrec_rem_var(const char *var, const char *filename, unsigned long line, void *ptr)
+static void
+memrec_rem_var(memrec_t *memrec, const char *var, const char *filename, unsigned long line, void *ptr)
{
register ptr_t *p = NULL;
register unsigned long i;
- for (i = 0; i < memrec.cnt; i++) {
- if (memrec.ptrs[i].ptr == ptr) {
- p = memrec.ptrs + i;
+ ASSERT(memrec != NULL);
+ for (i = 0; i < memrec->cnt; i++) {
+ if (memrec->ptrs[i].ptr == ptr) {
+ p = memrec->ptrs + i;
break;
}
}
@@ -83,25 +91,26 @@ memrec_rem_var(const char *var, const char *filename, unsigned long line, void *
D_MEM(("ERROR: File %s, line %d attempted to free variable %s (%8p) which was not allocated with MALLOC/REALLOC\n", filename, line, var, ptr));
return;
}
- memrec.cnt--;
+ memrec->cnt--;
D_MEM(("Removing variable of size %lu at %8p\n", p->size, p->ptr));
- memmove(p, p + 1, sizeof(ptr_t) * (memrec.cnt - i));
- memrec.ptrs = (ptr_t *) realloc(memrec.ptrs, sizeof(ptr_t) * memrec.cnt);
+ memmove(p, p + 1, sizeof(ptr_t) * (memrec->cnt - i));
+ memrec->ptrs = (ptr_t *) realloc(memrec->ptrs, sizeof(ptr_t) * memrec->cnt);
}
-void
-memrec_chg_var(const char *var, const char *filename, unsigned long line, void *oldp, void *newp, size_t size)
+static void
+memrec_chg_var(memrec_t *memrec, const char *var, const char *filename, unsigned long line, void *oldp, void *newp, size_t size)
{
register ptr_t *p = NULL;
register unsigned long i;
- for (i = 0; i < memrec.cnt; i++) {
- if (memrec.ptrs[i].ptr == oldp) {
- p = memrec.ptrs + i;
+ ASSERT(memrec != NULL);
+ for (i = 0; i < memrec->cnt; i++) {
+ if (memrec->ptrs[i].ptr == oldp) {
+ p = memrec->ptrs + i;
break;
}
}
- if (i == memrec.cnt) {
+ if (i == memrec->cnt) {
D_MEM(("ERROR: File %s, line %d attempted to realloc variable %s (%8p) which was not allocated with MALLOC/REALLOC\n", filename, line, var, oldp));
return;
}
@@ -110,27 +119,28 @@ memrec_chg_var(const char *var, const char *filename, unsigned long line, void *
p->size = size;
}
-void
-memrec_dump(void)
+static void
+memrec_dump(memrec_t *memrec)
{
register ptr_t *p;
unsigned long i, j, k, l, total = 0;
unsigned long len;
unsigned char buff[9];
- fprintf(LIBMEJ_DEBUG_FD, "DUMP :: %lu pointers stored.\n", memrec.cnt);
+ ASSERT(memrec != NULL);
+ fprintf(LIBMEJ_DEBUG_FD, "DUMP :: %lu pointers stored.\n", memrec->cnt);
fprintf(LIBMEJ_DEBUG_FD, "DUMP :: Pointer | Address | Size | Offset | 00 01 02 03 04 05 06 07 | ASCII \n");
fprintf(LIBMEJ_DEBUG_FD, "DUMP :: ---------+----------+--------+---------+-------------------------+---------\n");
fflush(LIBMEJ_DEBUG_FD);
- len = sizeof(ptr_t) * memrec.cnt;
+ len = sizeof(ptr_t) * memrec->cnt;
memset(buff, 0, sizeof(buff));
- /* First, dump the contents of the memrec.ptrs[] array. */
- for (p = memrec.ptrs, j = 0; j < len; p++, j += 8) {
- fprintf(LIBMEJ_DEBUG_FD, "DUMP :: %07lu | %8p | %06lu | %07x | ", (unsigned long) 0, memrec.ptrs, (unsigned long) (sizeof(ptr_t) * memrec.cnt), (unsigned int) j);
+ /* First, dump the contents of the memrec->ptrs[] array. */
+ for (p = memrec->ptrs, j = 0; j < len; p++, j += 8) {
+ fprintf(LIBMEJ_DEBUG_FD, "DUMP :: %07lu | %8p | %06lu | %07x | ", (unsigned long) 0, memrec->ptrs, (unsigned long) (sizeof(ptr_t) * memrec->cnt), (unsigned int) j);
/* l is the number of characters we're going to output */
l = ((len - j < 8) ? (len - j) : (8));
- /* Copy l bytes (up to 8) from memrec.ptrs[] (p) to buffer */
+ /* Copy l bytes (up to 8) from memrec->ptrs[] (p) to buffer */
memcpy(buff, p + j, l);
for (k = 0; k < l; k++) {
fprintf(LIBMEJ_DEBUG_FD, "%02x ", buff[k]);
@@ -146,7 +156,7 @@ memrec_dump(void)
}
/* Now print out each pointer and its contents. */
- for (p = memrec.ptrs, i = 0; i < memrec.cnt; p++, i++) {
+ for (p = memrec->ptrs, i = 0; i < memrec->cnt; p++, i++) {
/* Add this pointer's size to our total */
total += p->size;
for (j = 0; j < p->size; j += 8) {
@@ -172,6 +182,7 @@ memrec_dump(void)
fflush(LIBMEJ_DEBUG_FD);
}
+/******************** MEMORY ALLOCATION INTERFACE ********************/
void *
libmej_malloc(const char *filename, unsigned long line, size_t size)
{
@@ -189,7 +200,7 @@ libmej_malloc(const char *filename, unsigned long line, size_t size)
temp = (void *) malloc(size);
ASSERT_RVAL(temp != NULL, NULL);
if (DEBUG_LEVEL >= DEBUG_MEM) {
- memrec_add_var(temp, size);
+ memrec_add_var(&malloc_rec, temp, size);
}
return (temp);
}
@@ -213,7 +224,7 @@ libmej_realloc(const char *var, const char *filename, unsigned long line, void *
temp = (void *) realloc(ptr, size);
ASSERT_RVAL(temp != NULL, ptr);
if (DEBUG_LEVEL >= DEBUG_MEM) {
- memrec_chg_var(var, filename, line, ptr, temp, size);
+ memrec_chg_var(&malloc_rec, var, filename, line, ptr, temp, size);
}
}
return (temp);
@@ -235,7 +246,7 @@ libmej_calloc(const char *filename, unsigned long line, size_t count, size_t siz
temp = (void *) calloc(count, size);
ASSERT_RVAL(temp != NULL, NULL);
if (DEBUG_LEVEL >= DEBUG_MEM) {
- memrec_add_var(temp, size * count);
+ memrec_add_var(&malloc_rec, temp, size * count);
}
return (temp);
}
@@ -253,7 +264,7 @@ libmej_free(const char *var, const char *filename, unsigned long line, void *ptr
D_MEM(("libmej_free() called for variable %s (%8p) at %s:%lu\n", var, ptr, filename, line));
if (ptr) {
if (DEBUG_LEVEL >= DEBUG_MEM) {
- memrec_rem_var(var, filename, line, ptr);
+ memrec_rem_var(&malloc_rec, var, filename, line, ptr);
}
free(ptr);
} else {
@@ -276,11 +287,85 @@ libmej_strdup(const char *var, const char *filename, unsigned long line, const c
}
void
-libmej_handle_sigsegv(int sig)
+libmej_dump_mem_tables(void)
{
-#if DEBUG >= DEBUG_MEM
- fprintf(LIBMEJ_DEBUG_FD, "Fatal memory fault (%d)! Dumping memory table.\n", sig);
- memrec_dump();
-#endif
- exit(EXIT_FAILURE);
+ memrec_dump(&malloc_rec);
+}
+
+
+
+/******************** PIXMAP ALLOCATION INTERFACE ********************/
+
+Pixmap
+libmej_x_create_pixmap(const char *filename, unsigned long line, Display *d, Drawable win, unsigned int w, unsigned int h, unsigned int depth)
+{
+ Pixmap p;
+
+ D_MEM(("Creating %ux%u pixmap of depth %u for window 0x%08x at %s:%lu\n", w, h, depth, win, filename, line));
+
+ p = XCreatePixmap(d, win, w, h, depth);
+ ASSERT_RVAL(p != None, None);
+ if (DEBUG_LEVEL >= DEBUG_MEM) {
+ memrec_add_var(&pixmap_rec, (void *) p, w * h * (depth / 8));
+ }
+ return (p);
+}
+
+void
+libmej_x_free_pixmap(const char *var, const char *filename, unsigned long line, Display *d, Pixmap p)
+{
+ D_MEM(("libmej_x_free_pixmap() called for variable %s (0x%08x) at %s:%lu\n", var, p, filename, line));
+ if (p) {
+ if (DEBUG_LEVEL >= DEBUG_MEM) {
+ memrec_rem_var(&pixmap_rec, var, filename, line, (void *) p);
+ }
+ XFreePixmap(d, p);
+ } else {
+ D_MEM(("ERROR: Caught attempt to free NULL pixmap\n"));
+ }
+}
+
+void
+libmej_dump_pixmap_tables(void)
+{
+ memrec_dump(&pixmap_rec);
+}
+
+
+
+/********************** GC ALLOCATION INTERFACE **********************/
+
+GC
+libmej_x_create_gc(const char *filename, unsigned long line, Display *d, Drawable win, unsigned long mask, XGCValues *gcv)
+{
+ GC gc;
+
+ D_MEM(("Creating gc for window 0x%08x at %s:%lu\n", win, filename, line));
+
+ gc = XCreateGC(d, win, mask, gcv);
+ ASSERT_RVAL(gc != None, None);
+ if (DEBUG_LEVEL >= DEBUG_MEM) {
+ memrec_add_var(&gc_rec, (void *) gc, sizeof(XGCValues));
+ }
+ return (gc);
+}
+
+void
+libmej_x_free_gc(const char *var, const char *filename, unsigned long line, Display *d, GC gc)
+{
+ D_MEM(("libmej_x_free_gc() called for variable %s (0x%08x) at %s:%lu\n", var, gc, filename, line));
+ if (gc) {
+ if (DEBUG_LEVEL >= DEBUG_MEM) {
+ memrec_rem_var(&gc_rec, var, filename, line, (void *) gc);
+ }
+ XFreeGC(d, gc);
+ } else {
+ D_MEM(("ERROR: Caught attempt to free NULL GC\n"));
+ }
+}
+
+void
+libmej_dump_gc_tables(void)
+{
+ memrec_dump(&gc_rec);
}
diff --git a/src/Makefile.am b/src/Makefile.am
index feb66f1..2931b1e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,5 +1,7 @@
# $Id$
+INCLUDES = -I$(top_srcdir)/libmej
+
lib_LTLIBRARIES = libEterm.la
bin_PROGRAMS = Eterm
@@ -17,6 +19,8 @@ libEterm_la_LDFLAGS = -release $(VERSION)
Eterm_SOURCES = main.c
Eterm_DEPENDENCIES = libEterm.la
Eterm_LDFLAGS = -rpath $(libdir):$(pkglibdir)
-Eterm_LDADD = libEterm.la $(top_builddir)/libmej/libmej.la -L$(libdir) -L$(prefix)/lib $(X_LIBS) $(GRLIBS) $(LIBS)
+Eterm_LDADD = libEterm.la $(top_builddir)/libmej/libmej.la
-INCLUDES = -I. -I$(top_srcdir) -I$(top_srcdir)/libmej -I.. -I$(includedir) -I$(prefix)/include $(X_CFLAGS)
+install-exec-hook:
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
+ test ! -z "$(GDB_CMD_FILE)" && $(INSTALL_DATA) gdb.scr $(DESTDIR)$(pkgdatadir)/
diff --git a/src/buttons.c b/src/buttons.c
index 7e810ac..f238375 100644
--- a/src/buttons.c
+++ b/src/buttons.c
@@ -101,7 +101,7 @@ bbar_create(void)
XSelectInput(Xdisplay, bbar->win, mask);
XStoreName(Xdisplay, bbar->win, "Eterm Button Bar");
- bbar->gc = X_CREATE_GC(GCForeground | GCFont, &gcvalue);
+ bbar->gc = LIBMEJ_X_CREATE_GC(GCForeground | GCFont, &gcvalue);
bbar_set_docked(bbar, BBAR_DOCKED_TOP);
bbar_set_visible(bbar, 1);
diff --git a/src/command.c b/src/command.c
index cf8e61f..c086aa0 100644
--- a/src/command.c
+++ b/src/command.c
@@ -972,10 +972,10 @@ hard_exit(void) {
_exit(-1);
#elif defined(SIGKILL)
kill(cmd_pid, SIGKILL);
- raise(SIGKILL);
+ abort();
#else
kill(cmd_pid, 9);
- raise(9);
+ abort();
#endif
}
@@ -984,8 +984,8 @@ hard_exit(void) {
void
dump_stack_trace(void)
{
-
char cmd[256];
+ struct stat st;
#ifdef NO_STACK_TRACE
return;
@@ -998,7 +998,10 @@ dump_stack_trace(void)
U_STACK_TRACE();
return;
#elif defined(GDB)
- snprintf(cmd, sizeof(cmd), "/bin/echo '\n\nbacktrace' | " GDB " " APL_NAME " %d", getpid());
+ if (((stat(GDB_CMD_FILE, &st)) != 0) || (!S_ISREG(st.st_mode))) {
+ return;
+ }
+ snprintf(cmd, sizeof(cmd), GDB " -x " GDB_CMD_FILE " " APL_NAME " %d", getpid());
#elif defined(PSTACK)
snprintf(cmd, sizeof(cmd), PSTACK " %d", getpid());
#elif defined(DBX)
@@ -1014,7 +1017,7 @@ dump_stack_trace(void)
return;
#endif
signal(SIGALRM, (eterm_sighandler_t) hard_exit);
- alarm(10);
+ alarm(3);
system(cmd);
}
@@ -1138,7 +1141,9 @@ clean_exit(void)
privileges(REVERT);
#if DEBUG >= DEBUG_MEM
if (DEBUG_LEVEL >= DEBUG_MEM) {
- memrec_dump();
+ MALLOC_DUMP();
+ PIXMAP_DUMP();
+ GC_DUMP();
}
#endif
PABLO_STOP_TRACING();
diff --git a/src/draw.c b/src/draw.c
index fd0f83e..51f0e08 100644
--- a/src/draw.c
+++ b/src/draw.c
@@ -54,8 +54,8 @@ draw_shadow_from_colors(Drawable d, Pixel top, Pixel bottom, int x, int y, int w
static GC gc_top = (GC) 0, gc_bottom = (GC) 0;
if (gc_top == 0) {
- gc_top = X_CREATE_GC(0, NULL);
- gc_bottom = X_CREATE_GC(0, NULL);
+ gc_top = LIBMEJ_X_CREATE_GC(0, NULL);
+ gc_bottom = LIBMEJ_X_CREATE_GC(0, NULL);
}
XSetForeground(Xdisplay, gc_top, top);
@@ -109,8 +109,8 @@ draw_arrow_from_colors(Drawable d, Pixel top, Pixel bottom, int x, int y, int w,
static GC gc_top = (GC) 0, gc_bottom = (GC) 0;
if (gc_top == 0) {
- gc_top = X_CREATE_GC(0, NULL);
- gc_bottom = X_CREATE_GC(0, NULL);
+ gc_top = LIBMEJ_X_CREATE_GC(0, NULL);
+ gc_bottom = LIBMEJ_X_CREATE_GC(0, NULL);
}
XSetForeground(Xdisplay, gc_top, top);
@@ -230,8 +230,8 @@ bevel_pixmap(Pixmap p, int w, int h, Imlib_Border *bord, unsigned char up)
MOD_PIXEL_HIGH(x, y, !up);
}
}
- gc = X_CREATE_GC(0, NULL);
+ gc = LIBMEJ_X_CREATE_GC(0, NULL);
XPutImage(Xdisplay, p, gc, ximg, 0, 0, 0, 0, w, h);
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
XDestroyImage(ximg);
}
diff --git a/src/gdb.scr b/src/gdb.scr
new file mode 100644
index 0000000..3b942f3
--- /dev/null
+++ b/src/gdb.scr
@@ -0,0 +1,2 @@
+backtrace
+quit
diff --git a/src/menus.c b/src/menus.c
index ee03aa4..ba182c6 100644
--- a/src/menus.c
+++ b/src/menus.c
@@ -124,9 +124,9 @@ menu_init(void)
return;
}
gcvalue.foreground = PixColors[menuTopShadowColor];
- topShadowGC = X_CREATE_GC(GCForeground, &gcvalue);
+ topShadowGC = LIBMEJ_X_CREATE_GC(GCForeground, &gcvalue);
gcvalue.foreground = PixColors[menuBottomShadowColor];
- botShadowGC = X_CREATE_GC(GCForeground, &gcvalue);
+ botShadowGC = LIBMEJ_X_CREATE_GC(GCForeground, &gcvalue);
event_register_dispatcher(menu_dispatch_event, menu_event_init_dispatcher);
}
@@ -450,7 +450,7 @@ menu_create(char *title)
menu->swin = XCreateWindow(Xdisplay, menu->win, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWBorderPixel | CWColormap, &xattr);
- menu->gc = X_CREATE_GC(0, NULL);
+ menu->gc = LIBMEJ_X_CREATE_GC(0, NULL);
menuitem_clear_current(menu);
return menu;
diff --git a/src/misc.c b/src/misc.c
index f266eb5..cfa2dfe 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -226,26 +226,6 @@ parse_escaped_string(char *str)
return (pnew - str);
}
-const char *
-find_file(const char *file, const char *ext)
-{
-
- const char *f;
-
-#if defined(PIXMAP_SUPPORT)
- if ((f = search_path(rs_path, file, ext)) != NULL) {
- return (f);
- } else if ((f = search_path(getenv(PATH_ENV), file, ext)) != NULL) {
- return (f);
- } else {
- return (search_path(initial_dir, file, ext));
- }
-#else
- return ((const char *) NULL);
-#endif
-
-}
-
char *
safe_print_string(char *str, unsigned long len)
{
diff --git a/src/misc.h b/src/misc.h
index cefddc6..83a56f9 100644
--- a/src/misc.h
+++ b/src/misc.h
@@ -40,8 +40,6 @@ extern const char *my_basename(const char *str);
extern unsigned long str_leading_match(register const char *, register const char *);
extern char *str_trim(char *str);
extern int parse_escaped_string(char *str);
-extern const char *search_path(const char *pathlist, const char *file, const char *ext);
-extern const char *find_file(const char *file, const char *ext);
extern char *safe_print_string(char *buff, unsigned long len);
extern unsigned long add_carriage_returns(unsigned char *buff, unsigned long cnt);
extern unsigned char mkdirhier(const char *);
diff --git a/src/pixmap.c b/src/pixmap.c
index 9317321..6a5e4ef 100644
--- a/src/pixmap.c
+++ b/src/pixmap.c
@@ -512,8 +512,8 @@ create_trans_pixmap(simage_t *simg, unsigned char which, Drawable d, int x, int
return None;
}
XTranslateCoordinates(Xdisplay, d, desktop_window, x, y, &x, &y, &dummy);
- p = X_CREATE_PIXMAP(width, height);
- gc = X_CREATE_GC(0, NULL);
+ p = LIBMEJ_X_CREATE_PIXMAP(width, height);
+ gc = LIBMEJ_X_CREATE_GC(0, NULL);
D_PIXMAP(("Created p [0x%08x] as a %hux%hu pixmap at %d, %d relative to window 0x%08x\n", p, width, height, x, y, desktop_window));
if (p != None) {
if (pw < scr->width || ph < scr->height) {
@@ -535,7 +535,7 @@ create_trans_pixmap(simage_t *simg, unsigned char which, Drawable d, int x, int
bevel_pixmap(p, width, height, simg->iml->bevel->edges, simg->iml->bevel->up);
}
}
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
return p;
}
@@ -609,10 +609,10 @@ create_viewport_pixmap(simage_t *simg, Drawable d, int x, int y, unsigned short
}
}
if (p == None) {
- p = X_CREATE_PIXMAP(width, height);
+ p = LIBMEJ_X_CREATE_PIXMAP(width, height);
D_PIXMAP(("Created p == 0x%08x\n", p));
}
- gc = X_CREATE_GC(0, NULL);
+ gc = LIBMEJ_X_CREATE_GC(0, NULL);
XTranslateCoordinates(Xdisplay, d, desktop_window, x, y, &x, &y, &dummy);
D_PIXMAP(("Translated coords are %d, %d\n", x, y));
if ((images[image_bg].current->pmap->w > 0) || (images[image_bg].current->pmap->op & OP_SCALE)) {
@@ -623,7 +623,7 @@ create_viewport_pixmap(simage_t *simg, Drawable d, int x, int y, unsigned short
XSetFillStyle(Xdisplay, gc, FillTiled);
XFillRectangle(Xdisplay, p, gc, 0, 0, width, height);
}
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
return p;
}
@@ -668,13 +668,13 @@ paste_simage(simage_t *simg, unsigned char which, Drawable d, unsigned short x,
FREE(reply);
enl_ipc_sync();
if (pmap) {
- gc = X_CREATE_GC(0, NULL);
+ gc = LIBMEJ_X_CREATE_GC(0, NULL);
XSetClipMask(Xdisplay, gc, mask);
XSetClipOrigin(Xdisplay, gc, x, y);
XCopyArea(Xdisplay, pmap, d, gc, 0, 0, w, h, x, y);
snprintf(buff, sizeof(buff), "imageclass %s free_pixmap 0x%08x", iclass, (int) pmap);
enl_ipc_send(buff);
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
return;
} else {
print_error("Enlightenment returned a null pixmap, which I can't use. Disallowing \"auto\" mode for this image.\n");
@@ -687,23 +687,23 @@ paste_simage(simage_t *simg, unsigned char which, Drawable d, unsigned short x,
} else if (image_mode_is(which, MODE_TRANS) && image_mode_is(which, ALLOW_TRANS)) {
Pixmap p;
- gc = X_CREATE_GC(0, NULL);
+ gc = LIBMEJ_X_CREATE_GC(0, NULL);
/* FIXME: The conditional on the next line works, but it's a hack. Worth fixing? :-) */
p = create_trans_pixmap(simg, which, ((which == image_st) ? scrollbar.sa_win : d), x, y, w, h);
XCopyArea(Xdisplay, p, d, gc, 0, 0, w, h, x, y);
- X_FREE_PIXMAP(p);
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_PIXMAP(p);
+ LIBMEJ_X_FREE_GC(gc);
} else if (image_mode_is(which, MODE_VIEWPORT) && image_mode_is(which, ALLOW_VIEWPORT)) {
Pixmap p;
- gc = X_CREATE_GC(0, NULL);
+ gc = LIBMEJ_X_CREATE_GC(0, NULL);
p = create_viewport_pixmap(simg, d, x, y, w, h);
if (simg->iml->bevel != NULL) {
bevel_pixmap(p, w, h, simg->iml->bevel->edges, simg->iml->bevel->up);
}
XCopyArea(Xdisplay, p, d, gc, 0, 0, w, h, x, y);
- X_FREE_PIXMAP(p);
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_PIXMAP(p);
+ LIBMEJ_X_FREE_GC(gc);
}
}
@@ -730,14 +730,14 @@ paste_simage(simage_t *simg, unsigned char which, Drawable d, unsigned short x,
reset_simage(simg, RESET_ALL_SIMG);
return;
}
- gc = X_CREATE_GC(0, NULL);
+ gc = LIBMEJ_X_CREATE_GC(0, NULL);
if (mask) {
XSetClipMask(Xdisplay, gc, mask);
XSetClipOrigin(Xdisplay, gc, x, y);
}
XCopyArea(Xdisplay, pmap, d, gc, 0, 0, w, h, x, y);
IMLIB_FREE_PIXMAP(pmap);
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
}
}
@@ -796,9 +796,9 @@ copy_buffer_pixmap(unsigned char mode, unsigned long fill, unsigned short width,
XGCValues gcvalue;
ASSERT(buffer_pixmap == None);
- buffer_pixmap = X_CREATE_PIXMAP(width, height);
+ buffer_pixmap = LIBMEJ_X_CREATE_PIXMAP(width, height);
gcvalue.foreground = (Pixel) fill;
- gc = X_CREATE_GC(GCForeground, &gcvalue);
+ gc = LIBMEJ_X_CREATE_GC(GCForeground, &gcvalue);
XSetGraphicsExposures(Xdisplay, gc, False);
if (mode == MODE_SOLID) {
@@ -806,15 +806,15 @@ copy_buffer_pixmap(unsigned char mode, unsigned long fill, unsigned short width,
simg = images[image_bg].current;
if (simg->pmap->pixmap) {
- X_FREE_PIXMAP(simg->pmap->pixmap);
+ LIBMEJ_X_FREE_PIXMAP(simg->pmap->pixmap);
}
- simg->pmap->pixmap = X_CREATE_PIXMAP(width, height);
+ simg->pmap->pixmap = LIBMEJ_X_CREATE_PIXMAP(width, height);
XFillRectangle(Xdisplay, simg->pmap->pixmap, gc, 0, 0, width, height);
XCopyArea(Xdisplay, simg->pmap->pixmap, buffer_pixmap, gc, 0, 0, width, height, 0, 0);
} else {
XCopyArea(Xdisplay, (Pixmap) fill, buffer_pixmap, gc, 0, 0, width, height, 0, 0);
}
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
}
void
@@ -852,11 +852,11 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
return;
gcvalue.foreground = gcvalue.background = PixColors[bgColor];
- gc = X_CREATE_GC(GCForeground | GCBackground, &gcvalue);
+ gc = LIBMEJ_X_CREATE_GC(GCForeground | GCBackground, &gcvalue);
pixmap = simg->pmap->pixmap; /* Save this for later */
if ((which == image_bg) && (buffer_pixmap != None)) {
- X_FREE_PIXMAP(buffer_pixmap);
+ LIBMEJ_X_FREE_PIXMAP(buffer_pixmap);
buffer_pixmap = None;
}
@@ -898,9 +898,9 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
XSetClipOrigin(Xdisplay, gc, 0, 0);
}
if (simg->pmap->pixmap) {
- X_FREE_PIXMAP(simg->pmap->pixmap);
+ LIBMEJ_X_FREE_PIXMAP(simg->pmap->pixmap);
}
- simg->pmap->pixmap = X_CREATE_PIXMAP(width, height);
+ simg->pmap->pixmap = LIBMEJ_X_CREATE_PIXMAP(width, height);
XCopyArea(Xdisplay, pmap, simg->pmap->pixmap, gc, 0, 0, width, height, 0, 0);
XSetWindowBackgroundPixmap(Xdisplay, win, simg->pmap->pixmap);
snprintf(buff, sizeof(buff), "imageclass %s free_pixmap 0x%08x", iclass, (int) pmap);
@@ -914,7 +914,7 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
} else {
snprintf(buff, sizeof(buff), "imageclass %s apply 0x%x %s", iclass, (int) win, state);
enl_ipc_send(buff);
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
return;
}
}
@@ -924,7 +924,7 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
# ifdef PIXMAP_OFFSET
if (image_mode_is(which, MODE_TRANS) && image_mode_is(which, ALLOW_TRANS)) {
if (simg->pmap->pixmap != None) {
- X_FREE_PIXMAP(simg->pmap->pixmap);
+ LIBMEJ_X_FREE_PIXMAP(simg->pmap->pixmap);
}
simg->pmap->pixmap = create_trans_pixmap(simg, which, win, 0, 0, width, height);
if (simg->pmap->pixmap != None) {
@@ -944,7 +944,7 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
p = create_viewport_pixmap(simg, win, 0, 0, width, height);
if (p && (p != simg->pmap->pixmap)) {
if (simg->pmap->pixmap != None) {
- X_FREE_PIXMAP(simg->pmap->pixmap);
+ LIBMEJ_X_FREE_PIXMAP(simg->pmap->pixmap);
}
simg->pmap->pixmap = p;
}
@@ -1038,7 +1038,7 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
single = ((xscaled < width || yscaled < height) && !(simg->pmap->op & OP_TILE)) ? 1 : 0;
pixmap = simg->pmap->pixmap;
- simg->pmap->pixmap = X_CREATE_PIXMAP(width, height);
+ simg->pmap->pixmap = LIBMEJ_X_CREATE_PIXMAP(width, height);
if (single) {
XFillRectangle(Xdisplay, simg->pmap->pixmap, gc, 0, 0, width, height);
}
@@ -1053,7 +1053,7 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
IMLIB_FREE_PIXMAP(pixmap);
} else if (renderop & RENDER_FORCE_PIXMAP) {
pixmap = simg->pmap->pixmap;
- simg->pmap->pixmap = X_CREATE_PIXMAP(width, height);
+ simg->pmap->pixmap = LIBMEJ_X_CREATE_PIXMAP(width, height);
XCopyArea(Xdisplay, pixmap, simg->pmap->pixmap, gc, 0, 0, width, height, 0, 0);
IMLIB_FREE_PIXMAP(pixmap);
}
@@ -1089,9 +1089,9 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
} else {
if ((renderop & RENDER_FORCE_PIXMAP) || (simg->iml->bevel != NULL)) {
if (simg->pmap->pixmap) {
- X_FREE_PIXMAP(simg->pmap->pixmap);
+ LIBMEJ_X_FREE_PIXMAP(simg->pmap->pixmap);
}
- simg->pmap->pixmap = X_CREATE_PIXMAP(width, height);
+ simg->pmap->pixmap = LIBMEJ_X_CREATE_PIXMAP(width, height);
XSetForeground(Xdisplay, gc, ((which == image_bg) ? (PixColors[bgColor]) : (simg->bg)));
XFillRectangle(Xdisplay, simg->pmap->pixmap, gc, 0, 0, width, height);
if (simg->iml->bevel != NULL && simg->iml->bevel->edges != NULL) {
@@ -1106,13 +1106,13 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
}
}
XClearWindow(Xdisplay, win);
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
return;
}
#ifdef PIXMAP_SUPPORT
const char *
-search_path(const char *pathlist, const char *file, const char *ext)
+search_path(const char *pathlist, const char *file)
{
static char name[PATH_MAX];
char *p;
@@ -1123,12 +1123,9 @@ search_path(const char *pathlist, const char *file, const char *ext)
if (!pathlist || !file) { /* If either one is NULL, there really isn't much point in going on.... */
return ((const char *) NULL);
}
- if (!ext) {
- ext = "";
- }
getcwd(name, PATH_MAX);
len = strlen(name);
- D_OPTIONS(("search_path(\"%s\", \"%s\", \"%s\") called from \"%s\".\n", pathlist, file, ext, name));
+ D_OPTIONS(("search_path(\"%s\", \"%s\") called from \"%s\".\n", pathlist, file, name));
if (len < PATH_MAX - 1) {
strcat(name, "/");
strncat(name, file, PATH_MAX - len - 1);
@@ -1148,18 +1145,8 @@ search_path(const char *pathlist, const char *file, const char *ext)
p = strchr(file, '\0');
len = (p - file);
- /* check about adding a trailing extension */
- if (ext != NULL) {
-
- char *dot;
-
- dot = strrchr(p, '.');
- path = strrchr(p, '/');
- if (dot != NULL || (path != NULL && dot <= path))
- ext = NULL;
- }
/* leave room for an extra '/' and trailing '\0' */
- maxpath = sizeof(name) - (len + (ext ? strlen(ext) : 0) + 2);
+ maxpath = sizeof(name) - (len + 2);
if (maxpath <= 0)
return NULL;
@@ -1173,15 +1160,6 @@ search_path(const char *pathlist, const char *file, const char *ext)
if (!S_ISDIR(fst.st_mode))
return name;
}
- if (ext) {
- strcat(name, ext);
- D_OPTIONS(("Checking for file \"%s\"\n", name));
- if (!access(name, R_OK)) {
- stat(name, &fst);
- if (!S_ISDIR(fst.st_mode))
- return name;
- }
- }
for (path = pathlist; path != NULL && *path != '\0'; path = p) {
int n;
@@ -1208,15 +1186,6 @@ search_path(const char *pathlist, const char *file, const char *ext)
if (!S_ISDIR(fst.st_mode))
return name;
}
- if (ext) {
- strcat(name, ext);
- D_OPTIONS(("Checking for file \"%s\"\n", name));
- if (!access(name, R_OK)) {
- stat(name, &fst);
- if (!S_ISDIR(fst.st_mode))
- return name;
- }
- }
}
}
D_OPTIONS(("File \"%s\" not found in path.\n", file));
@@ -1244,8 +1213,8 @@ load_image(const char *file, simage_t *simg)
if (geom != NULL) {
set_pixmap_scale(geom, simg->pmap);
}
- if ((f = search_path(rs_path, file, PIXMAP_EXT)) == NULL) {
- f = search_path(getenv(PATH_ENV), file, PIXMAP_EXT);
+ if ((f = search_path(rs_path, file)) == NULL) {
+ f = search_path(getenv(PATH_ENV), file);
}
if (f != NULL) {
im = imlib_load_image_immediately(f);
@@ -1850,7 +1819,7 @@ get_desktop_pixmap(void)
}
if (color_pixmap != None) {
D_PIXMAP(("Removing old solid color pixmap 0x%08x.\n", color_pixmap));
- X_FREE_PIXMAP(color_pixmap);
+ LIBMEJ_X_FREE_PIXMAP(color_pixmap);
color_pixmap = None;
}
if (prop != None) {
@@ -1875,19 +1844,19 @@ get_desktop_pixmap(void)
Screen *scr = ScreenOfDisplay(Xdisplay, Xscreen);
gcvalue.foreground = gcvalue.background = PixColors[bgColor];
- gc = X_CREATE_GC(GCForeground | GCBackground, &gcvalue);
+ gc = LIBMEJ_X_CREATE_GC(GCForeground | GCBackground, &gcvalue);
XGetGeometry(Xdisplay, p, &w, &px, &py, &pw, &ph, &pb, &pd);
D_PIXMAP(("XGetGeometry() returned w = 0x%08x, pw == %u, ph == %u\n", w, pw, ph));
if (pw < (unsigned int) scr->width || ph < (unsigned int) scr->height) {
- desktop_pixmap = X_CREATE_PIXMAP(pw, ph);
+ desktop_pixmap = LIBMEJ_X_CREATE_PIXMAP(pw, ph);
XCopyArea(Xdisplay, p, desktop_pixmap, gc, 0, 0, pw, ph, 0, 0);
colormod_trans(desktop_pixmap, images[image_bg].current->iml, gc, pw, ph);
} else {
- desktop_pixmap = X_CREATE_PIXMAP(scr->width, scr->height);
+ desktop_pixmap = LIBMEJ_X_CREATE_PIXMAP(scr->width, scr->height);
XCopyArea(Xdisplay, p, desktop_pixmap, gc, 0, 0, scr->width, scr->height, 0, 0);
colormod_trans(desktop_pixmap, images[image_bg].current->iml, gc, scr->width, scr->height);
}
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
desktop_pixmap_is_mine = 1;
D_PIXMAP(("Returning 0x%08x\n", (unsigned int) desktop_pixmap));
return (desktop_pixmap);
@@ -1913,12 +1882,12 @@ get_desktop_pixmap(void)
D_PIXMAP((" Found solid color 0x%08x\n", pix));
gcvalue.foreground = pix;
gcvalue.background = pix;
- gc = X_CREATE_GC(GCForeground | GCBackground, &gcvalue);
+ gc = LIBMEJ_X_CREATE_GC(GCForeground | GCBackground, &gcvalue);
- color_pixmap = X_CREATE_PIXMAP(16, 16);
+ color_pixmap = LIBMEJ_X_CREATE_PIXMAP(16, 16);
XFillRectangle(Xdisplay, color_pixmap, gc, 0, 0, 16, 16);
D_PIXMAP(("Created solid color pixmap 0x%08x for desktop_pixmap.\n", color_pixmap));
- X_FREE_GC(gc);
+ LIBMEJ_X_FREE_GC(gc);
return (desktop_pixmap = color_pixmap);
}
}
@@ -1933,7 +1902,7 @@ free_desktop_pixmap(void)
{
if (desktop_pixmap_is_mine && desktop_pixmap != None) {
- X_FREE_PIXMAP(desktop_pixmap);
+ LIBMEJ_X_FREE_PIXMAP(desktop_pixmap);
desktop_pixmap_is_mine = 0;
}
desktop_pixmap = None;
@@ -1990,8 +1959,8 @@ set_icon_pixmap(char *filename, XWMHints * pwm_hints)
}
if (filename && *filename) {
- if ((icon_path = search_path(rs_path, filename, NULL)) == NULL)
- icon_path = search_path(getenv(PATH_ENV), filename, NULL);
+ if ((icon_path = search_path(rs_path, filename)) == NULL)
+ icon_path = search_path(getenv(PATH_ENV), filename);
if (icon_path != NULL) {
XIconSize *icon_sizes;
diff --git a/src/pixmap.h b/src/pixmap.h
index 8f2f7f1..7a49d86 100644
--- a/src/pixmap.h
+++ b/src/pixmap.h
@@ -44,17 +44,17 @@ typedef void *Imlib_Color_Modifier;
# define background_is_viewport() (images[image_bg].mode & MODE_VIEWPORT)
# define background_is_auto() (images[image_bg].mode & MODE_AUTO)
# define background_is_pixmap() (background_is_image() || (images[image_bg].mode & (MODE_TRANS | MODE_VIEWPORT | MODE_AUTO)))
-# define delete_simage(simg) do { \
- imlib_free_pixmap_and_mask((simg)->pmap->pixmap); \
- imlib_context_set_image((simg)->iml->im); \
- imlib_free_image_and_decache(); \
- (simg)->pmap->pixmap = None; (simg)->iml->im = NULL; \
- } while (0)
-# define CONVERT_SHADE(s) (0xff - (((s) * 0xff) / 100))
-# define CONVERT_TINT_RED(t) (((t) & 0xff0000) >> 16)
-# define CONVERT_TINT_GREEN(t) (((t) & 0x00ff00) >> 8)
-# define CONVERT_TINT_BLUE(t) ((t) & 0x0000ff)
-# define IMLIB_FREE_PIXMAP(p) do {D_PIXMAP(("libmej_freeing pixmap: imlib_free_pixmap_and_mask(0x%08x)\n", (p))); imlib_free_pixmap_and_mask(p);} while (0)
+# define delete_simage(simg) do { \
+ imlib_free_pixmap_and_mask((simg)->pmap->pixmap); \
+ imlib_context_set_image((simg)->iml->im); \
+ imlib_free_image_and_decache(); \
+ (simg)->pmap->pixmap = None; (simg)->iml->im = NULL; \
+ } while (0)
+# define CONVERT_SHADE(s) (0xff - (((s) * 0xff) / 100))
+# define CONVERT_TINT_RED(t) (((t) & 0xff0000) >> 16)
+# define CONVERT_TINT_GREEN(t) (((t) & 0x00ff00) >> 8)
+# define CONVERT_TINT_BLUE(t) ((t) & 0x0000ff)
+# define IMLIB_FREE_PIXMAP(p) do {D_PIXMAP(("Freeing pixmap: imlib_free_pixmap_and_mask(0x%08x)\n", (p))); imlib_free_pixmap_and_mask(p);} while (0)
#else
# define background_is_image() (0)
# define background_is_trans() (0)
@@ -65,19 +65,10 @@ typedef void *Imlib_Color_Modifier;
# define delete_simage(simg) NOP
# define IMLIB_FREE_PIXMAP(p) NOP
#endif
-#ifdef __GNUC__
-# define X_CREATE_PIXMAP(w, h) __extension__ ({Pixmap __my_tmp_pmap = XCreatePixmap(Xdisplay, (TermWin.parent ? TermWin.parent : Xroot), (w), (h), Xdepth); \
- D_PIXMAP(("Created pixmap 0x%08x (width %d, height %d)\n", (__my_tmp_pmap), (w), (h))); \
- (__my_tmp_pmap);})
-# define X_CREATE_GC(flags, gcv) __extension__ ({GC __my_tmp_gc = XCreateGC(Xdisplay, (TermWin.parent ? TermWin.parent : Xroot), (flags), (gcv)); \
- D_PIXMAP(("Created GC 0x%08x\n", (__my_tmp_gc))); (__my_tmp_gc);})
-#else
-# define X_CREATE_PIXMAP(w, h) (XCreatePixmap(Xdisplay, TermWin.parent, (w), (h), Xdepth))
-# define X_CREATE_GC(flags, gcv) (XCreateGC(Xdisplay, TermWin.parent, (flags), (gcv)))
-#endif
-#define X_FREE_PIXMAP(p) do {D_PIXMAP(("libmej_freeing pixmap: XFreePixmap(Xdisplay, 0x%08x)\n", (p))); XFreePixmap(Xdisplay, (p));} while (0)
-#define X_FREE_GC(gc) do {D_PIXMAP(("libmej_freeing GC: XFreeGC(Xdisplay, 0x%08x)\n", (gc))); XFreeGC(Xdisplay, (gc));} while (0)
-#define PIXMAP_EXT NULL
+#define LIBMEJ_X_CREATE_PIXMAP(w, h) X_CREATE_PIXMAP(Xdisplay, (TermWin.parent ? TermWin.parent : Xroot), (w), (h), Xdepth)
+#define LIBMEJ_X_FREE_PIXMAP(p) X_FREE_PIXMAP(Xdisplay, (p))
+#define LIBMEJ_X_CREATE_GC(f, gcv) X_CREATE_GC(Xdisplay, (TermWin.parent ? TermWin.parent : Xroot), (f), (gcv))
+#define LIBMEJ_X_FREE_GC(gc) X_FREE_GC(Xdisplay, (gc))
#define GEOM_LEN 19
@@ -244,7 +235,7 @@ extern void redraw_images_by_mode(unsigned char);
#endif
extern void render_simage(simage_t *, Window, unsigned short, unsigned short, unsigned char, renderop_t);
#ifdef PIXMAP_SUPPORT
-extern const char *search_path(const char *, const char *, const char *);
+extern const char *search_path(const char *, const char *);
extern unsigned char load_image(const char *, simage_t *);
extern void update_cmod(colormod_t *);
extern void update_cmod_tables(imlib_t *);
diff --git a/src/scrollbar.c b/src/scrollbar.c
index b50cd76..3336776 100644
--- a/src/scrollbar.c
+++ b/src/scrollbar.c
@@ -885,19 +885,19 @@ scrollbar_drawing_init(void) {
gcvalue.fill_style = FillOpaqueStippled;
gcvalue.foreground = PixColors[fgColor];
gcvalue.background = PixColors[bgColor];
- gc_stipple = X_CREATE_GC(GCForeground | GCBackground | GCFillStyle | GCStipple, &gcvalue);
+ gc_stipple = LIBMEJ_X_CREATE_GC(GCForeground | GCBackground | GCFillStyle | GCStipple, &gcvalue);
gcvalue.foreground = PixColors[borderColor];
- gc_border = X_CREATE_GC(GCForeground, &gcvalue);
+ gc_border = LIBMEJ_X_CREATE_GC(GCForeground, &gcvalue);
}
#endif /* XTERM_SCROLLBAR */
#if defined(MOTIF_SCROLLBAR) || defined(NEXT_SCROLLBAR)
gcvalue.foreground = images[image_sb].norm->bg;
- gc_scrollbar = X_CREATE_GC(GCForeground, &gcvalue);
+ gc_scrollbar = LIBMEJ_X_CREATE_GC(GCForeground, &gcvalue);
gcvalue.foreground = PixColors[topShadowColor];
- gc_top = X_CREATE_GC(GCForeground, &gcvalue);
+ gc_top = LIBMEJ_X_CREATE_GC(GCForeground, &gcvalue);
gcvalue.foreground = PixColors[bottomShadowColor];
- gc_bottom = X_CREATE_GC(GCForeground, &gcvalue);
+ gc_bottom = LIBMEJ_X_CREATE_GC(GCForeground, &gcvalue);
#endif /* MOTIF_SCROLLBAR || NEXT_SCROLLBAR */
}
diff --git a/src/term.c b/src/term.c
index d43e92e..91f2399 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1869,7 +1869,7 @@ xterm_seq(int op, const char *str)
if (image_mode_is(which, MODE_TRANS) && (desktop_pixmap != None)) {
free_desktop_pixmap();
} else if (image_mode_is(which, MODE_VIEWPORT) && (viewport_pixmap != None)) {
- X_FREE_PIXMAP(viewport_pixmap);
+ LIBMEJ_X_FREE_PIXMAP(viewport_pixmap);
viewport_pixmap = None; /* Force the re-read */
}
# endif
@@ -1885,7 +1885,7 @@ xterm_seq(int op, const char *str)
if (image_mode_is(which, MODE_TRANS) && (desktop_pixmap != None)) {
free_desktop_pixmap();
} else if (image_mode_is(which, MODE_VIEWPORT) && (viewport_pixmap != None)) {
- X_FREE_PIXMAP(viewport_pixmap);
+ LIBMEJ_X_FREE_PIXMAP(viewport_pixmap);
viewport_pixmap = None; /* Force the re-read */
}
# endif
diff --git a/src/windows.c b/src/windows.c
index d480cfa..2f2126a 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -463,7 +463,7 @@ Create_Windows(int argc, char *argv[])
gcvalue.foreground = PixColors[fgColor];
gcvalue.background = PixColors[bgColor];
gcvalue.graphics_exposures = 0;
- TermWin.gc = X_CREATE_GC(GCForeground | GCBackground | GCFont | GCGraphicsExposures, &gcvalue);
+ TermWin.gc = LIBMEJ_X_CREATE_GC(GCForeground | GCBackground | GCFont | GCGraphicsExposures, &gcvalue);
}
if (Options & Opt_noCursor) {
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 0400905..a1a5c44 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -1,13 +1,11 @@
# $Id$
-INCLUDES = -I. -I../libmej -I.. -I$(includedir) -I$(prefix)/include $(X_CFLAGS)
-
bin_PROGRAMS = Esetroot Etbg Ettable
bin_SCRIPTS = Etcolors Etwinop Etsearch kEsetroot
Esetroot_SOURCES = Esetroot.c
Esetroot_LDFLAGS = -rpath $(libdir):$(pkglibdir)
-Esetroot_LDADD = -L$(DIST_ROOT)/libmej -L$(libdir) -L$(prefix)/lib $(LIBS) $(GRLIBS) $(X_LIBS)
+Esetroot_LDADD = -L$(DIST_ROOT)/libmej
Etbg_SOURCES = Etbg.c
Ettable_SOURCES = Ettable.c