You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
(27) |
Apr
(11) |
May
(112) |
Jun
(8) |
Jul
(10) |
Aug
(68) |
Sep
(12) |
Oct
(3) |
Nov
(19) |
Dec
(3) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(15) |
Mar
(20) |
Apr
(22) |
May
(131) |
Jun
(27) |
Jul
(19) |
Aug
(207) |
Sep
(61) |
Oct
(27) |
Nov
(28) |
Dec
(21) |
| 2004 |
Jan
(7) |
Feb
(25) |
Mar
(14) |
Apr
(55) |
May
(15) |
Jun
(2) |
Jul
(14) |
Aug
(28) |
Sep
(29) |
Oct
|
Nov
|
Dec
|
|
From: Brenda L. <asp...@us...> - 2003-05-12 07:26:27
|
Update of /cvsroot/squeak/squeak/platforms/unix/plugins/DropPlugin
In directory sc8-pr-cvs1:/tmp/cvs-serv30143/plugins/DropPlugin
Added Files:
Makefile.inc sqUnixDragDrop.c
Log Message:
Ian Piumarta's release 3.4.1
--- NEW FILE: Makefile.inc ---
XCPPFLAGS= -I$(topdir)/platforms/Cross/plugins/FilePlugin
--- NEW FILE: sqUnixDragDrop.c ---
#include "sq.h"
#include "sqVirtualMachine.h"
#include "FilePlugin.h"
#include "DropPlugin.h"
extern struct VirtualMachine *interpreterProxy;
int dropInit(void)
{
return 0; /* fail */
}
int dropShutdown()
{
return 1;
}
char *dropRequestFileName(int dropIndex)
{
return NULL;
}
int dropRequestFileHandle(int dropIndex)
{
return interpreterProxy->nilObject();
}
int sqSecFileAccessCallback(void *callback)
{
return 0;
}
void sqSetNumberOfDropFiles(int numberOfFiles)
{
}
void sqSetFileInformation(int dropIndex, void *dropFile)
{
}
|
|
From: Brenda L. <asp...@us...> - 2003-05-12 07:26:26
|
Update of /cvsroot/squeak/squeak/platforms/unix/config/autom4te.cache
In directory sc8-pr-cvs1:/tmp/cvs-serv30143/config/autom4te.cache
Added Files:
output.0 output.1 requests traces.0 traces.1
Log Message:
Ian Piumarta's release 3.4.1
--- NEW FILE: output.0 ---
@%:@! /bin/sh
@%:@ Guess values for system-dependent variables and create Makefiles.
@%:@ Generated by GNU Autoconf 2.53.
@%:@
@%:@ Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
@%:@ Free Software Foundation, Inc.
@%:@ This configure script is free software; the Free Software Foundation
@%:@ gives unlimited permission to copy, distribute and modify it.
# Find the correct PATH separator. Usually this is `:', but
# DJGPP uses `;' like DOS.
if test "X${PATH_SEPARATOR+set}" != Xset; then
UNAME=${UNAME-`uname 2>/dev/null`}
case X$UNAME in
*-DOS) lt_cv_sys_path_separator=';' ;;
*) lt_cv_sys_path_separator=':' ;;
esac
PATH_SEPARATOR=$lt_cv_sys_path_separator
fi
[...13366 lines suppressed...]
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
# by configure, so config.status won't be able to write to it; its
# output is simply discarded. So we exec the FD to /dev/null,
# effectively closing config.log, so it can be properly (re)opened and
# appended to by config.status. When coming back to configure, we
# need to make the FD available again.
if test "$no_create" != yes; then
ac_cs_success=:
exec 5>/dev/null
$SHELL $CONFIG_STATUS || ac_cs_success=false
exec 5>>config.log
# Use ||, not &&, to avoid exiting from the if with $? = 1, which
# would make configure fail if this is the last instruction.
$ac_cs_success || { (exit 1); exit 1; }
fi
--- NEW FILE: output.1 ---
@%:@! /bin/sh
@%:@ Guess values for system-dependent variables and create Makefiles.
@%:@ Generated by GNU Autoconf 2.54.
@%:@
@%:@ Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
@%:@ Free Software Foundation, Inc.
@%:@ This configure script is free software; the Free Software Foundation
@%:@ gives unlimited permission to copy, distribute and modify it.
## --------------------- ##
## M4sh Initialization. ##
## --------------------- ##
# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
[...13138 lines suppressed...]
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
# by configure, so config.status won't be able to write to it; its
# output is simply discarded. So we exec the FD to /dev/null,
# effectively closing config.log, so it can be properly (re)opened and
# appended to by config.status. When coming back to configure, we
# need to make the FD available again.
if test "$no_create" != yes; then
ac_cs_success=:
exec 5>/dev/null
$SHELL $CONFIG_STATUS || ac_cs_success=false
exec 5>>config.log
# Use ||, not &&, to avoid exiting from the if with $? = 1, which
# would make configure fail if this is the last instruction.
$ac_cs_success || { (exit 1); exit 1; }
fi
--- NEW FILE: requests ---
# This file was created by autom4te.
# It contains the lists of macros which have been traced.
# It can be safely removed.
@request = (
bless( [
'0',
1,
[
'/usr/share/autoconf'
],
[
'--reload-state=/usr/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'configure.ac'
],
{
'AC_HEADER_STAT' => 1,
'AC_FUNC_STRFTIME' => 1,
'AC_PROG_RANLIB' => 1,
'AC_FUNC_WAIT3' => 1,
'AC_FUNC_SETPGRP' => 1,
'AC_HEADER_TIME' => 1,
'AC_FUNC_SETVBUF_REVERSED' => 1,
'AC_HEADER_SYS_WAIT' => 1,
'AC_TYPE_UID_T' => 1,
'AM_CONDITIONAL' => 1,
'AC_CHECK_LIB' => 1,
'AC_PROG_LN_S' => 1,
'AC_FUNC_MEMCMP' => 1,
'AC_FUNC_FORK' => 1,
'AC_FUNC_GETGROUPS' => 1,
'AC_HEADER_MAJOR' => 1,
'AC_FUNC_STRTOD' => 1,
'AC_HEADER_DIRENT' => 1,
'AC_FUNC_UTIME_NULL' => 1,
'AC_CONFIG_FILES' => 1,
'AC_FUNC_ALLOCA' => 1,
'AC_C_CONST' => 1,
'AC_FUNC_OBSTACK' => 1,
'include' => 1,
'AC_FUNC_LSTAT' => 1,
'AC_STRUCT_TIMEZONE' => 1,
'AC_FUNC_GETPGRP' => 1,
'AC_CHECK_HEADERS' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AC_CHECK_TYPES' => 1,
'AC_TYPE_MODE_T' => 1,
'AC_PROG_YACC' => 1,
'AC_TYPE_PID_T' => 1,
'AC_FUNC_STRERROR_R' => 1,
'AC_STRUCT_ST_BLOCKS' => 1,
'AC_PROG_GCC_TRADITIONAL' => 1,
'AC_TYPE_SIGNAL' => 1,
'AM_PROG_LIBTOOL' => 1,
'AC_PROG_CPP' => 1,
'AC_FUNC_FNMATCH' => 1,
'AC_FUNC_STAT' => 1,
'AC_PROG_INSTALL' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_FUNC_STRCOLL' => 1,
'AC_LIBSOURCE' => 1,
'AC_C_INLINE' => 1,
'AC_FUNC_CHOWN' => 1,
'AC_PROG_LEX' => 1,
'AC_HEADER_STDC' => 1,
'AH_OUTPUT' => 1,
'AC_FUNC_GETLOADAVG' => 1,
'AC_CHECK_FUNCS' => 1,
'AC_TYPE_SIZE_T' => 1,
'AC_DECL_SYS_SIGLIST' => 1,
'AC_FUNC_MKTIME' => 1,
'AC_PROG_MAKE_SET' => 1,
'AC_PROG_CXX' => 1,
'm4_pattern_allow' => 1,
'm4_include' => 1,
'AC_PROG_AWK' => 1,
'm4_pattern_forbid' => 1,
'AC_FUNC_VPRINTF' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_TYPE_OFF_T' => 1,
'AC_PATH_X' => 1,
'AC_FUNC_MALLOC' => 1,
'AC_FUNC_ERROR_AT_LINE' => 1,
'AC_FUNC_FSEEKO' => 1,
'AC_STRUCT_TM' => 1,
'AC_FUNC_MMAP' => 1,
'AC_SUBST' => 1,
'AC_PROG_CC' => 1,
'AC_PROG_LIBTOOL' => 1
}
], 'Request' ),
bless( [
'1',
1,
[
'/usr/local/share/autoconf'
],
[
'--reload-state=/usr/local/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'configure.ac'
],
{
'AC_HEADER_STAT' => 1,
'AC_FUNC_STRFTIME' => 1,
'AC_PROG_RANLIB' => 1,
'AC_FUNC_WAIT3' => 1,
'AC_FUNC_SETPGRP' => 1,
'AC_HEADER_TIME' => 1,
'AC_FUNC_SETVBUF_REVERSED' => 1,
'AC_HEADER_SYS_WAIT' => 1,
'AC_TYPE_UID_T' => 1,
'AM_CONDITIONAL' => 1,
'AC_CHECK_LIB' => 1,
'AC_PROG_LN_S' => 1,
'AC_FUNC_MEMCMP' => 1,
'AC_FUNC_FORK' => 1,
'AC_FUNC_GETGROUPS' => 1,
'AC_HEADER_MAJOR' => 1,
'AC_FUNC_STRTOD' => 1,
'AC_HEADER_DIRENT' => 1,
'AC_FUNC_UTIME_NULL' => 1,
'AC_CONFIG_FILES' => 1,
'AC_FUNC_ALLOCA' => 1,
'AC_C_CONST' => 1,
'include' => 1,
'AC_FUNC_OBSTACK' => 1,
'AC_FUNC_LSTAT' => 1,
'AC_STRUCT_TIMEZONE' => 1,
'AC_FUNC_GETPGRP' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AC_CHECK_HEADERS' => 1,
'AC_TYPE_MODE_T' => 1,
'AC_CHECK_TYPES' => 1,
'AC_PROG_YACC' => 1,
'AC_TYPE_PID_T' => 1,
'AC_FUNC_STRERROR_R' => 1,
'AC_STRUCT_ST_BLOCKS' => 1,
'AC_PROG_GCC_TRADITIONAL' => 1,
'AC_TYPE_SIGNAL' => 1,
'AC_FUNC_FNMATCH' => 1,
'AC_PROG_CPP' => 1,
'AM_PROG_LIBTOOL' => 1,
'AC_FUNC_STAT' => 1,
'AC_PROG_INSTALL' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_FUNC_STRCOLL' => 1,
'AC_LIBSOURCE' => 1,
'AC_C_INLINE' => 1,
'AC_FUNC_CHOWN' => 1,
'AC_PROG_LEX' => 1,
'AH_OUTPUT' => 1,
'AC_HEADER_STDC' => 1,
'AC_FUNC_GETLOADAVG' => 1,
'AC_CHECK_FUNCS' => 1,
'AC_TYPE_SIZE_T' => 1,
'AC_DECL_SYS_SIGLIST' => 1,
'AC_FUNC_MKTIME' => 1,
'AC_PROG_MAKE_SET' => 1,
'AC_PROG_CXX' => 1,
'm4_pattern_allow' => 1,
'm4_include' => 1,
'm4_pattern_forbid' => 1,
'AC_PROG_AWK' => 1,
'AC_FUNC_VPRINTF' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_PATH_X' => 1,
'AC_TYPE_OFF_T' => 1,
'AC_FUNC_MALLOC' => 1,
'AC_FUNC_ERROR_AT_LINE' => 1,
'AC_FUNC_FSEEKO' => 1,
'AC_FUNC_MMAP' => 1,
'AC_STRUCT_TM' => 1,
'AC_SUBST' => 1,
'AC_PROG_CC' => 1,
'AC_PROG_LIBTOOL' => 1
}
], 'Request' )
);
--- NEW FILE: traces.0 ---
m4trace:aclocal.m4:60: -1- AC_SUBST([NM])
m4trace:aclocal.m4:61: -1- AC_SUBST([LD])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs. LIBOBJS'])
m4trace:configure.ac:11: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:11: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
m4trace:configure.ac:11: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:11: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:11: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:11: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:11: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:11: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:11: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:11: -1- AC_SUBST([datadir], ['${prefix}/share'])
m4trace:configure.ac:11: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:11: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:11: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:11: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:11: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:11: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:11: -1- AC_SUBST([infodir], ['${prefix}/info'])
m4trace:configure.ac:11: -1- AC_SUBST([mandir], ['${prefix}/man'])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
#undef PACKAGE_NAME])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
#undef PACKAGE_VERSION])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
#undef PACKAGE_STRING])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- AC_SUBST([build_alias])
m4trace:configure.ac:11: -1- AC_SUBST([host_alias])
m4trace:configure.ac:11: -1- AC_SUBST([target_alias])
m4trace:configure.ac:11: -1- AC_SUBST([DEFS])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:11: -1- AC_SUBST([LIBS])
m4trace:configure.ac:29: -1- AC_SUBST([topdir])
m4trace:configure.ac:30: -1- AC_SUBST([cfgdir])
m4trace:configure.ac:31: -1- AC_SUBST([vmmdir])
m4trace:configure.ac:32: -1- AC_SUBST([blddir])
m4trace:configure.ac:36: -1- AC_DEFINE_TRACE_LITERAL([SQ_VERSION])
m4trace:configure.ac:38: -1- AC_SUBST([SQ_MAJOR])
m4trace:configure.ac:39: -1- AC_SUBST([SQ_MINOR])
m4trace:configure.ac:40: -1- AC_SUBST([SQ_UPDATE])
m4trace:configure.ac:41: -1- AC_SUBST([SQ_VERSION])
m4trace:configure.ac:45: -1- AC_DEFINE_TRACE_LITERAL([VM_VERSION])
m4trace:configure.ac:47: -1- AC_SUBST([VM_MAJOR])
m4trace:configure.ac:48: -1- AC_SUBST([VM_MINOR])
m4trace:configure.ac:49: -1- AC_SUBST([VM_RELEASE])
m4trace:configure.ac:50: -1- AC_SUBST([VM_VERSION])
m4trace:configure.ac:58: -1- AC_SUBST([imgdir])
m4trace:configure.ac:59: -1- AC_SUBST([plgdir])
m4trace:configure.ac:61: -1- AC_DEFINE_TRACE_LITERAL([OS_TYPE])
m4trace:configure.ac:63: -1- AC_SUBST([build], [$ac_cv_build])
m4trace:configure.ac:63: -1- AC_SUBST([build_cpu], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:63: -1- AC_SUBST([build_vendor], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:63: -1- AC_SUBST([build_os], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:63: -1- AC_SUBST([host], [$ac_cv_host])
m4trace:configure.ac:63: -1- AC_SUBST([host_cpu], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:63: -1- AC_SUBST([host_vendor], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:63: -1- AC_SUBST([host_os], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:68: -1- AC_SUBST([host])
m4trace:configure.ac:69: -1- AC_SUBST([host_cpu])
m4trace:configure.ac:70: -1- AC_SUBST([host_vendor])
m4trace:configure.ac:71: -1- AC_SUBST([host_os])
m4trace:configure.ac:73: -1- AC_DEFINE_TRACE_LITERAL([VM_HOST])
m4trace:configure.ac:74: -1- AC_DEFINE_TRACE_LITERAL([VM_HOST_OS])
m4trace:configure.ac:75: -1- AC_DEFINE_TRACE_LITERAL([VM_HOST_CPU])
m4trace:configure.ac:95: -1- AC_PROG_MAKE_SET
m4trace:configure.ac:95: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:96: -1- AC_PROG_CC
m4trace:configure.ac:96: -1- AC_SUBST([CC])
m4trace:configure.ac:96: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:96: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:96: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:96: -1- AC_SUBST([CC])
m4trace:configure.ac:96: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:96: -1- AC_SUBST([CC])
m4trace:configure.ac:96: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:96: -1- AC_SUBST([CC])
m4trace:configure.ac:96: -1- AC_SUBST([CC])
m4trace:configure.ac:96: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:96: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:96: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:96: -1- AC_SUBST([WFLAGS])
m4trace:configure.ac:97: -1- AC_SUBST([AS])
m4trace:configure.ac:98: -1- AC_PROG_RANLIB
m4trace:configure.ac:98: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:98: -1- AC_SUBST([ac_ct_RANLIB])
m4trace:configure.ac:99: -1- AC_PROG_INSTALL
m4trace:configure.ac:99: -1- AC_SUBST([INSTALL_PROGRAM])
m4trace:configure.ac:99: -1- AC_SUBST([INSTALL_SCRIPT])
m4trace:configure.ac:99: -1- AC_SUBST([INSTALL_DATA])
m4trace:configure.ac:102: -1- AC_SUBST([LN])
m4trace:configure.ac:109: -1- AC_DEFINE_TRACE_LITERAL([squeakInt64])
m4trace:configure.ac:114: -1- AC_PROG_LIBTOOL
m4trace:configure.ac:114: -1- AC_PROG_LN_S
m4trace:configure.ac:114: -1- AC_SUBST([LN_S], [$as_ln_s])
m4trace:configure.ac:114: -1- AC_SUBST([ECHO])
m4trace:configure.ac:114: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:114: -1- AC_SUBST([ac_ct_RANLIB])
m4trace:configure.ac:114: -1- AC_SUBST([STRIP])
m4trace:configure.ac:114: -1- AC_SUBST([ac_ct_STRIP])
m4trace:configure.ac:114: -1- AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
])
m4trace:configure.ac:114: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
m4trace:configure.ac:114: -1- AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
m4trace:configure.ac:114: -1- AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
m4trace:configure.ac:114: -1- AC_CHECK_HEADERS([dlfcn.h])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H])
m4trace:configure.ac:114: -1- AC_HEADER_STDC
m4trace:configure.ac:114: -1- AC_PROG_CPP
m4trace:configure.ac:114: -1- AC_SUBST([CPP])
m4trace:configure.ac:114: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:114: -1- AC_SUBST([CPP])
m4trace:configure.ac:114: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:114: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS])
m4trace:configure.ac:114: -1- AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h], [], [], [$ac_includes_default])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H])
m4trace:configure.ac:114: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:114: -1- AC_SUBST([LIBTOOL])
m4trace:configure.ac:120: -1- AC_SUBST([INCLUDES])
m4trace:configure.ac:131: -1- AC_DEFINE_TRACE_LITERAL([USE_X11])
m4trace:configure.ac:133: -1- AC_PATH_X
m4trace:configure.ac:133: -1- AC_DEFINE_TRACE_LITERAL([X_DISPLAY_MISSING])
m4trace:configure.ac:133: -1- AH_OUTPUT([X_DISPLAY_MISSING], [/* Define to 1 if the X Window System is missing or not being used. */
#undef X_DISPLAY_MISSING])
m4trace:configure.ac:133: -1- AC_CHECK_LIB([dnet], [dnet_ntoa], [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
m4trace:configure.ac:133: -1- AC_CHECK_LIB([dnet_stub], [dnet_ntoa], [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
m4trace:configure.ac:133: -1- AC_CHECK_LIB([nsl], [gethostbyname], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"])
m4trace:configure.ac:133: -1- AC_CHECK_LIB([bsd], [gethostbyname], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"])
m4trace:configure.ac:133: -1- AC_CHECK_LIB([socket], [connect], [X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"], [], [$X_EXTRA_LIBS])
m4trace:configure.ac:133: -1- AC_CHECK_LIB([posix], [remove], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"])
m4trace:configure.ac:133: -1- AC_CHECK_LIB([ipc], [shmat], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"])
m4trace:configure.ac:133: -1- AC_CHECK_LIB([ICE], [IceConnectionNumber], [X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"], [], [$X_EXTRA_LIBS])
m4trace:configure.ac:133: -1- AC_SUBST([X_CFLAGS])
m4trace:configure.ac:133: -1- AC_SUBST([X_PRE_LIBS])
m4trace:configure.ac:133: -1- AC_SUBST([X_LIBS])
m4trace:configure.ac:133: -1- AC_SUBST([X_EXTRA_LIBS])
m4trace:configure.ac:145: -1- AC_SUBST([NOX])
m4trace:configure.ac:149: -1- AC_DEFINE_TRACE_LITERAL([NEED_SUNOS_H])
m4trace:configure.ac:151: -1- AC_HEADER_STDC([])
m4trace:configure.ac:151: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:151: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS])
m4trace:configure.ac:152: -1- AC_CHECK_HEADERS([unistd.h string.h fcntl.h sys/file.h sys/param.h])
m4trace:configure.ac:152: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:152: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:152: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H])
m4trace:configure.ac:152: -1- AH_OUTPUT([HAVE_SYS_FILE_H], [/* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H])
m4trace:configure.ac:152: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H])
m4trace:configure.ac:153: -1- AC_CHECK_HEADERS([sys/time.h sys/filio.h sys/select.h])
m4trace:configure.ac:153: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H])
m4trace:configure.ac:153: -1- AH_OUTPUT([HAVE_SYS_FILIO_H], [/* Define to 1 if you have the <sys/filio.h> header file. */
#undef HAVE_SYS_FILIO_H])
m4trace:configure.ac:153: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H])
m4trace:configure.ac:154: -1- AC_HEADER_TIME
m4trace:configure.ac:154: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])
m4trace:configure.ac:154: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME])
m4trace:configure.ac:155: -1- AC_HEADER_DIRENT
m4trace:configure.ac:155: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the <dirent.h> header file, and it defines \`DIR'.
*/
#undef HAVE_DIRENT_H])
m4trace:configure.ac:155: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the <sys/ndir.h> header file, and it defines \`DIR'.
*/
#undef HAVE_SYS_NDIR_H])
m4trace:configure.ac:155: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the <sys/dir.h> header file, and it defines \`DIR'.
*/
#undef HAVE_SYS_DIR_H])
m4trace:configure.ac:155: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the <ndir.h> header file, and it defines \`DIR'. */
#undef HAVE_NDIR_H])
m4trace:configure.ac:157: -1- AC_STRUCT_TIMEZONE
m4trace:configure.ac:157: -1- AC_STRUCT_TM
m4trace:configure.ac:157: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME])
m4trace:configure.ac:157: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your <sys/time.h> declares \`struct tm'. */
#undef TM_IN_SYS_TIME])
m4trace:configure.ac:157: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TM_TM_ZONE])
m4trace:configure.ac:157: -1- AH_OUTPUT([HAVE_STRUCT_TM_TM_ZONE], [/* Define to 1 if \`tm_zone' is member of \`struct tm'. */
#undef HAVE_STRUCT_TM_TM_ZONE])
m4trace:configure.ac:157: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TM_ZONE])
m4trace:configure.ac:157: -1- AH_OUTPUT([HAVE_TM_ZONE], [/* Define to 1 if your \`struct tm' has \`tm_zone'. Deprecated, use
\`HAVE_STRUCT_TM_TM_ZONE' instead. */
#undef HAVE_TM_ZONE])
m4trace:configure.ac:157: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TZNAME])
m4trace:configure.ac:157: -1- AH_OUTPUT([HAVE_TZNAME], [/* Define to 1 if you don't have \`tm_zone' but do have the external array
\`tzname'. */
#undef HAVE_TZNAME])
m4trace:configure.ac:159: -1- AC_DEFINE_TRACE_LITERAL([socklen_t])
m4trace:configure.ac:160: -1- AC_DEFINE_TRACE_LITERAL([AT_EXIT])
m4trace:configure.ac:161: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TZSET])
m4trace:configure.ac:162: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TM_GMTOFF])
m4trace:configure.ac:163: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TIMEZONE])
m4trace:configure.ac:164: -1- AC_DEFINE_TRACE_LITERAL([NEED_GETHOSTNAME_P])
m4trace:configure.ac:172: -1- AC_DEFINE_TRACE_LITERAL([USE_RFB])
m4trace:configure.ac:176: -1- AC_CHECK_LIB([nsl], [yp_bind])
m4trace:configure.ac:176: -1- AH_OUTPUT([HAVE_LIBNSL], [/* Define to 1 if you have the \`nsl' library (-lnsl). */
#undef HAVE_LIBNSL])
m4trace:configure.ac:176: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBNSL])
m4trace:configure.ac:177: -1- AC_CHECK_LIB([socket], [socket])
m4trace:configure.ac:177: -1- AH_OUTPUT([HAVE_LIBSOCKET], [/* Define to 1 if you have the \`socket' library (-lsocket). */
#undef HAVE_LIBSOCKET])
m4trace:configure.ac:177: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSOCKET])
m4trace:configure.ac:179: -1- AC_CHECK_HEADERS([dlfcn.h])
m4trace:configure.ac:179: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H])
m4trace:configure.ac:185: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL])
m4trace:configure.ac:185: -1- AC_CHECK_LIB([dl], [dlopen], [LIBS="-ldl $LIBS"
AC_DEFINE(HAVE_LIBDL,[1])], [AC_CHECK_FUNC(_dyld_present,[AC_DEFINE(HAVE_DYLD,[1])])])
m4trace:configure.ac:185: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL])
m4trace:configure.ac:185: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DYLD])
m4trace:configure.ac:187: -1- AC_CHECK_LIB([m], [sin])
m4trace:configure.ac:187: -1- AH_OUTPUT([HAVE_LIBM], [/* Define to 1 if you have the \`m' library (-lm). */
#undef HAVE_LIBM])
m4trace:configure.ac:187: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBM])
m4trace:configure.ac:190: -1- AC_CHECK_LIB([X11], [XOpenDisplay])
m4trace:configure.ac:190: -1- AH_OUTPUT([HAVE_LIBX11], [/* Define to 1 if you have the \`X11' library (-lX11). */
#undef HAVE_LIBX11])
m4trace:configure.ac:190: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBX11])
m4trace:configure.ac:191: -1- AC_CHECK_LIB([Xext], [XShmAttach])
m4trace:configure.ac:191: -1- AH_OUTPUT([HAVE_LIBXEXT], [/* Define to 1 if you have the \`Xext' library (-lXext). */
#undef HAVE_LIBXEXT])
m4trace:configure.ac:191: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBXEXT])
m4trace:configure.ac:194: -1- AC_CHECK_FUNCS([snprintf __snprintf], [break])
m4trace:configure.ac:194: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define to 1 if you have the \`snprintf' function. */
#undef HAVE_SNPRINTF])
m4trace:configure.ac:194: -1- AH_OUTPUT([HAVE___SNPRINTF], [/* Define to 1 if you have the \`__snprintf' function. */
#undef HAVE___SNPRINTF])
m4trace:configure.ac:211: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_AUDIOIO_H])
m4trace:configure.ac:211: -3- AC_DEFINE_TRACE_LITERAL([HAVE_SUN_AUDIOIO_H])
m4trace:configure.ac:211: -1- AC_DEFINE_TRACE_LITERAL([USE_AUDIO_NAS])
m4trace:configure.ac:211: -1- AC_DEFINE_TRACE_LITERAL([USE_AUDIO_OSS])
m4trace:configure.ac:211: -1- AC_DEFINE_TRACE_LITERAL([USE_AUDIO_SUN])
m4trace:configure.ac:211: -1- AC_CHECK_HEADERS([sys/audioio.h])
m4trace:configure.ac:211: -1- AH_OUTPUT([HAVE_SYS_AUDIOIO_H], [/* Define to 1 if you have the <sys/audioio.h> header file. */
#undef HAVE_SYS_AUDIOIO_H])
m4trace:configure.ac:211: -1- AC_DEFINE_TRACE_LITERAL([USE_AUDIO_NONE])
m4trace:configure.ac:216: -1- AC_SUBST([INTERP])
m4trace:configure.ac:216: -1- AC_PROG_AWK
m4trace:configure.ac:216: -1- AC_SUBST([AWK])
m4trace:configure.ac:217: -1- AC_DEFINE_TRACE_LITERAL([VM_MODULE_PREFIX])
m4trace:configure.ac:222: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN])
m4trace:configure.ac:222: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
#undef WORDS_BIGENDIAN])
m4trace:configure.ac:223: -1- AC_DEFINE_TRACE_LITERAL([DOUBLE_WORD_ALIGNMENT])
m4trace:configure.ac:224: -1- AC_DEFINE_TRACE_LITERAL([DOUBLE_WORD_ORDER])
m4trace:configure.ac:228: -1- AC_DEFINE_TRACE_LITERAL([DARWIN])
m4trace:configure.ac:238: -1- AC_SUBST([npsqueak])
m4trace:configure.ac:239: -1- AC_SUBST([install_nps])
m4trace:configure.ac:240: -1- AC_SUBST([uninstall_nps])
m4trace:configure.ac:265: -1- AC_SUBST([SQ_LIBDIR])
m4trace:configure.ac:266: -1- AC_DEFINE_TRACE_LITERAL([SQ_LIBDIR])
m4trace:configure.ac:267: -1- AC_DEFINE_TRACE_LITERAL([VM_LIBDIR])
m4trace:acplugins.m4:17: -1- AC_CHECK_LIB([GL], [glIsEnabled], [AC_PLUGIN_USE_LIB(GL)], [unset ac_cv_lib_GL_glIsEnabled # stupid moronic pathetic autoconf
AC_CHECK_LIB(GL,glIsEnabled,
[AC_PLUGIN_USE_LIB(GL)],
[unset ac_cv_lib_GL_glIsEnabled # stupid moronic pathetic autoconf
AC_CHECK_LIB(GL,glIsEnabled,
[AC_PLUGIN_USE_LIB(GL)
AC_PLUGIN_USE_LIB(pthread)],
[AC_PLUGIN_DISABLE],
[-lpthread])])])
m4trace:acplugins.m4:17: -1- AC_CHECK_LIB([GL], [glIsEnabled], [AC_PLUGIN_USE_LIB(GL)], [unset ac_cv_lib_GL_glIsEnabled # stupid moronic pathetic autoconf
AC_CHECK_LIB(GL,glIsEnabled,
[AC_PLUGIN_USE_LIB(GL)
AC_PLUGIN_USE_LIB(pthread)],
[AC_PLUGIN_DISABLE],
[-lpthread])])
m4trace:acplugins.m4:17: -1- AC_CHECK_LIB([GL], [glIsEnabled], [AC_PLUGIN_USE_LIB(GL)
AC_PLUGIN_USE_LIB(pthread)], [AC_PLUGIN_DISABLE], [-lpthread])
m4trace:acplugins.m4:53: -1- AC_CHECK_HEADERS([util.h libutil.h pty.h stropts.h])
m4trace:acplugins.m4:53: -1- AH_OUTPUT([HAVE_UTIL_H], [/* Define to 1 if you have the <util.h> header file. */
#undef HAVE_UTIL_H])
m4trace:acplugins.m4:53: -1- AH_OUTPUT([HAVE_LIBUTIL_H], [/* Define to 1 if you have the <libutil.h> header file. */
#undef HAVE_LIBUTIL_H])
m4trace:acplugins.m4:53: -1- AH_OUTPUT([HAVE_PTY_H], [/* Define to 1 if you have the <pty.h> header file. */
#undef HAVE_PTY_H])
m4trace:acplugins.m4:53: -1- AH_OUTPUT([HAVE_STROPTS_H], [/* Define to 1 if you have the <stropts.h> header file. */
#undef HAVE_STROPTS_H])
m4trace:acplugins.m4:56: -2- AC_DEFINE_TRACE_LITERAL([HAVE_OPENPTY])
m4trace:acplugins.m4:59: -2- AC_DEFINE_TRACE_LITERAL([HAVE_UNIX98_PTYS])
m4trace:acplugins.m4:84: -2- AC_CHECK_LIB([ffi], [ffi_call], [
plibs="${plibs} ffi"], [
echo "$as_me:$LINENO: result: ******** disabling ${plugin}" >&5
echo "${ECHO_T}******** disabling ${plugin}" >&6
disabled_plugins="${disabled_plugins} ${plugin}"])
m4trace:acplugins.m4:92: -1- AC_SUBST([FFI_DIR])
m4trace:acplugins.m4:93: -1- AC_SUBST([FFI_C])
m4trace:acplugins.m4:94: -1- AC_SUBST([FFI_S])
m4trace:acplugins.m4:95: -1- AC_SUBST([FFI_O])
m4trace:configure.ac:310: -1- AC_CONFIG_HEADERS([config.h])
m4trace:configure.ac:311: -1- AC_CONFIG_FILES([mkconfig make.cfg make.int make.ext make.prg inisqueak Makefile])
--- NEW FILE: traces.1 ---
m4trace:aclocal.m4:61: -1- AC_SUBST([NM])
m4trace:aclocal.m4:62: -1- AC_SUBST([LD])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
m4trace:configure.ac:11: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:11: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
m4trace:configure.ac:11: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:11: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:11: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:11: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:11: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:11: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:11: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:11: -1- AC_SUBST([datadir], ['${prefix}/share'])
m4trace:configure.ac:11: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:11: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:11: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:11: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:11: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:11: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:11: -1- AC_SUBST([infodir], ['${prefix}/info'])
m4trace:configure.ac:11: -1- AC_SUBST([mandir], ['${prefix}/man'])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
#undef PACKAGE_NAME])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
#undef PACKAGE_VERSION])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
#undef PACKAGE_STRING])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- AC_SUBST([build_alias])
m4trace:configure.ac:11: -1- AC_SUBST([host_alias])
m4trace:configure.ac:11: -1- AC_SUBST([target_alias])
m4trace:configure.ac:11: -1- AC_SUBST([DEFS])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:11: -1- AC_SUBST([LIBS])
m4trace:configure.ac:29: -1- AC_SUBST([topdir])
m4trace:configure.ac:30: -1- AC_SUBST([cfgdir])
m4trace:configure.ac:31: -1- AC_SUBST([vmmdir])
m4trace:configure.ac:32: -1- AC_SUBST([blddir])
m4trace:configure.ac:36: -1- AC_DEFINE_TRACE_LITERAL([SQ_VERSION])
m4trace:configure.ac:38: -1- AC_SUBST([SQ_MAJOR])
m4trace:configure.ac:39: -1- AC_SUBST([SQ_MINOR])
m4trace:configure.ac:40: -1- AC_SUBST([SQ_UPDATE])
m4trace:configure.ac:41: -1- AC_SUBST([SQ_VERSION])
m4trace:configure.ac:45: -1- AC_DEFINE_TRACE_LITERAL([VM_VERSION])
m4trace:configure.ac:47: -1- AC_SUBST([VM_MAJOR])
m4trace:configure.ac:48: -1- AC_SUBST([VM_MINOR])
m4trace:configure.ac:49: -1- AC_SUBST([VM_RELEASE])
m4trace:configure.ac:50: -1- AC_SUBST([VM_VERSION])
m4trace:configure.ac:58: -1- AC_SUBST([imgdir])
m4trace:configure.ac:59: -1- AC_SUBST([plgdir])
m4trace:configure.ac:61: -1- AC_DEFINE_TRACE_LITERAL([OS_TYPE])
m4trace:configure.ac:63: -1- AC_SUBST([build], [$ac_cv_build])
m4trace:configure.ac:63: -1- AC_SUBST([build_cpu], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:63: -1- AC_SUBST([build_vendor], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:63: -1- AC_SUBST([build_os], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:63: -1- AC_SUBST([host], [$ac_cv_host])
m4trace:configure.ac:63: -1- AC_SUBST([host_cpu], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:63: -1- AC_SUBST([host_vendor], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:63: -1- AC_SUBST([host_os], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:68: -1- AC_SUBST([host])
m4trace:configure.ac:69: -1- AC_SUBST([host_cpu])
m4trace:configure.ac:70: -1- AC_SUBST([host_vendor])
m4trace:configure.ac:71: -1- AC_SUBST([host_os])
m4trace:configure.ac:73: -1- AC_DEFINE_TRACE_LITERAL([VM_HOST])
m4trace:configure.ac:74: -1- AC_DEFINE_TRACE_LITERAL([VM_HOST_OS])
m4trace:configure.ac:75: -1- AC_DEFINE_TRACE_LITERAL([VM_HOST_CPU])
m4trace:configure.ac:91: -1- AC_PROG_MAKE_SET
m4trace:configure.ac:91: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:92: -1- AC_PROG_CC
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:92: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:92: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:92: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:92: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:92: -1- AC_SUBST([WFLAGS])
m4trace:configure.ac:93: -1- AC_SUBST([AS])
m4trace:configure.ac:94: -1- AC_PROG_RANLIB
m4trace:configure.ac:94: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:94: -1- AC_SUBST([ac_ct_RANLIB])
m4trace:configure.ac:95: -1- AC_PROG_INSTALL
m4trace:configure.ac:95: -1- AC_SUBST([INSTALL_PROGRAM])
m4trace:configure.ac:95: -1- AC_SUBST([INSTALL_SCRIPT])
m4trace:configure.ac:95: -1- AC_SUBST([INSTALL_DATA])
m4trace:configure.ac:98: -1- AC_SUBST([LN])
m4trace:configure.ac:105: -1- AC_DEFINE_TRACE_LITERAL([squeakInt64])
m4trace:configure.ac:110: -1- AC_PROG_LIBTOOL
m4trace:configure.ac:110: -1- AC_PROG_LN_S
m4trace:configure.ac:110: -1- AC_SUBST([LN_S], [$as_ln_s])
m4trace:configure.ac:110: -1- AC_SUBST([ECHO])
m4trace:configure.ac:110: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:110: -1- AC_SUBST([ac_ct_RANLIB])
m4trace:configure.ac:110: -1- AC_SUBST([STRIP])
m4trace:configure.ac:110: -1- AC_SUBST([ac_ct_STRIP])
m4trace:configure.ac:110: -1- AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
])
m4trace:configure.ac:110: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
m4trace:configure.ac:110: -1- AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
m4trace:configure.ac:110: -1- AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
m4trace:configure.ac:110: -1- AC_CHECK_HEADERS([dlfcn.h])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H])
m4trace:configure.ac:110: -1- AC_HEADER_STDC
m4trace:configure.ac:110: -1- AC_PROG_CPP
m4trace:configure.ac:110: -1- AC_SUBST([CPP])
m4trace:configure.ac:110: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:110: -1- AC_SUBST([CPP])
m4trace:configure.ac:110: -1- AC_SUBST([EGREP])
m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:110: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS])
m4trace:configure.ac:110: -1- AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h], [], [], [$ac_includes_default])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:110: -1- AC_SUBST([LIBTOOL])
m4trace:configure.ac:116: -1- AC_SUBST([INCLUDES])
m4trace:configure.ac:127: -1- AC_DEFINE_TRACE_LITERAL([USE_X11])
m4trace:configure.ac:129: -1- AC_PATH_X
m4trace:configure.ac:129: -1- AC_DEFINE_TRACE_LITERAL([X_DISPLAY_MISSING])
m4trace:configure.ac:129: -1- AH_OUTPUT([X_DISPLAY_MISSING], [/* Define to 1 if the X Window System is missing or not being used. */
#undef X_DISPLAY_MISSING])
m4trace:configure.ac:129: -1- AC_CHECK_LIB([dnet], [dnet_ntoa], [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
m4trace:configure.ac:129: -1- AC_CHECK_LIB([dnet_stub], [dnet_ntoa], [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
m4trace:configure.ac:129: -1- AC_CHECK_LIB([nsl], [gethostbyname], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"])
m4trace:configure.ac:129: -1- AC_CHECK_LIB([bsd], [gethostbyname], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"])
m4trace:configure.ac:129: -1- AC_CHECK_LIB([socket], [connect], [X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"], [], [$X_EXTRA_LIBS])
m4trace:configure.ac:129: -1- AC_CHECK_LIB([posix], [remove], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"])
m4trace:configure.ac:129: -1- AC_CHECK_LIB([ipc], [shmat], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"])
m4trace:configure.ac:129: -1- AC_CHECK_LIB([ICE], [IceConnectionNumber], [X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"], [], [$X_EXTRA_LIBS])
m4trace:configure.ac:129: -1- AC_SUBST([X_CFLAGS])
m4trace:configure.ac:129: -1- AC_SUBST([X_PRE_LIBS])
m4trace:configure.ac:129: -1- AC_SUBST([X_LIBS])
m4trace:configure.ac:129: -1- AC_SUBST([X_EXTRA_LIBS])
m4trace:configure.ac:141: -1- AC_SUBST([NOX])
m4trace:configure.ac:145: -1- AC_DEFINE_TRACE_LITERAL([NEED_SUNOS_H])
m4trace:configure.ac:147: -1- AC_HEADER_STDC([])
m4trace:configure.ac:147: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:147: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS])
m4trace:configure.ac:148: -1- AC_CHECK_HEADERS([unistd.h string.h fcntl.h sys/file.h sys/param.h])
m4trace:configure.ac:148: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:148: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:148: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H])
m4trace:configure.ac:148: -1- AH_OUTPUT([HAVE_SYS_FILE_H], [/* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H])
m4trace:configure.ac:148: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H])
m4trace:configure.ac:149: -1- AC_CHECK_HEADERS([sys/time.h sys/filio.h sys/select.h])
m4trace:configure.ac:149: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H])
m4trace:configure.ac:149: -1- AH_OUTPUT([HAVE_SYS_FILIO_H], [/* Define to 1 if you have the <sys/filio.h> header file. */
#undef HAVE_SYS_FILIO_H])
m4trace:configure.ac:149: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H])
m4trace:configure.ac:150: -1- AC_HEADER_TIME
m4trace:configure.ac:150: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])
m4trace:configure.ac:150: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME])
m4trace:configure.ac:151: -1- AC_HEADER_DIRENT
m4trace:configure.ac:151: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the <dirent.h> header file, and it defines \`DIR'.
*/
#undef HAVE_DIRENT_H])
m4trace:configure.ac:151: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the <sys/ndir.h> header file, and it defines \`DIR'.
*/
#undef HAVE_SYS_NDIR_H])
m4trace:configure.ac:151: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the <sys/dir.h> header file, and it defines \`DIR'.
*/
#undef HAVE_SYS_DIR_H])
m4trace:configure.ac:151: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the <ndir.h> header file, and it defines \`DIR'. */
#undef HAVE_NDIR_H])
m4trace:configure.ac:153: -1- AC_STRUCT_TIMEZONE
m4trace:configure.ac:153: -1- AC_STRUCT_TM
m4trace:configure.ac:153: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME])
m4trace:configure.ac:153: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your <sys/time.h> declares \`struct tm'. */
#undef TM_IN_SYS_TIME])
m4trace:configure.ac:153: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TM_TM_ZONE])
m4trace:configure.ac:153: -1- AH_OUTPUT([HAVE_STRUCT_TM_TM_ZONE], [/* Define to 1 if \`tm_zone' is member of \`struct tm'. */
#undef HAVE_STRUCT_TM_TM_ZONE])
m4trace:configure.ac:153: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TM_ZONE])
m4trace:configure.ac:153: -1- AH_OUTPUT([HAVE_TM_ZONE], [/* Define to 1 if your \`struct tm' has \`tm_zone'. Deprecated, use
\`HAVE_STRUCT_TM_TM_ZONE' instead. */
#undef HAVE_TM_ZONE])
m4trace:configure.ac:153: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TZNAME])
m4trace:configure.ac:153: -1- AH_OUTPUT([HAVE_TZNAME], [/* Define to 1 if you don't have \`tm_zone' but do have the external array
\`tzname'. */
#undef HAVE_TZNAME])
m4trace:configure.ac:155: -1- AC_DEFINE_TRACE_LITERAL([socklen_t])
m4trace:configure.ac:156: -1- AC_DEFINE_TRACE_LITERAL([AT_EXIT])
m4trace:configure.ac:157: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TZSET])
m4trace:configure.ac:158: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TM_GMTOFF])
m4trace:configure.ac:159: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TIMEZONE])
m4trace:configure.ac:160: -1- AC_DEFINE_TRACE_LITERAL([NEED_GETHOSTNAME_P])
m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([USE_RFB])
m4trace:configure.ac:172: -1- AC_CHECK_LIB([nsl], [yp_bind])
m4trace:configure.ac:172: -1- AH_OUTPUT([HAVE_LIBNSL], [/* Define to 1 if you have the \`nsl' library (-lnsl). */
#undef HAVE_LIBNSL])
m4trace:configure.ac:172: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBNSL])
m4trace:configure.ac:173: -1- AC_CHECK_LIB([socket], [socket])
m4trace:configure.ac:173: -1- AH_OUTPUT([HAVE_LIBSOCKET], [/* Define to 1 if you have the \`socket' library (-lsocket). */
#undef HAVE_LIBSOCKET])
m4trace:configure.ac:173: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSOCKET])
m4trace:configure.ac:174: -2- AC_DEFINE_TRACE_LITERAL([HAVE_DYLD])
m4trace:configure.ac:177: -1- AC_CHECK_HEADERS([dlfcn.h])
m4trace:configure.ac:177: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H])
m4trace:configure.ac:177: -2- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL])
m4trace:configure.ac:177: -2- AC_CHECK_LIB([dl], [dlopen])
m4trace:configure.ac:177: -2- AH_OUTPUT([HAVE_LIBDL], [/* Define to 1 if you have the \`dl' library (-ldl). */
#undef HAVE_LIBDL])
m4trace:configure.ac:177: -2- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL])
m4trace:configure.ac:178: -1- AC_CHECK_LIB([m], [sin])
m4trace:configure.ac:178: -1- AH_OUTPUT([HAVE_LIBM], [/* Define to 1 if you have the \`m' library (-lm). */
#undef HAVE_LIBM])
m4trace:configure.ac:178: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBM])
m4trace:configure.ac:180: -1- AC_CHECK_LIB([X11], [XOpenDisplay])
m4trace:configure.ac:180: -1- AH_OUTPUT([HAVE_LIBX11], [/* Define to 1 if you have the \`X11' library (-lX11). */
#undef HAVE_LIBX11])
m4trace:configure.ac:180: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBX11])
m4trace:configure.ac:181: -1- AC_CHECK_LIB([Xext], [XShmAttach])
m4trace:configure.ac:181: -1- AH_OUTPUT([HAVE_LIBXEXT], [/* Define to 1 if you have the \`Xext' library (-lXext). */
#undef HAVE_LIBXEXT])
m4trace:configure.ac:181: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBXEXT])
m4trace:configure.ac:184: -1- AC_CHECK_FUNCS([snprintf __snprintf], [break])
m4trace:configure.ac:184: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define to 1 if you have the \`snprintf' function. */
#undef HAVE_SNPRINTF])
m4trace:configure.ac:184: -1- AH_OUTPUT([HAVE___SNPRINTF], [/* Define to 1 if you have the \`__snprintf' function. */
#undef HAVE___SNPRINTF])
m4trace:configure.ac:201: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_AUDIOIO_H])
m4trace:configure.ac:201: -3- AC_DEFINE_TRACE_LITERAL([HAVE_SUN_AUDIOIO_H])
m4trace:configure.ac:201: -1- AC_DEFINE_TRACE_LITERAL([USE_AUDIO_NAS])
m4trace:configure.ac:201: -1- AC_DEFINE_TRACE_LITERAL([USE_AUDIO_OSS])
m4trace:configure.ac:201: -1- AC_DEFINE_TRACE_LITERAL([USE_AUDIO_SUN])
m4trace:configure.ac:201: -1- AC_CHECK_HEADERS([sys/audioio.h])
m4trace:configure.ac:201: -1- AH_OUTPUT([HAVE_SYS_AUDIOIO_H], [/* Define to 1 if you have the <sys/audioio.h> header file. */
#undef HAVE_SYS_AUDIOIO_H])
m4trace:configure.ac:201: -1- AC_DEFINE_TRACE_LITERAL([USE_AUDIO_NONE])
m4trace:configure.ac:206: -1- AC_SUBST([INTERP])
m4trace:configure.ac:206: -1- AC_PROG_AWK
m4trace:configure.ac:206: -1- AC_SUBST([AWK])
m4trace:configure.ac:207: -1- AC_DEFINE_TRACE_LITERAL([VM_MODULE_PREFIX])
m4trace:configure.ac:212: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN])
m4trace:configure.ac:212: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
#undef WORDS_BIGENDIAN])
m4trace:configure.ac:213: -1- AC_DEFINE_TRACE_LITERAL([DOUBLE_WORD_ALIGNMENT])
m4trace:configure.ac:214: -1- AC_DEFINE_TRACE_LITERAL([DOUBLE_WORD_ORDER])
m4trace:configure.ac:218: -1- AC_DEFINE_TRACE_LITERAL([DARWIN])
m4trace:configure.ac:228: -1- AC_SUBST([npsqueak])
m4trace:configure.ac:229: -1- AC_SUBST([install_nps])
m4trace:configure.ac:230: -1- AC_SUBST([uninstall_nps])
m4trace:configure.ac:255: -1- AC_SUBST([SQ_LIBDIR])
m4trace:configure.ac:256: -1- AC_DEFINE_TRACE_LITERAL([SQ_LIBDIR])
m4trace:configure.ac:257: -1- AC_DEFINE_TRACE_LITERAL([VM_LIBDIR])
m4trace:acplugins.m4:17: -1- AC_CHECK_LIB([GL], [glIsEnabled], [AC_PLUGIN_USE_LIB(GL)], [unset ac_cv_lib_GL_glIsEnabled # stupid moronic pathetic autoconf
AC_CHECK_LIB(GL,glIsEnabled,
[AC_PLUGIN_USE_LIB(GL)],
[unset ac_cv_lib_GL_glIsEnabled # stupid moronic pathetic autoconf
AC_CHECK_LIB(GL,glIsEnabled,
[AC_PLUGIN_USE_LIB(GL)
AC_PLUGIN_USE_LIB(pthread)],
[AC_PLUGIN_DISABLE],
[-lpthread])])])
m4trace:acplugins.m4:17: -1- AC_CHECK_LIB([GL], [glIsEnabled], [AC_PLUGIN_USE_LIB(GL)], [unset ac_cv_lib_GL_glIsEnabled # stupid moronic pathetic autoconf
AC_CHECK_LIB(GL,glIsEnabled,
[AC_PLUGIN_USE_LIB(GL)
AC_PLUGIN_USE_LIB(pthread)],
[AC_PLUGIN_DISABLE],
[-lpthread])])
m4trace:acplugins.m4:17: -1- AC_CHECK_LIB([GL], [glIsEnabled], [AC_PLUGIN_USE_LIB(GL)
AC_PLUGIN_USE_LIB(pthread)], [AC_PLUGIN_DISABLE], [-lpthread])
m4trace:acplugins.m4:59: -1- AC_CHECK_HEADERS([util.h libutil.h pty.h stropts.h])
m4trace:acplugins.m4:59: -1- AH_OUTPUT([HAVE_UTIL_H], [/* Define to 1 if you have the <util.h> header file. */
#undef HAVE_UTIL_H])
m4trace:acplugins.m4:59: -1- AH_OUTPUT([HAVE_LIBUTIL_H], [/* Define to 1 if you have the <libutil.h> header file. */
#undef HAVE_LIBUTIL_H])
m4trace:acplugins.m4:59: -1- AH_OUTPUT([HAVE_PTY_H], [/* Define to 1 if you have the <pty.h> header file. */
#undef HAVE_PTY_H])
m4trace:acplugins.m4:59: -1- AH_OUTPUT([HAVE_STROPTS_H], [/* Define to 1 if you have the <stropts.h> header file. */
#undef HAVE_STROPTS_H])
m4trace:acplugins.m4:62: -2- AC_DEFINE_TRACE_LITERAL([HAVE_OPENPTY])
m4trace:acplugins.m4:65: -2- AC_DEFINE_TRACE_LITERAL([HAVE_UNIX98_PTYS])
m4trace:acplugins.m4:82: -2- AC_CHECK_LIB([ffi], [ffi_call], [
plibs="${plibs} ffi"], [
echo "$as_me:$LINENO: result: ******** disabling ${plugin}" >&5
echo "${ECHO_T}******** disabling ${plugin}" >&6
disabled_plugins="${disabled_plugins} ${plugin}"])
m4trace:configure.ac:298: -1- AC_CONFIG_HEADERS([config.h])
m4trace:configure.ac:299: -1- AC_CONFIG_FILES([mkconfig make.cfg make.int make.ext make.prg inisqueak Makefile])
m4trace:configure.ac:306: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
m4trace:configure.ac:306: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
|
|
From: Brenda L. <asp...@us...> - 2003-05-12 07:26:26
|
Update of /cvsroot/squeak/squeak/platforms/unix/npsqueak/test In directory sc8-pr-cvs1:/tmp/cvs-serv30143/npsqueak/test Added Files: plugintest.html plugintest.sts Log Message: Ian Piumarta's release 3.4.1 --- NEW FILE: plugintest.html --- <HTML> <HEAD> <TITLE>Squeak Plugin Test</TITLE> </HEAD> <BODY> <H1>Squeak Plugin Test</H1> <hr> <b>Embedded mode:</b> <p> <CENTER> <EMBED type="application/x-squeak-source" src="plugintest.sts" WIDTH="640" HEIGHT="480" ALIGN="CENTER" PLUGINSPAGE="http://isgwww.cs.uni-magdeburg.de/~bert/squeak/plugin/download.html" EMPTYPARAM BLA="BLABLA" > </CENTER> <hr> <b>Fullwindow mode:</b> <a href="plugintest.sts">plugintest.sts</a> <hr> <P> </BODY> </HTML> --- NEW FILE: plugintest.sts --- "If you see this message as a text file something went wrong. You may go back and try the embedded Squeak version. If this works, the server isn't sending the right mime type. If not, the Squeak plugin is not installed correctly. " StringHolder new textContents: ('Hello Plugin World!! This window was opened by some code in the file plugintest.sts, which was downloaded by your web browser and executed by the Squeak Plugin Virtual Machine (', (Smalltalk getSystemAttribute: 0), ') in an object image (', (Smalltalk getSystemAttribute: 1),'). Since you are reading this I guess all is okay then ... On most platforms, you can also run Squeak as a stand-alone program if you start the VM with the image. ') withSqueakLineEndings; openLabel: 'Plugin Startup' |
|
From: Brenda L. <asp...@us...> - 2003-05-12 07:26:25
|
Update of /cvsroot/squeak/squeak/platforms/unix/npsqueak/include
In directory sc8-pr-cvs1:/tmp/cvs-serv30143/npsqueak/include
Added Files:
jri.h jri_md.h jritypes.h npapi.h npupp.h
Log Message:
Ian Piumarta's release 3.4.1
--- NEW FILE: jri.h ---
/* -*- Mode: C; tab-width: 4; -*- */
/*******************************************************************************
* Java Runtime Interface
* Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
******************************************************************************/
#ifndef JRI_H
#define JRI_H
#include "jritypes.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*******************************************************************************
* JRIEnv
******************************************************************************/
/* The type of the JRIEnv interface. */
typedef struct JRIEnvInterface JRIEnvInterface;
/* The type of a JRIEnv instance. */
typedef const JRIEnvInterface* JRIEnv;
/*******************************************************************************
* JRIEnv Operations
******************************************************************************/
#define JRI_LoadClass(env, buf, bufLen) \
(((*(env))->LoadClass)(env, JRI_LoadClass_op, buf, bufLen))
#define JRI_FindClass(env, name) \
(((*(env))->FindClass)(env, JRI_FindClass_op, name))
#define JRI_Throw(env, obj) \
(((*(env))->Throw)(env, JRI_Throw_op, obj))
#define JRI_ThrowNew(env, clazz, message) \
(((*(env))->ThrowNew)(env, JRI_ThrowNew_op, clazz, message))
#define JRI_ExceptionOccurred(env) \
(((*(env))->ExceptionOccurred)(env, JRI_ExceptionOccurred_op))
#define JRI_ExceptionDescribe(env) \
(((*(env))->ExceptionDescribe)(env, JRI_ExceptionDescribe_op))
#define JRI_ExceptionClear(env) \
(((*(env))->ExceptionClear)(env, JRI_ExceptionClear_op))
#define JRI_NewGlobalRef(env, ref) \
(((*(env))->NewGlobalRef)(env, JRI_NewGlobalRef_op, ref))
#define JRI_DisposeGlobalRef(env, gref) \
(((*(env))->DisposeGlobalRef)(env, JRI_DisposeGlobalRef_op, gref))
#define JRI_GetGlobalRef(env, gref) \
(((*(env))->GetGlobalRef)(env, JRI_GetGlobalRef_op, gref))
#define JRI_SetGlobalRef(env, gref, ref) \
(((*(env))->SetGlobalRef)(env, JRI_SetGlobalRef_op, gref, ref))
#define JRI_IsSameObject(env, a, b) \
(((*(env))->IsSameObject)(env, JRI_IsSameObject_op, a, b))
#define JRI_NewObject(env) ((*(env))->NewObject)
#define JRI_NewObjectV(env, clazz, methodID, args) \
(((*(env))->NewObjectV)(env, JRI_NewObject_op_va_list, clazz, methodID, args))
#define JRI_NewObjectA(env, clazz, method, args) \
(((*(env))->NewObjectA)(env, JRI_NewObject_op_array, clazz, methodID, args))
#define JRI_GetObjectClass(env, obj) \
(((*(env))->GetObjectClass)(env, JRI_GetObjectClass_op, obj))
#define JRI_IsInstanceOf(env, obj, clazz) \
(((*(env))->IsInstanceOf)(env, JRI_IsInstanceOf_op, obj, clazz))
#define JRI_GetMethodID(env, clazz, name, sig) \
(((*(env))->GetMethodID)(env, JRI_GetMethodID_op, clazz, name, sig))
#define JRI_CallMethod(env) ((*(env))->CallMethod)
#define JRI_CallMethodV(env, obj, methodID, args) \
(((*(env))->CallMethodV)(env, JRI_CallMethod_op_va_list, obj, methodID, args))
#define JRI_CallMethodA(env, obj, methodID, args) \
(((*(env))->CallMethodA)(env, JRI_CallMethod_op_array, obj, methodID, args))
#define JRI_CallMethodBoolean(env) ((*(env))->CallMethodBoolean)
#define JRI_CallMethodBooleanV(env, obj, methodID, args) \
(((*(env))->CallMethodBooleanV)(env, JRI_CallMethodBoolean_op_va_list, obj, methodID, args))
#define JRI_CallMethodBooleanA(env, obj, methodID, args) \
(((*(env))->CallMethodBooleanA)(env, JRI_CallMethodBoolean_op_array, obj, methodID, args))
#define JRI_CallMethodByte(env) ((*(env))->CallMethodByte)
#define JRI_CallMethodByteV(env, obj, methodID, args) \
(((*(env))->CallMethodByteV)(env, JRI_CallMethodByte_op_va_list, obj, methodID, args))
#define JRI_CallMethodByteA(env, obj, methodID, args) \
(((*(env))->CallMethodByteA)(env, JRI_CallMethodByte_op_array, obj, methodID, args))
#define JRI_CallMethodChar(env) ((*(env))->CallMethodChar)
#define JRI_CallMethodCharV(env, obj, methodID, args) \
(((*(env))->CallMethodCharV)(env, JRI_CallMethodChar_op_va_list, obj, methodID, args))
#define JRI_CallMethodCharA(env, obj, methodID, args) \
(((*(env))->CallMethodCharA)(env, JRI_CallMethodChar_op_array, obj, methodID, args))
#define JRI_CallMethodShort(env) ((*(env))->CallMethodShort)
#define JRI_CallMethodShortV(env, obj, methodID, args) \
(((*(env))->CallMethodShortV)(env, JRI_CallMethodShort_op_va_list, obj, methodID, args))
#define JRI_CallMethodShortA(env, obj, methodID, args) \
(((*(env))->CallMethodShortA)(env, JRI_CallMethodShort_op_array, obj, methodID, args))
#define JRI_CallMethodInt(env) ((*(env))->CallMethodInt)
#define JRI_CallMethodIntV(env, obj, methodID, args) \
(((*(env))->CallMethodIntV)(env, JRI_CallMethodInt_op_va_list, obj, methodID, args))
#define JRI_CallMethodIntA(env, obj, methodID, args) \
(((*(env))->CallMethodIntA)(env, JRI_CallMethodInt_op_array, obj, methodID, args))
#define JRI_CallMethodLong(env) ((*(env))->CallMethodLong)
#define JRI_CallMethodLongV(env, obj, methodID, args) \
(((*(env))->CallMethodLongV)(env, JRI_CallMethodLong_op_va_list, obj, methodID, args))
#define JRI_CallMethodLongA(env, obj, methodID, args) \
(((*(env))->CallMethodLongA)(env, JRI_CallMethodLong_op_array, obj, methodID, args))
#define JRI_CallMethodFloat(env) ((*(env))->CallMethodFloat)
#define JRI_CallMethodFloatV(env, obj, methodID, args) \
(((*(env))->CallMethodFloatV)(env, JRI_CallMethodFloat_op_va_list, obj, methodID, args))
#define JRI_CallMethodFloatA(env, obj, methodID, args) \
(((*(env))->CallMethodFloatA)(env, JRI_CallMethodFloat_op_array, obj, methodID, args))
#define JRI_CallMethodDouble(env) ((*(env))->CallMethodDouble)
#define JRI_CallMethodDoubleV(env, obj, methodID, args) \
(((*(env))->CallMethodDoubleV)(env, JRI_CallMethodDouble_op_va_list, obj, methodID, args))
#define JRI_CallMethodDoubleA(env, obj, methodID, args) \
(((*(env))->CallMethodDoubleA)(env, JRI_CallMethodDouble_op_array, obj, methodID, args))
#define JRI_GetFieldID(env, clazz, name, sig) \
(((*(env))->GetFieldID)(env, JRI_GetFieldID_op, clazz, name, sig))
#define JRI_GetField(env, obj, fieldID) \
(((*(env))->GetField)(env, JRI_GetField_op, obj, fieldID))
#define JRI_GetFieldBoolean(env, obj, fieldID) \
(((*(env))->GetFieldBoolean)(env, JRI_GetFieldBoolean_op, obj, fieldID))
#define JRI_GetFieldByte(env, obj, fieldID) \
(((*(env))->GetFieldByte)(env, JRI_GetFieldByte_op, obj, fieldID))
#define JRI_GetFieldChar(env, obj, fieldID) \
(((*(env))->GetFieldChar)(env, JRI_GetFieldChar_op, obj, fieldID))
#define JRI_GetFieldShort(env, obj, fieldID) \
(((*(env))->GetFieldShort)(env, JRI_GetFieldShort_op, obj, fieldID))
#define JRI_GetFieldInt(env, obj, fieldID) \
(((*(env))->GetFieldInt)(env, JRI_GetFieldInt_op, obj, fieldID))
#define JRI_GetFieldLong(env, obj, fieldID) \
(((*(env))->GetFieldLong)(env, JRI_GetFieldLong_op, obj, fieldID))
#define JRI_GetFieldFloat(env, obj, fieldID) \
(((*(env))->GetFieldFloat)(env, JRI_GetFieldFloat_op, obj, fieldID))
#define JRI_GetFieldDouble(env, obj, fieldID) \
(((*(env))->GetFieldDouble)(env, JRI_GetFieldDouble_op, obj, fieldID))
#define JRI_SetField(env, obj, fieldID, value) \
(((*(env))->SetField)(env, JRI_SetField_op, obj, fieldID, value))
#define JRI_SetFieldBoolean(env, obj, fieldID, value) \
(((*(env))->SetFieldBoolean)(env, JRI_SetFieldBoolean_op, obj, fieldID, value))
#define JRI_SetFieldByte(env, obj, fieldID, value) \
(((*(env))->SetFieldByte)(env, JRI_SetFieldByte_op, obj, fieldID, value))
#define JRI_SetFieldChar(env, obj, fieldID, value) \
(((*(env))->SetFieldChar)(env, JRI_SetFieldChar_op, obj, fieldID, value))
#define JRI_SetFieldShort(env, obj, fieldID, value) \
(((*(env))->SetFieldShort)(env, JRI_SetFieldShort_op, obj, fieldID, value))
#define JRI_SetFieldInt(env, obj, fieldID, value) \
(((*(env))->SetFieldInt)(env, JRI_SetFieldInt_op, obj, fieldID, value))
#define JRI_SetFieldLong(env, obj, fieldID, value) \
(((*(env))->SetFieldLong)(env, JRI_SetFieldLong_op, obj, fieldID, value))
#define JRI_SetFieldFloat(env, obj, fieldID, value) \
(((*(env))->SetFieldFloat)(env, JRI_SetFieldFloat_op, obj, fieldID, value))
#define JRI_SetFieldDouble(env, obj, fieldID, value) \
(((*(env))->SetFieldDouble)(env, JRI_SetFieldDouble_op, obj, fieldID, value))
#define JRI_IsSubclassOf(env, a, b) \
(((*(env))->IsSubclassOf)(env, JRI_IsSubclassOf_op, a, b))
#define JRI_GetStaticMethodID(env, clazz, name, sig) \
(((*(env))->GetStaticMethodID)(env, JRI_GetStaticMethodID_op, clazz, name, sig))
#define JRI_CallStaticMethod(env) ((*(env))->CallStaticMethod)
#define JRI_CallStaticMethodV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodV)(env, JRI_CallStaticMethod_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodA)(env, JRI_CallStaticMethod_op_array, clazz, methodID, args))
#define JRI_CallStaticMethodBoolean(env) ((*(env))->CallStaticMethodBoolean)
#define JRI_CallStaticMethodBooleanV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodBooleanV)(env, JRI_CallStaticMethodBoolean_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodBooleanA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodBooleanA)(env, JRI_CallStaticMethodBoolean_op_array, clazz, methodID, args))
#define JRI_CallStaticMethodByte(env) ((*(env))->CallStaticMethodByte)
#define JRI_CallStaticMethodByteV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodByteV)(env, JRI_CallStaticMethodByte_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodByteA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodByteA)(env, JRI_CallStaticMethodByte_op_array, clazz, methodID, args))
#define JRI_CallStaticMethodChar(env) ((*(env))->CallStaticMethodChar)
#define JRI_CallStaticMethodCharV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodCharV)(env, JRI_CallStaticMethodChar_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodCharA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodCharA)(env, JRI_CallStaticMethodChar_op_array, clazz, methodID, args))
#define JRI_CallStaticMethodShort(env) ((*(env))->CallStaticMethodShort)
#define JRI_CallStaticMethodShortV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodShortV)(env, JRI_CallStaticMethodShort_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodShortA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodShortA)(env, JRI_CallStaticMethodShort_op_array, clazz, methodID, args))
#define JRI_CallStaticMethodInt(env) ((*(env))->CallStaticMethodInt)
#define JRI_CallStaticMethodIntV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodIntV)(env, JRI_CallStaticMethodInt_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodIntA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodIntA)(env, JRI_CallStaticMethodInt_op_array, clazz, methodID, args))
#define JRI_CallStaticMethodLong(env) ((*(env))->CallStaticMethodLong)
#define JRI_CallStaticMethodLongV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodLongV)(env, JRI_CallStaticMethodLong_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodLongA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodLongA)(env, JRI_CallStaticMethodLong_op_array, clazz, methodID, args))
#define JRI_CallStaticMethodFloat(env) ((*(env))->CallStaticMethodFloat)
#define JRI_CallStaticMethodFloatV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodFloatV)(env, JRI_CallStaticMethodFloat_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodFloatA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodFloatA)(env, JRI_CallStaticMethodFloat_op_array, clazz, methodID, args))
#define JRI_CallStaticMethodDouble(env) ((*(env))->CallStaticMethodDouble)
#define JRI_CallStaticMethodDoubleV(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodDoubleV)(env, JRI_CallStaticMethodDouble_op_va_list, clazz, methodID, args))
#define JRI_CallStaticMethodDoubleA(env, clazz, methodID, args) \
(((*(env))->CallStaticMethodDoubleA)(env, JRI_CallStaticMethodDouble_op_array, clazz, methodID, args))
#define JRI_GetStaticFieldID(env, clazz, name, sig) \
(((*(env))->GetStaticFieldID)(env, JRI_GetStaticFieldID_op, clazz, name, sig))
#define JRI_GetStaticField(env, clazz, fieldID) \
(((*(env))->GetStaticField)(env, JRI_GetStaticField_op, clazz, fieldID))
#define JRI_GetStaticFieldBoolean(env, clazz, fieldID) \
(((*(env))->GetStaticFieldBoolean)(env, JRI_GetStaticFieldBoolean_op, clazz, fieldID))
#define JRI_GetStaticFieldByte(env, clazz, fieldID) \
(((*(env))->GetStaticFieldByte)(env, JRI_GetStaticFieldByte_op, clazz, fieldID))
#define JRI_GetStaticFieldChar(env, clazz, fieldID) \
(((*(env))->GetStaticFieldChar)(env, JRI_GetStaticFieldChar_op, clazz, fieldID))
#define JRI_GetStaticFieldShort(env, clazz, fieldID) \
(((*(env))->GetStaticFieldShort)(env, JRI_GetStaticFieldShort_op, clazz, fieldID))
#define JRI_GetStaticFieldInt(env, clazz, fieldID) \
(((*(env))->GetStaticFieldInt)(env, JRI_GetStaticFieldInt_op, clazz, fieldID))
#define JRI_GetStaticFieldLong(env, clazz, fieldID) \
(((*(env))->GetStaticFieldLong)(env, JRI_GetStaticFieldLong_op, clazz, fieldID))
#define JRI_GetStaticFieldFloat(env, clazz, fieldID) \
(((*(env))->GetStaticFieldFloat)(env, JRI_GetStaticFieldFloat_op, clazz, fieldID))
#define JRI_GetStaticFieldDouble(env, clazz, fieldID) \
(((*(env))->GetStaticFieldDouble)(env, JRI_GetStaticFieldDouble_op, clazz, fieldID))
#define JRI_SetStaticField(env, clazz, fieldID, value) \
(((*(env))->SetStaticField)(env, JRI_SetStaticField_op, clazz, fieldID, value))
#define JRI_SetStaticFieldBoolean(env, clazz, fieldID, value) \
(((*(env))->SetStaticFieldBoolean)(env, JRI_SetStaticFieldBoolean_op, clazz, fieldID, value))
#define JRI_SetStaticFieldByte(env, clazz, fieldID, value) \
(((*(env))->SetStaticFieldByte)(env, JRI_SetStaticFieldByte_op, clazz, fieldID, value))
#define JRI_SetStaticFieldChar(env, clazz, fieldID, value) \
(((*(env))->SetStaticFieldChar)(env, JRI_SetStaticFieldChar_op, clazz, fieldID, value))
#define JRI_SetStaticFieldShort(env, clazz, fieldID, value) \
(((*(env))->SetStaticFieldShort)(env, JRI_SetStaticFieldShort_op, clazz, fieldID, value))
#define JRI_SetStaticFieldInt(env, clazz, fieldID, value) \
(((*(env))->SetStaticFieldInt)(env, JRI_SetStaticFieldInt_op, clazz, fieldID, value))
#define JRI_SetStaticFieldLong(env, clazz, fieldID, value) \
(((*(env))->SetStaticFieldLong)(env, JRI_SetStaticFieldLong_op, clazz, fieldID, value))
#define JRI_SetStaticFieldFloat(env, clazz, fieldID, value) \
(((*(env))->SetStaticFieldFloat)(env, JRI_SetStaticFieldFloat_op, clazz, fieldID, value))
#define JRI_SetStaticFieldDouble(env, clazz, fieldID, value) \
(((*(env))->SetStaticFieldDouble)(env, JRI_SetStaticFieldDouble_op, clazz, fieldID, value))
#define JRI_NewString(env, unicode, len) \
(((*(env))->NewString)(env, JRI_NewString_op, unicode, len))
#define JRI_GetStringLength(env, string) \
(((*(env))->GetStringLength)(env, JRI_GetStringLength_op, string))
#define JRI_GetStringChars(env, string) \
(((*(env))->GetStringChars)(env, JRI_GetStringChars_op, string))
#define JRI_NewStringUTF(env, utf, len) \
(((*(env))->NewStringUTF)(env, JRI_NewStringUTF_op, utf, len))
#define JRI_GetStringUTFLength(env, string) \
(((*(env))->GetStringUTFLength)(env, JRI_GetStringUTFLength_op, string))
#define JRI_GetStringUTFChars(env, string) \
(((*(env))->GetStringUTFChars)(env, JRI_GetStringUTFChars_op, string))
#define JRI_NewScalarArray(env, length, elementSig, initialElements) \
(((*(env))->NewScalarArray)(env, JRI_NewScalarArray_op, length, elementSig, initialElements))
#define JRI_GetScalarArrayLength(env, array) \
(((*(env))->GetScalarArrayLength)(env, JRI_GetScalarArrayLength_op, array))
#define JRI_GetScalarArrayElements(env, array) \
(((*(env))->GetScalarArrayElements)(env, JRI_GetScalarArrayElements_op, array))
#define JRI_NewObjectArray(env, length, elementClass, initialElement) \
(((*(env))->NewObjectArray)(env, JRI_NewObjectArray_op, length, elementClass, initialElement))
#define JRI_GetObjectArrayLength(env, array) \
(((*(env))->GetObjectArrayLength)(env, JRI_GetObjectArrayLength_op, array))
#define JRI_GetObjectArrayElement(env, array, index) \
(((*(env))->GetObjectArrayElement)(env, JRI_GetObjectArrayElement_op, array, index))
#define JRI_SetObjectArrayElement(env, array, index, value) \
(((*(env))->SetObjectArrayElement)(env, JRI_SetObjectArrayElement_op, array, index, value))
#define JRI_RegisterNatives(env, clazz, nameAndSigArray, nativeProcArray) \
(((*(env))->RegisterNatives)(env, JRI_RegisterNatives_op, clazz, nameAndSigArray, nativeProcArray))
#define JRI_UnregisterNatives(env, clazz) \
(((*(env))->UnregisterNatives)(env, JRI_UnregisterNatives_op, clazz))
/*******************************************************************************
* JRIEnv Interface
******************************************************************************/
struct java_lang_Class;
struct java_lang_Throwable;
struct java_lang_Object;
struct java_lang_String;
struct JRIEnvInterface {
void* reserved0;
void* reserved1;
void* reserved2;
struct java_lang_Class* (*LoadClass)(JRIEnv* env, jint op, jbyte* a, jsize aLen);
struct java_lang_Class* (*FindClass)(JRIEnv* env, jint op, const char* a);
void (*Throw)(JRIEnv* env, jint op, struct java_lang_Throwable* a);
void (*ThrowNew)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b);
struct java_lang_Throwable* (*ExceptionOccurred)(JRIEnv* env, jint op);
void (*ExceptionDescribe)(JRIEnv* env, jint op);
void (*ExceptionClear)(JRIEnv* env, jint op);
jglobal (*NewGlobalRef)(JRIEnv* env, jint op, void* a);
void (*DisposeGlobalRef)(JRIEnv* env, jint op, jglobal a);
void* (*GetGlobalRef)(JRIEnv* env, jint op, jglobal a);
void (*SetGlobalRef)(JRIEnv* env, jint op, jglobal a, void* b);
jbool (*IsSameObject)(JRIEnv* env, jint op, void* a, void* b);
void* (*NewObject)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
void* (*NewObjectV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
void* (*NewObjectA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
struct java_lang_Class* (*GetObjectClass)(JRIEnv* env, jint op, void* a);
jbool (*IsInstanceOf)(JRIEnv* env, jint op, void* a, struct java_lang_Class* b);
jint (*GetMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
void* (*CallMethod)(JRIEnv* env, jint op, void* a, jint b, ...);
void* (*CallMethodV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
void* (*CallMethodA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jbool (*CallMethodBoolean)(JRIEnv* env, jint op, void* a, jint b, ...);
jbool (*CallMethodBooleanV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
jbool (*CallMethodBooleanA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jbyte (*CallMethodByte)(JRIEnv* env, jint op, void* a, jint b, ...);
jbyte (*CallMethodByteV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
jbyte (*CallMethodByteA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jchar (*CallMethodChar)(JRIEnv* env, jint op, void* a, jint b, ...);
jchar (*CallMethodCharV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
jchar (*CallMethodCharA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jshort (*CallMethodShort)(JRIEnv* env, jint op, void* a, jint b, ...);
jshort (*CallMethodShortV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
jshort (*CallMethodShortA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jint (*CallMethodInt)(JRIEnv* env, jint op, void* a, jint b, ...);
jint (*CallMethodIntV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
jint (*CallMethodIntA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jlong (*CallMethodLong)(JRIEnv* env, jint op, void* a, jint b, ...);
jlong (*CallMethodLongV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
jlong (*CallMethodLongA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jfloat (*CallMethodFloat)(JRIEnv* env, jint op, void* a, jint b, ...);
jfloat (*CallMethodFloatV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
jfloat (*CallMethodFloatA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jdouble (*CallMethodDouble)(JRIEnv* env, jint op, void* a, jint b, ...);
jdouble (*CallMethodDoubleV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
jdouble (*CallMethodDoubleA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
jint (*GetFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
void* (*GetField)(JRIEnv* env, jint op, void* a, jint b);
jbool (*GetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b);
jbyte (*GetFieldByte)(JRIEnv* env, jint op, void* a, jint b);
jchar (*GetFieldChar)(JRIEnv* env, jint op, void* a, jint b);
jshort (*GetFieldShort)(JRIEnv* env, jint op, void* a, jint b);
jint (*GetFieldInt)(JRIEnv* env, jint op, void* a, jint b);
jlong (*GetFieldLong)(JRIEnv* env, jint op, void* a, jint b);
jfloat (*GetFieldFloat)(JRIEnv* env, jint op, void* a, jint b);
jdouble (*GetFieldDouble)(JRIEnv* env, jint op, void* a, jint b);
void (*SetField)(JRIEnv* env, jint op, void* a, jint b, void* c);
void (*SetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b, jbool c);
void (*SetFieldByte)(JRIEnv* env, jint op, void* a, jint b, jbyte c);
void (*SetFieldChar)(JRIEnv* env, jint op, void* a, jint b, jchar c);
void (*SetFieldShort)(JRIEnv* env, jint op, void* a, jint b, jshort c);
void (*SetFieldInt)(JRIEnv* env, jint op, void* a, jint b, jint c);
void (*SetFieldLong)(JRIEnv* env, jint op, void* a, jint b, jlong c);
void (*SetFieldFloat)(JRIEnv* env, jint op, void* a, jint b, jfloat c);
void (*SetFieldDouble)(JRIEnv* env, jint op, void* a, jint b, jdouble c);
jbool (*IsSubclassOf)(JRIEnv* env, jint op, struct java_lang_Class* a, struct java_lang_Class* b);
jint (*GetStaticMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
void* (*CallStaticMethod)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
void* (*CallStaticMethodV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
void* (*CallStaticMethodA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jbool (*CallStaticMethodBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
jbool (*CallStaticMethodBooleanV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
jbool (*CallStaticMethodBooleanA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jbyte (*CallStaticMethodByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
jbyte (*CallStaticMethodByteV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
jbyte (*CallStaticMethodByteA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jchar (*CallStaticMethodChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
jchar (*CallStaticMethodCharV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
jchar (*CallStaticMethodCharA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jshort (*CallStaticMethodShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
jshort (*CallStaticMethodShortV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
jshort (*CallStaticMethodShortA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jint (*CallStaticMethodInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
jint (*CallStaticMethodIntV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
jint (*CallStaticMethodIntA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jlong (*CallStaticMethodLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
jlong (*CallStaticMethodLongV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
jlong (*CallStaticMethodLongA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jfloat (*CallStaticMethodFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
jfloat (*CallStaticMethodFloatV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
jfloat (*CallStaticMethodFloatA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jdouble (*CallStaticMethodDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
jdouble (*CallStaticMethodDoubleV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
jdouble (*CallStaticMethodDoubleA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
jint (*GetStaticFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
void* (*GetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
jbool (*GetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
jbyte (*GetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
jchar (*GetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
jshort (*GetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
jint (*GetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
jlong (*GetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
jfloat (*GetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
jdouble (*GetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
void (*SetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, void* c);
void (*SetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbool c);
void (*SetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbyte c);
void (*SetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jchar c);
void (*SetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jshort c);
void (*SetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jint c);
void (*SetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jlong c);
void (*SetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jfloat c);
void (*SetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jdouble c);
struct java_lang_String* (*NewString)(JRIEnv* env, jint op, const jchar* a, jint b);
jint (*GetStringLength)(JRIEnv* env, jint op, struct java_lang_String* a);
const jchar* (*GetStringChars)(JRIEnv* env, jint op, struct java_lang_String* a);
struct java_lang_String* (*NewStringUTF)(JRIEnv* env, jint op, const jbyte* a, jint b);
jint (*GetStringUTFLength)(JRIEnv* env, jint op, struct java_lang_String* a);
const jbyte* (*GetStringUTFChars)(JRIEnv* env, jint op, struct java_lang_String* a);
void* (*NewScalarArray)(JRIEnv* env, jint op, jint a, const char* b, const jbyte* c);
jint (*GetScalarArrayLength)(JRIEnv* env, jint op, void* a);
jbyte* (*GetScalarArrayElements)(JRIEnv* env, jint op, void* a);
void* (*NewObjectArray)(JRIEnv* env, jint op, jint a, struct java_lang_Class* b, void* c);
jint (*GetObjectArrayLength)(JRIEnv* env, jint op, void* a);
void* (*GetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b);
void (*SetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b, void* c);
void (*RegisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a, char** b, void** c);
void (*UnregisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a);
};
/*******************************************************************************
* JRIEnv Operation IDs
******************************************************************************/
typedef enum JRIEnvOperations {
JRI_Reserved0_op,
JRI_Reserved1_op,
JRI_Reserved2_op,
JRI_LoadClass_op,
JRI_FindClass_op,
JRI_Throw_op,
JRI_ThrowNew_op,
JRI_ExceptionOccurred_op,
JRI_ExceptionDescribe_op,
JRI_ExceptionClear_op,
JRI_NewGlobalRef_op,
JRI_DisposeGlobalRef_op,
JRI_GetGlobalRef_op,
JRI_SetGlobalRef_op,
JRI_IsSameObject_op,
JRI_NewObject_op,
JRI_NewObject_op_va_list,
JRI_NewObject_op_array,
JRI_GetObjectClass_op,
JRI_IsInstanceOf_op,
JRI_GetMethodID_op,
JRI_CallMethod_op,
JRI_CallMethod_op_va_list,
JRI_CallMethod_op_array,
JRI_CallMethodBoolean_op,
JRI_CallMethodBoolean_op_va_list,
JRI_CallMethodBoolean_op_array,
JRI_CallMethodByte_op,
JRI_CallMethodByte_op_va_list,
JRI_CallMethodByte_op_array,
JRI_CallMethodChar_op,
JRI_CallMethodChar_op_va_list,
JRI_CallMethodChar_op_array,
JRI_CallMethodShort_op,
JRI_CallMethodShort_op_va_list,
JRI_CallMethodShort_op_array,
JRI_CallMethodInt_op,
JRI_CallMethodInt_op_va_list,
JRI_CallMethodInt_op_array,
JRI_CallMethodLong_op,
JRI_CallMethodLong_op_va_list,
JRI_CallMethodLong_op_array,
JRI_CallMethodFloat_op,
JRI_CallMethodFloat_op_va_list,
JRI_CallMethodFloat_op_array,
JRI_CallMethodDouble_op,
JRI_CallMethodDouble_op_va_list,
JRI_CallMethodDouble_op_array,
JRI_GetFieldID_op,
JRI_GetField_op,
JRI_GetFieldBoolean_op,
JRI_GetFieldByte_op,
JRI_GetFieldChar_op,
JRI_GetFieldShort_op,
JRI_GetFieldInt_op,
JRI_GetFieldLong_op,
JRI_GetFieldFloat_op,
JRI_GetFieldDouble_op,
JRI_SetField_op,
JRI_SetFieldBoolean_op,
JRI_SetFieldByte_op,
JRI_SetFieldChar_op,
JRI_SetFieldShort_op,
JRI_SetFieldInt_op,
JRI_SetFieldLong_op,
JRI_SetFieldFloat_op,
JRI_SetFieldDouble_op,
JRI_IsSubclassOf_op,
JRI_GetStaticMethodID_op,
JRI_CallStaticMethod_op,
JRI_CallStaticMethod_op_va_list,
JRI_CallStaticMethod_op_array,
JRI_CallStaticMethodBoolean_op,
JRI_CallStaticMethodBoolean_op_va_list,
JRI_CallStaticMethodBoolean_op_array,
JRI_CallStaticMethodByte_op,
JRI_CallStaticMethodByte_op_va_list,
JRI_CallStaticMethodByte_op_array,
JRI_CallStaticMethodChar_op,
JRI_CallStaticMethodChar_op_va_list,
JRI_CallStaticMethodChar_op_array,
JRI_CallStaticMethodShort_op,
JRI_CallStaticMethodShort_op_va_list,
JRI_CallStaticMethodShort_op_array,
JRI_CallStaticMethodInt_op,
JRI_CallStaticMethodInt_op_va_list,
JRI_CallStaticMethodInt_op_array,
JRI_CallStaticMethodLong_op,
JRI_CallStaticMethodLong_op_va_list,
JRI_CallStaticMethodLong_op_array,
JRI_CallStaticMethodFloat_op,
JRI_CallStaticMethodFloat_op_va_list,
JRI_CallStaticMethodFloat_op_array,
JRI_CallStaticMethodDouble_op,
JRI_CallStaticMethodDouble_op_va_list,
JRI_CallStaticMethodDouble_op_array,
JRI_GetStaticFieldID_op,
JRI_GetStaticField_op,
JRI_GetStaticFieldBoolean_op,
JRI_GetStaticFieldByte_op,
JRI_GetStaticFieldChar_op,
JRI_GetStaticFieldShort_op,
JRI_GetStaticFieldInt_op,
JRI_GetStaticFieldLong_op,
JRI_GetStaticFieldFloat_op,
JRI_GetStaticFieldDouble_op,
JRI_SetStaticField_op,
JRI_SetStaticFieldBoolean_op,
JRI_SetStaticFieldByte_op,
JRI_SetStaticFieldChar_op,
JRI_SetStaticFieldShort_op,
JRI_SetStaticFieldInt_op,
JRI_SetStaticFieldLong_op,
JRI_SetStaticFieldFloat_op,
JRI_SetStaticFieldDouble_op,
JRI_NewString_op,
JRI_GetStringLength_op,
JRI_GetStringChars_op,
JRI_NewStringUTF_op,
JRI_GetStringUTFLength_op,
JRI_GetStringUTFChars_op,
JRI_NewScalarArray_op,
JRI_GetScalarArrayLength_op,
JRI_GetScalarArrayElements_op,
JRI_NewObjectArray_op,
JRI_GetObjectArrayLength_op,
JRI_GetObjectArrayElement_op,
JRI_SetObjectArrayElement_op,
JRI_RegisterNatives_op,
JRI_UnregisterNatives_op
} JRIEnvOperations;
#ifdef __cplusplus
} /* extern "C" */
#endif /* __cplusplus */
#endif /* JRI_H */
/******************************************************************************/
--- NEW FILE: jri_md.h ---
/* -*- Mode: C; tab-width: 4; -*- */
/*******************************************************************************
* Java Runtime Interface - Machine Dependent Types
* Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
******************************************************************************/
#ifndef JRI_MD_H
#define JRI_MD_H
#include <assert.h>
#ifdef __cplusplus
extern "C" {
#endif
/*******************************************************************************
* WHAT'S UP WITH THIS FILE?
*
* This is where we define the mystical JRI_PUBLIC_API macro that works on all
* platforms. If you're running with Visual C++, Symantec C, or Borland's
* development environment on the PC, you're all set. Or if you're on the Mac
* with Metrowerks, Symantec or MPW with SC you're ok too. For UNIX it shouldn't
* matter.
*
* On UNIX though you probably care about a couple of other symbols though:
* IS_LITTLE_ENDIAN must be defined for little-endian systems
* HAVE_LONG_LONG must be defined on systems that have 'long long' integers
* HAVE_ALIGNED_LONGLONGS must be defined if long-longs must be 8 byte aligned
* HAVE_ALIGNED_DOUBLES must be defined if doubles must be 8 byte aligned
* IS_64 must be defined on 64-bit machines (like Dec Alpha)
******************************************************************************/
/* DLL Entry modifiers... */
/* PC */
#if defined(XP_PC) || defined(_WINDOWS) || defined(WIN32) || defined(_WIN32)
# include <windows.h>
# if defined(_MSC_VER)
# if defined(WIN32) || defined(_WIN32)
# define JRI_PUBLIC_API(ResultType) _declspec(dllexport) ResultType
# define JRI_CALLBACK
# else /* !_WIN32 */
# if defined(_WINDLL)
# define JRI_PUBLIC_API(ResultType) ResultType __cdecl __export __loadds
# define JRI_CALLBACK __loadds
# else /* !WINDLL */
# define JRI_PUBLIC_API(ResultType) ResultType __cdecl __export
# define JRI_CALLBACK __export
# endif /* !WINDLL */
# endif /* !_WIN32 */
# elif defined(__BORLANDC__)
# if defined(WIN32) || defined(_WIN32)
# define JRI_PUBLIC_API(ResultType) __export ResultType
# define JRI_CALLBACK
# else /* !_WIN32 */
# define JRI_PUBLIC_API(ResultType) ResultType _cdecl _export _loadds
# define JRI_CALLBACK _loadds
# endif
# else
# error Unsupported PC development environment.
# endif
# ifndef IS_LITTLE_ENDIAN
# define IS_LITTLE_ENDIAN
# endif
/* Mac */
#elif macintosh || Macintosh || THINK_C
# if defined(__MWERKS__) /* Metrowerks */
# if !__option(enumsalwaysint)
# error You need to define 'Enums Always Int' for your project.
# endif
# if defined(GENERATING68K) && !GENERATINGCFM
# if !__option(fourbyteints)
# error You need to define 'Struct Alignment: 68k' for your project.
# endif
# endif /* !GENERATINGCFM */
# elif defined(__SC__) /* Symantec */
# error What are the Symantec defines? (wa...@ne...)
# elif macintosh && applec /* MPW */
# error Please upgrade to the latest MPW compiler (SC).
# else
# error Unsupported Mac development environment.
# endif
# define JRI_PUBLIC_API(ResultType) ResultType
# define JRI_CALLBACK
/* Unix or else */
#else
# define JRI_PUBLIC_API(ResultType) ResultType
# define JRI_CALLBACK
#endif
#ifndef FAR /* for non-Win16 */
#define FAR
#endif
/******************************************************************************/
/* Java Scalar Types */
typedef unsigned char jbool;
typedef char jbyte;
typedef short jchar;
typedef short jshort;
#ifdef IS_64 /* XXX ok for alpha, but not right on all 64-bit architectures */
typedef unsigned int juint;
typedef int jint;
#else
typedef unsigned long juint;
typedef long jint;
#endif
typedef float jfloat;
typedef double jdouble;
typedef juint jsize;
/*******************************************************************************
* jlong : long long (64-bit signed integer type) support.
******************************************************************************/
/*
** Bit masking macros. (n must be <= 31 to be portable)
*/
#define JRI_BIT(n) ((juint)1 << (n))
#define JRI_BITMASK(n) (JRI_BIT(n) - 1)
#ifdef HAVE_LONG_LONG
#if !(defined(WIN32) || defined(_WIN32))
typedef long long jlong;
typedef unsigned long long julong;
#define jlong_MAXINT 0x7fffffffffffffffLL
#define jlong_MININT 0x8000000000000000LL
#define jlong_ZERO 0x0LL
#else
typedef LONGLONG jlong;
typedef DWORDLONG julong;
#define jlong_MAXINT 0x7fffffffffffffffi64
#define jlong_MININT 0x8000000000000000i64
#define jlong_ZERO 0x0i64
#endif
#define jlong_IS_ZERO(a) ((a) == 0)
#define jlong_EQ(a, b) ((a) == (b))
#define jlong_NE(a, b) ((a) != (b))
#define jlong_GE_ZERO(a) ((a) >= 0)
#define jlong_CMP(a, op, b) ((a) op (b))
#define jlong_AND(r, a, b) ((r) = (a) & (b))
#define jlong_OR(r, a, b) ((r) = (a) | (b))
#define jlong_XOR(r, a, b) ((r) = (a) ^ (b))
#define jlong_OR2(r, a) ((r) = (r) | (a))
#define jlong_NOT(r, a) ((r) = ~(a))
#define jlong_NEG(r, a) ((r) = -(a))
#define jlong_ADD(r, a, b) ((r) = (a) + (b))
#define jlong_SUB(r, a, b) ((r) = (a) - (b))
#define jlong_MUL(r, a, b) ((r) = (a) * (b))
#define jlong_DIV(r, a, b) ((r) = (a) / (b))
#define jlong_MOD(r, a, b) ((r) = (a) % (b))
#define jlong_SHL(r, a, b) ((r) = (a) << (b))
#define jlong_SHR(r, a, b) ((r) = (a) >> (b))
#define jlong_USHR(r, a, b) ((r) = (julong)(a) >> (b))
#define jlong_ISHL(r, a, b) ((r) = ((jlong)(a)) << (b))
#define jlong_L2I(i, l) ((i) = (int)(l))
#define jlong_L2UI(ui, l) ((ui) =(unsigned int)(l))
#define jlong_L2F(f, l) ((f) = (l))
#define jlong_L2D(d, l) ((d) = (l))
#define jlong_I2L(l, i) ((l) = (i))
#define jlong_UI2L(l, ui) ((l) = (ui))
#define jlong_F2L(l, f) ((l) = (f))
#define jlong_D2L(l, d) ((l) = (d))
#define jlong_UDIVMOD(qp, rp, a, b) \
(*(qp) = ((julong)(a) / (b)), \
*(rp) = ((julong)(a) % (b)))
#else /* !HAVE_LONG_LONG */
typedef struct {
#ifdef IS_LITTLE_ENDIAN
juint lo, hi;
#else
juint hi, lo;
#endif
} jlong;
typedef jlong julong;
extern jlong jlong_MAXINT, jlong_MININT, jlong_ZERO;
#define jlong_IS_ZERO(a) (((a).hi == 0) && ((a).lo == 0))
#define jlong_EQ(a, b) (((a).hi == (b).hi) && ((a).lo == (b).lo))
#define jlong_NE(a, b) (((a).hi != (b).hi) || ((a).lo != (b).lo))
#define jlong_GE_ZERO(a) (((a).hi >> 31) == 0)
/*
* NB: jlong_CMP and jlong_UCMP work only for strict relationals (<, >).
*/
#define jlong_CMP(a, op, b) (((int32)(a).hi op (int32)(b).hi) || \
(((a).hi == (b).hi) && ((a).lo op (b).lo)))
#define jlong_UCMP(a, op, b) (((a).hi op (b).hi) || \
(((a).hi == (b).hi) && ((a).lo op (b).lo)))
#define jlong_AND(r, a, b) ((r).lo = (a).lo & (b).lo, \
(r).hi = (a).hi & (b).hi)
#define jlong_OR(r, a, b) ((r).lo = (a).lo | (b).lo, \
(r).hi = (a).hi | (b).hi)
#define jlong_XOR(r, a, b) ((r).lo = (a).lo ^ (b).lo, \
(r).hi = (a).hi ^ (b).hi)
#define jlong_OR2(r, a) ((r).lo = (r).lo | (a).lo, \
(r).hi = (r).hi | (a).hi)
#define jlong_NOT(r, a) ((r).lo = ~(a).lo, \
(r).hi = ~(a).hi)
#define jlong_NEG(r, a) ((r).lo = -(int32)(a).lo, \
(r).hi = -(int32)(a).hi - ((r).lo != 0))
#define jlong_ADD(r, a, b) { \
jlong _a, _b; \
_a = a; _b = b; \
(r).lo = _a.lo + _b.lo; \
(r).hi = _a.hi + _b.hi + ((r).lo < _b.lo); \
}
#define jlong_SUB(r, a, b) { \
jlong _a, _b; \
_a = a; _b = b; \
(r).lo = _a.lo - _b.lo; \
(r).hi = _a.hi - _b.hi - (_a.lo < _b.lo); \
} \
/*
* Multiply 64-bit operands a and b to get 64-bit result r.
* First multiply the low 32 bits of a and b to get a 64-bit result in r.
* Then add the outer and inner products to r.hi.
*/
#define jlong_MUL(r, a, b) { \
jlong _a, _b; \
_a = a; _b = b; \
jlong_MUL32(r, _a.lo, _b.lo); \
(r).hi += _a.hi * _b.lo + _a.lo * _b.hi; \
}
/* XXX _jlong_lo16(a) = ((a) << 16 >> 16) is better on some archs (not on mips) */
#define _jlong_lo16(a) ((a) & JRI_BITMASK(16))
#define _jlong_hi16(a) ((a) >> 16)
/*
* Multiply 32-bit operands a and b to get 64-bit result r.
* Use polynomial expansion based on primitive field element (1 << 16).
*/
#define jlong_MUL32(r, a, b) { \
juint _a1, _a0, _b1, _b0, _y0, _y1, _y2, _y3; \
_a1 = _jlong_hi16(a), _a0 = _jlong_lo16(a); \
_b1 = _jlong_hi16(b), _b0 = _jlong_lo16(b); \
_y0 = _a0 * _b0; \
_y1 = _a0 * _b1; \
_y2 = _a1 * _b0; \
_y3 = _a1 * _b1; \
_y1 += _jlong_hi16(_y0); /* can't carry */ \
_y1 += _y2; /* might carry */ \
if (_y1 < _y2) _y3 += 1 << 16; /* propagate */ \
(r).lo = (_jlong_lo16(_y1) << 16) + _jlong_lo16(_y0); \
(r).hi = _y3 + _jlong_hi16(_y1); \
}
/*
* Divide 64-bit unsigned operand a by 64-bit unsigned operand b, setting *qp
* to the 64-bit unsigned quotient, and *rp to the 64-bit unsigned remainder.
* Minimize effort if one of qp and rp is null.
*/
#define jlong_UDIVMOD(qp, rp, a, b) jlong_udivmod(qp, rp, a, b)
extern JRI_PUBLIC_API(void)
jlong_udivmod(julong *qp, julong *rp, julong a, julong b);
#define jlong_DIV(r, a, b) { \
jlong _a, _b; \
juint _negative = (int32)(a).hi < 0; \
if (_negative) { \
jlong_NEG(_a, a); \
} else { \
_a = a; \
} \
if ((int32)(b).hi < 0) { \
_negative ^= 1; \
jlong_NEG(_b, b); \
} else { \
_b = b; \
} \
jlong_UDIVMOD(&(r), 0, _a, _b); \
if (_negative) \
jlong_NEG(r, r); \
}
#define jlong_MOD(r, a, b) { \
jlong _a, _b; \
juint _negative = (int32)(a).hi < 0; \
if (_negative) { \
jlong_NEG(_a, a); \
} else { \
_a = a; \
} \
if ((int32)(b).hi < 0) { \
jlong_NEG(_b, b); \
} else { \
_b = b; \
} \
jlong_UDIVMOD(0, &(r), _a, _b); \
if (_negative) \
jlong_NEG(r, r); \
}
/*
* NB: b is a juint, not jlong or julong, for the shift ops.
*/
#define jlong_SHL(r, a, b) { \
if (b) { \
jlong _a; \
_a = a; \
if ((b) < 32) { \
(r).lo = _a.lo << (b); \
(r).hi = (_a.hi << (b)) | (_a.lo >> (32 - (b))); \
} else { \
(r).lo = 0; \
(r).hi = _a.lo << ((b) & 31); \
} \
} else { \
(r) = (a); \
} \
}
/* a is an int32, b is int32, r is jlong */
#define jlong_ISHL(r, a, b) { \
if (b) { \
jlong _a; \
_a.lo = (a); \
_a.hi = 0; \
if ((b) < 32) { \
(r).lo = (a) << (b); \
(r).hi = ((a) >> (32 - (b))); \
} else { \
(r).lo = 0; \
(r).hi = (a) << ((b) & 31); \
} \
} else { \
(r).lo = (a); \
(r).hi = 0; \
} \
}
#define jlong_SHR(r, a, b) { \
if (b) { \
jlong _a; \
_a = a; \
if ((b) < 32) { \
(r).lo = (_a.hi << (32 - (b))) | (_a.lo >> (b)); \
(r).hi = (int32)_a.hi >> (b); \
} else { \
(r).lo = (int32)_a.hi >> ((b) & 31); \
(r).hi = (int32)_a.hi >> 31; \
} \
} else { \
(r) = (a); \
} \
}
#define jlong_USHR(r, a, b) { \
if (b) { \
jlong _a; \
_a = a; \
if ((b) < 32) { \
(r).lo = (_a.hi << (32 - (b))) | (_a.lo >> (b)); \
(r).hi = _a.hi >> (b); \
} else { \
(r).lo = _a.hi >> ((b) & 31); \
(r).hi = 0; \
} \
} else { \
(r) = (a); \
} \
}
#define jlong_L2I(i, l) ((i) = (l).lo)
#define jlong_L2UI(ui, l) ((ui) = (l).lo)
#define jlong_L2F(f, l) { double _d; jlong_L2D(_d, l); (f) = (float) _d; }
#define jlong_L2D(d, l) { \
int32 _negative; \
jlong _absval; \
\
_negative = (l).hi >> 31; \
if (_negative) { \
jlong_NEG(_absval, l); \
} else { \
_absval = l; \
} \
(d) = (double)_absval.hi * 4.294967296e9 + _absval.lo; \
if (_negative) \
(d) = -(d); \
}
#define jlong_I2L(l, i) ((l).hi = (i) >> 31, (l).lo = (i))
#define jlong_UI2L(l, ui) ((l).hi = 0, (l).lo = (ui))
#define jlong_F2L(l, f) { double _d = (double) f; jlong_D2L(l, _d); }
#define jlong_D2L(l, d) { \
int _negative; \
double _absval, _d_hi; \
jlong _lo_d; \
\
_negative = ((d) < 0); \
_absval = _negative ? -(d) : (d); \
\
(l).hi = (juint)(_absval / 4.294967296e9); \
(l).lo = 0; \
jlong_L2D(_d_hi, l); \
_absval -= _d_hi; \
_lo_d.hi = 0; \
if (_absval < 0) { \
_lo_d.lo = (juint) -_absval; \
jlong_SUB(l, l, _lo_d); \
} else { \
_lo_d.lo = (juint) _absval; \
jlong_ADD(l, l, _lo_d); \
} \
\
if (_negative) \
jlong_NEG(l, l); \
}
#endif /* !HAVE_LONG_LONG */
/******************************************************************************/
/*
** JDK Stuff -- This stuff is still needed while we're using the JDK
** dynamic linking strategy to call native methods.
*/
typedef union JRI_JDK_stack_item {
/* Non pointer items */
jint i;
jfloat f;
jint o;
/* Pointer items */
void *h;
void *p;
unsigned char *addr;
#ifdef IS_64
double d;
long l; /* == 64bits! */
#endif
} JRI_JDK_stack_item;
typedef union JRI_JDK_Java8Str {
jint x[2];
jdouble d;
jlong l;
void *p;
float f;
} JRI_JDK_Java8;
#ifdef HAVE_ALIGNED_LONGLONGS
#define JRI_GET_INT64(_t,_addr) ( ((_t).x[0] = ((jint*)(_addr))[0]), \
((_t).x[1] = ((jint*)(_addr))[1]), \
(_t).l )
#define JRI_SET_INT64(_t, _addr, _v) ( (_t).l = (_v), \
((jint*)(_addr))[0] = (_t).x[0], \
((jint*)(_addr))[1] = (_t).x[1] )
#else
#define JRI_GET_INT64(_t,_addr) (*(jlong*)(_addr))
#define JRI_SET_INT64(_t, _addr, _v) (*(jlong*)(_addr) = (_v))
#endif
/* If double's must be aligned on doubleword boundaries then define this */
#ifdef HAVE_ALIGNED_DOUBLES
#define JRI_GET_DOUBLE(_t,_addr) ( ((_t).x[0] = ((jint*)(_addr))[0]), \
((_t).x[1] = ((jint*)(_addr))[1]), \
(_t).d )
#define JRI_SET_DOUBLE(_t, _addr, _v) ( (_t).d = (_v), \
((jint*)(_addr))[0] = (_t).x[0], \
((jint*)(_addr))[1] = (_t).x[1] )
#else
#define JRI_GET_DOUBLE(_t,_addr) (*(jdouble*)(_addr))
#define JRI_SET_DOUBLE(_t, _addr, _v) (*(jdouble*)(_addr) = (_v))
#endif
/******************************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* JRI_MD_H */
/******************************************************************************/
--- NEW FILE: jritypes.h ---
/* -*- Mode: C; tab-width: 4; -*- */
/*******************************************************************************
* Java Runtime Interface
* Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
******************************************************************************/
#ifndef JRITYPES_H
#define JRITYPES_H
#include "jri_md.h"
#include <stddef.h>
#include <stdlib.h>
#include <stdarg.h>
#ifdef __cplusplus
extern "C" {
#endif
/*******************************************************************************
* Types
******************************************************************************/
struct JRIEnvInterface;
typedef void* JRIRef;
typedef void* JRIGlobalRef;
typedef jint JRIInterfaceID[4];
typedef jint JRIFieldID;
typedef jint JRIMethodID;
/* synonyms: */
typedef JRIGlobalRef jglobal;
typedef JRIRef jref;
typedef union JRIValue {
jbool z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong l;
jfloat f;
jdouble d;
jref r;
} JRIValue;
typedef JRIValue jvalue;
typedef enum JRIBoolean {
JRIFalse = 0,
JRITrue = 1
} JRIBoolean;
typedef enum JRIConstant {
JRIUninitialized = -1
} JRIConstant;
/* convenience types: */
typedef JRIRef jbooleanArray;
typedef JRIRef jbyteArray;
typedef JRIRef jcharArray;
typedef JRIRef jshortArray;
typedef JRIRef jintArray;
typedef JRIRef jlongArray;
typedef JRIRef jfloatArray;
typedef JRIRef jdoubleArray;
typedef JRIRef jobjectArray;
typedef JRIRef jstringArray;
typedef JRIRef jarrayArray;
#define JRIConstructorMethodName "<init>"
/*******************************************************************************
* Signature Construction Macros
******************************************************************************/
/*
** These macros can be used to construct signature strings. Hopefully their names
** are a little easier to remember than the single character they correspond to.
** For example, to specify the signature of the method:
**
** public int read(byte b[], int off, int len);
**
** you could write something like this in C:
**
** char* readSig = JRISigMethod(JRISigArray(JRISigByte)
** JRISigInt
** JRISigInt) JRISigInt;
**
** Of course, don't put commas between the types.
*/
#define JRISigArray(T) "[" T
#define JRISigByte "B"
#define JRISigChar "C"
#define JRISigClass(name) "L" name ";"
#define JRISigFloat "F"
#define JRISigDouble "D"
#define JRISigMethod(args) "(" args ")"
#define JRISigNoArgs ""
#define JRISigInt "I"
#define JRISigLong "J"
#define JRISigShort "S"
#define JRISigVoid "V"
#define JRISigBoolean "Z"
/*******************************************************************************
* Environments
******************************************************************************/
extern JRI_PUBLIC_API(const struct JRIEnvInterface**)
JRI_GetCurrentEnv(void);
/*******************************************************************************
* Specific Scalar Array Types
******************************************************************************/
/*
** The JRI Native Method Interface does not support boolean arrays. This
** is to allow Java runtime implementations to optimize boolean array
** storage. Using the ScalarArray operations on boolean arrays is bound
** to fail, so convert any boolean arrays to byte arrays in Java before
** passing them to a native method.
*/
#define JRI_NewByteArray(env, length, initialValues) \
JRI_NewScalarArray(env, length, JRISigByte, (jbyte*)(initialValues))
#define JRI_GetByteArrayLength(env, array) \
JRI_GetScalarArrayLength(env, array)
#define JRI_GetByteArrayElements(env, array) \
JRI_GetScalarArrayElements(env, array)
#define JRI_NewCharArray(env, length, initialValues) \
JRI_NewScalarArray(env, ((length) * sizeof(jchar)), JRISigChar, (jbyte*)(initialValues))
#define JRI_GetCharArrayLength(env, array) \
JRI_GetScalarArrayLength(env, array)
#define JRI_GetCharArrayElements(env, array) \
((jchar*)JRI_GetScalarArrayElements(env, array))
#define JRI_NewShortArray(env, length, initialValues) \
JRI_NewScalarArray(env, ((length) * sizeof(jshort)), JRISigShort, (jbyte*)(initialValues))
#define JRI_GetShortArrayLength(env, array) \
JRI_GetScalarArrayLength(env, array)
#define JRI_GetShortArrayElements(env, array) \
((jshort*)JRI_GetScalarArrayElements(env, array))
#define JRI_NewIntArray(env, length, initialValues) \
JRI_NewScalarArray(env, ((length) * sizeof(jint)), JRISigInt, (jbyte*)(initialValues))
#define JRI_GetIntArrayLength(env, array) \
JRI_GetScalarArrayLength(env, array)
#define JRI_GetIntArrayElements(env, array) \
((jint*)JRI_GetScalarArrayElements(env, array))
#define JRI_NewLongArray(env, length, initialValues) \
JRI_NewScalarArray(env, ((length) * sizeof(jlong)), JRISigLong, (jbyte*)(initialValues))
#define JRI_GetLongArrayLength(env, array) \
JRI_GetScalarArrayLength(env, array)
#define JRI_GetLongArrayElements(env, array) \
((jlong*)JRI_GetScalarArrayElements(env, array))
#define JRI_NewFloatArray(env, length, initialValues) \
JRI_NewScalarArray(env, ((length) * sizeof(jfloat)), JRISigFloat, (jbyte*)(initialValues))
#define JRI_GetFloatArrayLength(env, array) \
JRI_GetScalarArrayLength(env, array)
#define JRI_GetFloatArrayElements(env, array) \
((jfloat*)JRI_GetScalarArrayElements(env, array))
#define JRI_NewDoubleArray(env, length, initialValues) \
JRI_NewScalarArray(env, ((length) * sizeof(jdouble)), JRISigDouble, (jbyte*)(initialValues))
#define JRI_GetDoubleArrayLength(env, array) \
JRI_GetScalarArrayLength(env, array)
#define JRI_GetDoubleArrayElements(env, array) \
((jdouble*)JRI_GetScalarArrayElements(env, array))
/******************************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* JRITYPES_H */
/******************************************************************************/
--- NEW FILE: npapi.h ---
/* -*- Mode: C; tab-width: 4; -*- */
/*
* npapi.h $Revision: 1.1 $
* Netscape client plug-in API spec
*/
#ifndef _NPAPI_H_
#define _NPAPI_H_
#include "jri.h" /* Java Runtime Interface */
/* XXX this needs to get out of here */
#if defined(__MWERKS__)
#ifndef XP_MAC
#define XP_MAC
#endif
#endif
/*-----------------------...
[truncated message content] |
|
From: Brenda L. <asp...@us...> - 2003-05-12 07:00:43
|
Update of /cvsroot/squeak/squeak/platforms/Cross/vm
In directory sc8-pr-cvs1:/tmp/cvs-serv19565/Cross/vm
Modified Files:
Tag: ian-branch
sq.h
Log Message:
Ian Piumarta's release 3.4.1
Index: sq.h
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/Cross/vm/sq.h,v
retrieving revision 1.5
retrieving revision 1.5.4.1
diff -C2 -d -r1.5 -r1.5.4.1
*** sq.h 6 Mar 2002 10:13:50 -0000 1.5
--- sq.h 12 May 2003 07:00:34 -0000 1.5.4.1
***************
*** 177,181 ****
int interpret(void);
int primitiveFail(void);
! int signalSemaphoreWithIndex(int index);
int success(int);
--- 177,181 ----
int interpret(void);
int primitiveFail(void);
! int signalSemaphoreWithIndex(int semaIndex);
int success(int);
***************
*** 342,346 ****
/* browser plug-in support */
void plugInForceTimeToReturn(void);
! int plugInInit(char *imageName);
int plugInNotifyUser(char *msg);
void plugInSetStartTime(void);
--- 342,346 ----
/* browser plug-in support */
void plugInForceTimeToReturn(void);
! int plugInInit(char *sqImageName);
int plugInNotifyUser(char *msg);
void plugInSetStartTime(void);
|
|
From: Brenda L. <asp...@us...> - 2003-05-12 07:00:43
|
Update of /cvsroot/squeak/squeak/platforms/unix/vm
In directory sc8-pr-cvs1:/tmp/cvs-serv19565/unix/vm
Modified Files:
Tag: ian-branch
sqGnu.h
Log Message:
Ian Piumarta's release 3.4.1
Index: sqGnu.h
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/unix/vm/sqGnu.h,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -C2 -d -r1.1 -r1.1.2.1
*** sqGnu.h 24 Oct 2001 23:14:16 -0000 1.1
--- sqGnu.h 12 May 2003 07:00:36 -0000 1.1.2.1
***************
*** 1,6 ****
/* Definitions for "gnuified" interp.c
*
! * Copyright (C) 1996 1997 1998 1999 2000 2001 Ian Piumarta and individual
! * authors/contributors listed elsewhere in this file.
* All rights reserved.
*
--- 1,6 ----
/* Definitions for "gnuified" interp.c
*
! * Copyright (C) 1996-2002 Ian Piumarta and other authors/contributors
! * as listed elsewhere in this file.
* All rights reserved.
*
***************
*** 21,38 ****
* would be appreciated but is not required.
*
! * 2. This notice may not be removed or altered in any source distribution.
*
! * Using or modifying this file for use in any context other than Squeak
! * changes these copyright conditions. Read the file `COPYING' in the base
! * of the distribution before proceeding with any such use.
*
! * You are STRONGLY DISCOURAGED from distributing a modified version of
! * this file under its original name without permission. If you must
! * change it, rename it first.
*/
/* Author: Ian...@in...
*
! * Last edited: Fri Aug 11 08:20:28 2000 by piumarta (Ian Piumarta) on emilia
*
* NOTES:
--- 21,38 ----
* would be appreciated but is not required.
*
! * 2. This notice must not be removed or altered in any source distribution.
*
! * Using (or modifying this file for use) in any context other than Squeak
! * changes these copyright conditions. Read the file `COPYING' in the
! * directory `platforms/unix/doc' before proceeding with any such use.
*
! * You are not allowed to distribute a modified version of this file
! * under its original name without explicit permission to do so. If
! * you change it, rename it.
*/
/* Author: Ian...@in...
*
! * Last edited: 2002-07-17 23:13:49 by piumarta on emilia.inria.fr
*
* NOTES:
***************
*** 43,47 ****
#define CASE(N) case N: _##N:
! #define BREAK goto *jumpTable[currentBytecode]
#define PRIM_DISPATCH goto *jumpTable[primitiveIndex]
#define JUMP_TABLE \
--- 43,47 ----
#define CASE(N) case N: _##N:
! #define BREAK goto *jumpTablePtr[currentBytecode]
#define PRIM_DISPATCH goto *jumpTable[primitiveIndex]
#define JUMP_TABLE \
***************
*** 173,179 ****
# define IP_REG asm("%esi")
# define SP_REG asm("%edi")
! # define CB_REG /* asm("%ebx") ; avoid undue register pressure */
#endif
! #if defined(PPC) || defined(_POWER) || defined(_IBMR2)
# define IP_REG asm("26")
# define SP_REG asm("27")
--- 173,184 ----
# define IP_REG asm("%esi")
# define SP_REG asm("%edi")
! # if (__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95))
! # define CB_REG asm("%ebx")
! # else
! # define CB_REG /* avoid undue register pressure */
! # endif
#endif
! #if defined(__powerpc__) || defined(PPC) || defined(_POWER) || defined(_IBMR2)
! # define JP_REG asm("25")
# define IP_REG asm("26")
# define SP_REG asm("27")
***************
*** 189,191 ****
--- 194,209 ----
# define SP_REG asm("a4")
# define CB_REG asm("d7")
+ #endif
+
+ #ifndef JP_REG
+ # define JP_REG
+ #endif
+ #ifndef IP_REG
+ # define IP_REG
+ #endif
+ #ifndef SP_REG
+ # define SP_REG
+ #endif
+ #ifndef CB_REG
+ # define CB_REG
#endif
|
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:53:58
|
Update of /cvsroot/squeak/squeak/platforms/unix/plugins/SqueakFFIPrims/old In directory sc8-pr-cvs1:/tmp/cvs-serv29861/old Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/plugins/SqueakFFIPrims/old added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:31:44
|
Update of /cvsroot/squeak/squeak/platforms/unix/npsqueak/test In directory sc8-pr-cvs1:/tmp/cvs-serv23330/test Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/npsqueak/test added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:31:44
|
Update of /cvsroot/squeak/squeak/platforms/unix/npsqueak/include In directory sc8-pr-cvs1:/tmp/cvs-serv23330/include Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/npsqueak/include added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:28:01
|
Update of /cvsroot/squeak/squeak/platforms/unix/config/autom4te.cache In directory sc8-pr-cvs1:/tmp/cvs-serv21946/autom4te.cache Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/config/autom4te.cache added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:18:13
|
Update of /cvsroot/squeak/squeak/platforms/unix/doc/HowToBuildFromSource.html In directory sc8-pr-cvs1:/tmp/cvs-serv19188/HowToBuildFromSource.html Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/doc/HowToBuildFromSource.html added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:14:04
|
Update of /cvsroot/squeak/squeak/platforms/unix/plugins/PseudoTTYPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv18027/PseudoTTYPlugin Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/plugins/PseudoTTYPlugin added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:14:04
|
Update of /cvsroot/squeak/squeak/platforms/unix/plugins/SqueakFFIPrims In directory sc8-pr-cvs1:/tmp/cvs-serv18027/SqueakFFIPrims Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/plugins/SqueakFFIPrims added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:14:03
|
Update of /cvsroot/squeak/squeak/platforms/unix/plugins/UnixOSProcessPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv18027/UnixOSProcessPlugin Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/plugins/UnixOSProcessPlugin added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:14:03
|
Update of /cvsroot/squeak/squeak/platforms/unix/plugins/DropPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv18027/DropPlugin Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/plugins/DropPlugin added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:14:03
|
Update of /cvsroot/squeak/squeak/platforms/unix/plugins/MIDIPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv18027/MIDIPlugin Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/plugins/MIDIPlugin added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:14:02
|
Update of /cvsroot/squeak/squeak/platforms/unix/plugins/AsynchFilePlugin In directory sc8-pr-cvs1:/tmp/cvs-serv18027/AsynchFilePlugin Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/plugins/AsynchFilePlugin added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:12:16
|
Update of /cvsroot/squeak/squeak/platforms/unix/doc In directory sc8-pr-cvs1:/tmp/cvs-serv17496/doc Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/doc added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:12:15
|
Update of /cvsroot/squeak/squeak/platforms/unix/npsqueak In directory sc8-pr-cvs1:/tmp/cvs-serv17496/npsqueak Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/npsqueak added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:10:51
|
Update of /cvsroot/squeak/squeak/platforms/unix/config In directory sc8-pr-cvs1:/tmp/cvs-serv17117/config Log Message: Directory /cvsroot/squeak/squeak/platforms/unix/config added to the repository |
|
From: Brenda L. <asp...@us...> - 2003-05-12 05:00:11
|
Update of /cvsroot/squeak/squeak/platforms/Cross/plugins/RePlugin In directory sc8-pr-cvs1:/tmp/cvs-serv13419 Added Files: RePlugin3-Fixes.1.cs RePlugin3-Fixes2.1.cs RePlugin3.3.1.cs Log Message: Ian Piumarta's 3.4.1 release --- NEW FILE: RePlugin3-Fixes.1.cs --- 'From Squeak 3.2 of 11 July 2002 [latest update: #4917] on 17 August 2002 at 6:10:11 pm'! "Change Set: RePlugin3-Fixes Date: 17 August 2002 Author: ti...@su... Some small fixes to RePlugin3 to allow compiling on Acorn"! !RePlugin methodsFor: 're primitives' stamp: 'tpr 8/17/2002 18:00'! primPCREExec "<rcvr primPCREExec: searchObject>, where rcvr is an object with instance variables: 'patternStr compileFlags pcrePtr extraPtr errorStr errorOffset matchFlags' Apply the regular expression (stored in <pcrePtr> and <extratr>, generated from calls to primPCRECompile), to smalltalk String searchObject using <matchOptions>. If there is no match, answer nil. Otherwise answer a ByteArray of offsets representing the results of the match." | searchObject searchBuffer length result matchSpacePtr matchSpaceSize | self export: true. self var:#searchBuffer declareC: 'char *searchBuffer'. self var:#matchSpacePtr declareC: 'int *matchSpacePtr'. self var:#result declareC: 'int result'. "Load Parameters" searchObject _ interpreterProxy stackObjectValue: 0. searchBuffer _ interpreterProxy arrayValueOf: searchObject. length _ interpreterProxy byteSizeOf: searchObject. self loadRcvrFromStackAt: 1. "Load Instance Variables" pcrePtr _ self rcvrPCREBufferPtr. extraPtr _ self rcvrExtraPtr. matchFlags _ self rcvrMatchFlags. matchSpacePtr _ self rcvrMatchSpacePtr. matchSpaceSize _ self rcvrMatchSpaceSize. interpreterProxy failed ifTrue:[^ nil]. result _ self cCode: 'pcre_exec((pcre *)pcrePtr, (pcre_extra *)extraPtr, searchBuffer, length, 0, matchFlags, matchSpacePtr, matchSpaceSize)'. interpreterProxy pop: 2; pushInteger: result. "empty call so compiler doesn't bug me about variables not used" self touch: searchBuffer; touch: matchSpacePtr; touch: matchSpaceSize; touch: length ! ! !RePlugin methodsFor: 're primitives' stamp: 'tpr 8/17/2002 18:00'! primPCREExecfromto "<rcvr primPCREExec: searchObject> from: fromInteger to: toInteger>, where rcvr is an object with instance variables: 'patternStr compileFlags pcrePtr extraPtr errorStr errorOffset matchFlags' Apply the regular expression (stored in <pcrePtr> and <extratr>, generated from calls to primPCRECompile), to smalltalk String searchObject using <matchOptions>, beginning at offset <fromInteger> and continuing until offset <toInteger>. If there is no match, answer nil. Otherwise answer a ByteArray of offsets representing the results of the match." | searchObject searchBuffer length result matchSpacePtr matchSpaceSize fromInteger toInteger | self export: true. self var:#searchBuffer declareC: 'char *searchBuffer'. self var:#fromInteger declareC: 'int fromInteger'. self var:#toInteger declareC: 'int toInteger'. self var:#matchSpacePtr declareC: 'int *matchSpacePtr'. self var:#result declareC: 'int result'. "Load Parameters" toInteger _ interpreterProxy stackIntegerValue: 0. fromInteger _ interpreterProxy stackIntegerValue: 1. searchObject _ interpreterProxy stackObjectValue: 2. searchBuffer _ interpreterProxy arrayValueOf: searchObject. length _ interpreterProxy byteSizeOf: searchObject. self loadRcvrFromStackAt: 3. "Validate parameters" interpreterProxy success: (1 <= fromInteger). interpreterProxy success: (toInteger<=length). fromInteger _ fromInteger - 1. "Smalltalk offsets are 1-based" interpreterProxy success: (fromInteger<=toInteger). "adjust length, searchBuffer" length _ toInteger - fromInteger. searchBuffer _ searchBuffer + fromInteger. "Load Instance Variables" pcrePtr _ self rcvrPCREBufferPtr. extraPtr _ self rcvrExtraPtr. matchFlags _ self rcvrMatchFlags. matchSpacePtr _ self rcvrMatchSpacePtr. matchSpaceSize _ self rcvrMatchSpaceSize. interpreterProxy failed ifTrue:[^ nil]. result _ self cCode: 'pcre_exec((pcre *)pcrePtr, (pcre_extra *)extraPtr, searchBuffer, length, 0, matchFlags, matchSpacePtr, matchSpaceSize)'. interpreterProxy pop: 2; pushInteger: result. "empty call so compiler doesn't bug me about variables not used" self touch: searchBuffer; touch: matchSpacePtr; touch: matchSpaceSize; touch: length ! ! !RePlugin methodsFor: 'rcvr linkage' stamp: 'tpr 8/17/2002 18:01'! allocateStringAndSetRcvrErrorStrFromCStr: aCStrBuffer |length errorStrObj errorStrObjPtr | self var: #aCStrBuffer declareC: 'const char *aCStrBuffer'. self var: #errorStrObjPtr declareC: 'void *errorStrObjPtr'. "Allocate errorStrObj" length _ self cCode: 'strlen(aCStrBuffer)'. errorStrObj _ interpreterProxy instantiateClass: (interpreterProxy classString) indexableSize: length. self loadRcvrFromStackAt: 0. "Assume garbage collection after instantiation" "Copy aCStrBuffer to errorStrObj's buffer" errorStrObjPtr _ interpreterProxy arrayValueOf: errorStrObj. self cCode:'memcpy(errorStrObjPtr,aCStrBuffer,length)'. self touch: errorStrObjPtr; touch: errorStrObj. "Set rcvrErrorStr from errorStrObj and Return" self rcvrErrorStrFrom: errorStrObj. ^errorStrObj.! ! !RePlugin class methodsFor: 'plugin code generation' stamp: 'tpr 8/17/2002 18:02'! declareCVarsIn: cg cg addHeaderFile:'"rePlugin.h"'. "Memory Managament Error Checking" cg var: 'netMemory' declareC: 'int netMemory = 0'. cg var: 'numAllocs' declareC: 'int numAllocs = 0'. cg var: 'numFrees' declareC: 'int numFrees = 0'. cg var: 'lastAlloc' declareC: 'int lastAlloc = 0'. "The receiver Object Pointer" cg var: 'rcvr' declareC: 'int rcvr'. "Instance Variables of Receiver Object" cg var: 'patternStr' declareC: 'int patternStr'. cg var: 'compileFlags' declareC: 'int compileFlags'. cg var: 'pcrePtr' declareC: 'int pcrePtr'. cg var: 'extraPtr' declareC: 'int extraPtr'. cg var: 'errorStr' declareC: 'int errorStr'. cg var: 'errorOffset' declareC: 'int errorOffset'. cg var: 'matchFlags' declareC: 'int matchFlags'. "Support Variables for Access to Receiver Instance Variables" cg var: 'patternStrPtr' declareC: 'const char * patternStrPtr'. cg var: 'errorStrBuffer' declareC: 'const char * errorStrBuffer'.! ! --- NEW FILE: RePlugin3-Fixes2.1.cs --- 'From Squeak3.2gamma of 15 January 2002 [latest update: #4881] on 21 August 2002 at 10:52:51 pm'! "Change Set: RePlugin3-Fixes2 Date: 21 August 2002 Author: ian...@in... Adds a cast to one method in RePlugin to avoid a compiler warning."! !RePlugin methodsFor: 'rcvr linkage' stamp: 'ikp 8/21/2002 22:40'! rcvrExtraPtr |extraObj| self inline: true. extraObj _ interpreterProxy fetchPointer: 3 ofObject: rcvr. (extraObj = (interpreterProxy nilObject)) ifTrue: [^ self cCode: '(int) NULL']. ^self cCoerce:(interpreterProxy arrayValueOf: extraObj) to: 'int'.! ! --- NEW FILE: RePlugin3.3.1.cs --- 'From Squeak3.3alpha of 12 January 2002 [latest update: #4934] on 16 August 2002 at 10:56:49 pm'! "Change Set: RePlugin3.3 Date: 16 August 2002 Author: acg Perl-Style Regular Expressions in Smalltalk by Andrew C. Greenberg Version 3.3beta I. Regular Expressions in General Regular expressions are a language for specifying text to ease the searching and manipulation of text. A complete discussion of regular expressions is beyond the scope of this document. See Jeffrey Friedl, Mastering Regular Expressions, by O'Reilly for a relatively complete. The regular expressions supported by this package are similar to those presently used in Perl 5.05 and Python, and are based upon Philip Hazel's excellent PCRE libraries (incorporated almost without change, subject to a free license described in Re aLicenseComment. Thanks are due to Markus Kohler and Stephen Pair for their assistance in the initial ports of early versions of the Plugin. An explanation of the expressions available in this package are summarized in Re aRegexComment, Re anOptionsComment and Re aGlobalSearchComment. A more detailed description of RePlugin is available downloading the file 'RePluginDoco,' which can be obtained from http://www.gate.net/~werdna/RePlugin.html, into your default directory, and then executing Utilities reconstructTextWindowsFromFileNamed: 'RePluginDoco' II. Overview of the 'Package.' The following new classes are provided: Class Description of Instances ---------------------- ------------------------------------------------------------------- Re A regular expression matching engine ReMatch Result of a search using Re RePattern Deprecated engine class from earlier plugin versions RePlugin The Plugin 'Glue' to the PCRE Library. String Various new messages were added to String, which are the principal means for users to access the package. PluginCodeGenerator has been deleted from the packgage. III. Some Examples. A. Simple Matching and Querying of Matches To search a string for matches in a regular expression, use String reMatch: 'just trying to catch some zzz''s before noon' matchRe: 'z+' which returns true if matched, and false otherwise. If more information from a positive search result is desired, the method reMatch will return a ReMatch object corresponding to the result. 'just trying to catch some zzz''s before noon' reMatch: 'z+' The match object can be queried in various ways. For example, to obtain details when parenthetical phrases of a regular expression are captured: |m| m _ 'Andy was born on 10/02/1957, and not soon enough!!' reMatch: '(\d\d)/(\d\d)/((19|20)?\d\d)'. m matches answers with: ('10' '02' '1957' '19' ) The first message answers a ReMatch m representing the result of a search of the string for matches of re (nil would be returned if no match was found). The third message answered a collection of the parenthetical subgroups matched, each showing the day, month and year as extracted from the string. B. Global Matching and String Substitutions You can perform global searches to repeatedly search a string for non-overlapping occurrences of a pattern by using reMatch:collect: For example, 'this is a test' collectRe: '\w+' can be used to gather a collection of all words in the search string, answering: OrderedCollection ('this' 'is' 'a' 'test' ) For slightly more complex collections, you can use #reMatch:andCollect: Additionally, you can perform global searches with text substitutions using reMatch:sub: For example, 'this is a test' reMatch: '\w+' andReplace: [:m | '<', (m match), '>'] can be used to replace every word in the search string with the word enclosed by matching brackets, answering: '<this> <is> <a> <test>' Further examples and documentation can be found in the references above, and in the comments and definitions set forth in ReMatch, RePattern and String. "! Object subclass: #Re instanceVariableNames: 'pattern compiledPattern isAnchored isCaseSensitive isDollarEndOnly isDotIncludesNewline isExtended isExtra isMultiline isBeginningOfLine isEndOfLine isGreedy ' classVariableNames: '' module: #(Werdna Re)! !Re commentStamp: '<historical>' prior: 0! Perl-Style Regular Expressions in Smalltalk Documentation The documentation category of this method contains substantial documentation on the operation of this Class. Re aGeneralComment Re aGlobalSearchComment Re aRegexComment Re aRegexGoryDetailsComment Re aVersionsComment Re anReComment Re anReOverviewComment à Re aLicenseComment Examples: (Re on: 'a.*y') search: 'Candy is dandy.' 'a.*y' asRe search: 'Candy is dandy.' 'Candy is dandy' reMatch: 'a.*y' (Re on: '\w+') searchAndCollect: 'Candy is dandy.' '\w+' asRe searchAndCollect: 'Candy is dandy.' 'Candy is dandy.' reMatch: '\w+' andCollect: [:m | m match] Structure: pattern String -- the string with the regular expression source code compiledPattern RePlugin representing a compiled pattern isAnchored Boolean -- representing an option setting is ... Booleans -- for the other options below List ofcommon public methods: #opt: sets options using Perl-style string #beAnchored #beNotAnchored #isAnchored #isAnchored: #beBeginningOfLine #beNotBeginningOfLine #isBeginningOfLine #isBeginningOfLine: #beCaseSensitive #beNotCaseSensitive #isCaseSensitive #isCaseSensitive: #beDollarEndOnly #beNotDollarEndOnly #isDollarEndOnly #isDollarEndOnly: #beDotIncludesNewline #beNotDotIncludesNewline #isDotIncludesNewLine #isDotIncludesNewline: #beEndOfLine #beNotEndOfLine #isEndOfLine #isEndOfLine: #beExtended #beNotExtended #isExtended #isExtended: #beExtra #beNotExtra #isExtra #isNotExtra: #beGreedy #beNotGreedy #isGreedy #isGreedy: #beMultiline #beNotMultiline #isMultiline #isMultiline: Getters and setters for options in traditional Smalltalk style search: aTargetString search aTargetString from: startInteger to: endInteger Compiling the pattern, if necessary, search a string (or substring) using the pattern. Answers nil if no match. searchAndCollect: aTargetString search: aTargetString andCollect: aBlock search: aTargetString andCollect: aBlock matchCount: anInteger Compiling the pattern, if necessary, gather all (or, if specified, the first anInteger) non-overlapping matches to me in aTargetString. Answer a collection of the results of applying aBlock to each ReMatch result. search: aTargetString andReplace: aBlock search: aTargetString andReplace: aBlock matchCount: anInteger Compiling the pattern, if necessary, find all (or, if specified, the first anInteger) non-overlapping matches to me in aTargetString. Answer a new string, created by substituting the results of applying aBlock to each ReMatch result for the matched substring. ! ]style[(44 16 109 1 1 18 2 23 2 16 2 27 2 19 2 14 2 22 3 1 19 1 12 280 11 236 30 1 6 40 687 66 8 13 8 13 7 12 5 10 1 118 18 13 9 13 13 6 9 13 13 6 13 9 1 217 8 13 13 6 9 13 13 6 13 9 1 266)bf3,bf1,f1,bf1,f1,f1LRe aGeneralComment;,f1,f1LRe aGlobalSearchComment;,f1,f1LRe aRegexComment;,f1,f1LRe aRegexGoryDetailsComment;,f1,f1LRe aVersionsComment;,f1,f1LRe anReComment;,f1,f1LRe anReOverviewComment;,bf1,f1,f1LRe aLicenseComment;,f1,bf1,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1! Re class instanceVariableNames: ''! Object subclass: #ReMatch instanceVariableNames: 'matchArray re searchString pos endpos ' classVariableNames: '' module: #(Werdna Re)! !ReMatch commentStamp: '<historical>' prior: 0! ReMatch: Perl-Style Regular Expression Search Results I. Introduction This Class is part of a package of classes providing a Smalltalk wrapper to Philip Hazel's excellent PCRE library. The Plugin interface and Smalltalk wrapper was written by Andrew C. Greenberg. As discussed in RePattern aGeneralComment, the functionality is essentially embodied in this class, Class RePattern and certain new messages in Class String. A summary of the regular expression syntax c an be found in RePattern aRegexComment and a summary of the compile option codes available can be found in RePattern anOptionsComment. A more detailed description of RePlugin is available downloading the file 'RePluginDoco,' which can be obtained from http://www.gate.net/~werdna/RePlugin.html, into your default directory, and then executing Utilities reconstructTextWindowsFromFileNamed: 'RePluginDoco' II. Principal Match Results The substring of searchString matched by re is given by: m match which can be derived from searchString as follows: m searchString copyFrom: (m from) to: (m to) III. Captured Groups (and Collections of Captured Groups) The number of substrings capturable by a parenthetical grouping in an re (regardless of the number actually matched to create m) is given by: m numGroups The string captured by parenthetical grouping i, where 1<=i<=(m numGroups) is given by m matchAt: i and this can be generated as follows: m searchString copyFrom: (m fromAt: i) to: (m toAt: i) And an array of size (m numGroups) can be generated from strings and indices accordingly: m matches m froms m tos ! ]style[(53 2 15 214 25 65 9 103 23 69 26 120 41 53 61 2 27 177 57 488)bf3,f1,bf2,f1,f1LRePattern aGeneralComment;,f1,f1LRePattern Comment;,f1,f1LRePattern aRegexComment;,f1,f1LRePattern anOptionsComment;,f1,f1Rhttp://www.gate.net/~werdna/RePlugin.html;,f1,f1dUtilities reconstructTextWindowsFromFileNamed: 'RePluginDoco';;,f1,bf2,f1,bf2,f1! ReMatch class instanceVariableNames: ''! Object subclass: #RePattern instanceVariableNames: 'pattern compileOptions pcrePointer extraPointer errorString offset matchOptions matchSpace lastMatchResult ' classVariableNames: '' module: #(Werdna Re)! !RePattern commentStamp: '<historical>' prior: 0! RePattern: Compiled Perl-Style Regular Expressions I. Introduction. This Smalltalk implementation of modern Perl-Style regular expressions was compiled by Andrew Greenberg <we...@ga...> and contributors, based upon the excellent PCRE library by Philip Hazel. As discussed in RePattern aGeneralComment, the functionality is essentially embodied in this class, Class ReMatch and certain new messages in Class String. A summary of the regular expression syntax can be found in RePattern aRegexComment and a summary of the compile option codes available can be found in RePattern anOptionsComment. A substantially more detailed description of RePlugin is available downloading the file "RePluginDoco," which can be obtained from http://www.gate.net/~werdna/RePlugin.html, into your default directory, and then executing Utilities reconstructTextWindowsFromFileNamed: 'RePluginDoco' II. To Search a String or Substring For Pattern Matches (Once Only): Examples: 'Squeak or Squawk!!' reMatch: '^Squ(ea|aw)k' 'Squeak or Squawk!!' reMatch: '^Squ(ea|aw)k' opt: 'imsxABEXZ' 'Squeak or Squawk!!' reMatch: '^Squ(ea|aw)k!!' from: 11 more generally, srchStr reMatch: patStr [opt: oStr] [from: start] [to: stop] For a one-time search of a string (or substring) for occurences of a match pattern. The message will be answered with nil (if there is no match) or an instance of ReMatch, which can then be queried for further details about the match. III. Global Searching and Replacing The re package provides rudimentary facilities for global searches and replacements on a string. The following expressions '\w+' reMatch: 'this is a test' collect: [:m | m] (RePattern on: '\w+') search: 'this is a test' collect: [:m | m] return an ordered collection of the results of repeated non-overlapping applications of the pattern to the string, or nil if there are no matches in the string. To produce a list of matched strings, you can for example execute the following: '\w+' reMatch: 'this is a test' collect: [:m| m match] (RePattern on: '\w+') search: 'this is a test' collect: [:m | m match] You can also perform global search and string replacements, where the answer is a string with unmatched text left alone, and matched text replaced by the result of a call to a Block passed the ReMatch object as a single parameter. For example, ('\w+' reMatch: 'this is a test' sub: [:m| '<', (m match), '>'] and (RePattern on: '\w+') search: 'this is a test' sub: [:m| '<', (m match), '>'] return a string with each nonblank word surrounded by angle brackets. For more details, see RePattern aGlobalSearchComment. IV. To Create Compiled Regular Expression Objects (For Repeated Matching): '^Squ(ea|aw)k!!$' asRePattern '^Squ(ea|aw)k!!$' asRePatternOpt: 'imsxAEX' '^Squ(ea|aw)k!!$' asRePatternOpt: 'imsxAEX' onErrorRun: aBlock RePattern on: '^Squ(ea|aw)k!!$' RePattern on: '^Squ(ea|aw)k!!$' opt: 'imsxAEX' RePattern on: '^Squ(ea|aw)k!!$' opt: 'imsxAEX' onErrorRun: [:pat :offset :message | "your code here" ] Each of the preceding expressions returns an instance of RePattern, compiled for efficient matching when the pattern is repeatedly searched against different strings. RePattern ordinarily caches a dozen or so of the most recently compiled patterns, but nevertheless invokes a cost for the table lookup. To avoid compile and lookup costs, use the above messages. To perform a one-time search, see above. V. To Search a Compiled Regexp Against A String or Substring for Matches: searchString reMatch: re [from: from] [to: to] [opt: optStr] or re search: searchString [from: from] [to: to] [opt: optStr] Examples: 'Squeak or Squawk' reMatch: re. re search: 'Squeak or Squawk!!'. re search: 'Squeak or Squawk!!' opt: 'ABZ'. If no match is found, these messages answer nil. Otherwise, they answer with a corresponding instance of ReMatch.! ]style[(50 1 1 17 2 211 25 65 7 103 23 69 26 1 2 131 41 53 61 2 69 499 36 2 1110 30 3 75 749 73 362 7 1)bf3,f3,f1b,bf2,f1b,f1,f1LRePattern aGeneralComment;,f1,f1LReMatch Comment;,f1,f1LRePattern aRegexComment;,f1,f1LRePattern anOptionsComment;,f1,f1b,f1,f1Rhttp://www.gate.net/~werdna/RePlugin.html;,f1,f1dUtilities reconstructTextWindowsFromFileNamed: 'RePluginDoco';;,f1,bf2,f1,bf2,bf1,f1,f1LRePattern aGlobalSearchComment;,f1,f1b,f1,f1b,f1,f1LReMatch Comment;,f1! RePattern class instanceVariableNames: 'Patterns Options CompileObjects Front '! TestInterpreterPlugin subclass: #RePlugin instanceVariableNames: 'netMemory numAllocs numFrees lastAlloc patternStr rcvr compileFlags pcrePtr extraPtr errorStr errorOffset matchFlags patternStrPtr errorStrBuffer ' classVariableNames: '' module: #(Werdna Re)! !RePlugin commentStamp: '<historical>' prior: 0! /* Regular Expression Plugin (This class comment becomes part of rePlugin.c) RePlugin translate: 'RePlugin.c' doInlining: true. See documentation and source code for the PCRE C Library Code. This plugin is designed to serve an object such as RePattern: patternStr A 0-terminated string comprising the pattern to be compiled. compileFlags An Integer representing re compiler options PCREBuffer A ByteArray of regular expression bytecodes extraPtr A ByteArray of match optimization data (or nil) errorString A String Object For Holding an Error Message (when compile failed) errorOffset The index in patternStr (0-based) where the error ocurred (when compile failed) matchFlags An Integer representing re matcher options matchSpaceObj An Integer array for match results and workspace during matching. The instance variables must appear in the preceding order. MatchSpaceObj must be allocated by the calling routine and contain at least 6*(numGroups+1) bytes. */ #include "pcre.h" #include "internal.h" /* Slight machine-specific hack for MacOS Memory Management */ #ifdef TARGET_OS_MAC #define malloc(ptr) NewPtr(ptr) #define free(ptr) DisposePtr(aPointer) #endif /* Adjust malloc and free routines as used by PCRE */ void rePluginFree(void * aPointer); void * rePluginMalloc(size_t anInteger); void *(*pcre_malloc)(size_t) = rePluginMalloc; void (*pcre_free)(void *) = rePluginFree; ! RePlugin class instanceVariableNames: ''! TestCase subclass: #ReTest instanceVariableNames: '' classVariableNames: '' module: #(Werdna Re)! ReTest class instanceVariableNames: ''! !Re met hodsFor: 'documentation' stamp: 'acg 8/3/2002 22:57'! aGeneralComment " Perl-Style Regular Expressions in Smalltalk by Andrew C. Greenberg I. Regular Expressions in General Regular expressions are a language for specifying text to ease the searching and manipulation of text. A complete discussion of regular expressions is beyond the scope of this document. See Jeffrey Friedl, Mastering Regular Expressions, by O'Reilly for a relatively complete. The regular expressions supported by this package are similar to those presently used in Perl 5.05 and Python, and are based upon Philip Hazel's excellent PCRE libraries (incorporated almost without change, subject to a free license described in Re aLicenseComment. Thanks are due to Markus Kohler and Stephen Pair for their assistance in the initial ports of early versions of the Plugin. An explanation of the expressions available in this package are summarized in Re aRegexComment, Re anOptionsComment and Re aGlobalSearchComment. A more detailed description of RePlugin is available downloading the file 'RePluginDoco,' which can be obtained from http://www.gate.net/~werdna/RePlugin.html, into your default directory, and then executing Utilities reconstructTextWindowsFromFileNamed: 'RePluginDoco' II. Overview of the 'Package.' The following new classes are provided: Class Description of Instances ---------------------- ------------------------------------------------------------------- Re A regular expression matching engine ReMatch Result of a search using Re RePattern Deprecated engine class from earlier plugin versions RePlugin The Plugin 'Glue' to the PCRE Library. String Various new messages were added to String, which are the principal means for users to access the package. PluginCodeGenerator has been deleted from the packgage. III. Some Examples. A. Simple Matching and Querying of Matches To search a string for matches in a regular expression, use String reMatch: 'just trying to catch some zzz''s before noon' matchRe: 'z+' which returns true if matched, and false otherwise. If more information from a positive search result is desired, the method reMatch will return a ReMatch object corresponding to the result. 'just trying to catch some zzz''s before noon' reMatch: 'z+' The match object can be queried in various ways. For example, to obtain details when parenthetical phrases of a regular expression are captured: |m| m _ 'Andy was born on 10/02/1957, and not soon enough!!' reMatch: '(\d\d)/(\d\d)/((19|20)?\d\d)'. m matches answers with: ('10' '02' '1957' '19' ) The first message answers a ReMatch m representing the result of a search of the string for matches of re (nil would be returned if no match was found). The third message answered a collection of the parenthetical subgroups matched, each showing the day, month and year as extracted from the string. B. Global Matching and String Substitutions You can perform global searches to repeatedly search a string for non-overlapping occurrences of a pattern by using reMatch:collect: For example, 'this is a test' collectRe: '\w+' can be used to gather a collection of all words in the search string, answering: OrderedCollection ('this' 'is' 'a' 'test' ) For slightly more complex collections, you can use #reMatch:andCollect: Additionally, you can perform global searches with text substitutions using reMatch:sub: For example, 'this is a test' reMatch: '\w+' andReplace: [:m | '<', (m match), '>'] can be used to replace every word in the search string with the word enclosed by matching brackets, answering: '<this> <is> <a> <test>' Further examples and documentation can be found in the references above, and in the comments and definitions set forth in ReMatch, RePattern and String. "! ]style[(19 44 24 34 211 29 289 18 206 16 2 19 5 24 119 41 53 61 2 30 224 7 34 9 59 8 46 6 179 65 291 7 442 7 268 43 832 7 2 9 5 7 2)f1b,bf3,bf2,bf1,f1,f1i,f1,f1LRe aLicenseComment;,f1,f1LRe aRegexComment;,f1,f1LRe anOptionsComment;,f1,f1LRe aGlobalSearchComment;,f1,f1Rhttp://www.gate.net/~werdna/RePlugin.html;,f1,f1dUtilities reconstructTextWindowsFromFileNamed: 'RePluginDoco';;,f1,f1b,f1,f1LReMatch Comment;,f1,f1LRePattern Comment;,f1,f1LRePlugin Comment;,f1,f1LString Comment;,f1,f1b,f1,f1LReMatch Comment;,f1,f1LReMatch Comment;,f1,f1b,f1,f1LReMatch Comment;,f1,f1LRePattern Comment;,f1,f1LString Comment;,f1! ! !Re methodsFor: 'documentation' stamp: 'acg 8/3/2002 23:06'! aGlobalSearchComment " Global Searching Introduction RePattern provides facilities to support global searching and global searching and replacement of search strings with semantics quite similar to that of Perl 5.004. Global searching means that the search string is repeatedly searched for matches, beginning at the beginning of the string, and subsequently beginning the next match immediately after the preceding match terminated. For example, if we wanted to find all words in the subject string, we could execute: 'this is a test' reMatch: '\w+' collect: [:m | m match] which returns OrderedCollection ('this' 'is' 'a' 'test' ). The collect: keyword directs PCRE to repeat the search for '\w+', and to return a collection of the result of applying each ReMatch to the block. (In this case, the block simply returns the string that was matched.) To do global searching and string substitution, we could execute: 'this is a test' reMatch: '\w+' sub: [:m | '<', m match, '>'] which return '<this> <is> <a> <test>' The sub: keyword directs PCRE to repeat the search, and to return the original string, but with each matched substring replaced by the result of applying the block to the corresponding ReMatch object. Global Matching Functions RePattern convenience functions provide the following general global functions: searchString reMatch: pattern [opt: oStr] collect: aBlock [num: anInteger] searchString reMatch: pattern [opt: oStr] sub: aBlock [num: anInteger] Optionally, you may specify search and compile options with oStr, and you may specify a maximum number of searches performed in the global search with anInteger. If anInteger is less than 0, then as many searches as can be performed, will be performed. Special Case of the Empty Match Finally, the definition given above would infinite loop if the pattern matches an empty string. For example: 'abcdef' reMatch: 'x*' sub: [:m| '<', m match, '>'] will actually match the empty string just before and after each letter of the string, even though there is no x there. ('x+' would return nil). Since the string ends where it begins, at the beginning of the string, repeating the search from that point would simply infinite loop. Accordingly, RePattern gives the pattern a one-character 'bump' after matching an empty string, at which point the block is applied. For example, the preceding would answer '<>a<>b<>c<>d<>e<>f<>' In the case of global searching (but not replacement), an empty string will not result in the ReMatch being applied to the block if the empty match immediately follows a match that has already been made. Accordingly, '123' reMatch: '\d*' collect: [:m| m match] answers OrderedCollection ('123' ) and not OrderedCollection ('123' '') However, this last caveat does not apply to substitutions, so '123' reMatch: '\d*' sub: [:m| '<', m match, '>'] answers '<123><>' "! ]style[(21 3 18 12 1 2 9 460 1 243 7 154 1 290 7 10 25 487 31 1138 1 1)f1b,f1,bf3,bf2,bf3,bf2,f1LRePattern Comment;,f1,f1u,f1,f1LReMatch Comment;,f1,f1u,f1,f1LReMatch Comment;,f1,bf2,f1,bf2,f1,bf2,f1! ! !Re methodsFor: 'documentation' stamp: 'acg 8/3/2002 23:01'! aLicenseComment " RePlugin is Open Source Software As noted earlier, the non-Smalltalk code on which these classes are based is Philip Hazel's excellent PCRE Package, which is distributed subject to the following license. The Smalltalk wrapper and plugin interface is written by Andrew C. Greenberg <we...@ga...> and other contributors, and is distributed subject to the same terms. PCRE LICENCE ------------ PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by: Philip Hazel <ph...@ca...> University of Cambridge Computing Service, Cambridge, England. Phone: +44 1223 334714. Copyright (c) 1997-1999 University of Cambridge Permission is granted to anyone to use this software for any purpose on any computer system, and to redistribute it freely, subject to the following restrictions: 1. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 2. The origin of this software must not be misrepresented, either by explicit claim or by omission. 3. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. If PCRE is embedded in any software that is released under the GNU General Purpose Licence (GPL), then the terms of that licence shall supersede any condition above with which it is incompatible. "! ]style[(16 3 32 340 12 1127)f1b,f1,bf3,f1,bf2,f1! ! !Re methodsFor: 'documentation' stamp: 'acg 8/3/2002 23:01'! aRegexComment " Regular Expressions A more detailed description of RePlugin is available downloading the file 'RePluginDoco,' which can be obtained from http://www.gate.net/~werdna/RePlugin.html, into your default directory, and then executing Utilities reconstructTextWindowsFromFileNamed: 'RePluginDoco' Basic MetaCharacters The regular expressions recognized in this package generally track those of Perl 5.05, and are set forth in greater detail in the PCRE documentation accompanying the package. A summary follows: \ General escape character with several uses ^ Assert start of subjct (or line, in multiline mode) Also used to negate class definitions $ Assert end of subject (or line, in multiline mode) . match any character but newline (by default) [] class definitions | start of alternative branch () subpattern ? extends the meaning of '(' (see below) quantifies previous extension (1 or 0 occurrences) (e.g. a?) minimizes previous quantifier (e.g. a*?) * 0 or more quantifier + 1 or more quantifier {} Min/Max Quantifier {3} {3,} {3,5} Inside Character Classes \ general escape character ^ negates the class, if the first character - indicates character range, if not escaped or the last character Special Escape Sequences \a alarm (hex 7) \cx control-x, where x is any character \e escape (hex 1b) \f formfeed (hex 0c) \n newline \r carriage return \t tab \xhh Character with hexcode hh \ddd Character with octal code ddd, or a backreference \d matches decimal digit \D non-decimal digit \s whitespace \S non-whitespace \w any 'word' character \W any non-word character \b asserts a word boundary \B asserts not a non-word boundary \A asserts start of subject (regardless of mode) \Z asserts end of subject (regardless of mode) Internal Option Setting Letters enclosed within a pattern and appearing between '(?' and ')' can be used to change the imsx options. For example. (?im-sx) sets caseless and multiline modes, and unsets dotall and extended modes. See the PCRE documentation for further details. Non-Grouping Subpatterns Groupings can be enclosed by parentheses without text being captured by following the leading parenthesis with a question mark and colon. for example: 'abc(?:def)*' repeats the 'def', but does not capture matches in a grouping. Assertions An assertion is a test on characters that does not actually consume any characters. There are two kinds, those that look ahead of the current position, and those that look behind. Consider the following example: \w+(?=;) which matches a word followed by a semicolon, but doesn't include the semicolon in the match. Another example: (?<!!foo)bar finds occurences of bar not preceded by foo. All lookbehind assertions must be of fixed length, but not all alternatives in such an assertion need be of the same length. Once-Only Subpatterns (?>\d+)bar Once only subpatterns 'lock up' after finding a match, to prevent backtracking in various cases. Essentially, a subpattern ofthis type matches the string that an identical standalone pattern would match if anchored at the current point in the subject string first encountering the expression. Conditional Subpatterns (?(condition)yes-pattern) (?(condition)yes-pattern|no-pattern) These permit one of two subpatterns to be matched, depending upon a preceding condition. There are two kinds of conditions: (1) a sequence of digits, specifying that a numbered subpattern has been matched; and (2) an assertion, either positive, negative, lookahead or lookbehind. Comments (?# This is a comment) Also, in extended mode, comments may be inserted between a '#' and a newline. "! ]style[(17 21 117 41 53 61 2 1 20 1 1 194 2 547 28 139 29 528 26 255 27 230 13 353 1 170 38 293 94 280 36 78 3)f1b,bf3,f1,f1Rhttp://www.gate.net/~werdna/RePlugin.html;,f1,f1dUtilities reconstructTextWindowsFromFileNamed: 'RePluginDoco';;,f1,bf3,bf2,bf3,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b,f1,f1b! ! !Re methodsFor: 'documentation' stamp: 'acg 8/4/2002 11:13'! aRegexGoryDetailsComment " Regular Expression Syntax -- the Gory Details Introduction RePlugin is a Squeak Plugin providing modern regular expression matching operations similar to those found in Perl. It was written by Andrew C. Greenberg (we...@ga...), with contributions by Markus Kohler, Stephen Pair and others. RePlugin 2.3b (and 'the Gory Details' portion of this document) is directly taken from Version 2.04 of the excellent PCRE library by Philip Hazel with only minor modifications. The syntax and semantics of the regular expressions supported by PCRE are described below. Regular expressions are also described in the Perl documentation and in a number of other books, some of which have copious examples. Jeffrey Friedl's 'Mastering Regular Expressions', published by O'Reilly (ISBN 1-56592-257-3), covers them in great detail. The description here is intended as reference documentation. Regular Expressions A regular expression is a pattern that is matched against a subject string from left to right. Most characters stand for themselves in a pattern, and match the corresponding characters in the subject. As a trivial example, the pattern The quick brown fox matches a portion of a subject string that is identical to itself. The power of regular expressions comes from the ability to include alternatives and repetitions in the pattern. These are encoded in the pattern by the use of meta-characters, which do not stand for themselves but instead are interpreted in some special way. There are two different sets of meta-characters: those that are recognized anywhere in the pattern except within square brackets, and those that are recognized in square brackets. Outside square brackets, the meta-characters are as follows: \ general escape character with several uses ^ assert start of subject (or line, in multiline mode) $ assert end of subject (or line, in multiline mode) . match any character except newline (by default) [ start character class definition | start of alternative branch ( start subpattern ) end subpattern ? extends the meaning of ( also 0 or 1 quantifier also quantifier minimizer * 0 or more quantifier + 1 or more quantifier { start min/max quantifier Part of a pattern that is in square brackets is called a 'character class'. In a character class the only meta-characters are: \ general escape character ^ negate the class, but only if the first character - indicates character range ] terminates the character class The following sections describe the use of each of the meta-characters. BACKSLASH The backslash character has several uses. Firstly, if it is followed by a non-alphameric character, it takes away any special meaning that character may have. This use of backslash as an escape char acter applies both inside and outside character classes. For example, if you want to match a '*' character, you write '\*' in the pattern. This applies whether or not the following character would otherwise be interpreted as a meta-character, so it is always safe to precede a non-alphameric with '\' to specify that it stands for itself. In particular, if you want to match a backslash, you write '\\'. If a pattern is compiled with the 'x' (beExtended) option, whitespace in the pattern (other than in a character class) and characters between a '#' outside a character class and the next newline character are ignored. An escaping backslash can be used to include a whitespace or '#' character as part of the pattern. A second use of backslash provides a way of encoding non-printing characters in patterns in a visible manner. There is no restriction on the appearance of non-printing characters, apart from the binary zero that terminates a pattern, but when a pattern is being prepared by text editing, it is usually easier to use one of the following escape sequences than the binary character it represents: \a alarm, that is, the BEL character (hex 07) \cx 'control-x', where x is any character \e escape (hex 1B) \f formfeed (hex 0C) \n newline (hex 0A) \r carriage return (hex 0D) \t tab (hex 09) \xhh character with hex code hh \ddd character with octal code ddd, or backreference The precise effect of '\cx' is as follows: if 'x' is a lower case letter, it is converted to upper case. Then bit 6 of the character (hex 40) is inverted. Thus '\cz' becomes hex 1A, but '\c{' becomes hex 3B, while '\c;' becomes hex 7B. After '\x', up to two hexadecimal digits are read (letters can be in upper or lower case). After '\0' up to two further octal digits are read. In both cases, if there are fewer than two digits, just those that are present are used. Thus the sequence '\0\x\07' specifies two binary zeros followed by a BEL character. Make sure you supply two digits after the initial zero if the character that follows is itself an octal digit. The handling of a backslash followed by a digit other than 0 is complicated. Outside a character class, PCRE reads it and any following digits as a decimal number. If the number is less than 10, or if there have been at least that many previous capturing left parentheses in the expression, the entire sequence is taken as a back reference. A description of how this works is given later, following the discussion of parenthesized subpatterns. Inside a character class, or if the decimal number is greater than 9 and there have not been that many capturing subpatterns, PCRE re-reads up to three octal digits following the backslash, and generates a single byte from the least significant 8 bits of the value. Any subsequent digits stand for themselves. For example: \040 is another way of writing a space \40 is the same, provided there are fewer than 40 previous capturing subpatterns \7 is always a back reference \11 might be a back reference, or another way of writing a tab \011 is always a tab \0113 is a tab followed by the character '3' \113 is the character with octal code 113 (since there can be no more than 99 back references) \377 is a byte consisting entirely of 1 bits \81 is either a back reference, or a binary zero followed by the two characters '8' and '1' Note that octal values of 100 or greater must not be introduced by a leading zero, because no more than three octal digits are ever read. All the sequences that define a single byte value can be used both inside and outside character classes. In addition, inside a character class, the sequence '\b' is interpreted as the backspace character (hex 08). Outside a character class it has a different meaning (see below). The third use of backslash is for specifying generic character types: \d any decimal digit \D any character that is not a decimal digit \s any whitespace character \S any character that is not a whitespace character \w any 'word' character \W any 'non-word' character Each pair of escape sequences partitions the complete set of characters into two disjoint sets. Any given character matches one, and only one, of each pair. A 'word' character is any letter or digit or the underscore character, that is, any character which can be part of a Perl 'word'. The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale- specific matching is taking place (see 'Locale support' above). For example, in the 'fr' (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w. These character type sequences can appear both inside and outside character classes. They each match one character of the appropriate type. If the current matching point is at the end of the subject string, all of them fail, since there is no character to match. The fourth use of backslash is for certain simple assertions. An assertion specifies a condition that has to be met at a particular point in a match, without consuming any characters from the subject string. The use of subpatterns for more complicated assertions is described below. The backslashed assertions are \b word boundary \B not a word boundary \A start of subject (independent of multiline mode) \Z end of subject or newline at end (independent of multiline mode) \z end of subject (independent of multiline mode) These assertions may not appear in character classes (but note that '\b' has a different meaning, namely the backspace character, inside a character class). A word boundary is a position in the subject string where the current character and the previous character do not both match \w or \W (i.e. one matches \w and the other matches \W), or the start or end of the string if the first or last character matches \w, respectively. The \A, \Z, and \z assertions differ from the traditional circumflex and dollar (described below) in that they only ever match at the very start and end of the subject string, whatever options are set. They are not affected by the 'B' (beNotBeginningOfLine) or 'Z' (beNotEndOfLine) options. The difference between \Z and \z is that \Z matches before a newline that is the last character of the string as well as at the end of the string, whereas \z matches only at the end. CIRCUMFLEX AND DOLLAR Outside a character class, in the default matching mode, the circumflex character is an assertion which is true only if the current matching point is at the start of the subject string. Inside a character class, circumflex has an entirely different meaning (see below). Circumflex need not be the first character of the pattern if a number of alternatives are involved, but it should be the first thing in each alternative in which it appears if the pattern is ever to match that branch. If all possible alternatives start with a circumflex, that is, if the pattern is constrained to match only at the start of the subject, it is said to be an 'anchored' pattern. (There are also other constructs that can cause a pattern to be anchored.) A dollar character is an assertion which is true only if the current matching point is at the end of the subject string, or immediately before a newline character that is the last character in the string (by default). Dollar need not be the last character of the pattern if a number of alternatives are involved, but it should be the last item in any branch in which it appears. Dollar has no special meaning in a character class. The meaning of dollar can be changed so that it matches only at the very end of the string, by setting the 'E' ('beDollarEndOnly') option at compile or matching time. This does not affect the \Z assertion. The meanings of the circumflex and dollar characters are changed if the 'm' (beMultiline) option is set. When this is the case, they match immediately after and immediately before an internal '\n' character, respectively, in addition to matching at the start and end of the subject string. For example, the pattern /^abc$/ matches the subject string 'def\nabc' in multiline mode, but not otherwise. Consequently, patterns that are anchored in single line mode because all branches start with '^' are not anchored in multiline mode. The 'E' (beExtended) option is ignored if 's' is set. Note that the sequences \A, \Z, and \z can be used to match the start and end of the subject in both modes, and if all branches of a pattern start with \A is it always anchored, whether 's' (beDotIncludesNewline) is set or not. PERIOD, DOT Outside a character class, a dot in the pattern matches any one character in the subject, including a non-printing character, but not (by default) newline. If the 's' (beDotIncludesNewline) option is set, then dots match newlines as well. The handling of dot is entirely independent of the handling of circumflex and dollar, the only relationship being that they both involve newline characters. Dot has no special meaning in a character class. SQUARE BRACKETS An opening square bracket introduces a character class, terminated by a closing square bracket. A closing square bracket on its own is not special. If a closing square bracket is required as a member of the class, it should be the first data character in the class (after an initial circumflex, if present) or escaped with a backslash. A character class matches a single character in the subject; the character must be in the set of characters defined by the class, unless the first character in the class is a circumflex, in which case the subject character must not be in the set defined by the class. If a circumflex is actually required as a member of the class, ensure it is not the first character, or escape it with a backslash. For example, the character class [aeiou] matches any lower case vowel, while [^aeiou] matches any character that is not a lower case vowel. Note that a circumflex is just a convenient notation for specifying the characters which are in the class by enumerating those that are not. It is not an assertion: it still consumes a character from the subject string, and fails if the current pointer is at the end of the string. When caseless matching is set, any letters in a class represent both their upper case and lower case versions, so for example, a caseless [aeiou] matches 'A' as well as 'a', and a caseless [^aeiou] does not match 'A', whereas a caseful version would. The newline character is never treated in any special way in character classes, whatever the setting of the 's' (beDotIncludesNewline) or 'm' (beMultiline) options is. A class such as [^a] will always match a newline. The minus (hyphen) character can be used to specify a range of characters in a character class. For example, [d-m] matches any letter between d and m, inclusive. If a minus character is required in a class, it must be escaped with a backslash or appear in a position where it cannot be interpreted as indicating a range, typically as the first or last character in the class. It is not possible to have the literal character ']' as the end character of a range. A pattern such as [W-]46] is interpreted as a class of two characters ('W' and '-') followed by a literal string '46]', so it would match 'W46]' or '-46]'. However, if the ']' is escaped with a backslash it is interpreted as the end of range, so [W-\]46] is interpreted as a single class containing a range followed by two separate characters. The octal or hexadecimal representation of ']' can also be used to end a range. Ranges operate in ASCII collating sequence. They can also be used for characters specified numerically, for example [\000-\037]. If a range that includes letters is used when caseless matching is set, it matches the letters in either case. For example, [W-c] is equivalent to [][\^_`wxyzabc], matched caselessly, and if character tables for the 'fr' locale are in use, [\xc8-\xcb] matches accented E characters in both cases. The character types \d, \D, \s, \S, \w, and \W may also appear in a character class, and add the characters that they match to the class. For example, [\dABCDEF] matches any hexadecimal digit. A circumflex can conveniently be used with the upper case character types to specify a more restricted set of characters than the matching lower case type. For example, the class [^\W_] matches any letter or digit, but not underscore. All non-alphameric characters other than \, -, ^ (at the start) and the terminating ] are non-special in character classes, but it does no harm if they are escaped. VERTICAL BAR Vertical bar characters are used to separate alternative patterns. For example, the pattern gilbert|sullivan matches either 'gilbert' or 'sullivan'. Any number of alternatives may appear, and an empty alternative is permitted (matching the empty string). The matching process tries each alternative in turn, from left to right, and the first one that succeeds is used. If the alternatives are within a subpattern (defined below), 'succeeds' means matching the rest of the main pattern as well as the alternative in the subpattern. INTERNAL OPTION SETTING The settings of caseless, multiline, dotall and extended options can be changed from within the pattern by a sequence of Perl option letters enclosed between '(?' and ')'. The option letters are i for Caseless Matching Mode m for Multiline Mode s for Dotall Mode (Dot matches newlines) x for Extended Mode (whitespace not meaningful, comments permitted) For example, (?im) sets caseless, multiline matching. It is also possible to unset these options by preceding the letter with a hyphen, and a combined setting and unsetting such as (?im-sx), which sets caseless and multiline while unsetting dotall and extended, is also permitted. If a letter appears both before and after the hyphen, the option is unset. The scope of these option changes depends on where in the pattern the setting occurs. For settings that are outside any subpattern (defined below), the effect is the same as if the options were set or unset at the start of matching. The following patterns all behave in exactly the same way: (?i)abc a(?i)bc ab(?i)c abc(?i) which in turn is the same as compiling the pattern abc with 'i' set. In other words, such 'top level' settings apply to the whole pattern (unless there are other changes inside subpatterns). If there is more than one setting of the same option at top level, the rightmost setting is used. If an option change occurs inside a subpattern, the effect is different. This is a change of behaviour in Perl 5.005. An option change inside a subpattern affects only that part of the subpattern that follows it, so (a(?i)b)c matches abc and aBc and no other strings (assuming 'i' is not used). By this means, options can be made to have different settings in different parts of the pattern. Any changes made in one alternative do carry on into subsequent branches within the same subpattern. For example, (a(?i)b|c) matches 'ab', 'aB', 'c', and 'C', even though when matching 'C' the first branch is abandoned before the option setting. This is because the effects of option settings happen at compile time. There would be some very weird behaviour otherwise. The PCRE-specific options 'U' and 'X' can be changed in the same way as the Perl-compatible options. The (?X) flag setting is special in that it must always occur earlier in the pattern than any of the additional features it turns on, even when it is at top level. It is best put at the start. SUBPATTERNS Subpatterns are delimited by parentheses (round brackets), which can be nested. Marking part of a pattern as a subpattern does two things: 1. It localizes a set of alternatives. For example, the pattern cat(aract|erpillar|) matches one of the words 'cat', 'cataract', or 'caterpillar'. Without the parentheses, it would match 'cataract', 'erpillar' or the empty string. 2. It sets up the subpattern as a capturing subpattern (as defined above). When the whole pattern matches, that portion of the subject string that matchedOpening parentheses are cou nted from left to right (starting from 1) to obtain the numbers of the capturing subpatterns. For example, if the string 'the red king' is matched against the pattern the ((red|white) (king|queen)) the captured substrings are 'red king', 'red', and 'king', and are numbered 1, 2, and 3. The fact that plain parentheses fulfil two functions is not always helpful. There are often times when a grouping subpattern is required without a capturing requirement. If an opening parenthesis is followed by '?:', the subpattern does not do any capturing, and is not counted when computing the number of any subsequent capturing subpatterns. For example, if the string 'the white queen' is matched against the pattern the ((?:red|white) (king|queen)) the captured substrings are 'white queen' and 'queen', and are numbered 1 and 2. The maximum number of captured substrings is 99, and the maximum number of all subpatterns, both capturing and non-capturing, is 200. As a convenient shorthand, if any option settings are required at the start of a non-capturing subpattern, the option letters may appear between the '?' and the ':'. Thus the two patterns (?i:saturday|sunday) (?:(?i)saturday|sunday) match exactly the same set of strings. Because alternative branches are tried from left to right, and options are not reset until the end of the subpattern is reached, an option setting in one branch does affect subsequent branches, so the above patterns match 'SUNDAY' as well as 'Saturday'. REPETITION Repetition is specified by quantifiers, which can follow any of the following items: a single character, possibly escaped the . metacharacter a character class a back reference (see next section) a parenthesized subpattern (unless it is an assertion - see below) The general repetition quantifier specifies a minimum and maximum number of permitted matches, by giving the two numbers in curly brackets (braces), separated by a comma. The numbers must be less than 65536, and the first must be less than or equal to the second. For example: z{2,4} matches 'zz', 'zzz', or 'zzzz'. A closing brace on its own is not a special character. If the second number is omitted, but the comma is present, there is no upper limit; if the second number and the comma are both omitted, the quantifier specifies an exact number of required matches. Thus [aeiou]{3,} matches at least 3 successive vowels, but may match many more, while \d{8} matches exactly 8 digits. An opening curly bracket that appears in a position where a quantifier is not allowed, or one that does not match the syntax of a quantifier, is taken as a literal character. For example, {,6} is not a quantifier, but a literal string of four characters. The quantifier {0} is permitted, causing the expression to behave as if the previous item and the quantifier were not present. For convenience (and historical compatibility) the three most common quantifiers have single-character abbreviations: * is equivalent to {0,} + is equivalent to {1,} ? is equivalent to {0,1} It is possible to construct infinite loops by following a subpattern that can match no characters with a quantifier that has no upper limit, for example: (a?)* Earlier versions of Perl and PCRE used to give an error at compile time for such patterns. However, because there are cases where this can be useful, such patterns are now accepted, but if any repetition of the subpattern does in fact match no characters, the loop is forcibly broken. By default, the quantifiers are 'greedy', that is, they match as much as possible (up to the maximum number of permitted times), without causing the rest of the pattern to fail. The classic example of where this gives problems is in trying to match comments in C programs. These appear between the sequences /* and */ and within the sequence, individual * and / characters may appear. An attempt to match C comments by applying the pattern /\*.*\*/ to the string /* first command */ not comment /* second comment */ fails, because it matches the entire string due to the greediness of the .* item. However, if a quantifier is followed by a question mark, then it ceases to be greedy, and instead matches the minimum number of times possible, so the pattern /\*.*?\*/ does the right thing with the C comments. The meaning of the various quantifiers is not otherwise changed, just the preferred number of matches. Do not confuse this use of question mark with its use as a quantifier in its own right. Because it has... [truncated message content] |
|
From: Brenda L. <asp...@us...> - 2003-05-12 04:03:49
|
Update of /cvsroot/squeak/squeak/platforms/Cross/plugins/PseudoTTYPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv29687 Added Files: PseudoTTYPlugin.h Log Message: Ian Piumarta's 3.4.1 release --- NEW FILE: PseudoTTYPlugin.h --- #include "../AsynchFilePlugin/AsynchFilePlugin.h" |
|
From: Brenda L. <asp...@us...> - 2003-05-12 03:59:23
|
Update of /cvsroot/squeak/squeak/platforms/Cross/plugins/PseudoTTYPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv28515/PseudoTTYPlugin Log Message: Directory /cvsroot/squeak/squeak/platforms/Cross/plugins/PseudoTTYPlugin added to the repository |
|
From: Tim R. <row...@us...> - 2003-05-09 01:07:19
|
Update of /cvsroot/squeak/squeak/platforms/RiscOS/vm In directory sc8-pr-cvs1:/tmp/cvs-serv6982/RiscOS/vm Modified Files: fperrors.s osExports.c sqArgument.c sqPlatformSpecific.h sqRPCClipboard.c sqRPCEvents.c sqRPCExternalPrims.c sqRPCFormPrint.c sqRPCSyscall.c sqRPCWindows.c Added Files: sqRPCVersion.c Log Message: Modified Files: RiscOS/plugins/FileCopyPlugin/sqRPCFileCopy.c comment change RiscOS/plugins/FilePlugin/sqRPCDirectory.c timezone/stamp calculation fixes RiscOS/plugins/SocketPlugin/sqRPCNetPlugin.c comment change RiscOS/plugins/SoundPlugin/sqRPCSound.c RiscOS/vm/fperrors.s remove dead code, 32bit fix RiscOS/vm/osExports.c RiscOS/vm/sqArgument.c new window label argument RiscOS/vm/sqPlatformSpecific.h RiscOS/vm/sqRPCClipboard.c clipboard works! RiscOS/vm/sqRPCEvents.c RiscOS/vm/sqRPCExternalPrims.c comment change RiscOS/vm/sqRPCFormPrint.c RiscOS/vm/sqRPCSyscall.c comment change RiscOS/vm/sqRPCWindows.c RiscOS/vm/dsc/block,fff add timezone related call Added Files: RiscOS/vm/sqRPCVersion.c use as a kind of vm compiletime timestamp --- NEW FILE: sqRPCVersion.c --- /**************************************************************************/ /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ /* Known to work on RiscOS >3.7 for StrongARM RPCs and Iyonix, */ /* other machines not yet tested. */ /* sqRPCVersion.c */ /* A trivial file to recompile every time a VM is built so as to track */ /* the exact time and date of build */ /**************************************************************************/ char VMVersion[] = "3.4 of "__DATE__"@"__TIME__; Index: fperrors.s =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/fperrors.s,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** fperrors.s 24 Oct 2001 23:14:02 -0000 1.1.1.1 --- fperrors.s 9 May 2003 01:07:16 -0000 1.2 *************** *** 5,17 **** pc RN 15 - XOS_ReadMonotonicTime * &42 + (1 :SHL: 17) - ioc * &3200000 - ioc_ctrl * &106 - t0_low * &40 - t0_high * &44 - t0_go * &48 - t0_latch * &4C - - ; Macro to provide labels in ASM code to suit C linker/debugger --- 5,8 ---- *************** *** 21,25 **** size SETA &FF000000 + (( (:LEN: "$string") + 4 ) :AND: &FFFFFFFC) ! $label DCB "$string" ALIGN DCD size --- 12,16 ---- size SETA &FF000000 + (( (:LEN: "$string") + 4 ) :AND: &FFFFFFFC) ! $label DCB "$string",0 ALIGN DCD size *************** *** 32,37 **** EXPORT setFPStatus EXPORT readFPStatus - ; EXPORT readCSecClock - ; EXPORT readMSecClock ;***************************************************************** --- 23,26 ---- *************** *** 49,91 **** AND R0, R0, #&F MOV pc, lk - - ;***************************************************************** - ; The following two functions were part of an experiment in making - ; a faster and higher resolution clock. It failed. - ; Reading the timer0 would need to be in a module to work :-( - ; C_Label "readCSecClock" - ;readCSecClock - ; ; return the centisecond clock value * 10, ie rough millisecs - ; STMFD sp!, {lr} - ; SWI XOS_ReadMonotonicTime - ; ADD R0,R0,R0 ; double RO - ; ADD R0,R0,R0,LSL#2 ; then R0 = 2r0 + 2r0*4 -> 10r0 - ; LDMFD sp!, {pc} - ; - ;***************************************************************** - ; C_Label "readMSecClock" - ;readMSecClock - ; ; return the centisec * 10 + ~result of checking the timer0 - ; ; gives reasonably accurate millisecs - ; STMFD sp!, {lr} - ; MOV R1,#ioc ; read IOC timer - ; STRB R0,[R1,#t0_latch] ; make value appear on latch - ; LDRB R0,[R1,#t0_low] - ; LDRB R1,[R1,#t0_high] - ; ADD R0,R0,R1,LSL#8 ; add high and low - ; MOV R1,#2048 - ; SUB R1,R1,#49 ; leaves 1999 in R1 - ; SUB R1,R1,R0 ; reverse countdown to count up - ; MOV R1,R1,LSR#11 ; divide by 2048, close enough to 2000! - ; - ; SWI XOS_ReadMonotonicTime - ; - ; ADD R0,R0,R0 ; double RO - ; ADD R0,R0,R0,LSL#2 ; then R0 = 2r0 + 2r0*4 -> 10r0 - ; ADD R0,R0,R1 - ; - ; LDMFD sp!, {pc} - ; - ;***************************************************************** AREA |C$$data| --- 38,41 ---- Index: osExports.c =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/osExports.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** osExports.c 4 Feb 2003 21:10:20 -0000 1.2 --- osExports.c 9 May 2003 01:07:16 -0000 1.3 *************** *** 1,6 **** /* note: this file is only a backward compatible wrapper ! for the old-style "platform.exports" definitions. ! If your platform has migrated to the new exports ! style you may as well insert the exports right here */ #include <stdio.h> /* duh ... this is ugly */ --- 1,20 ---- + /**************************************************************************/ + /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ + /* ti...@su... & http://sumeru.stanford.edu/tim */ + /* Known to work on RiscOS >3.7 for StrongARM RPCs and Iyonix, */ + /* other machines not yet tested. */ + /* osExports.c */ + /* internal plugin hookups */ + /**************************************************************************/ + + /* To recompile this reliably you will need */ + /* OSLib - http://ro-oslib.sourceforge.net/ */ + /* Castle/AcornC/C++, the Acorn TCPIPLib */ + /* and a little luck */ /* note: this file is only a backward compatible wrapper ! * for the old-style "platform.exports" definitions. ! * If your platform has migrated to the new exports ! * style you may as well insert the exports right here ! */ #include <stdio.h> /* duh ... this is ugly */ Index: sqArgument.c =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqArgument.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** sqArgument.c 14 Jan 2003 03:41:09 -0000 1.4 --- sqArgument.c 9 May 2003 01:07:16 -0000 1.5 *************** *** 1,2 **** --- 1,15 ---- + /**************************************************************************/ + /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ + /* ti...@su... & http://sumeru.stanford.edu/tim */ + /* Known to work on RiscOS >3.7 for StrongARM RPCs and Iyonix, */ + /* other machines not yet tested. */ + /* sqArgument.c */ + /* handle commandline arguments */ + /**************************************************************************/ + + /* To recompile this reliably you will need */ + /* OSLib - http://ro-oslib.sourceforge.net/ */ + /* Castle/AcornC/C++, the Acorn TCPIPLib */ + /* and a little luck */ #include <string.h> #include <stdlib.h> *************** *** 18,25 **** static int IsImage(char *name) { ! /* check the named file to see if it is a decent candidate for a Squeak image file. Remember to check both the very beginning of the file and 512 bytes into it, just in case it was written from a unix machine - which adds a short extra header */ ! FILE *fp; ! int magic; ! int byteSwapped(int); extern int readableFormat(int imageVersion); --- 31,42 ---- static int IsImage(char *name) { ! /* check the named file to see if it is a decent candidate for a Squeak image ! * file. Remember to check both the very beginning of the file and 512 bytes ! * into it, just in case it was written from a unix machine - which adds a ! * short extra header ! */ ! FILE *fp; ! int magic; ! int byteSwapped(int); extern int readableFormat(int imageVersion); *************** *** 65,71 **** /* parse an unsigned integer argument */ static char *parseUnsignedArg(char *src, unsigned *dst) { ! char buf[50]; ! char *tmp = buf; ! int factor = 1; while(isdigit(*src)) *(tmp++) = *(src++); --- 82,88 ---- /* parse an unsigned integer argument */ static char *parseUnsignedArg(char *src, unsigned *dst) { ! char buf[50]; ! char *tmp = buf; ! int factor = 1; while(isdigit(*src)) *(tmp++) = *(src++); *************** *** 85,90 **** /* parse a (possibly signed) integer argument */ static char *parseSignedArg(char *src, int *dst) { ! int negative; ! unsigned value; negative = *src == '-'; --- 102,107 ---- /* parse a (possibly signed) integer argument */ static char *parseSignedArg(char *src, int *dst) { ! int negative; ! unsigned value; negative = *src == '-'; *************** *** 99,105 **** /* parse all arguments meaningful to the VM */ static int parseVMArgs(vmArg args[]) { ! vmArg *arg; ! int arglen; ! char * string; while(1) --- 116,122 ---- /* parse all arguments meaningful to the VM */ static int parseVMArgs(vmArg args[]) { ! vmArg *arg; ! int arglen; ! char * string; while(1) *************** *** 127,131 **** return NULL; /* done */ ! // if the char at the end of the option name is ':', null it out and skip ahead one string += (arglen-1); if(*string== ':') *(string++) = 0; --- 144,150 ---- return NULL; /* done */ ! /* if the char at the end of the option name is ':', ! * null it out and skip ahead one ! */ string += (arglen-1); if(*string== ':') *(string++) = 0; *************** *** 162,168 **** /* parse all arguments starting with the image name */ static int parseGenericArgs(void) { ! char *string; ! extern char vmPath[]; ! extern void decodePath(char*, char*); if (!(string = nextOption()) ) { --- 181,187 ---- /* parse all arguments starting with the image name */ static int parseGenericArgs(void) { ! char *string; ! extern char vmPath[]; ! extern void decodePath(char*, char*); if (!(string = nextOption()) ) { *************** *** 189,194 **** // now go through any more options while((string = nextOption()) && *string) { ! if(numOptionsImage > MAX_OPTIONS) return NULL; /* too many args */ ! while(*string && *string == ' ') string++; /* skip blanks */ imageOptions[numOptionsImage++] = string; if(!string) return NULL; --- 208,215 ---- // now go through any more options while((string = nextOption()) && *string) { ! if(numOptionsImage > MAX_OPTIONS) ! return NULL; /* too many args */ ! while(*string && *string == ' ') ! string++; /* skip blanks */ imageOptions[numOptionsImage++] = string; if(!string) return NULL; *************** *** 199,208 **** int parseArguments(char *argv[], int argc, vmArg args[]) { ! extern char vmPath[]; ! extern void decodeVMPath(char*); ! numOptionsVM = 0; ! numOptionsImage = 0; ! numOptions = argc; ! optionArray = &argv[0]; /* argv[0] = executable name */ --- 220,229 ---- int parseArguments(char *argv[], int argc, vmArg args[]) { ! extern char vmPath[]; ! extern void decodeVMPath(char*); ! numOptionsVM = 0; ! numOptionsImage = 0; ! numOptions = argc; ! optionArray = &argv[0]; /* argv[0] = executable name */ Index: sqPlatformSpecific.h =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqPlatformSpecific.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** sqPlatformSpecific.h 4 Feb 2003 21:10:20 -0000 1.6 --- sqPlatformSpecific.h 9 May 2003 01:07:16 -0000 1.7 *************** *** 52,58 **** #undef ioMicroMSecs #undef ioMSecs ! #define ioMSecs() (10* (int)os_read_monotonic_time()) #undef ioLowResMSecs ! #define ioLowResMSecs() (ioMSecs()) #else #endif /* ACORN */ --- 52,59 ---- #undef ioMicroMSecs #undef ioMSecs ! #define ioMSecs() (ioMicroMSecs()) #undef ioLowResMSecs ! #define ioLowResMSecs() (ioMicroMSecs()) #else + #endif /* ACORN */ Index: sqRPCClipboard.c =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqRPCClipboard.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** sqRPCClipboard.c 23 Apr 2002 22:08:47 -0000 1.2 --- sqRPCClipboard.c 9 May 2003 01:07:16 -0000 1.3 *************** *** 2,18 **** /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS 3.7 for StrongARM RPCs, other machines */ ! /* not yet tested. */ ! /* sqRPCClipb.c */ ! /* attempt to hook up to RiscOS clipboard stuff */ /**************************************************************************/ /* To recompile this reliably you will need */ ! /* Jonathon Coxhead's OSLib, */ ! /* AcornC_C++, the Acorn sockets libs */ /* and a little luck */ #include "oslib/os.h" #include "oslib/osbyte.h" #include "oslib/osfscontrol.h" #include "oslib/wimp.h" #include "oslib/wimpspriteop.h" --- 2,19 ---- /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS >3.7 for StrongARM RPCs and Iyonix, */ ! /* other machines not yet tested. */ ! /* sqRPCClipboard.c */ ! /* hook up to RiscOS clipboard stuff */ /**************************************************************************/ /* To recompile this reliably you will need */ ! /* OSLib - http://ro-oslib.sourceforge.net/ */ ! /* Castle/AcornC/C++, the Acorn TCPIPLib */ /* and a little luck */ #include "oslib/os.h" #include "oslib/osbyte.h" #include "oslib/osfscontrol.h" + #include "oslib/osfile.h" #include "oslib/wimp.h" #include "oslib/wimpspriteop.h" *************** *** 24,268 **** // CBDEBUG is for printfs related to the clipboard stuff #define CBDEBUG 0 ! extern wimp_t Task_Handle; ! extern wimp_w sqWindowHandle; ! int sqHasInputFocus = false; ! int sqHasClipboard = false; ! void claimCaret(wimp_pointer * wblock); void ClaimEntity( int flags) { wimp_message wmessage; ! // broadcast the Message_ClaimEntity using the flags value to decide whether it is a claim of the caret or the clipboard or both ! // Message_ClaimEntity (15)<BR> ! // 0 message size (24)<BR> ! // 4 task handle of task making the claim ! // 8 message id<BR> ! // 12 your_ref (0)<BR> ! // 16 Message_ClaimEntity<BR> ! // 20 flags:<BR> ! // <PRE> ! // bits 0 and 1 set => caret or selection being claimed ! // bit 2 set => clipboard being claimed ! // all other bits reserved (must be 0) ! // </PRE> ! // ! // <p> ! // This message should be broadcast to all tasks as the caret / selection or ! // clipboard are claimed. ! // When claiming the input focus or clipboard, a task should check to see if it ! // already owns that entity, and if so, there is no need to issue the broadcast. ! // It should then take care of updating the caret / selection / clipboard to the ! // new value (updating the display in the case of the selection). wmessage.size = 24; ! wmessage.sender = Task_Handle; ! wmessage.my_ref = (int)Task_Handle; // some better message id ?? wmessage.your_ref = 0; wmessage.action = message_CLAIM_ENTITY; wmessage.data.claim_entity.flags = (wimp_claim_flags)flags; xwimp_send_message(wimp_USER_MESSAGE, &wmessage, wimp_BROADCAST); ! if(CBDEBUG) { printf("ClaimEntity sent message with flags %x\n", flags); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); ! } } void claimCaret(wimp_pointer * wblock) { ! #define flagsForClaimingInputFocus 0x03 ! // claim the input focus if I dont already have it if (!sqHasInputFocus) { ! ClaimEntity( flagsForClaimingInputFocus); sqHasInputFocus = true; } - // When the user positions the caret or makes a selection, the application - // should claim ownership of the input focus by broadcasting this message with - // bits 0 and 1 set. When positioning the caret, the application can choose - // whether to use the Wimp's caret or draw its own representation of the caret - // more appropriate to the type of data being edited. When making a selection, - // the application must hide the caret; it should do this by setting the Wimp's - // caret to the window containing the selection, but invisible. This is - // necessary to direct keystroke events to this window. } void claimClipboard(void) { ! #define flagsForClaimingClipboard 0x04 ! // claim the clipboard if I dont already have it if (!sqHasClipboard ) { ! ClaimEntity( flagsForClaimingClipboard); sqHasClipboard = true; } - // When the user performs a Cut or Copy operation, the application should claim - // ownership of the clipboard by broadcasting this message with bit 2 set. - } void receivedClaimEntity(wimp_message * wblock) { ! // When a task receives this message with bits 0 or 1 set, it should check to ! // see if any of its windows currently own the input focus. If so, it should ! // update its flag to indicate that it no longer has the focus, and remove any ! // representation of the caret which it has drawn (unless it uses the Wimp ! // caret, which will be undrawn automatically.) It may optionally alter the ! // appearance of its window to emphasize the fact that it does not have the ! // input focus, for example by shading the selection. A task that receives ! // Message_ClaimEntity with only one of bits 0 and 1 set should act as if both ! // bits were set. ! ! // When a task receives this message with bit 2 set it should set a flag to ! // indicate that the clipboard is held by another application and deallocate the ! // memory being used to store the clipboard contents. ! if(CBDEBUG) { ! printf("receivedClaimEntity with flags %x\n", wblock->data.claim_entity.flags); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); ! } ! if ( (wblock->data.claim_entity.flags & flagsForClaimingInputFocus) > 0 ) { sqHasInputFocus = false; } ! if ( wblock->data.claim_entity.flags == flagsForClaimingClipboard) { sqHasClipboard = false; } ! if(CBDEBUG) { ! printf("post claim entity sq now "); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); ! } } ! void fetchClipboard(void) { ! // fetch the clipboard from the current owner ! // send a data request, put the returned clipboard text into the buffer etc. ! if(CBDEBUG) { ! printf("fetchClipboard "); ! if (sqHasInputFocus) printf("has focus "); ! if (sqHasClipboard) printf("has clipboard\n"); } ! // we can't fetch the outside clipboard yet, so fake it ! sqHasClipboard = true; ! clipboardSize(); } ! void sendDataRequest(void) { ! // Paste related fetching of clipboard text ! // ! // <p> ! // The application should first check to see if it owns the clipboard, and use ! // the data directly if so. If is does not own it, it should broadcast the ! // following message: ! // ! // <p> ! // Message_DataRequest (16)<BR> ! // 0 message size<BR> ! // 4 task handle of task requesting data ! // 8 message id<BR> ! // 12 your_ref (0)<BR> ! // 16 Message_DataRequest<BR> ! // 20 window handle<BR> ! // 24 internal handle to indicate destination of data ! // 28 x<BR> ! // 32 y<BR> ! // 36 flags:<BR> ! // <PRE> ! // bit 2 set => send data from clipboard (must be 1) ! // all other bits reserved (must be 0) ! // </PRE> ! // 40 list of filetypes in order of preference, ! // <PRE> ! // terminated by -1 ! // </PRE> ! // ! // <p> ! // The sender must set flags bit 2, and the receiver must check this bit, and ! // ignore the message if it is not set. All other flags bits must be cleared by ! // the sender and ignored by the receiver. ! wimp_message wmessage; ! if(CBDEBUG) { ! printf("sendDataRequest "); ! if (sqHasInputFocus) printf("has focus "); ! if (sqHasClipboard) printf("has clipboard\n"); } ! wmessage.size = 0; ! wmessage.sender = Task_Handle; ! wmessage.my_ref = (int)Task_Handle; // some better message id ?? ! wmessage.your_ref = 0; ! wmessage.action = message_DATA_REQUEST; ! wmessage.data.data_request.w = sqWindowHandle; ! wmessage.data.data_request.i = wimp_ICON_WINDOW; ! wmessage.data.data_request.pos.x = 0; ! wmessage.data.data_request.pos.y = 0; ! wmessage.data.data_request.flags = 0x04; ! // fill in filetypes somehow ! wmessage.data.data_request.file_types[0] = 0xFFF; //TEXT ! wmessage.data.data_request.file_types[1] = 0xFFD; // DATA ! wmessage.data.data_request.file_types[2] = -1; ! xwimp_send_message(wimp_USER_MESSAGE, &wmessage, wimp_BROADCAST); } void receivedDataRequest(wimp_message * wmessage) { ! if ( sqHasClipboard ) { ! // somebody requested data & I have the clipboard ! // If an application receiving this message owns the clipboard, it should choose ! // the earliest filetype in the list that it can provide, and if none are ! // possible it should provide the data its original (native) format. Note that ! // the list can be null, to indicate that the native data should be sent. ! // check the filetype list. My native format is text for this purpose ! if(CBDEBUG) { printf("receivedDataRequest "); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); ! } ! ! // loop until filetype is -1 or we find TEXT ! // (- types are 'bits' which is unsigned int) in a list up to 54 words long. ! // since I will only handle text, and I am using it as native format, I can skip ! // this test. It would always suceed! ! ! // It ! // should reply using the normal Message_DataSave protocol. Bytes 20 through 35 ! // of the DataSave block should be copied directly from the corresponding bytes ! // of the Message_DataRequest block, whilst the estimated size field, filetype ! // and filename must be filled in. ! //make up a datasave block ! //send the data save message ! //sendDataSave(dsblock); ! // <p> ! // If your application needs to find out whether there is data available to ! // paste, but does not actually want to receive the data, you should broadcast ! // a Message_DataRequest as described above. If no task replies (i.e. you get ! // the message back) then there is no clipboard data available. If a ! // Message_DataSave is received, then you should ignore it (fail to reply), ! // which will cause the operation to be silently aborted by the other task. You ! // can then use the filetype field of the Message_DataSave to determine whether ! // the data being offered by the other task is in a suitable format for you to ! // receive. ! } ! // what to do if I don't have the clipboard? No reply? } ! void receivedDataSave(wimp_message * wblock) { ! // ! // <p> ! // When the application that initiated the Paste receives the Message_DataSave, ! // it should check the filetype to ensure that it knows how to deal with it - it ! // may be the clipboard owner's native format. If it cannot, it may back out of ! // the transaction by ignoring the message. Otherwise, it should continue with ! // the DataSave protocol as detailed in the Programmer's Reference Manual. ! // check the filetype - only deal with text for now. What others might be useful ? ! // Do the data save protocols to get the clipboard text ! // ! if(CBDEBUG) { ! printf("receivedDataSave "); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); } ! } --- 25,405 ---- // CBDEBUG is for printfs related to the clipboard stuff #define CBDEBUG 0 ! int sqHasInputFocus = false; ! int sqHasClipboard = false; ! char * clipboardBuffer = NULL; ! int clipboardByteSize = 0; ! int clipboardMessageID = 0; ! int allocClipboard(size_t size); ! ! /* caret (input focus) and clipboard claiming functions */ void ClaimEntity( int flags) { wimp_message wmessage; ! /* broadcast the Message_ClaimEntity using the flags value to decide whether ! * it is a claim of the caret or the clipboard (or both?) ! * When claiming the input focus or clipboard, a task should check to see if ! * it already owns that entity, and if so, there is no need to issue the ! * broadcast. ! * It should then take care of updating the caret / selection / clipboard ! * to the new value (updating the display in the case of the selection). ! */ wmessage.size = 24; ! wmessage.sender = (wimp_t)NULL; ! wmessage.my_ref = 0; wmessage.your_ref = 0; wmessage.action = message_CLAIM_ENTITY; wmessage.data.claim_entity.flags = (wimp_claim_flags)flags; xwimp_send_message(wimp_USER_MESSAGE, &wmessage, wimp_BROADCAST); ! #if CBDEBUG printf("ClaimEntity sent message with flags %x\n", flags); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); ! #endif } void claimCaret(wimp_pointer * wblock) { ! /* claim the input focus if I dont already have it */ if (!sqHasInputFocus) { ! ClaimEntity( wimp_CLAIM_CARET_OR_SELECTION); sqHasInputFocus = true; } } void claimClipboard(void) { ! /* claim the clipboard if I dont already have it */ if (!sqHasClipboard ) { ! ClaimEntity( wimp_CLAIM_CLIPBOARD); sqHasClipboard = true; } } void receivedClaimEntity(wimp_message * wblock) { ! /* When a task receives this message with bits 0 or 1 set, it should check ! *to see if any of its windows currently own the input focus. If so, it ! * should update its flag to indicate that it no longer has the focus, and ! * remove any representation of the caret which it has drawn (unless it uses ! * the Wimp caret, which will be undrawn automatically.) It may optionally ! * alter the appearance of its window to emphasize the fact that it does not ! * have the input focus, for example by shading the selection. A task that ! * receives Message_ClaimEntity with only one of bits 0 and 1 set should act ! * as if both bits were set. ! * ! * When a task receives this message with bit 2 set it should set a flag to ! * indicate that the clipboard is held by another application and deallocate ! * the memory being used to store the clipboard contents. ! */ ! #if CBDEBUG ! printf("receivedClaimEntity with flags %x\n", ! wblock->data.claim_entity.flags); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); ! #endif ! if ( (wblock->data.claim_entity.flags ! & wimp_CLAIM_CARET_OR_SELECTION) > 0 ) { sqHasInputFocus = false; } ! if ( wblock->data.claim_entity.flags == wimp_CLAIM_CLIPBOARD) { sqHasClipboard = false; + allocClipboard(1); } ! #if CBDEBUG ! printf("post claim entity sq now "); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); ! #endif } ! /* clipboard buffer management */ ! int allocClipboard(size_t size) { ! void * ptr; ! ptr = realloc(clipboardBuffer, size); ! if( ptr == NULL) { ! /* failed to reallocate but old buffer is stil in place ! * so remember to clear it ! */ ! memset(clipboardBuffer,0, (size_t)clipboardByteSize); ! return false; } ! clipboardBuffer = ptr; ! clipboardByteSize = (int)size; ! memset(clipboardBuffer,0, (size_t)clipboardByteSize); ! return true; ! } ! ! void freeClipboard(void) { ! free(clipboardBuffer); ! clipboardBuffer = NULL; ! clipboardByteSize = 0; } + + /* clipboard fetching - we don't own the clipboard and do want the contents */ ! void sendDataRequest(wimp_message* wmessage) { ! /* We want to fetch the clipboard contents from some other application ! * Broadcast the message_DATA_REQUEST message ! */ ! extern wimp_w sqWindowHandle; ! #if CBDEBUG ! printf("sendDataRequest "); ! if (sqHasInputFocus) printf("has focus "); ! if (sqHasClipboard) printf("has clipboard\n"); ! #endif ! wmessage->size = 52; ! wmessage->sender = (wimp_t)NULL; ! wmessage->my_ref = 0; ! wmessage->your_ref = 0; ! wmessage->action = message_DATA_REQUEST; ! wmessage->data.data_request.w = sqWindowHandle; ! wmessage->data.data_request.i = wimp_ICON_WINDOW; ! wmessage->data.data_request.pos.x = 0; ! wmessage->data.data_request.pos.y = 0; ! wmessage->data.data_request.flags = 0x04; // request clipboard ! wmessage->data.data_request.file_types[0] = 0xFFF; //TEXT ! wmessage->data.data_request.file_types[1] = 0xFFD; // DATA ! wmessage->data.data_request.file_types[2] = -1; ! xwimp_send_message(wimp_USER_MESSAGE, wmessage, wimp_BROADCAST); ! clipboardMessageID = wmessage->my_ref; ! } ! ! ! int receivedClipboardDataSave(wimp_message * wmessage) { ! /* When the application that initiated the Paste receives the ! * Message_DataSave, it should check the filetype to ensure that it ! * knows how to deal with it - it may be the clipboard owner's native ! * format. If it cannot, it may back out of the transaction by ignoring ! * the message. Otherwise, it should continue with the DataSave ! * protocol as detailed in the Programmer's Reference Manual. ! */ ! #if CBDEBUG ! printf("receivedClipboardDataSave "); ! if (sqHasInputFocus) printf("has focus "); ! if (sqHasClipboard) printf("has clipboard\n"); ! #endif ! if(wmessage->data.data_xfer.file_type != (bits)0xfff) { ! /* if not text type, empty clipboard buffer & return */ ! memset(clipboardBuffer,0, (size_t)clipboardByteSize); ! return false; } + /* We modify the received block and return to sender */ + wmessage->size = 60; + wmessage->action = message_DATA_SAVE_ACK; + wmessage->your_ref = wmessage->my_ref; + wmessage->data.data_xfer.est_size = -1; + wmessage->data.data_xfer.file_type = (bits)0xfff; + strcpy(&(wmessage->data.data_xfer.file_name[0]), "<Wimp$Scrap>"); + xwimp_send_message(wimp_USER_MESSAGE, wmessage, wmessage->sender); + return true; + } + void receivedClipboardDataLoad(wimp_message * wmessage) { + /* we got a dataload message, so grab the <Wimp$Scrap> file, then delete it + * and return a dataloadack to the sender + */ + bits load_addr, exec_addr, file_type; + fileswitch_attr attr; + fileswitch_object_type obj_type; + int length; + #if CBDEBUG + printf("receivedClipboardDataLoad "); + if (sqHasInputFocus) printf("has focus "); + if (sqHasClipboard) printf("has clipboard\n"); + #endif + /* find the file size */ + xosfile_read_stamped_no_path(&(wmessage->data.data_xfer.file_name[0]), + &obj_type, &load_addr, &exec_addr, &length, &attr, &file_type); + /* if the obj_type is not-found, clear the buffer and return */ + if(obj_type == fileswitch_NOT_FOUND) { + allocClipboard(1); + return; + } + /* make sure we have enough buffer space for it + * fail if not */ + if(!allocClipboard(length+1)) + return; + /* now load the file */ + xosfile_load_stamped_no_path(&(wmessage->data.data_xfer.file_name[0]), (byte*)clipboardBuffer, &obj_type, + &load_addr, &exec_addr, &length, &attr); + /* delete the file */ + xosfscontrol_wipe(&(wmessage->data.data_xfer.file_name[0]), osfscontrol_WIPE_FORCE, 0,0,0,0); + /* We modify the received block and return it to sender */ + wmessage->action = message_DATA_LOAD_ACK; + wmessage->your_ref = wmessage->my_ref; + xwimp_send_message(wimp_USER_MESSAGE, wmessage, wmessage->sender); + } ! int pollForClipboardMessage(bits messageAction, wimp_block* wblock) { ! /* poll for a message relating to the clipboard protocols (either datasave or ! * dataload usually) and return true if one is found or false if we either get ! * a null or go round more than a few times (avoid loop-of-death) ! */ ! wimp_event_no reason; ! int pollword, i; ! extern void WindowOpen(wimp_open* wblock); ! extern void WindowClose(wimp_close* wblock); ! extern void PointerLeaveWindow(wimp_block* wblock); ! extern void PointerEnterWindow(wimp_block* wblock); ! for(i=0;i<100;i++) { ! xwimp_poll((wimp_MASK_POLLWORD| wimp_MASK_GAIN | wimp_MASK_LOSE ! | wimp_SAVE_FP | wimp_QUEUE_REDRAW | wimp_QUEUE_MOUSE | wimp_QUEUE_KEY), wblock, &pollword, &reason); ! switch(reason) { ! case wimp_NULL_REASON_CODE: ! return false; break; ! case wimp_OPEN_WINDOW_REQUEST : ! WindowOpen(&wblock->open); break; ! case wimp_CLOSE_WINDOW_REQUEST : ! WindowClose(&wblock->close); break; ! case wimp_POINTER_LEAVING_WINDOW : ! PointerLeaveWindow(wblock); break; ! case wimp_POINTER_ENTERING_WINDOW: ! PointerEnterWindow(wblock); break; ! case wimp_USER_MESSAGE : ! case wimp_USER_MESSAGE_RECORDED : ! if( wblock->message.action == messageAction) ! return true; break; ! } ! } ! return false; ! } + void fetchClipboard(void) { + /* fetch the clipboard from the current owner */ + wimp_block wblock; + #if CBDEBUG + printf("fetchClipboard "); + if (sqHasInputFocus) printf("has focus "); + if (sqHasClipboard) printf("has clipboard\n"); + #endif + /* ask for the clipboard contents */ + sendDataRequest(&wblock.message); + if( !pollForClipboardMessage(message_DATA_SAVE, &wblock)) + /* didn't get any reply, so return empty */ + return ; + if( !receivedClipboardDataSave(&wblock.message)) + return; /* no acceptable filetype, so give up */ + if( !pollForClipboardMessage(message_DATA_LOAD, &wblock)) + /* didn't get any reply, so return empty */ + return; + receivedClipboardDataLoad(&wblock.message); + return; } + /* clipboard serving - what to do when we own the clipboard and somebody + * else wants the contents + */ void receivedDataRequest(wimp_message * wmessage) { ! if ( !sqHasClipboard ) return; ! ! /* somebody requested data & I have the clipboard ! * If an application receiving this message owns the clipboard, ! * it should choose the earliest filetype in the list that it ! * can provide, and if none are possible it should provide the ! * data its original (native) format. Note that the list can be ! * null, to indicate that the native data should be sent. ! */ ! #if CBDEBUG printf("receivedDataRequest "); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); ! #endif ! /* reply using the normal Message_DataSave protocol. ! * Bytes 20 through 35 of the DataSave block should be copied directly ! * from the corresponding bytes of the Message_DataRequest block, ! * whilst the estimated size field, filetype and filename must be ! * filled in. ! */ ! /* We modify the received block and return to sender */ ! wmessage->size = 52; ! wmessage->action = message_DATA_SAVE; ! wmessage->your_ref = wmessage->my_ref; ! wmessage->data.data_xfer.est_size = strlen(clipboardBuffer); ! wmessage->data.data_xfer.file_type = (bits) 0xfff; ! strcpy(&(wmessage->data.data_xfer.file_name[0]), "SqClip"); ! xwimp_send_message(wimp_USER_MESSAGE, wmessage, wmessage->sender); } ! ! void receivedDataSaveAck(wimp_message * wmessage) { ! /* we've been asked to save the clipboard contents to the wimpScrap */ ! #if CBDEBUG ! printf("receivedDataSaveAck "); if (sqHasInputFocus) printf("has focus "); if (sqHasClipboard) printf("has clipboard\n"); + #endif + osfile_save_stamped(&(wmessage->data.data_xfer.file_name[0]), + (bits)0xfff, (byte const *)clipboardBuffer, + (byte const *)(clipboardBuffer + + strlen(clipboardBuffer))); + /* modify the block to be a data load message and return to sender */ + wmessage->action = message_DATA_LOAD; + wmessage->your_ref = wmessage->my_ref; + wmessage->data.data_xfer.est_size = strlen(clipboardBuffer); + xwimp_send_message(wimp_USER_MESSAGE, wmessage, wmessage->sender); + } + + /*** Clipboard Support interface to interp.c ***/ + + int clipboardSize(void) { + /* return the number of characters in the clipboard entry */ + if (!sqHasClipboard) { + /* if squeak doesn't have the clipboard, we need to + * fetch the clipboard contents from the current holder + */ + fetchClipboard(); + } + return strlen(clipboardBuffer); + } + + int clipboardReadIntoAt(int count, int byteArrayIndex, int startIndex) { + // paste - clipboardSize() will actually do any fetching + int clipSize, charsToMove, i; + char *srcPtr, *dstPtr, cc; + clipSize = strlen(clipboardBuffer); + charsToMove = (count < clipSize) ? count : clipSize; + + srcPtr = (char *) clipboardBuffer; + dstPtr = (char *) byteArrayIndex + startIndex; + for (i = 0; i < charsToMove; i++, srcPtr++, dstPtr++) { + *dstPtr = cc = *srcPtr; + /* swap CR/LF */ + if( cc == (char)10) *dstPtr = (char)13; + if( cc == (char)13) *dstPtr = (char)10; } ! ! return charsToMove; } + int clipboardWriteFromAt(int count, int byteArrayIndex, int startIndex) { + /* copy count bytes, starting from startIndex, from byteArrayIndex to the + * clipboard. return value not (yet) used but send the number of chars moved + * the prim code has no way to handle any failure as yet, so do our best + */ + int charsToMove, i; + char *srcPtr, *dstPtr, cc; + + /* buffer size must be at least 1 more than count to allow for + * terminating \0. Realloc if needed and then recheck size + */ + allocClipboard(count + 1); + charsToMove = (count < clipboardByteSize) ? count : clipboardByteSize-1; + + srcPtr = (char *) byteArrayIndex + startIndex; + dstPtr = (char *) clipboardBuffer; + for (i = 0; i < charsToMove; i++, srcPtr++, dstPtr++) { + *dstPtr = cc = *srcPtr; + /* swap CR/LF */ + if( cc == (char)10) *dstPtr = (char)13; + if( cc == (char)13) *dstPtr = (char)10; + } + *dstPtr = (char)NULL; + + claimClipboard(); + + return charsToMove; + } Index: sqRPCEvents.c =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqRPCEvents.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** sqRPCEvents.c 4 Feb 2003 21:10:21 -0000 1.4 --- sqRPCEvents.c 9 May 2003 01:07:16 -0000 1.5 *************** *** 2,14 **** /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS 3.7 for StrongARM RPCs, other machines */ ! /* not yet tested. */ ! /* sqRPCEvents.c */ /* OS interface stuff */ /**************************************************************************/ /* To recompile this reliably you will need */ ! /* Jonathon Coxhead's OSLib, */ ! /* AcornC_C++, the Acorn sockets libs */ /* and a little luck */ #include "oslib/os.h" --- 2,14 ---- /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS >3.7 for StrongARM RPCs and Iyonix, */ ! /* other machines not yet tested. */ ! /* sqRPCEvents.c */ /* OS interface stuff */ /**************************************************************************/ /* To recompile this reliably you will need */ ! /* OSLib - http://ro-oslib.sourceforge.net/ */ ! /* Castle/AcornC/C++, the Acorn TCPIPLib */ /* and a little luck */ #include "oslib/os.h" *************** *** 37,68 **** /*** Variables -- Event Recording ***/ ! // TPR ultra simplistic event queue stuff ! /* For now events will all be 5 words - ! event type ! mouse x ! mouse y ! button state ! keypress ! so that it is easy to handle the circular buffer. ! When an event is pulled, the keyBuf will be flushed, to hopefully avoid ! the blast of chars when moving away from a Morphic window. ! When a keyBuf entry is pulled, the event Q will likewise be flushed */ #define EVENTQ_SIZE 1024 ! struct SQEvent { ! int type; ! int mx; ! int my; ! int b; ! int k; ! }; ! struct SQEvent eventBuf[EVENTQ_SIZE ]; /* circular buffer */ int eventBufGet = 0; int eventBufPut = 0; - #define SQ_KEYPRESS 1 - #define SQ_MOUSE_DOWN 2 - #define SQ_MOUSE_UP 3 - #define SQ_MOUSE_MOVE 4 - #define KEYBUF_SIZE 64 int keyBuf[KEYBUF_SIZE]; /* circular buffer */ --- 37,47 ---- /*** Variables -- Event Recording ***/ ! int inputSemaphoreIndex = 0; #define EVENTQ_SIZE 1024 ! sqInputEvent eventBuf[EVENTQ_SIZE ]; /* circular buffer */ int eventBufGet = 0; int eventBufPut = 0; + /* older polling stuff still needs supporting */ #define KEYBUF_SIZE 64 int keyBuf[KEYBUF_SIZE]; /* circular buffer */ *************** *** 251,254 **** --- 230,234 ---- extern void receivedDataRequest(wimp_message * wmessage); extern void receivedDataSave(wimp_message * wblock); + extern void receivedDataSaveAck(wimp_message * wblock); void eventBufAppendKey( int key, int buttons, int x, int y); void eventBufAppendMouseDown(int buttons, int x, int y); *************** *** 280,284 **** pollDelay = microSecondsToDelay /* * CLOCKS_PER_SEC / 1000000 */ ! >> 14 /* will always give small answer, but good enough */; if ( mouseButtonDown | windowActive) { /* if the window is active or mouse buttons are supposedly down, */ --- 260,264 ---- pollDelay = microSecondsToDelay /* * CLOCKS_PER_SEC / 1000000 */ ! >> 14 /* will always give small answer, but good enough */; if ( mouseButtonDown | windowActive) { /* if the window is active or mouse buttons are supposedly down, */ *************** *** 347,355 **** case wimp_SCROLL_REQUEST : DoNothing(); break; - // dont use gain/lose when using clipboard protocols - //case wimp_LOSE_CARET : - // DeactivateWindow(&wimpPollBlock); break; - //case wimp_GAIN_CARET : - // ActivateWindow(&wimpPollBlock); break; case wimp_USER_MESSAGE : UserMessage(&wimpPollBlock.message); break; --- 327,330 ---- *************** *** 689,703 **** void KeyPressed( wimp_key * wblock) { ! /* deal with a keypress. This is complicated by the RiscOS habit of "helpfully" cinverting keycodes into fully processed key events. We do not even get notification of most alt presses, for example. We also have to convert to Mac numbering in order to satisfy the image code */ int keystate, testkey; ! // basically keystate will be the event idea of the key pressed keystate = wblock->c; if (keystate == getInterruptKeycode() || ( (keystate == wimp_KEY_PRINT)) ) { ! // The image tends to set the interruptKeycode to suit the Mac cmd-. nonsense ! // this is decidedly not Acorn compatible, so check for printscrn/SysRq as well ! // interrupt is a meta-event; do not report it as a keypress setInterruptPending(true); setInterruptCheckCounter(0); --- 664,684 ---- void KeyPressed( wimp_key * wblock) { ! /* deal with a keypress. This is complicated by the RiscOS habit of "helpfully" ! * converting keycodes into fully processed key events. We do not even get ! * notification of most alt presses, for example. We also have to convert to ! * Mac numbering in order to satisfy the image code ! */ int keystate, testkey; ! /* basically keystate will be the event idea of the key pressed */ keystate = wblock->c; if (keystate == getInterruptKeycode() || ( (keystate == wimp_KEY_PRINT)) ) { ! /* The image tends to set the interruptKeycode to suit the Mac ! * cmd-. nonsense this is decidedly not Acorn compatible, so ! * check for printscrn/SysRq as well ! * interrupt is a meta-event; do not report it as a keypress ! */ setInterruptPending(true); setInterruptCheckCounter(0); *************** *** 706,716 **** if ( buttonState & 0x70) { ! // if a metakey is pressed, try looking up the magic number and dealing with a metakey situation xosbyte1(osbyte_SCAN_KEYBOARD_LIMITED , 0, 0, &testkey); ! // if a key is scanned ok and it maps, replace the keystate with the result if ( (testkey != 0xFF) && (testkey = keymap[testkey]) ) keystate = testkey; } else { ! // no metakey, so check for special key values. switch(keystate) { case wimp_KEY_TAB: keystate = 0x09; break; --- 687,701 ---- if ( buttonState & 0x70) { ! /* if a metakey is pressed, try looking up the magic number ! * and dealing with a metakey situation ! */ xosbyte1(osbyte_SCAN_KEYBOARD_LIMITED , 0, 0, &testkey); ! /* if a key is scanned ok and it maps, replace the keystate ! * with the result ! */ if ( (testkey != 0xFF) && (testkey = keymap[testkey]) ) keystate = testkey; } else { ! /* no metakey, so check for special key values. */ switch(keystate) { case wimp_KEY_TAB: keystate = 0x09; break; *************** *** 729,781 **** } ! void keyBufAppend(int keystate) { ! keyBuf[keyBufPut] = keystate; ! keyBufPut = (keyBufPut + 1) % KEYBUF_SIZE; ! if (keyBufGet == keyBufPut) { ! keyBufGet = (keyBufGet + 1) % KEYBUF_SIZE; ! keyBufOverflows++; ! } } ! void eventBufAppendEvent(int type, int mouseX, int mouseY, int buttons, int key) { ! /* append an event to the queue. DO NOT signal the input semaphore here since the ! * HandleEvents() routine is called from place where that causes segfaults!! ! * Leave the signalling to the ioEventsCount() routine. ! */ ! int peek; ! /* first check there is room on the queue */ ! peek = (eventBufPut + 1) % EVENTQ_SIZE; ! if ( peek == eventBufGet) {/* no room, drop the whole thing */ ! return; ! } ! /* now add the event to the queue - */ ! ! /* if the previous event is still on the q and was a mouse move, just overwrite it */ ! if ( (type == SQ_MOUSE_MOVE) && (eventBufPut != eventBufGet)) { ! int prevEvent; ! prevEvent = eventBufPut -1; ! if ( prevEvent == -1) ! prevEvent = EVENTQ_SIZE -1 ; /* wrap around */ ! if ( eventBuf[prevEvent].type == SQ_MOUSE_MOVE ) { ! /* overwrite previous event data */ ! eventBuf[eventBufPut].type = type; ! eventBuf[eventBufPut].mx = mouseX; ! eventBuf[eventBufPut].my = mouseY; ! eventBuf[eventBufPut].b = buttons; ! eventBuf[eventBufPut].k = key; ! return; ! } ! } ! eventBuf[eventBufPut].type = type; ! eventBuf[eventBufPut].mx = mouseX; ! eventBuf[eventBufPut].my = mouseY; ! eventBuf[eventBufPut].b = buttons; ! /* the key value NOT the 12bit keystate! */ ! eventBuf[eventBufPut].k = key; ! /* finally advance the eventBufPut pointer */ ! eventBufPut = peek; } --- 714,749 ---- } ! /* set an asynchronous input semaphore index for events */ ! int ioSetInputSemaphore(int semaIndex) { ! if( semaIndex < 1) ! return primitiveFail(); ! inputSemaphoreIndex = semaIndex; ! return true; } ! void signalInputEvent(void) { ! if(inputSemaphoreIndex > 0) ! signalSemaphoreWithIndex(inputSemaphoreIndex); ! } ! /* Event buffer functions */ ! #define iebEmptyP() (eventBufPut == eventBufGet) ! #define iebAdvance(P) (P= ((P + 1) % EVENTQ_SIZE)) + sqInputEvent *eventBufAppendEvent(int type) { + /* code stolen from ikp's unix code. blame him if it doesn't work. + * complement me if it does. + */ + sqInputEvent *evt= &eventBuf[eventBufPut]; + iebAdvance(eventBufPut); + if (iebEmptyP()) { + /* overrun: discard oldest event */ + iebAdvance(eventBufGet); + } + evt->type= type; + evt->timeStamp= ioMSecs(); + signalInputEvent(); + return evt; } *************** *** 784,834 **** /* add an event record for a keypress */ ! eventBufAppendEvent( SQ_KEYPRESS, x, y, buttons, keyValue); } void eventBufAppendMouseDown( int buttons, int x, int y) { /* add an event record for a mouse press */ ! eventBufAppendEvent( SQ_MOUSE_DOWN, x, y, buttons, 0); } void eventBufAppendMouseUp( int buttons, int x, int y) { /* add an event record for a mouse up */ ! eventBufAppendEvent( SQ_MOUSE_UP, x, y, buttons, 0); } void eventBufAppendMouseMove( int x, int y) { /* add an event record for a mouse up */ ! eventBufAppendEvent( SQ_MOUSE_MOVE, x, y, buttonState, 0); } - int ioLoadNextEvent( int arrayPtr) { - /* fill the array with - * event type - * mouse pos x - * mouse pos y - * button state - * keypress - */ - extern int nilObject (void); - if ( eventBufGet == eventBufPut ) { - /* no events left to fetch, so put nil in at least the type slot of the array*/ - ((int*)arrayPtr)[0] = nilObject(); - ((int*)arrayPtr)[1] = nilObject(); - ((int*)arrayPtr)[2] = nilObject(); - ((int*)arrayPtr)[3] = nilObject(); - ((int*)arrayPtr)[4] = nilObject(); - return false; - } - #define INT_OBJ(val) (((val) <<1) | 1) - ((int*)arrayPtr)[0] = INT_OBJ(eventBuf[eventBufGet].type); - ((int*)arrayPtr)[1] = INT_OBJ(eventBuf[eventBufGet].mx); - ((int*)arrayPtr)[2] = INT_OBJ(eventBuf[eventBufGet].my); - ((int*)arrayPtr)[3] = INT_OBJ(eventBuf[eventBufGet].b); - ((int*)arrayPtr)[4] = INT_OBJ(eventBuf[eventBufGet].k); ! eventBufGet = (eventBufGet+1) % EVENTQ_SIZE; ! return true; } int nextKeyPressOrNil(void) { --- 752,790 ---- /* add an event record for a keypress */ ! eventBufAppendEvent( EventTypeKeyboard); } void eventBufAppendMouseDown( int buttons, int x, int y) { /* add an event record for a mouse press */ ! eventBufAppendEvent( EventTypeMouse); } void eventBufAppendMouseUp( int buttons, int x, int y) { /* add an event record for a mouse up */ ! eventBufAppendEvent( EventTypeMouse); } void eventBufAppendMouseMove( int x, int y) { /* add an event record for a mouse up */ ! eventBufAppendEvent( EventTypeMouse); } ! ! /* retrieve the next input event from the OS */ ! int ioGetNextEvent(sqInputEvent *evt) { ! HandleEvents(0); ! primitiveFail(); } + /* key buffer functions to support older images */ + void keyBufAppend(int keystate) { + keyBuf[keyBufPut] = keystate; + keyBufPut = (keyBufPut + 1) % KEYBUF_SIZE; + if (keyBufGet == keyBufPut) { + keyBufGet = (keyBufGet + 1) % KEYBUF_SIZE; + keyBufOverflows++; + } + } int nextKeyPressOrNil(void) { *************** *** 854,860 **** return keystate; } void UserMessage(wimp_message * wblock) { ! /* Deal with user messages; only Quit and MODE_CHANGE for now */ switch( wblock->action) { case message_QUIT: ioExit(); --- 810,865 ---- return keystate; } + int ioGetButtonState(void) { + ioProcessEvents(); /* process all pending events */ + return buttonState; + } + + int ioGetKeystroke(void) { + ioProcessEvents(); /* process all pending events */ + return nextKeyPressOrNil(); + } + + int ioMousePoint(void) { + /* return the mouse point as 16bits of x | 16bits of y */ + ioProcessEvents(); /* process all pending events */ + return (savedMousePosition.x << 16 | savedMousePosition.y & 0xFFFF); + } + + int ioPeekKeystroke(void) { + ioProcessEvents(); /* process all pending events */ + return peekKeyPressOrNil(); + } + + /*** I/O Primitives ***/ + + int ioProcessEvents(void) { + static clock_t nextPollTick = 0; + clock_t currentTick; + + // if( (currentTick = clock()) >= nextPollTick) { + HandleEvents(0 ); + // nextPollTick = currentTick + 1; + // } + return true; + } + + int ioRelinquishProcessorForMicroseconds(int microSeconds) { + /* This operation is platform dependent. On the Mac, it simply calls + * HandleEvents(), which gives other applications a chance to run. + * Here, we use microSeconds as the parameter to HandleEvents, so that wimpPollIdle + * gets a timeout. + */ + + HandleEvents(microSeconds); + return microSeconds; + } void UserMessage(wimp_message * wblock) { ! /* Deal with user messages */ ! extern wimp_t Task_Handle; ! if( wblock->sender == Task_Handle) { ! /* it's me - do nothing */ ! return; ! } switch( wblock->action) { case message_QUIT: ioExit(); *************** *** 862,872 **** case message_MODE_CHANGE: displayModeChanged(); break; - // add message claimentity, messagedatarequest & messagedatasave handling case message_CLAIM_ENTITY: receivedClaimEntity(wblock); break; case message_DATA_REQUEST: receivedDataRequest(wblock); break; ! case message_DATA_SAVE: receivedDataSave(wblock); ! break; default: return; } --- 867,887 ---- case message_MODE_CHANGE: displayModeChanged(); break; case message_CLAIM_ENTITY: receivedClaimEntity(wblock); break; + /* these are the two messages we respond to in order + * to initiate clipboard transactions + * DATA_REQUEST is another app asking for our clipboard + * and DATA_SAVE_ACK is part of the dance for giving + * it to them. Us asking for some outside clipboard + * can be found in sqRPCCLipboard>fetchClipboard() + */ case message_DATA_REQUEST: receivedDataRequest(wblock); break; ! case message_DATA_SAVE_ACK: receivedDataSaveAck(wblock); ! break; ! /* We _might_ sometime respond to DATA_LOAD & DATA_SAVE ! * here in order to allo dropping of text files via the ! * DropPlugin ! */ default: return; } Index: sqRPCExternalPrims.c =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqRPCExternalPrims.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** sqRPCExternalPrims.c 4 Feb 2003 21:10:21 -0000 1.4 --- sqRPCExternalPrims.c 9 May 2003 01:07:16 -0000 1.5 *************** *** 2,10 **** /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS 3.7 for StrongARM RPCs, other machines */ ! /* not yet tested. */ /* sqRPCExternalPrims.c */ /* hook up to RiscOS external code modules using 'rink' */ /**************************************************************************/ #include "oslib/os.h" #include "sq.h" --- 2,15 ---- /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS >3.7 for StrongARM RPCs and Iyonix, */ ! /* other machines not yet tested. */ /* sqRPCExternalPrims.c */ /* hook up to RiscOS external code modules using 'rink' */ /**************************************************************************/ + + /* To recompile this reliably you will need */ + /* OSLib - http://ro-oslib.sourceforge.net/ */ + /* Castle/AcornC/C++, the Acorn TCPIPLib */ + /* and a little luck */ #include "oslib/os.h" #include "sq.h" *************** *** 30,34 **** int ioFindExternalFunctionIn(char *symbol, int moduleHandle) { ! // find the function named symbol in the known loaded module moduleHandle int fnIndex= 0, address; const char * foundName; --- 35,39 ---- int ioFindExternalFunctionIn(char *symbol, int moduleHandle) { ! /* find the function named symbol in the known loaded module moduleHandle */ int fnIndex= 0, address; const char * foundName; *************** *** 43,47 **** } ! // failed to find the function... FPRINTF((privateErr.errmess, " did not find: %s", symbol)); return 0; --- 48,52 ---- } ! /* failed to find the function... */ FPRINTF((privateErr.errmess, " did not find: %s", symbol)); return 0; *************** *** 49,54 **** int ioLoadModule(char *modName) { ! // a routine to load a segment(module). Takes a pointer to the name ! // of the directory the code and links files are stored in extern char vmPath[]; const rink_version *Version; --- 54,60 ---- int ioLoadModule(char *modName) { ! /* a routine to load a segment(module). Takes a pointer to the name ! * of the directory the code and links files are stored in ! */ extern char vmPath[]; const rink_version *Version; *************** *** 59,67 **** ! // make filename of the code sprintf(codeName, "%splugins.%s", vmPath, modName); FPRINTF((privateErr.errmess, "Load: %s",modName)); ! // load the segment... if((e = rink_load(&CheckBlock, codeName, &moduleHandle)) != NULL) { FPRINTF((privateErr.errmess, "Plugin load failed: %s", codeName)); --- 65,73 ---- ! /* make filename of the code */ sprintf(codeName, "%splugins.%s", vmPath, modName); FPRINTF((privateErr.errmess, "Load: %s",modName)); ! /* load the segment... */ if((e = rink_load(&CheckBlock, codeName, &moduleHandle)) != NULL) { FPRINTF((privateErr.errmess, "Plugin load failed: %s", codeName)); *************** *** 69,77 **** } ! // OK, let's have a look at the version of the segment we've just loaded. ! // It might be nice to check them to see that it's acceptable. ! // It is a bad plan to alter the returned structure. Version = rink_readversion(moduleHandle); ! // report the version //FPRINTF( (privateErr.errmess, "Plugin version: %d:%d", Version->main, Version->code)); --- 75,84 ---- } ! /* OK, let's have a look at the version of the segment we've just ! * loaded. It might be nice to check them to see that it's acceptable. ! * It is a bad plan to alter the returned structure. ! */ Version = rink_readversion(moduleHandle); ! /* report the version */ //FPRINTF( (privateErr.errmess, "Plugin version: %d:%d", Version->main, Version->code)); Index: sqRPCFormPrint.c =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqRPCFormPrint.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** sqRPCFormPrint.c 24 Oct 2001 23:14:03 -0000 1.1.1.1 --- sqRPCFormPrint.c 9 May 2003 01:07:16 -0000 1.2 *************** *** 2,11 **** /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS 3.7 for StrongARM RPCs, other machines */ ! /* not yet tested. */ /* sqRPCFormPrint.c */ /* Print a Form - except we can't do thatright now. Another day maybe */ /**************************************************************************/ #include "sq.h" --- 2,16 ---- /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS >3.7 for StrongARM RPCs and Iyonix, */ ! /* other machines not yet tested. */ /* sqRPCFormPrint.c */ /* Print a Form - except we can't do thatright now. Another day maybe */ /****************************************... [truncated message content] |
|
From: Tim R. <row...@us...> - 2003-05-09 01:07:19
|
Update of /cvsroot/squeak/squeak/platforms/RiscOS/plugins/SoundPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv6982/RiscOS/plugins/SoundPlugin Modified Files: sqRPCSound.c Log Message: Modified Files: RiscOS/plugins/FileCopyPlugin/sqRPCFileCopy.c comment change RiscOS/plugins/FilePlugin/sqRPCDirectory.c timezone/stamp calculation fixes RiscOS/plugins/SocketPlugin/sqRPCNetPlugin.c comment change RiscOS/plugins/SoundPlugin/sqRPCSound.c RiscOS/vm/fperrors.s remove dead code, 32bit fix RiscOS/vm/osExports.c RiscOS/vm/sqArgument.c new window label argument RiscOS/vm/sqPlatformSpecific.h RiscOS/vm/sqRPCClipboard.c clipboard works! RiscOS/vm/sqRPCEvents.c RiscOS/vm/sqRPCExternalPrims.c comment change RiscOS/vm/sqRPCFormPrint.c RiscOS/vm/sqRPCSyscall.c comment change RiscOS/vm/sqRPCWindows.c RiscOS/vm/dsc/block,fff add timezone related call Added Files: RiscOS/vm/sqRPCVersion.c use as a kind of vm compiletime timestamp Index: sqRPCSound.c =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/plugins/SoundPlugin/sqRPCSound.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** sqRPCSound.c 14 Jan 2003 01:03:33 -0000 1.1 --- sqRPCSound.c 9 May 2003 01:07:16 -0000 1.2 *************** *** 2,10 **** /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS 3.7 for StrongARM RPCs, other machines */ ! /* not yet tested. */ /* sqRPCSound.c */ ! /* sound output */ /**************************************************************************/ #include "sq.h" --- 2,15 ---- /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */ /* ti...@su... & http://sumeru.stanford.edu/tim */ ! /* Known to work on RiscOS >3.7 for StrongARM RPCs and Iyonix, */ ! /* other machines not yet tested. */ /* sqRPCSound.c */ ! /* hook up to RiscOS sound stuff - eventually */ /**************************************************************************/ + + /* To recompile this reliably you will need */ + /* OSLib - http://ro-oslib.sourceforge.net/ */ + /* Castle/AcornC/C++, the Acorn TCPIPLib */ + /* and a little luck */ #include "sq.h" |