# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os VERSION DATE LSMDATE LIBVERSION CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LINKER CXXCPP EGREP INSTALL_LIBRXVT RXVTNAME MV RM CP LN SED ECHO CMP TIC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS XPM_CPPFLAGS XPM_CFLAGS XPM_LIBS rxvt_int16_typedef rxvt_uint16_typedef rxvt_int32_typedef rxvt_uint32_typedef rxvt_intp_define rxvt_u_intp_define PERL PERLLIB PERLFLAGS PERLPRIVLIBEXP IF_PERL PERL_O DEBUG DINCLUDE DLIB include_stdint_h include_stdarg_h include_stdlib_h include_unistd_h include_string_h include_fcntl_h include_util_h include_assert_h include_sys_ioctl_h include_sys_select_h include_sys_strredir_h include_sys_time_h include_time_h LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os VERSION DATE LSMDATE LIBVERSION CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA EGREP LINKER INSTALL_LIBRXVT RXVTNAME MV RM CP LN SED ECHO CMP TIC CXXCPP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS XPM_CPPFLAGS XPM_CFLAGS XPM_LIBS rxvt_int16_typedef rxvt_uint16_typedef rxvt_int32_typedef rxvt_uint32_typedef rxvt_intp_define rxvt_u_intp_define PERL PERLLIB PERLFLAGS PERLPRIVLIBEXP IF_PERL PERL_O DEBUG DINCLUDE DLIB include_stdint_h include_stdarg_h include_stdlib_h include_unistd_h include_string_h include_fcntl_h include_util_h include_assert_h include_sys_ioctl_h include_sys_select_h include_sys_strredir_h include_sys_time_h include_time_h LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-if test -z "$orig_CXXFLAGS"; then
- if test x$GCC = xyes && test "x$GXX" = xyes; then
- CXXFLAGS="-g -O3"
- else
- CXXFLAGS="-O"
- fi
- CFLAGS="$CXXFLAGS"
-fi
-
-LINKER="$CXX"
-if test x$GCC = xyes && test x$GXX = xyes; then
-
-echo "$as_me:$LINENO: checking for main in -lsupc++" >&5
-echo $ECHO_N "checking for main in -lsupc++... $ECHO_C" >&6
-if test "${ac_cv_lib_supcpp_main+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsupc++ $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-main ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_supcpp_main=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_supcpp_main=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_supcpp_main" >&5
-echo "${ECHO_T}$ac_cv_lib_supcpp_main" >&6
-if test $ac_cv_lib_supcpp_main = yes; then
-
- LINKER="$CC"
- LIBS="$LIBS -lsupc++"
-
-fi
-
-fi
-LINKER=$LINKER
-
-
-
-cat >>confdefs.h <<\_ACEOF
-#define _GNU_SOURCE 1
-_ACEOF
-
-
-case $host in
- *-*-solaris* )
-
-cat >>confdefs.h <<\_ACEOF
-#define _XOPEN_SOURCE_EXTENDED 1
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define _XOPEN_SOURCE 2
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define __EXTENSIONS__ 1
-_ACEOF
-
- ;;
-esac
-
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
-echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
-if test -z "$CXXCPP"; then
- if test "${ac_cv_prog_CXXCPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CXXCPP needs to be expanded
- for CXXCPP in "$CXX -E" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
- CXXCPP=$ac_cv_prog_CXXCPP
-else
- ac_cv_prog_CXXCPP=$CXXCPP
-fi
-echo "$as_me:$LINENO: result: $CXXCPP" >&5
-echo "${ECHO_T}$CXXCPP" >&6
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
echo "$as_me:$LINENO: checking for egrep" >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- done
-fi
-LIBS=$ac_func_search_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
-echo "${ECHO_T}$ac_cv_search_strerror" >&6
-if test "$ac_cv_search_strerror" != no; then
- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+echo "${ECHO_T}$ac_cv_search_strerror" >&6
+if test "$ac_cv_search_strerror" != no; then
+ test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
+
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+LINKER="$CXX"
+if test x$GCC = xyes && test x$GXX = xyes; then
+ echo "$as_me:$LINENO: checking for main in -lsupc++" >&5
+echo $ECHO_N "checking for main in -lsupc++... $ECHO_C" >&6
+if test "${ac_cv_lib_supcpp_main+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsupc++ $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_supcpp_main=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_supcpp_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_supcpp_main" >&5
+echo "${ECHO_T}$ac_cv_lib_supcpp_main" >&6
+if test $ac_cv_lib_supcpp_main = yes; then
+
+ LINKER="$CC"
+ LIBS="$LIBS -lsupc++"
+
+fi
+
+fi
+LINKER=$LINKER
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test -z "$orig_CXXFLAGS"; then
+ if test x$GCC = xyes && test "x$GXX" = xyes; then
+ CXXFLAGS="-g -O3 -Os -fno-threadsafe-statics -fno-enforce-eh-specs"
+
+cat >conftest.$ac_ext <<_ACEOF
+int i;
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo didididid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+CXXFLAGS="-g -O3"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+ CXXFLAGS="-O"
+ fi
+ CFLAGS="$CXXFLAGS"
+fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _GNU_SOURCE 1
+_ACEOF
+
+
+case $host in
+ *-*-solaris* )
+
+cat >>confdefs.h <<\_ACEOF
+#define _XOPEN_SOURCE_EXTENDED 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _XOPEN_SOURCE 2
+_ACEOF
+
-fi
+cat >>confdefs.h <<\_ACEOF
+#define __EXTENSIONS__ 1
+_ACEOF
+
+ ;;
+esac
echo "$as_me:$LINENO: checking for setlocale" >&5
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
if test "x$ac_path_x_has_been_run" != xyes; then
echo "$as_me:$LINENO: checking for X" >&5
s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@LINKER@,$LINKER,;t t
-s,@CXXCPP@,$CXXCPP,;t t
s,@EGREP@,$EGREP,;t t
+s,@LINKER@,$LINKER,;t t
s,@INSTALL_LIBRXVT@,$INSTALL_LIBRXVT,;t t
s,@RXVTNAME@,$RXVTNAME,;t t
s,@MV@,$MV,;t t
s,@ECHO@,$ECHO,;t t
s,@CMP@,$CMP,;t t
s,@TIC@,$TIC,;t t
+s,@CXXCPP@,$CXXCPP,;t t
s,@X_CFLAGS@,$X_CFLAGS,;t t
s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
s,@X_LIBS@,$X_LIBS,;t t
AC_PROG_CPP
AC_PROG_INSTALL
+AC_AIX
+AC_ISC_POSIX
+
AC_LANG(C)
+dnl check wetehr we can link with gcc -lsupc++
+LINKER="$CXX"
+if test x$GCC = xyes && test x$GXX = xyes; then
+ AC_CHECK_LIB(supc++, main, [
+ LINKER="$CC"
+ LIBS="$LIBS -lsupc++"
+ ])
+fi
+AC_SUBST(LINKER,[$LINKER])
+
+AC_LANG(C++)
dnl# --------------------------------------------------------------------------
-dnl# Supply default CFLAGS, if not specified by `CFLAGS=flags ./configure'
+dnl# Supply default CXXLAGS, if not specified by `CXXLAGS=flags ./configure'
dnl#
if test -z "$orig_CXXFLAGS"; then
if test x$GCC = xyes && test "x$GXX" = xyes; then
- CXXFLAGS="-g -O3"
+ CXXFLAGS="-g -O3 -Os -fno-threadsafe-statics -fno-enforce-eh-specs"
+ AC_COMPILE_IFELSE([int i;], [echo didididid], [CXXFLAGS="-g -O3"])
else
CXXFLAGS="-O"
fi
CFLAGS="$CXXFLAGS"
fi
-LINKER="$CXX"
-if test x$GCC = xyes && test x$GXX = xyes; then
- AC_CHECK_LIB(supc++, main, [
- LINKER="$CC"
- LIBS="$LIBS -lsupc++"
- ])
-fi
-AC_SUBST(LINKER,[$LINKER])
-
AC_DEFINE(_GNU_SOURCE, 1, Use all glibc features.)
case $host in
dnl CXXFLAGS="$CXXFLAGS" dnl I once had -fno-exceptions, but I am using them now...
dnl fi
-AC_LANG(C++)
-
-dnl# system hacks
-AC_AIX
-AC_ISC_POSIX
-
dnl# FreeBSD needs to link libxpg4
AC_CHECK_FUNC(setlocale, [], [AC_CHECK_LIB(xpg4, setlocale, [LIBS="$LIBS -lxpg4"])])
CC=ccache\ gcc-4.0
CXX=ccache\ g++-4.0
export CC CXX
+ unset CXXFLAGS CFLAGS
fi
./configure --prefix=/opt/rxvt --with-name=rxvt --enable-menubar \
#define IS_CONTROL(ch) !((ch) & 0xffffff60UL)
-// exception thrown when the command parser runs out of input data
-class out_of_input { } out_of_input;
-
#if ENABLE_FRILLS || ISO_14755
#define ISO_14755_STARTED 0x80000000UL
hidden_cursor = !hidden_cursor;
want_refresh = 1;
- w.start (w.at + BLINK_INTERVAL);
+ w.start (w.at + CURSOR_BLINK_INTERVAL);
}
#endif
want_refresh = 1;
}
- cursor_blink_ev.start (NOW + BLINK_INTERVAL);
+ cursor_blink_ev.start (NOW + CURSOR_BLINK_INTERVAL);
}
#endif
#endif
#if CURSOR_BLINK
if (OPTION (Opt_cursorBlink))
- cursor_blink_ev.start (NOW + BLINK_INTERVAL);
+ cursor_blink_ev.start (NOW + CURSOR_BLINK_INTERVAL);
#endif
#if OFF_FOCUS_FADING
if (rs[Rs_fade])
// read the next character
wchar_t
-rxvt_term::next_char ()
+rxvt_term::next_char () NOTHROW
{
while (cmdbuf_ptr < cmdbuf_endp)
{
// read the next octet
uint32_t
-rxvt_term::next_octet ()
+rxvt_term::next_octet () NOTHROW
{
return cmdbuf_ptr < cmdbuf_endp
? (unsigned char)*cmdbuf_ptr++
: NOCHAR;
}
+static class out_of_input out_of_input;
+
/* rxvt_cmd_getc () - Return next input character */
/*
* Return the next input character after first passing any keyboard input
* to the command.
*/
wchar_t
-rxvt_term::cmd_getc ()
+rxvt_term::cmd_getc () THROW ((class out_of_input))
{
wchar_t c = next_char ();
}
uint32_t
-rxvt_term::cmd_get8 ()
+rxvt_term::cmd_get8 () THROW ((class out_of_input))
{
uint32_t c = next_octet ();
/* we're not using priv _yet_ */
void
-rxvt_term::process_terminal_mode (int mode, int priv __attribute__ ((unused)), unsigned int nargs, const int *arg)
+rxvt_term::process_terminal_mode (int mode, int priv UNUSED, unsigned int nargs, const int *arg)
{
unsigned int i, j;
int state;
*/
/*
+ * The cursor blink interval, in seconds.
+ */
+#define CURSOR_BLINK_INTERVAL 0.5
+
+/*
+ * The text blink interval, in seconds.
+ */
+#define TEXT_BLINK_INTERVAL CURSOR_BLINK_INTERVAL
+
+/*
* Avoid enabling the colour cursor (-cr, cursorColor, cursorColor2)
*/
/* #define NO_CURSORCOLOR */
#define IOM_TIME 1
#define IOM_CHECK 1
#define IOM_SIG 1
+#define IOM_IDLE 1
#define IOM_CHILD 1
#endif
vector<rxvt_term *> rxvt_term::termlist;
+// used to tell global functions which terminal instance is "active"
+rxvt_t rxvt_current_term;
+
static char curlocale[128], savelocale[128];
bool
-rxvt_set_locale (const char *locale)
+rxvt_set_locale (const char *locale) NOTHROW
{
if (!locale || !strncmp (locale, curlocale, 128))
return false;
}
void
-rxvt_push_locale (const char *locale)
+rxvt_push_locale (const char *locale) NOTHROW
{
strcpy (savelocale, curlocale);
rxvt_set_locale (locale);
}
void
-rxvt_pop_locale ()
+rxvt_pop_locale () NOTHROW
{
rxvt_set_locale (savelocale);
}
#ifdef KEYSYM_RESOURCE
keyboard = new keyboard_manager;
-
- if (!keyboard)
- rxvt_fatal ("out of memory, aborting.\n");
#endif
}
rxvt_term::~rxvt_term ()
{
- HOOK_INVOKE ((this, HOOK_DESTROY, DT_END));
-
termlist.erase (find (termlist.begin (), termlist.end(), this));
emergency_cleanup ();
if (destroy_ev.active)
return;
+ if (HOOK_INVOKE ((this, HOOK_DESTROY, DT_END)))
+ return;
+
#if ENABLE_OVERLAY
scr_overlay_off ();
#endif
}
#endif
- XMapWindow (disp, vt);
- XMapWindow (disp, parent[0]);
-
set_colorfgbg ();
init_command (cmd_argv);
HOOK_INVOKE ((this, HOOK_START, DT_END));
+ XMapWindow (disp, vt);
+ XMapWindow (disp, parent[0]);
+
return true;
}
return p;
}
-void *
+void *
rxvt_realloc (void *ptr, size_t size)
{
void *p = realloc (ptr, size);
}
#endif /* USE_XIM */
-/*----------------------------------------------------------------------*/
-rxvt_t rxvt_current_term;
-
/*----------------------- end-of-file (C source) -----------------------*/
}
char *
-rxvt_strdup (const char *str)
-{
- return str ? strdup (str) : 0;
-}
-
-char *
-rxvt_r_basename (const char *str)
+rxvt_r_basename (const char *str) NOTHROW
{
char *base = strrchr (str, '/');
* Print an error message
*/
void
-rxvt_vlog (const char *fmt, va_list arg_ptr)
+rxvt_vlog (const char *fmt, va_list arg_ptr) NOTHROW
{
char msg[1024];
}
void
-rxvt_log (const char *fmt,...)
+rxvt_log (const char *fmt,...) NOTHROW
{
va_list arg_ptr;
* Print an error message
*/
void
-rxvt_warn (const char *fmt,...)
+rxvt_warn (const char *fmt,...) NOTHROW
{
va_list arg_ptr;
}
void
-rxvt_fatal (const char *fmt,...)
+rxvt_fatal (const char *fmt,...) THROW ((class rxvt_failure_exception))
{
va_list arg_ptr;
rxvt_exit_failure ();
}
-class rxvt_failure_exception rxvt_failure_exception;
-
void
-rxvt_exit_failure ()
+rxvt_exit_failure () THROW ((class rxvt_failure_exception))
{
+ static class rxvt_failure_exception rxvt_failure_exception;
throw (rxvt_failure_exception);
}
* return: strlen (S2)
*/
int
-rxvt_Str_match (const char *s1, const char *s2)
+rxvt_Str_match (const char *s1, const char *s2) NOTHROW
{
int n = strlen (s2);
}
const char *
-rxvt_Str_skip_space (const char *str)
+rxvt_Str_skip_space (const char *str) NOTHROW
{
if (str)
while (*str && isspace (*str))
* in place.
*/
char *
-rxvt_Str_trim (char *str)
+rxvt_Str_trim (char *str) NOTHROW
{
char *r, *s;
* returns the converted string length
*/
int
-rxvt_Str_escaped (char *str)
+rxvt_Str_escaped (char *str) NOTHROW
{
char ch, *s, *d;
int i, num, append = 0;
* Caller should free each entry and array when done
*/
char **
-rxvt_splitcommastring (const char *cs)
+rxvt_splitcommastring (const char *cs) NOTHROW
{
int l, n, p;
const char *s, *t;
}
void
-rxvt_freecommastring (char **cs)
+rxvt_freecommastring (char **cs) NOTHROW
{
for (int i = 0; cs[i]; ++i)
free (cs[i]);
* FILE is either semi-colon or zero terminated
*/
char *
-rxvt_File_search_path (const char *pathlist, const char *file, const char *ext)
+rxvt_File_search_path (const char *pathlist, const char *file, const char *ext) NOTHROW
{
int maxpath, len;
const char *p, *path;
}
char *
-rxvt_File_find (const char *file, const char *ext, const char *path)
+rxvt_File_find (const char *file, const char *ext, const char *path) NOTHROW
{
char *f;
#endif
// should not be used in interactive programs, for obvious reasons
-void rxvt_usleep (int usecs)
+void rxvt_usleep (int usecs) NOTHROW
{
#if HAVE_NANOSLEEP
struct timespec ts;
my ($self) = @_;
$self->grab_button (2, urxvt::ControlMask);
+
+ ()
}
sub on_button_press {
/^(http|ftp|telnet|irc|news):\//
and $add_button->("run $self->{browser}" => sub { $self->exec_async ($self->{browser}, $_) });
+ warn "hook for $self $self->{term}\n";#d#
for my $hook (@{ $self->{term}{selection_popup_hook} || [] }) {
if (my ($title, $cb) = $hook->($popup)) {
$add_button->($title, $cb);
# define STDERR_FILENO 2
#endif
+/****************************************************************************/
+
+#ifndef __attribute__
+# if __GNUC__
+# if (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || (__GNUC__ < 2)
+# define __attribute__(x)
+# endif
+# endif
+# define __attribute__(x)
+#endif
+
+#define NORETURN __attribute__ ((noreturn))
+#define UNUSED __attribute__ ((unused))
+
+// increases code size unless -fno-enforce-eh-specs
+#if __GNUC__
+# define NOTHROW
+# define THROW(x)
+#else
+# define NOTHROW throw()
+# define THROW(x) throw x
+#endif
+
+// exception thrown on fatal (per-instance) errors
+class rxvt_failure_exception { };
+
+// exception thrown when the command parser runs out of input data
+class out_of_input { };
+
/*
*****************************************************************************
* PROTOTYPES
*****************************************************************************
*/
// main.C
-RETSIGTYPE rxvt_Child_signal (int sig);
-RETSIGTYPE rxvt_Exit_signal (int sig);
-void rxvt_clean_exit ();
+RETSIGTYPE rxvt_Child_signal (int sig) NOTHROW;
+RETSIGTYPE rxvt_Exit_signal (int sig) NOTHROW;
+void rxvt_clean_exit () NOTHROW;
void * rxvt_malloc (size_t size);
void * rxvt_calloc (size_t number, size_t size);
void * rxvt_realloc (void *ptr, size_t size);
-// util.C
+// misc.C
char * rxvt_wcstombs (const wchar_t *str, int len = -1);
wchar_t * rxvt_mbstowcs (const char *str, int len = -1);
char * rxvt_wcstoutf8 (const wchar_t *str, int len = -1);
wchar_t * rxvt_utf8towcs (const char *str, int len = -1);
-char * rxvt_strdup (const char *str);
-// misc.C
-char * rxvt_r_basename (const char *str);
-void rxvt_vlog (const char *fmt, va_list arg_ptr);
-void rxvt_log (const char *fmt,...);
-void rxvt_warn (const char *fmt,...);
-void rxvt_fatal (const char *fmt,...);
-void rxvt_exit_failure ();
-int rxvt_Str_match (const char *s1, const char *s2);
-const char * rxvt_Str_skip_space (const char *str);
-char * rxvt_Str_trim (char *str);
-int rxvt_Str_escaped (char *str);
-char ** rxvt_splitcommastring (const char *cs);
-void rxvt_freecommastring (char **cs);
-char * rxvt_File_find (const char *file, const char *ext, const char *path);
-void rxvt_usleep (int usecs);
+#define rxvt_strdup(s) ((s) ? strdup(s) : 0)
+
+char * rxvt_r_basename (const char *str) NOTHROW;
+void rxvt_vlog (const char *fmt, va_list arg_ptr) NOTHROW;
+void rxvt_log (const char *fmt,...) NOTHROW;
+void rxvt_warn (const char *fmt,...) NOTHROW;
+void rxvt_fatal (const char *fmt, ...) THROW ((class rxvt_failure_exception)) NORETURN;
+void rxvt_exit_failure () THROW ((class rxvt_failure_exception)) NORETURN;
+
+int rxvt_Str_match (const char *s1, const char *s2) NOTHROW;
+const char * rxvt_Str_skip_space (const char *str) NOTHROW;
+char * rxvt_Str_trim (char *str) NOTHROW;
+int rxvt_Str_escaped (char *str) NOTHROW;
+char ** rxvt_splitcommastring (const char *cs) NOTHROW;
+void rxvt_freecommastring (char **cs) NOTHROW;
+char * rxvt_File_find (const char *file, const char *ext, const char *path) NOTHROW;
+void rxvt_usleep (int usecs) NOTHROW;
/////////////////////////////////////////////////////////////////////////////
# define D_SIZE(x)
#endif
-extern class rxvt_failure_exception { } rxvt_failure_exception;
-
typedef callback1<void, const char *> log_callback;
typedef callback1<int, int> getfd_callback;
-extern void rxvt_vlog (const char *fmt, va_list arg_ptr);
-extern void rxvt_log (const char *fmt, ...);
-extern void rxvt_warn (const char *fmt, ...);
-extern void rxvt_fatal (const char *fmt, ...) __attribute__ ((noreturn));
-extern void rxvt_exit_failure () __attribute__ ((noreturn));
-
#define SET_LOCALE(locale) rxvt_set_locale (locale)
-extern bool rxvt_set_locale (const char *locale);
-extern void rxvt_push_locale (const char *locale);
-extern void rxvt_pop_locale ();
-
-/****************************************************************************/
-
-#define BLINK_INTERVAL 0.5
-#define TEXT_BLINK_INTERVAL 0.5
-
-#ifndef __attribute__
-# ifdef __GNUC__
-# if (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || (__GNUC__ < 2)
-# define __attribute__(x)
-# endif
-# endif
-# define __attribute__(x)
-#endif
+extern bool rxvt_set_locale (const char *locale) NOTHROW;
+extern void rxvt_push_locale (const char *locale) NOTHROW;
+extern void rxvt_pop_locale () NOTHROW;
/****************************************************************************/
text_t **ov_text;
rend_t **ov_rend;
- void scr_swap_overlay ();
- void scr_overlay_new (int x, int y, int w, int h);
- void scr_overlay_off ();
+ void scr_swap_overlay () NOTHROW;
+ void scr_overlay_new (int x, int y, int w, int h) NOTHROW;
+ void scr_overlay_off () NOTHROW;
void scr_overlay_set (int x, int y,
text_t text,
- rend_t rend = OVERLAY_RSTYLE);
- void scr_overlay_set (int x, int y, const char *s);
- void scr_overlay_set (int x, int y, const wchar_t *s);
+ rend_t rend = OVERLAY_RSTYLE) NOTHROW;
+ void scr_overlay_set (int x, int y, const char *s) NOTHROW;
+ void scr_overlay_set (int x, int y, const wchar_t *s) NOTHROW;
#endif
vector<void *> allocated; // free these memory blocks with free()
#endif
// modifies first argument(!)
- void paste (char *data, unsigned int len);
+ void paste (char *data, unsigned int len) NOTHROW;
long vt_emask, vt_emask_perl;
- void vt_select_input () const
+ void vt_select_input () const NOTHROW
{
XSelectInput (display->display, vt, vt_emask | vt_emask_perl);
}
void pty_cb (io_watcher &w, short revents); io_watcher pty_ev;
- void incr_cb (time_watcher &w); time_watcher incr_ev;
+ void incr_cb (time_watcher &w) NOTHROW; time_watcher incr_ev;
#ifdef CURSOR_BLINK
void cursor_blink_cb (time_watcher &w); time_watcher cursor_blink_ev;
void im_destroy ();
void im_cb (); im_watcher im_ev;
void im_set_size (XRectangle &size);
- void im_set_position (XPoint &pos);
+ void im_set_position (XPoint &pos) NOTHROW;
void im_set_color (unsigned long &fg, unsigned long &bg);
void im_set_preedit_area (XRectangle &preedit_rect, XRectangle &status_rect, const XRectangle &needed_rect);
void resize_scrollbar ();
- void pixel_position (int *x, int *y);
-
- void selection_click (int clicks, int x, int y);
- void selection_extend (int x, int y, int flag);
- void selection_rotate (int x, int y);
-
- /* autoconvert */
-
// command.C
void lookup_key (XKeyEvent &ev);
unsigned int cmd_write (const char *str, unsigned int count);
- wchar_t next_char ();
- wchar_t cmd_getc ();
- uint32_t next_octet ();
- uint32_t cmd_get8 ();
+ wchar_t next_char () NOTHROW;
+ wchar_t cmd_getc () THROW ((class out_of_input));
+ uint32_t next_octet () NOTHROW;
+ uint32_t cmd_get8 () THROW ((class out_of_input));
bool cmd_parse ();
void mouse_report (XButtonEvent &ev);
// screen.C
- void lalloc (line_t &l) const
+ void lalloc (line_t &l) const NOTHROW
{
l.t = (text_t *)talloc->alloc ();
l.r = (rend_t *)ralloc->alloc ();
}
#endif
- void lresize (line_t &l) const
+ void lresize (line_t &l) const NOTHROW
{
if (!l.t)
return;
scr_blank_line (l, prev_ncol, ncol - prev_ncol, DEFAULT_RSTYLE);
}
- int fgcolor_of (rend_t r) const
+ int fgcolor_of (rend_t r) const NOTHROW
{
int base = GET_BASEFG (r);
#ifndef NO_BRIGHTCOLOR
return base;
}
- int bgcolor_of (rend_t r) const
+ int bgcolor_of (rend_t r) const NOTHROW
{
int base = GET_BASEBG (r);
#ifndef NO_BRIGHTCOLOR
return base;
}
- bool option (uint32_t opt) const
+ bool option (uint32_t opt) const NOTHROW
{
return OPTION (opt);
}
- void set_option (uint32_t opt, bool set)
+ void set_option (uint32_t opt, bool set) NOTHROW
{
if (set)
options |= opt;
options &= ~opt;
}
- void scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs) const;
- void scr_blank_screen_mem (line_t &l, rend_t efs) const;
- int scr_scroll_text (int row1, int row2, int count);
+ void scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs) const NOTHROW;
+ void scr_blank_screen_mem (line_t &l, rend_t efs) const NOTHROW;
+ int scr_scroll_text (int row1, int row2, int count) NOTHROW;
void scr_reset ();
- void scr_release ();
- void scr_clear (bool really = false);
- void scr_refresh ();
- bool scr_refresh_rend (rend_t mask, rend_t value);
- void scr_erase_screen (int mode);
+ void scr_release () NOTHROW;
+ void scr_clear (bool really = false) NOTHROW;
+ void scr_refresh () NOTHROW;
+ bool scr_refresh_rend (rend_t mask, rend_t value) NOTHROW;
+ void scr_erase_screen (int mode) NOTHROW;
#if ENABLE_FRILLS
- void scr_erase_savelines ();
- void scr_backindex ();
- void scr_forwardindex ();
+ void scr_erase_savelines () NOTHROW;
+ void scr_backindex () NOTHROW;
+ void scr_forwardindex () NOTHROW;
#endif
- void scr_touch (bool refresh);
- void scr_expose (int x, int y, int width, int height, bool refresh);
+ void scr_touch (bool refresh) NOTHROW;
+ void scr_expose (int x, int y, int width, int height, bool refresh) NOTHROW;
rxvt_fontset *scr_find_fontset (rend_t r = DEFAULT_RSTYLE);
- void scr_recolour ();
- void scr_remap_chars ();
- void scr_remap_chars (line_t &l);
+ void scr_recolour () NOTHROW;
+ void scr_remap_chars () NOTHROW;
+ void scr_remap_chars (line_t &l) NOTHROW;
enum cursor_mode { SAVE, RESTORE };
- void scr_poweron ();
- void scr_cursor (cursor_mode mode);
- void scr_do_wrap ();
- int scr_change_screen (int scrn);
- void scr_color (unsigned int color, int fgbg);
- void scr_rendition (int set, int style);
- void scr_add_lines (const wchar_t *str, int len, int minlines = 0);
- void scr_backspace ();
- void scr_tab (int count, bool ht = false);
- void scr_gotorc (int row, int col, int relative);
- void scr_index (enum page_dirn direction);
- void scr_erase_line (int mode);
- void scr_E ();
- void scr_insdel_lines (int count, int insdel);
- void scr_insdel_chars (int count, int insdel);
- void scr_scroll_region (int top, int bot);
- void scr_cursor_visible (int mode);
- void scr_autowrap (int mode);
- void scr_relative_origin (int mode);
- void scr_insert_mode (int mode);
- void scr_set_tab (int mode);
- void scr_rvideo_mode (int mode);
- void scr_report_position ();
- void set_font_style ();
- void scr_charset_choose (int set);
- void scr_charset_set (int set, unsigned int ch);
- void scr_move_to (int y, int len);
- bool scr_page (enum page_dirn direction, int nlines);
- bool scr_changeview (int new_view_start);
- void scr_bell ();
- void scr_printscreen (int fullhist);
- void scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2);
- void scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle);
- void scr_reverse_selection ();
- void scr_dump (int fd);
- void selection_check (int check_more);
- void selection_paste (Window win, Atom prop, bool delete_prop);
- void selection_property (Window win, Atom prop);
- void selection_request (Time tm, int selnum);
- int selection_request_other (Atom target, int selnum);
- void selection_clear ();
+ void scr_poweron () NOTHROW;
+ void scr_cursor (cursor_mode mode) NOTHROW;
+ void scr_do_wrap () NOTHROW;
+ int scr_change_screen (int scrn) NOTHROW;
+ void scr_color (unsigned int color, int fgbg) NOTHROW;
+ void scr_rendition (int set, int style) NOTHROW;
+ void scr_add_lines (const wchar_t *str, int len, int minlines = 0) NOTHROW;
+ void scr_backspace () NOTHROW;
+ void scr_tab (int count, bool ht = false) NOTHROW;
+ void scr_gotorc (int row, int col, int relative) NOTHROW;
+ void scr_index (enum page_dirn direction) NOTHROW;
+ void scr_erase_line (int mode) NOTHROW;
+ void scr_E () NOTHROW;
+ void scr_insdel_lines (int count, int insdel) NOTHROW;
+ void scr_insdel_chars (int count, int insdel) NOTHROW;
+ void scr_scroll_region (int top, int bot) NOTHROW;
+ void scr_cursor_visible (int mode) NOTHROW;
+ void scr_autowrap (int mode) NOTHROW;
+ void scr_relative_origin (int mode) NOTHROW;
+ void scr_insert_mode (int mode) NOTHROW;
+ void scr_set_tab (int mode) NOTHROW;
+ void scr_rvideo_mode (int mode) NOTHROW;
+ void scr_report_position () NOTHROW;
+ void set_font_style () NOTHROW;
+ void scr_charset_choose (int set) NOTHROW;
+ void scr_charset_set (int set, unsigned int ch) NOTHROW;
+ void scr_move_to (int y, int len) NOTHROW;
+ bool scr_page (enum page_dirn direction, int nlines) NOTHROW;
+ bool scr_changeview (int new_view_start) NOTHROW;
+ void scr_bell () NOTHROW;
+ void scr_printscreen (int fullhist) NOTHROW;
+ void scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2) NOTHROW;
+ void scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle) NOTHROW;
+ void scr_reverse_selection () NOTHROW;
+ void scr_dump (int fd) NOTHROW;
+
+ void selection_check (int check_more) NOTHROW;
+ void selection_paste (Window win, Atom prop, bool delete_prop) NOTHROW;
+ void selection_property (Window win, Atom prop) NOTHROW;
+ void selection_request (Time tm, int selnum) NOTHROW;
+ int selection_request_other (Atom target, int selnum) NOTHROW;
+ void selection_clear () NOTHROW;
void selection_make (Time tm);
- bool selection_grab (Time tm);
- void selection_start_colrow (int col, int row);
- void selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret);
- void selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange);
- void selection_remove_trailing_spaces ();
- void selection_send (const XSelectionRequestEvent &rq);
+ bool selection_grab (Time tm) NOTHROW;
+ void selection_start_colrow (int col, int row) NOTHROW;
+ void selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret) NOTHROW;
+ void selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange) NOTHROW;
+ void selection_remove_trailing_spaces () NOTHROW;
+ void selection_send (const XSelectionRequestEvent &rq) NOTHROW;
+ void selection_click (int clicks, int x, int y) NOTHROW;
+ void selection_extend (int x, int y, int flag) NOTHROW;
+ void selection_rotate (int x, int y) NOTHROW;
+
+ void pixel_position (int *x, int *y) NOTHROW;
#if defined(NEXT_SCROLLBAR)
// scrollbar-next.C
#undef ROW
#define ROW(n) THIS->row_buf [LINENO (n)]
-#define ENABLE_PERL_FRILLS 1
+typedef int CHAINED UNUSED;
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+#define SvWATCHER(sv) (perl_watcher *)SvPTR (sv, "urxvt::watcher")
+
struct perl_watcher
{
SV *cbsv;
HV *self;
perl_watcher ()
- : cbsv (newSV (0))
+ : cbsv (0)
{
}
void cb (SV *cb)
{
- sv_setsv (cbsv, cb);
+ SvREFCNT_dec (cbsv);
+ cbsv = newSVsv (cb);
}
void invoke (const char *type, SV *self, int arg = -1);
}
#define newSVtimer(timer) new_ref (timer->self, "urxvt::timer")
-#define SvTIMER(sv) (timer *)SvPTR (sv, "urxvt::timer")
+#define SvTIMER(sv) (timer *)(perl_watcher *)SvPTR (sv, "urxvt::timer")
-struct timer : time_watcher, perl_watcher
+struct timer : perl_watcher, time_watcher
{
tstamp interval;
};
#define newSViow(iow) new_ref (iow->self, "urxvt::iow")
-#define SvIOW(sv) (iow *)SvPTR (sv, "urxvt::iow")
+#define SvIOW(sv) (iow *)(perl_watcher *)SvPTR (sv, "urxvt::iow")
-struct iow : io_watcher, perl_watcher
+struct iow : perl_watcher, io_watcher
{
iow ()
: io_watcher (this, &iow::execute)
}
};
+#define newSViw(iw) new_ref (iw->self, "urxvt::iw")
+#define SvIW(sv) (iw *)(perl_watcher *)SvPTR (sv, "urxvt::iw")
+
+struct iw : perl_watcher, idle_watcher
+{
+ iw ()
+ : idle_watcher (this, &iw::execute)
+ {
+ }
+
+ void execute (idle_watcher &w)
+ {
+ invoke ("urxvt::iw", newSViw (this));
+ }
+};
+
+#define newSVpw(pw) new_ref (pw->self, "urxvt::pw")
+#define SvPW(sv) (pw *)(perl_watcher *)SvPTR (sv, "urxvt::pw")
+
+struct pw : perl_watcher, child_watcher
+{
+ pw ()
+ : child_watcher (this, &pw::execute)
+ {
+ }
+
+ void execute (child_watcher &w, int status)
+ {
+ invoke ("urxvt::pw", newSVpw (this), status);
+ }
+};
+
/////////////////////////////////////////////////////////////////////////////
#define SvOVERLAY(sv) (overlay *)SvPTR (sv, "urxvt::overlay")
void
rxvt_term::destroy ()
-#if ENABLE_PERL_FRILLS
-
-void
-rxvt_term::XListProperties (U32 window)
- PPCODE:
-{
- int count;
- Atom *props = XListProperties (THIS->display->display, (Window)window, &count);
-
- EXTEND (SP, count);
- while (count--)
- PUSHs (newSVuv ((U32)props [count]));
-
- XFree (props);
-}
-
-void
-rxvt_term::XGetWindowProperty (U32 window, U32 property)
- PPCODE:
-{
- Atom type;
- int format;
- unsigned long nitems;
- unsigned long bytes_after;
- unsigned char *prop;
- XGetWindowProperty (THIS->display->display, (Window)window, (Atom)property,
- 0, 1<<30, 0, AnyPropertyType,
- &type, &format, &nitems, &bytes_after, &prop);
- if (type != None)
- {
- EXTEND (SP, 3);
- PUSHs (newSVuv ((U32)type));
- PUSHs (newSViv (format));
- PUSHs (newSVpvn ((char *)prop, nitems * format / 8));
- XFree (prop);
- }
-}
-
-void
-rxvt_term::XChangeWindowProperty (U32 window, U32 property, U32 type, int format, SV *data)
- CODE:
-{
- STRLEN len;
- char *data_ = SvPVbyte (data, len);
-
- XChangeProperty (THIS->display->display, (Window)window, (Atom)property,
- type, format, PropModeReplace,
- (unsigned char *)data, len * 8 / format);
-}
-
-void
-rxvt_term::XDeleteProperty (U32 window, U32 property)
- CODE:
- XDeleteProperty (THIS->display->display, (Window)window, (Atom)property);
-
-U32
-rxvt_term::DefaultRootWindow ()
- CODE:
- RETVAL = (U32)THIS->display->root;
- OUTPUT:
- RETVAL
-
-U32
-rxvt_term::XCreateSimpleWindow (U32 parent, int x, int y, unsigned int width, unsigned int height)
- CODE:
- RETVAL = XCreateSimpleWindow (THIS->display->display, (Window)parent,
- x, y, width, height, 0,
- THIS->pix_colors_focused[Color_border],
- THIS->pix_colors_focused[Color_border]);
- OUTPUT:
- RETVAL
-
-void
-rxvt_term::XReparentWindow (U32 window, U32 parent, int x = 0, int y = 0)
- CODE:
- XReparentWindow (THIS->display->display, (Window)window, (Window)parent, x, y);
-
-void
-rxvt_term::XMapWindow (U32 window)
- CODE:
- XMapWindow (THIS->display->display, (Window)window);
-
-void
-rxvt_term::XUnmapWindow (U32 window)
- CODE:
- XUnmapWindow (THIS->display->display, (Window)window);
-
-#endif
-
void
rxvt_term::set_should_invoke (int htype, int inc)
CODE:
GrabModeSync, GrabModeSync, None, GRAB_CURSOR);
bool
-rxvt_term::grab (U32 eventtime, int sync = 0)
+rxvt_term::grab (Time eventtime, int sync = 0)
CODE:
{
int mode = sync ? GrabModeSync : GrabModeAsync;
OUTPUT:
RETVAL
-U32
+Window
rxvt_term::parent ()
CODE:
- RETVAL = (U32)THIS->parent [0];
+ RETVAL = THIS->parent [0];
OUTPUT:
RETVAL
-U32
+Window
rxvt_term::vt ()
CODE:
- RETVAL = (U32)THIS->vt;
+ RETVAL = THIS->vt;
OUTPUT:
RETVAL
#rxvt_term::selection_clear ()
void
-rxvt_term::selection_make (U32 eventtime, bool rect = false)
+rxvt_term::selection_make (Time eventtime, bool rect = false)
CODE:
THIS->selection.op = SELECTION_CONT;
THIS->selection.rect = rect;
THIS->selection_make (eventtime);
int
-rxvt_term::selection_grab (U32 eventtime)
+rxvt_term::selection_grab (Time eventtime)
void
rxvt_term::selection (SV *newtext = 0)
OUTPUT:
RETVAL
+#############################################################################
+# Various X Utility Functions
+#############################################################################
+
+void
+rxvt_term::XListProperties (Window window)
+ PPCODE:
+{
+ int count;
+ Atom *props = XListProperties (THIS->display->display, window, &count);
+
+ EXTEND (SP, count);
+ while (count--)
+ PUSHs (newSVuv ((U32)props [count]));
+
+ XFree (props);
+}
+
+void
+rxvt_term::XGetWindowProperty (Window window, Atom property)
+ PPCODE:
+{
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long bytes_after;
+ unsigned char *prop;
+ XGetWindowProperty (THIS->display->display, window, property,
+ 0, 1<<30, 0, AnyPropertyType,
+ &type, &format, &nitems, &bytes_after, &prop);
+ if (type != None)
+ {
+ EXTEND (SP, 3);
+ PUSHs (newSVuv ((U32)type));
+ PUSHs (newSViv (format));
+ PUSHs (newSVpvn ((char *)prop, nitems * format / 8));
+ XFree (prop);
+ }
+}
+
+void
+rxvt_term::XChangeWindowProperty (Window window, Atom property, Atom type, int format, SV *data)
+ CODE:
+{
+ STRLEN len;
+ char *data_ = SvPVbyte (data, len);
+
+ XChangeProperty (THIS->display->display, window, property,
+ type, format, PropModeReplace,
+ (unsigned char *)data, len * 8 / format);
+}
+
+void
+XDeleteProperty (rxvt_term *term, Window window, Atom property)
+ C_ARGS: term->display->display, window, property
+
+Window
+rxvt_term::DefaultRootWindow ()
+ CODE:
+ RETVAL = THIS->display->root;
+ OUTPUT:
+ RETVAL
+
+Window
+XCreateSimpleWindow (rxvt_term *term, Window parent, int x, int y, unsigned int width, unsigned int height)
+ C_ARGS: term->display->display, (Window)parent,
+ x, y, width, height, 0,
+ term->pix_colors_focused[Color_border],
+ term->pix_colors_focused[Color_border]
+
+void
+XReparentWindow (rxvt_term *term, Window window, Window parent, int x = 0, int y = 0)
+ C_ARGS: term->display->display, window, parent, x, y
+
+void
+XMapWindow (rxvt_term *term, Window window)
+ C_ARGS: term->display->display, window
+
+void
+XUnmapWindow (rxvt_term *term, Window window)
+ C_ARGS: term->display->display, window
+
+void
+XMoveResizeWindow (rxvt_term *term, Window window, int x, int y, unsigned int width, unsigned int height)
+ C_ARGS: term->display->display, (Window)window, x, y, width, height
+
+#############################################################################
+# urxvt::overlay
+#############################################################################
+
MODULE = urxvt PACKAGE = urxvt::overlay
void
void
overlay::DESTROY ()
+#############################################################################
+# urxvt::watcher
+#############################################################################
+
+MODULE = urxvt PACKAGE = urxvt::watcher
+
+CHAINED
+perl_watcher::cb (SV *cb)
+ CODE:
+ THIS->cb (cb);
+ OUTPUT:
+ RETVAL
+
+#############################################################################
+# urxvt::timer
+#############################################################################
+
MODULE = urxvt PACKAGE = urxvt::timer
SV *
CODE:
timer *w = new timer;
w->start (NOW);
- RETVAL = newSVptr ((void *)w, "urxvt::timer");
+ RETVAL = newSVptr ((void *)(perl_watcher *)w, "urxvt::timer");
w->self = (HV *)SvRV (RETVAL);
OUTPUT:
RETVAL
-timer *
-timer::cb (SV *cb)
- CODE:
- THIS->cb (cb);
- RETVAL = THIS;
- OUTPUT:
- RETVAL
-
NV
timer::at ()
CODE:
OUTPUT:
RETVAL
-timer *
+CHAINED
timer::interval (NV interval)
CODE:
THIS->interval = interval;
- RETVAL = THIS;
OUTPUT:
RETVAL
-timer *
+CHAINED
timer::set (NV tstamp)
CODE:
THIS->set (tstamp);
- RETVAL = THIS;
OUTPUT:
RETVAL
-timer *
+CHAINED
timer::start (NV tstamp = THIS->at)
- CODE:
+ CODE:
THIS->start (tstamp);
- RETVAL = THIS;
OUTPUT:
RETVAL
-timer *
+CHAINED
timer::after (NV delay)
CODE:
THIS->start (NOW + delay);
- RETVAL = THIS;
OUTPUT:
RETVAL
-timer *
+CHAINED
timer::stop ()
CODE:
THIS->stop ();
- RETVAL = THIS;
OUTPUT:
RETVAL
void
timer::DESTROY ()
+#############################################################################
+# urxvt::iow
+#############################################################################
+
MODULE = urxvt PACKAGE = urxvt::iow
SV *
iow::new ()
CODE:
iow *w = new iow;
- RETVAL = newSVptr ((void *)w, "urxvt::iow");
+ RETVAL = newSVptr ((void *)(perl_watcher *)w, "urxvt::iow");
w->self = (HV *)SvRV (RETVAL);
OUTPUT:
RETVAL
-iow *
-iow::cb (SV *cb)
- CODE:
- THIS->cb (cb);
- RETVAL = THIS;
- OUTPUT:
- RETVAL
-
-iow *
+CHAINED
iow::fd (int fd)
CODE:
THIS->fd = fd;
- RETVAL = THIS;
OUTPUT:
RETVAL
-iow *
+CHAINED
iow::events (short events)
CODE:
THIS->events = events;
- RETVAL = THIS;
OUTPUT:
RETVAL
-iow *
+CHAINED
iow::start ()
- CODE:
+ CODE:
THIS->start ();
- RETVAL = THIS;
OUTPUT:
RETVAL
-iow *
+CHAINED
iow::stop ()
CODE:
THIS->stop ();
- RETVAL = THIS;
OUTPUT:
RETVAL
void
iow::DESTROY ()
+#############################################################################
+# urxvt::iw
+#############################################################################
+
+MODULE = urxvt PACKAGE = urxvt::iw
+
+SV *
+iw::new ()
+ CODE:
+ iw *w = new iw;
+ RETVAL = newSVptr ((void *)(perl_watcher *)w, "urxvt::iw");
+ w->self = (HV *)SvRV (RETVAL);
+ OUTPUT:
+ RETVAL
+
+CHAINED
+iow::start ()
+ CODE:
+ THIS->start ();
+ OUTPUT:
+ RETVAL
+
+CHAINED
+iow::stop ()
+ CODE:
+ THIS->stop ();
+ OUTPUT:
+ RETVAL
+
+void
+iw::DESTROY ()
+
+#############################################################################
+# urxvt::pw
+#############################################################################
+
+MODULE = urxvt PACKAGE = urxvt::pw
+
+SV *
+pw::new ()
+ CODE:
+ pw *w = new pw;
+ RETVAL = newSVptr ((void *)(perl_watcher *)w, "urxvt::pw");
+ w->self = (HV *)SvRV (RETVAL);
+ OUTPUT:
+ RETVAL
+
+CHAINED
+pw::start (int pid)
+ CODE:
+ THIS->start (pid);
+ OUTPUT:
+ RETVAL
+
+CHAINED
+iow::stop ()
+ CODE:
+ THIS->stop ();
+ OUTPUT:
+ RETVAL
+
+void
+pw::DESTROY ()
+
/* Fill part/all of a line with blanks. */
void
-rxvt_term::scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs) const
+rxvt_term::scr_blank_line (line_t &l, unsigned int col, unsigned int width, rend_t efs) const NOTHROW
{
if (!l.t)
{
/* ------------------------------------------------------------------------- */
/* Fill a full line with blanks - make sure it is allocated first */
void
-rxvt_term::scr_blank_screen_mem (line_t &l, rend_t efs) const
+rxvt_term::scr_blank_screen_mem (line_t &l, rend_t efs) const NOTHROW
{
scr_blank_line (l, 0, ncol, efs);
* Free everything. That way malloc debugging can find leakage.
*/
void
-rxvt_term::scr_release ()
+rxvt_term::scr_release () NOTHROW
{
delete talloc; talloc = 0;
delete ralloc; ralloc = 0;
* Hard reset
*/
void
-rxvt_term::scr_poweron ()
+rxvt_term::scr_poweron () NOTHROW
{
scr_release ();
prev_nrow = prev_ncol = 0;
* XTERM_SEQ: Restore cursor: ESC 8
*/
void
-rxvt_term::scr_cursor (cursor_mode mode)
+rxvt_term::scr_cursor (cursor_mode mode) NOTHROW
{
screen_t *s;
* XTERM_SEQ: Secondary screen: ESC [ ? 4 7 l
*/
int
-rxvt_term::scr_change_screen (int scrn)
+rxvt_term::scr_change_screen (int scrn) NOTHROW
{
want_refresh = 1;
view_start = 0;
// clear WrapNext indicator, solidifying position on next line
void
-rxvt_term::scr_do_wrap ()
+rxvt_term::scr_do_wrap () NOTHROW
{
if (!(screen.flags & Screen_WrapNext))
return;
* Change the colour for following text
*/
void
-rxvt_term::scr_color (unsigned int color, int fgbg)
+rxvt_term::scr_color (unsigned int color, int fgbg) NOTHROW
{
if (!IN_RANGE_INC (color, minCOLOR, maxTermCOLOR))
color = fgbg;
* Change the rendition style for following text
*/
void
-rxvt_term::scr_rendition (int set, int style)
+rxvt_term::scr_rendition (int set, int style) NOTHROW
{
if (set)
rstyle |= style;
* count negative ==> scroll down
*/
int
-rxvt_term::scr_scroll_text (int row1, int row2, int count)
+rxvt_term::scr_scroll_text (int row1, int row2, int count) NOTHROW
{
if (count == 0 || (row1 > row2))
return 0;
* Add text given in <str> of length <len> to screen struct
*/
void
-rxvt_term::scr_add_lines (const wchar_t *str, int len, int minlines)
+rxvt_term::scr_add_lines (const wchar_t *str, int len, int minlines) NOTHROW
{
if (len <= 0) /* sanity */
return;
* XTERM_SEQ: CTRL-H
*/
void
-rxvt_term::scr_backspace ()
+rxvt_term::scr_backspace () NOTHROW
{
want_refresh = 1;
* XTERM_SEQ: CTRL-I
*/
void
-rxvt_term::scr_tab (int count, bool ht)
+rxvt_term::scr_tab (int count, bool ht) NOTHROW
{
int i, x;
*/
#if ENABLE_FRILLS
void
-rxvt_term::scr_backindex ()
+rxvt_term::scr_backindex () NOTHROW
{
if (screen.cur.col > 0)
scr_gotorc (0, -1, R_RELATIVE | C_RELATIVE);
*/
#if ENABLE_FRILLS
void
-rxvt_term::scr_forwardindex ()
+rxvt_term::scr_forwardindex () NOTHROW
{
if (screen.cur.col < ncol - 1)
scr_gotorc (0, 1, R_RELATIVE | C_RELATIVE);
* Goto Row/Column
*/
void
-rxvt_term::scr_gotorc (int row, int col, int relative)
+rxvt_term::scr_gotorc (int row, int col, int relative) NOTHROW
{
want_refresh = 1;
ZERO_SCROLLBACK ();
* direction should be UP or DN
*/
void
-rxvt_term::scr_index (enum page_dirn direction)
+rxvt_term::scr_index (enum page_dirn direction) NOTHROW
{
int dirn;
* XTERM_SEQ: Clear whole line : ESC [ 2 K
*/
void
-rxvt_term::scr_erase_line (int mode)
+rxvt_term::scr_erase_line (int mode) NOTHROW
{
unsigned int col, num;
* XTERM_SEQ: Clear whole screen : ESC [ 2 J
*/
void
-rxvt_term::scr_erase_screen (int mode)
+rxvt_term::scr_erase_screen (int mode) NOTHROW
{
int num;
int32_t row;
#if ENABLE_FRILLS
void
-rxvt_term::scr_erase_savelines ()
+rxvt_term::scr_erase_savelines () NOTHROW
{
want_refresh = 1;
ZERO_SCROLLBACK ();
* XTERM_SEQ: Screen Alignment Test: ESC # 8
*/
void
-rxvt_term::scr_E ()
+rxvt_term::scr_E () NOTHROW
{
rend_t fs;
* Insert/Delete <count> lines
*/
void
-rxvt_term::scr_insdel_lines (int count, int insdel)
+rxvt_term::scr_insdel_lines (int count, int insdel) NOTHROW
{
int end;
* Insert/Delete <count> characters from the current position
*/
void
-rxvt_term::scr_insdel_chars (int count, int insdel)
+rxvt_term::scr_insdel_chars (int count, int insdel) NOTHROW
{
int col, row;
rend_t tr;
* XTERM_SEQ: Set region <top> - <bot> inclusive: ESC [ <top> ; <bot> r
*/
void
-rxvt_term::scr_scroll_region (int top, int bot)
+rxvt_term::scr_scroll_region (int top, int bot) NOTHROW
{
max_it (top, 0);
min_it (bot, nrow - 1);
* XTERM_SEQ: Make cursor invisible: ESC [ ? 25 l
*/
void
-rxvt_term::scr_cursor_visible (int mode)
+rxvt_term::scr_cursor_visible (int mode) NOTHROW
{
want_refresh = 1;
* XTERM_SEQ: Unset Wraparound: ESC [ ? 7 l
*/
void
-rxvt_term::scr_autowrap (int mode)
+rxvt_term::scr_autowrap (int mode) NOTHROW
{
if (mode)
screen.flags |= Screen_Autowrap;
* XTERM_SEQ: Set Relative: ESC [ ? 6 l
*/
void
-rxvt_term::scr_relative_origin (int mode)
+rxvt_term::scr_relative_origin (int mode) NOTHROW
{
if (mode)
screen.flags |= Screen_Relative;
* XTERM_SEQ: Set Replace mode: ESC [ ? 4 l
*/
void
-rxvt_term::scr_insert_mode (int mode)
+rxvt_term::scr_insert_mode (int mode) NOTHROW
{
if (mode)
screen.flags |= Screen_Insert;
* XTERM_SEQ: Clear all tabs : ESC [ 3 g
*/
void
-rxvt_term::scr_set_tab (int mode)
+rxvt_term::scr_set_tab (int mode) NOTHROW
{
if (mode < 0)
memset (tabs, 0, ncol * sizeof (char));
* XTERM_SEQ: Normal video : ESC [ ? 5 l
*/
void
-rxvt_term::scr_rvideo_mode (int mode)
+rxvt_term::scr_rvideo_mode (int mode) NOTHROW
{
XGCValues gcvalue;
* XTERM_SEQ: Report position: ESC [ 6 n
*/
void
-rxvt_term::scr_report_position ()
+rxvt_term::scr_report_position () NOTHROW
{
tt_printf ("\033[%d;%dR", screen.cur.row + 1, screen.cur.col + 1);
}
* Set font style
*/
void
-rxvt_term::set_font_style ()
+rxvt_term::set_font_style () NOTHROW
{
#if 0
switch (charsets [screen.charset])
* XTERM_SEQ: Invoke G3 character set: ESC O
*/
void
-rxvt_term::scr_charset_choose (int set)
+rxvt_term::scr_charset_choose (int set) NOTHROW
{
screen.charset = set;
set_font_style ();
* See set_font_style for possible values for <C>
*/
void
-rxvt_term::scr_charset_set (int set, unsigned int ch)
+rxvt_term::scr_charset_set (int set, unsigned int ch) NOTHROW
{
charsets[set] = (unsigned char)ch;
set_font_style ();
* refresh matching text.
*/
bool
-rxvt_term::scr_refresh_rend (rend_t mask, rend_t value)
+rxvt_term::scr_refresh_rend (rend_t mask, rend_t value) NOTHROW
{
bool found = false;
};
void
-rxvt_term::scr_expose (int x, int y, int ewidth, int eheight, bool refresh)
+rxvt_term::scr_expose (int x, int y, int ewidth, int eheight, bool refresh) NOTHROW
{
int i;
row_col_t rc[RC_COUNT];
* Refresh the entire screen
*/
void
-rxvt_term::scr_touch (bool refresh)
+rxvt_term::scr_touch (bool refresh) NOTHROW
{
scr_expose (0, 0, width, height, refresh);
}
* the top of the screen
*/
void
-rxvt_term::scr_move_to (int y, int len)
+rxvt_term::scr_move_to (int y, int len) NOTHROW
{
scr_changeview ((top_row - nrow) * (len - y) / len + (nrow - 1));
}
* direction should be UP or DN
*/
bool
-rxvt_term::scr_page (enum page_dirn direction, int nlines)
+rxvt_term::scr_page (enum page_dirn direction, int nlines) NOTHROW
{
int new_view_start =
direction == UP ? view_start - nlines
}
bool
-rxvt_term::scr_changeview (int new_view_start)
+rxvt_term::scr_changeview (int new_view_start) NOTHROW
{
clamp_it (new_view_start, top_row, 0);
/* ------------------------------------------------------------------------- */
void
-rxvt_term::scr_bell ()
+rxvt_term::scr_bell () NOTHROW
{
#ifndef NO_BELL
/* ------------------------------------------------------------------------- */
/* ARGSUSED */
void
-rxvt_term::scr_printscreen (int fullhist)
+rxvt_term::scr_printscreen (int fullhist) NOTHROW
{
#ifdef PRINTPIPE
int nrows, row_start;
* screen.text/screen.rend contain what the screen will change to.
*/
void
-rxvt_term::scr_refresh ()
+rxvt_term::scr_refresh () NOTHROW
{
unsigned char must_clear, /* use draw_string not draw_image_string */
showcursor; /* show the cursor */
}
void
-rxvt_term::scr_remap_chars (line_t &l)
+rxvt_term::scr_remap_chars (line_t &l) NOTHROW
{
if (!l.t)
return;
}
void
-rxvt_term::scr_remap_chars ()
+rxvt_term::scr_remap_chars () NOTHROW
{
for (int i = total_rows; i--; )
scr_remap_chars (row_buf [i]);
}
void
-rxvt_term::scr_recolour ()
+rxvt_term::scr_recolour () NOTHROW
{
if (1
#if TRANSPARENT
/* ------------------------------------------------------------------------- */
void
-rxvt_term::scr_clear (bool really)
+rxvt_term::scr_clear (bool really) NOTHROW
{
if (!mapped)
return;
}
void
-rxvt_term::scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2)
+rxvt_term::scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2) NOTHROW
{
int view_end = view_start + nrow;
int row, col;
}
void
-rxvt_term::scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle)
+rxvt_term::scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle) NOTHROW
{
int view_end = view_start + nrow;
int row, col;
/* ------------------------------------------------------------------------- */
void
-rxvt_term::scr_reverse_selection ()
+rxvt_term::scr_reverse_selection () NOTHROW
{
if (selection.op
&& current_screen == selection.screen
*/
#if 0
void
-rxvt_term::scr_dump (int fd)
+rxvt_term::scr_dump (int fd) NOTHROW
{
int row, wrote;
unsigned int width, towrite;
* CHARACTER SELECTION *
* ------------------------------------------------------------------------- */
void
-rxvt_term::selection_check (int check_more)
+rxvt_term::selection_check (int check_more) NOTHROW
{
row_col_t pos;
* Paste a selection direct to the command fd
*/
void
-rxvt_term::paste (char *data, unsigned int len)
+rxvt_term::paste (char *data, unsigned int len) NOTHROW
{
/* convert normal newline chars into common keyboard Return key sequence */
for (unsigned int i = 0; i < len; i++)
* EXT: SelectionNotify
*/
void
-rxvt_term::selection_paste (Window win, Atom prop, bool delete_prop)
+rxvt_term::selection_paste (Window win, Atom prop, bool delete_prop) NOTHROW
{
if (prop == None) /* check for failed XConvertSelection */
{
}
void
-rxvt_term::incr_cb (time_watcher &w)
+rxvt_term::incr_cb (time_watcher &w) NOTHROW
{
selection_wait = Sel_none;
}
void
-rxvt_term::selection_property (Window win, Atom prop)
+rxvt_term::selection_property (Window win, Atom prop) NOTHROW
{
if (prop == None || selection_wait != Sel_incr)
return;
* EXT: button 2 release
*/
void
-rxvt_term::selection_request (Time tm, int selnum)
+rxvt_term::selection_request (Time tm, int selnum) NOTHROW
{
/* After making a selection with selection_make this function will always
* return the internal selection, which is not correct IMO, now much more since
}
int
-rxvt_term::selection_request_other (Atom target, int selnum)
+rxvt_term::selection_request_other (Atom target, int selnum) NOTHROW
{
Atom sel;
* EXT: SelectionClear
*/
void
-rxvt_term::selection_clear ()
+rxvt_term::selection_clear () NOTHROW
{
want_refresh = 1;
free (selection.text);
}
bool
-rxvt_term::selection_grab (Time tm)
+rxvt_term::selection_grab (Time tm) NOTHROW
{
selection_time = tm;
* EXT: button 1 press
*/
void
-rxvt_term::selection_click (int clicks, int x, int y)
+rxvt_term::selection_click (int clicks, int x, int y) NOTHROW
{
clicks = ((clicks - 1) % 3) + 1;
selection.clicks = clicks; /* save clicks so extend will work */
* Mark a selection at the specified col/row
*/
void
-rxvt_term::selection_start_colrow (int col, int row)
+rxvt_term::selection_start_colrow (int col, int row) NOTHROW
{
want_refresh = 1;
#define DELIMIT_REND(x) 1
void
-rxvt_term::selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret)
+rxvt_term::selection_delimit_word (enum page_dirn dirn, const row_col_t *mark, row_col_t *ret) NOTHROW
{
int col, row, dirnadd, tcol, trow, w1, w2;
row_col_t bound;
* flag == 2 ==> button 3 motion
*/
void
-rxvt_term::selection_extend (int x, int y, int flag)
+rxvt_term::selection_extend (int x, int y, int flag) NOTHROW
{
int col = clamp (Pixel2Col (x), 0, ncol);
int row = clamp (Pixel2Row (y), 0, nrow - 1);
* Extend the selection to the specified col/row
*/
void
-rxvt_term::selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange)
+rxvt_term::selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange) NOTHROW
{
row_col_t pos;
enum {
#if ENABLE_FRILLS
void
-rxvt_term::selection_remove_trailing_spaces ()
+rxvt_term::selection_remove_trailing_spaces () NOTHROW
{
int32_t end_col, end_row;
text_t *stp;
* EXT: button 3 double click
*/
void
-rxvt_term::selection_rotate (int x, int y)
+rxvt_term::selection_rotate (int x, int y) NOTHROW
{
selection.clicks = selection.clicks % 3 + 1;
selection_extend_colrow (Pixel2Col (x), Pixel2Row (y), 1, 0, 1);
* EXT: SelectionRequest
*/
void
-rxvt_term::selection_send (const XSelectionRequestEvent &rq)
+rxvt_term::selection_send (const XSelectionRequestEvent &rq) NOTHROW
{
XSelectionEvent ev;
dDisp;
* return col/row values corresponding to x/y pixel values
*/
void
-rxvt_term::pixel_position (int *x, int *y)
+rxvt_term::pixel_position (int *x, int *y) NOTHROW
{
*x = Pixel2Col (*x);
/* max_it (*x, 0); min_it (*x, (int)ncol - 1); */
/* ------------------------------------------------------------------------- */
#ifdef USE_XIM
void
-rxvt_term::im_set_position (XPoint &pos)
+rxvt_term::im_set_position (XPoint &pos) NOTHROW
{
XWindowAttributes xwa;
#if ENABLE_OVERLAY
void
-rxvt_term::scr_overlay_new (int x, int y, int w, int h)
+rxvt_term::scr_overlay_new (int x, int y, int w, int h) NOTHROW
{
if (nrow < 1 || ncol < 1)
return;
}
void
-rxvt_term::scr_overlay_off ()
+rxvt_term::scr_overlay_off () NOTHROW
{
if (!ov_text)
return;
}
void
-rxvt_term::scr_overlay_set (int x, int y, text_t text, rend_t rend)
+rxvt_term::scr_overlay_set (int x, int y, text_t text, rend_t rend) NOTHROW
{
if (!ov_text || x >= ov_w - 2 || y >= ov_h - 2)
return;
}
void
-rxvt_term::scr_overlay_set (int x, int y, const char *s)
+rxvt_term::scr_overlay_set (int x, int y, const char *s) NOTHROW
{
while (*s)
scr_overlay_set (x++, y, *s++);
}
void
-rxvt_term::scr_overlay_set (int x, int y, const wchar_t *s)
+rxvt_term::scr_overlay_set (int x, int y, const wchar_t *s) NOTHROW
{
while (*s)
{
}
void
-rxvt_term::scr_swap_overlay ()
+rxvt_term::scr_swap_overlay () NOTHROW
{
if (!ov_text)
return;
rxvt_term * T_TERM
+
+perl_watcher * T_WATCHER
timer * T_TIMER
iow * T_IOW
+pw * T_PW
+iw * T_IW
+
overlay * T_OVERLAY
+Time T_UV
+Atom T_UV
+Window T_UV
+
+CHAINED T_CHAINED
+
+
INPUT
+
T_TERM
$var = SvTERM ($arg);
+T_WATCHER
+ $var = SvWATCHER ($arg);
T_TIMER
$var = SvTIMER ($arg);
T_IOW
$var = SvIOW ($arg);
+T_PW
+ $var = SvPW ($arg);
+T_IW
+ $var = SvIW ($arg);
T_OVERLAY
$var = SvOVERLAY ($arg);
+
OUTPUT
+
T_TERM
$arg = newSVterm ($var);
T_TIMER
$arg = newSVtimer ($var);
T_IOW
$arg = newSViow ($var);
+T_PW
+ $arg = newSVpw ($var);
+T_IW
+ $arg = newSViw ($var);
+T_CHAINED
+ $arg = newSVsv (ST(0));
+
=item on_start $term
Called at the very end of initialisation of a new terminal, just before
-returning to the mainloop.
+trying to map (display) the toplevel and returning to the mainloop.
+
+=item on_destroy $term
+
+Called whenever something tries to destroy terminal, before doing anything
+yet. If this hook returns true, then destruction is skipped, but this is
+rarely a good idea.
=item on_reset $term
our $VERSION = 1;
our $TERM;
+our @TERM_INIT;
+our @TERM_EXT;
our @HOOKNAME;
our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
our %OPTION;
The current terminal. This variable stores the current C<urxvt::term>
object, whenever a callback/hook is executing.
+=item @urxvt::TERM_INIT
+
+All coderefs in this array will be called as methods of the next newly
+created C<urxvt::term> object (during the C<on_init> phase). The array
+gets cleared before the codereferences that were in it are being executed,
+so coderefs can push themselves onto it again if they so desire.
+
+This complements to the perl-eval commandline option, but gets executed
+first.
+
+=item @urxvt::TERM_EXT
+
+Works similar to C<@TERM_INIT>, but contains perl package/class names, which
+get registered as normal extensions after calling the hooks in C<@TERM_INIT>
+but before other extensions. Gets cleared just like C<@TERM_INIT>.
+
=back
=head2 Functions in the C<urxvt> Package
sub extension_package($) {
my ($path) = @_;
- no strict 'refs';
-
$extension_pkg{$path} ||= do {
$path =~ /([^\/\\]+)$/;
my $pkg = $1;
open my $fh, "<:raw", $path
or die "$path: $!";
- @{"$pkg\::ISA"} = urxvt::term::extension::;
-
my $source =
"package $pkg; use strict; use utf8;\n"
. "#line 1 \"$path\"\n{\n"
my %ext_arg;
- for (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
+ {
+ my @init = @TERM_INIT;
+ @TERM_INIT = ();
+ $_->($TERM) for @init;
+ my @pkg = @TERM_EXT;
+ @TERM_EXT = ();
+ $TERM->register_package ($_) for @pkg;
+ }
+
+ for (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
if ($_ eq "default") {
$ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback);
} elsif (/^-(.*)$/) {
keys %$cb;
while (my ($pkg, $cb) = each %$cb) {
- $retval ||= eval { $cb->($TERM->{_pkg}{$pkg}, @_) };
+ my $retval_ = eval { $cb->($TERM->{_pkg}{$pkg}, @_) };
+ $retval ||= $retval_;
if ($@) {
$TERM->ungrab; # better to lose the grab than the session
sub register_package {
my ($self, $pkg, $argv) = @_;
+ no strict 'refs';
+
+ urxvt::verbose 6, "register package $pkg to $self";
+
+ @{"$pkg\::ISA"} = urxvt::term::extension::;
+
my $proxy = bless {
_pkg => $pkg,
argv => $argv,
=back
+=cut
+
+package urxvt::watcher;
+
+@urxvt::timer::ISA = __PACKAGE__;
+@urxvt::iow::ISA = __PACKAGE__;
+@urxvt::pw::ISA = __PACKAGE__;
+@urxvt::iw::ISA = __PACKAGE__;
+
=head2 The C<urxvt::timer> Class
This class implements timer watchers/events. Time is represented as a
*/
/* ARGSUSED */
int
-rxvt_define_key (XrmDatabase *database __attribute__((unused)),
- XrmBindingList bindings __attribute__((unused)),
+rxvt_define_key (XrmDatabase *database UNUSED,
+ XrmBindingList bindings UNUSED,
XrmQuarkList quarks,
- XrmRepresentation *type __attribute__((unused)),
+ XrmRepresentation *type UNUSED,
XrmValue *value,
- XPointer closure __attribute__((unused)))
+ XPointer closure UNUSED)
{
int last;