Revision: 10639 http://pure-data.svn.sourceforge.net/pure-data/?rev=10639&view=rev Author: mukau Date: 2009-01-25 22:23:14 +0000 (Sun, 25 Jan 2009)
Log Message: ----------- + merged pstring+wchar changes from r10606:10638 into pdstring
Modified Paths: -------------- trunk/externals/moocow/pdstring/configure trunk/externals/moocow/pdstring/configure.ac trunk/externals/moocow/pdstring/src/Makefile.am trunk/externals/moocow/pdstring/src/Makefile.in trunk/externals/moocow/pdstring/src/config.h.in trunk/externals/moocow/pdstring/src/pdstring-help.pd trunk/externals/moocow/pdstring/src/pdstring.c trunk/externals/moocow/pdstring/src/unsigned.pd
Added Paths: ----------- trunk/externals/moocow/pdstring/src/any2bytes-help.pd trunk/externals/moocow/pdstring/src/any2bytes.c trunk/externals/moocow/pdstring/src/any2wchars-help.pd trunk/externals/moocow/pdstring/src/any2wchars.pd trunk/externals/moocow/pdstring/src/bytes2any-help.pd trunk/externals/moocow/pdstring/src/bytes2any.c trunk/externals/moocow/pdstring/src/bytes2wchars-help.pd trunk/externals/moocow/pdstring/src/bytes2wchars-test.pd trunk/externals/moocow/pdstring/src/bytes2wchars.c trunk/externals/moocow/pdstring/src/pdstringUtils.c trunk/externals/moocow/pdstring/src/pdstringUtils.h trunk/externals/moocow/pdstring/src/wchars2any-help.pd trunk/externals/moocow/pdstring/src/wchars2any.pd trunk/externals/moocow/pdstring/src/wchars2bytes-help.pd trunk/externals/moocow/pdstring/src/wchars2bytes-test.pd trunk/externals/moocow/pdstring/src/wchars2bytes.c
Removed Paths: ------------- trunk/externals/moocow/pdstring/src/any2string-help.pd trunk/externals/moocow/pdstring/src/any2string.c trunk/externals/moocow/pdstring/src/any2string_static.c trunk/externals/moocow/pdstring/src/string2any-help.pd trunk/externals/moocow/pdstring/src/string2any.c
Modified: trunk/externals/moocow/pdstring/configure =================================================================== --- trunk/externals/moocow/pdstring/configure 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/configure 2009-01-25 22:23:14 UTC (rev 10639) @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for pdstring 0.07. +# Generated by GNU Autoconf 2.61 for pdstring 0.08. # # Report bugs to moocow@ling.uni-potsdam.de. # @@ -574,8 +574,8 @@ # Identity of this package. PACKAGE_NAME='pdstring' PACKAGE_TARNAME='pdstring' -PACKAGE_VERSION='0.07' -PACKAGE_STRING='pdstring 0.07' +PACKAGE_VERSION='0.08' +PACKAGE_STRING='pdstring 0.08' PACKAGE_BUGREPORT='moocow@ling.uni-potsdam.de'
ac_default_prefix=/usr/local @@ -1181,7 +1181,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -`configure' configures pdstring 0.07 to adapt to many kinds of systems. +`configure' configures pdstring 0.08 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1247,7 +1247,7 @@
if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of pdstring 0.07:";; + short | recursive ) echo "Configuration of pdstring 0.08:";; esac cat <<_ACEOF
@@ -1341,7 +1341,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<_ACEOF -pdstring configure 0.07 +pdstring configure 0.08 generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1355,7 +1355,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake.
-It was created by pdstring $as_me 0.07, which was +It was created by pdstring $as_me 0.08, which was generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@ @@ -2030,7 +2030,7 @@
# Define the identity of the package. PACKAGE=pdstring - VERSION=0.07 + VERSION=0.08
cat >>confdefs.h <<_ACEOF @@ -3543,7 +3543,7 @@
##------- PD externals: hack EXEEXT? PD_LIB_EXTERNALS="pdstring" -PD_OBJ_EXTERNALS="any2string string2any" +PD_OBJ_EXTERNALS="any2bytes bytes2any bytes2wchars wchars2bytes"
# Check whether --enable-object-externals was given. if test "${enable_object_externals+set}" = set; then @@ -3687,12 +3687,12 @@ DEBUG="yes"
cat >>confdefs.h <<_ACEOF -#define ANY2STRING_DEBUG 1 +#define ANY2BYTES_DEBUG 1 _ACEOF
cat >>confdefs.h <<_ACEOF -#define STRING2ANY_DEBUG 1 +#define BYTES2ANY_DEBUG 1 _ACEOF
else @@ -4198,7 +4198,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by pdstring $as_me 0.07, which was +This file was extended by pdstring $as_me 0.08, which was generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES @@ -4251,7 +4251,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\ -pdstring config.status 0.07 +pdstring config.status 0.08 configured by $0, generated by GNU Autoconf 2.61, with options \"`echo "$ac_configure_args" | sed 's/^ //; s/[\""`$]/\\&/g'`\"
Modified: trunk/externals/moocow/pdstring/configure.ac =================================================================== --- trunk/externals/moocow/pdstring/configure.ac 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/configure.ac 2009-01-25 22:23:14 UTC (rev 10639) @@ -4,7 +4,7 @@
dnl Some handy macros define([THE_PACKAGE_NAME], [pdstring]) -define([THE_PACKAGE_VERSION], [0.07]) +define([THE_PACKAGE_VERSION], [0.08]) define([THE_PACKAGE_AUTHOR], [moocow@ling.uni-potsdam.de])
AC_INIT(THE_PACKAGE_NAME, THE_PACKAGE_VERSION, THE_PACKAGE_AUTHOR) @@ -88,7 +88,7 @@
##------- PD externals: hack EXEEXT? PD_LIB_EXTERNALS="pdstring" -PD_OBJ_EXTERNALS="any2string string2any" +PD_OBJ_EXTERNALS="any2bytes bytes2any bytes2wchars wchars2bytes"
AC_ARG_ENABLE(object-externals, AC_HELP_STRING([--enable-object-externals], [Whether to build single-object externals (default=no)]), @@ -162,10 +162,10 @@ if test "$enable_debug" = "yes" ; then AC_MSG_RESULT(yes) DEBUG="yes" - AC_DEFINE(ANY2STRING_DEBUG,1, - [Define this to include debugging code for the 'string2any' external.]) - AC_DEFINE(STRING2ANY_DEBUG,1, - [Define this to include debugging code for the 'any2string' external.]) + AC_DEFINE(ANY2BYTES_DEBUG,1, + [Define this to include debugging code for the 'bytes2any' external.]) + AC_DEFINE(BYTES2ANY_DEBUG,1, + [Define this to include debugging code for the 'any2bytes' external.]) else AC_MSG_RESULT(no) DEBUG="no"
Modified: trunk/externals/moocow/pdstring/src/Makefile.am =================================================================== --- trunk/externals/moocow/pdstring/src/Makefile.am 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/Makefile.am 2009-01-25 22:23:14 UTC (rev 10639) @@ -32,29 +32,43 @@ ## --- possible externals EXTRA_PROGRAMS = \ pdstring \ - any2string \ - string2any + any2bytes \ + bytes2any \ + bytes2wchars \ + wchars2bytes
## --- patches -pdexterns_DATA = +pdexterns_DATA = \ + any2wchars.pd \ + wchars2any.pd
## --- documentation pddoc_DATA = \ pdstring-help.pd \ - any2string-help.pd \ - string2any-help.pd + any2bytes-help.pd \ + bytes2any-help.pd \ + bytes2wchars-help.pd \ + wchars2bytes-help.pd \ + any2wchars-help.pd \ + wchars2any-help.pd
#----------------------------------------------------------------------- # sources #-----------------------------------------------------------------------
-pdstring_SOURCES = pdstring.c mooPdUtils.h +any2bytes_SOURCES = any2bytes.c mooPdUtils.h pdstringUtils.h
-any2string_SOURCES = any2string.c mooPdUtils.h +bytes2any_SOURCES = bytes2any.c mooPdUtils.h pdstringUtils.h
-string2any_SOURCES = string2any.c mooPdUtils.h +bytes2wchars_SOURCES = bytes2wchars.c mooPdUtils.h pdstringUtils.h
+wchars2bytes_SOURCES = wchars2bytes.c mooPdUtils.h pdstringUtils.h + +pdstring_SOURCES = pdstring.c mooPdUtils.h pdstringUtils.h + +pdstring.$(OBJECT): $(any2bytes_SOURCES) $(bytes2any_SOURCES) $(bytes2wchars_SOURCES) $(wchars2bytes_SOURCES) + #----------------------------------------------------------------------- # external compilation : flags #----------------------------------------------------------------------- @@ -74,10 +88,14 @@
pdstring_LDFLAGS = $(LFLAGS)
-string2any_LDFLAGS = $(LFLAGS) +bytes2any_LDFLAGS = $(LFLAGS)
-any2string_LDFLAGS = $(LFLAGS) +any2bytes_LDFLAGS = $(LFLAGS)
+bytes2wchars_LDFLAGS = $(LFLAGS) + +wchars2bytes_LDFLAGS = $(LFLAGS) + #----------------------------------------------------------------------- # Variables: cleanup #-----------------------------------------------------------------------
Modified: trunk/externals/moocow/pdstring/src/Makefile.in =================================================================== --- trunk/externals/moocow/pdstring/src/Makefile.in 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/Makefile.in 2009-01-25 22:23:14 UTC (rev 10639) @@ -50,8 +50,8 @@ PRE_UNINSTALL = : POST_UNINSTALL = : pdexterns_PROGRAMS = @PD_OBJECT_EXTERNALS@ -EXTRA_PROGRAMS = pdstring$(EXEEXT) any2string$(EXEEXT) \ - string2any$(EXEEXT) +EXTRA_PROGRAMS = pdstring$(EXEEXT) any2bytes$(EXEEXT) \ + bytes2any$(EXEEXT) bytes2wchars$(EXEEXT) wchars2bytes$(EXEEXT) subdir = src SUBDIRS = DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ @@ -67,15 +67,21 @@ "$(DESTDIR)$(pdexternsdir)" pdexternsPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(pdexterns_PROGRAMS) -am_any2string_OBJECTS = any2string.$(OBJEXT) -any2string_OBJECTS = $(am_any2string_OBJECTS) -any2string_LDADD = $(LDADD) +am_any2bytes_OBJECTS = any2bytes.$(OBJEXT) +any2bytes_OBJECTS = $(am_any2bytes_OBJECTS) +any2bytes_LDADD = $(LDADD) +am_bytes2any_OBJECTS = bytes2any.$(OBJEXT) +bytes2any_OBJECTS = $(am_bytes2any_OBJECTS) +bytes2any_LDADD = $(LDADD) +am_bytes2wchars_OBJECTS = bytes2wchars.$(OBJEXT) +bytes2wchars_OBJECTS = $(am_bytes2wchars_OBJECTS) +bytes2wchars_LDADD = $(LDADD) am_pdstring_OBJECTS = pdstring.$(OBJEXT) pdstring_OBJECTS = $(am_pdstring_OBJECTS) pdstring_LDADD = $(LDADD) -am_string2any_OBJECTS = string2any.$(OBJEXT) -string2any_OBJECTS = $(am_string2any_OBJECTS) -string2any_LDADD = $(LDADD) +am_wchars2bytes_OBJECTS = wchars2bytes.$(OBJEXT) +wchars2bytes_OBJECTS = $(am_wchars2bytes_OBJECTS) +wchars2bytes_LDADD = $(LDADD) DEFAULT_INCLUDES = -I. -I$(srcdir) -I. depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles @@ -83,10 +89,12 @@ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(any2string_SOURCES) $(pdstring_SOURCES) \ - $(string2any_SOURCES) -DIST_SOURCES = $(any2string_SOURCES) $(pdstring_SOURCES) \ - $(string2any_SOURCES) +SOURCES = $(any2bytes_SOURCES) $(bytes2any_SOURCES) \ + $(bytes2wchars_SOURCES) $(pdstring_SOURCES) \ + $(wchars2bytes_SOURCES) +DIST_SOURCES = $(any2bytes_SOURCES) $(bytes2any_SOURCES) \ + $(bytes2wchars_SOURCES) $(pdstring_SOURCES) \ + $(wchars2bytes_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ @@ -204,27 +212,38 @@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ SUFFIXES = .@PDEXT@ -pdexterns_DATA = +pdexterns_DATA = \ + any2wchars.pd \ + wchars2any.pd + pddoc_DATA = \ pdstring-help.pd \ - any2string-help.pd \ - string2any-help.pd + any2bytes-help.pd \ + bytes2any-help.pd \ + bytes2wchars-help.pd \ + wchars2bytes-help.pd \ + any2wchars-help.pd \ + wchars2any-help.pd
#----------------------------------------------------------------------- # sources #----------------------------------------------------------------------- -pdstring_SOURCES = pdstring.c mooPdUtils.h -any2string_SOURCES = any2string.c mooPdUtils.h -string2any_SOURCES = string2any.c mooPdUtils.h +any2bytes_SOURCES = any2bytes.c mooPdUtils.h pdstringUtils.h +bytes2any_SOURCES = bytes2any.c mooPdUtils.h pdstringUtils.h +bytes2wchars_SOURCES = bytes2wchars.c mooPdUtils.h pdstringUtils.h +wchars2bytes_SOURCES = wchars2bytes.c mooPdUtils.h pdstringUtils.h +pdstring_SOURCES = pdstring.c mooPdUtils.h pdstringUtils.h
#GLIB_IFLAGS = @GLIB_IFLAGS@ #GLIB_LFLAGS = @GLIB_LFLAGS@ AM_CPPFLAGS = $(IFLAGS) $(GLIB_IFLAGS) $(DFLAGS) AM_CFLAGS = $(OFLAGS) $(WFLAGS) $(AFLAGS) pdstring_LDFLAGS = $(LFLAGS) -string2any_LDFLAGS = $(LFLAGS) -any2string_LDFLAGS = $(LFLAGS) +bytes2any_LDFLAGS = $(LFLAGS) +any2bytes_LDFLAGS = $(LFLAGS) +bytes2wchars_LDFLAGS = $(LFLAGS) +wchars2bytes_LDFLAGS = $(LFLAGS)
#----------------------------------------------------------------------- # Variables: cleanup @@ -332,15 +351,21 @@
clean-pdexternsPROGRAMS: -test -z "$(pdexterns_PROGRAMS)" || rm -f $(pdexterns_PROGRAMS) -any2string$(EXEEXT): $(any2string_OBJECTS) $(any2string_DEPENDENCIES) - @rm -f any2string$(EXEEXT) - $(LINK) $(any2string_LDFLAGS) $(any2string_OBJECTS) $(any2string_LDADD) $(LIBS) +any2bytes$(EXEEXT): $(any2bytes_OBJECTS) $(any2bytes_DEPENDENCIES) + @rm -f any2bytes$(EXEEXT) + $(LINK) $(any2bytes_LDFLAGS) $(any2bytes_OBJECTS) $(any2bytes_LDADD) $(LIBS) +bytes2any$(EXEEXT): $(bytes2any_OBJECTS) $(bytes2any_DEPENDENCIES) + @rm -f bytes2any$(EXEEXT) + $(LINK) $(bytes2any_LDFLAGS) $(bytes2any_OBJECTS) $(bytes2any_LDADD) $(LIBS) +bytes2wchars$(EXEEXT): $(bytes2wchars_OBJECTS) $(bytes2wchars_DEPENDENCIES) + @rm -f bytes2wchars$(EXEEXT) + $(LINK) $(bytes2wchars_LDFLAGS) $(bytes2wchars_OBJECTS) $(bytes2wchars_LDADD) $(LIBS) pdstring$(EXEEXT): $(pdstring_OBJECTS) $(pdstring_DEPENDENCIES) @rm -f pdstring$(EXEEXT) $(LINK) $(pdstring_LDFLAGS) $(pdstring_OBJECTS) $(pdstring_LDADD) $(LIBS) -string2any$(EXEEXT): $(string2any_OBJECTS) $(string2any_DEPENDENCIES) - @rm -f string2any$(EXEEXT) - $(LINK) $(string2any_LDFLAGS) $(string2any_OBJECTS) $(string2any_LDADD) $(LIBS) +wchars2bytes$(EXEEXT): $(wchars2bytes_OBJECTS) $(wchars2bytes_DEPENDENCIES) + @rm -f wchars2bytes$(EXEEXT) + $(LINK) $(wchars2bytes_LDFLAGS) $(wchars2bytes_OBJECTS) $(wchars2bytes_LDADD) $(LIBS)
mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -348,9 +373,11 @@ distclean-compile: -rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/any2string.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/any2bytes.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bytes2any.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bytes2wchars.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdstring.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string2any.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wchars2bytes.Po@am__quote@
.c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @@ -682,6 +709,8 @@ uninstall-pdexternsPROGRAMS
+pdstring.$(OBJECT): $(any2bytes_SOURCES) $(bytes2any_SOURCES) $(bytes2wchars_SOURCES) $(wchars2bytes_SOURCES) + maintainer-clean-local: rm -rf autom4te.cache
Copied: trunk/externals/moocow/pdstring/src/any2bytes-help.pd (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/any2bytes-help.pd) =================================================================== --- trunk/externals/moocow/pdstring/src/any2bytes-help.pd (rev 0) +++ trunk/externals/moocow/pdstring/src/any2bytes-help.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,40 @@ +#N canvas 90 20 636 478 10; +#X msg 109 197 0; +#X msg 77 197 -1; +#X text 19 47 INLETS:; +#X text 31 61 1 - pd messages; +#X text 247 49 OUTLETS:; +#X floatatom 44 147 8 0 0 0 - - -; +#X symbolatom 34 125 10 0 0 0 - - -; +#X text 189 125 ... no special handling for symbols; +#X text 188 103 anything can be converted to a list...; +#X text 190 147 ... but "float" selector is silently dropped; +#X msg 25 104 A B C; +#X text 182 312 First argument: initial buffer size (length of object-local +text buffer). This should get re-allocated when necessary. Specify +0 (zero) to use the default value.; +#X text 184 367 Second argument: initial EOS character. See above. +; +#X text 320 458 Bryan Jurish moocow@ling.uni-potsdam.de; +#X text 19 439 SEE ALSO:; +#X msg 139 197 42; +#X text 184 194 The second inlet sets the terminating EOS ("end-of-string") +character. This value gets implicitly appended to all output lists. +Specify a negative value here to avoid implicit EOS characters entirely. +For backwards compatibility , the default EOS character is 0 (zero). +; +#X text 31 75 2 - EOS character (float); +#X obj 100 438 pdstring; +#X obj 25 314 any2bytes 128 -1; +#X obj 25 400 print any2bytes-help; +#X text 21 29 SYNTAX: any2bytes [INITIAL_BUFSIZE [EOS_CHAR]]; +#X text 263 63 1 - lists of byte-valued floats; +#X text 49 5 any2bytes : convert pd messages to a list of byte values +; +#X connect 0 0 19 1; +#X connect 1 0 19 1; +#X connect 5 0 19 0; +#X connect 6 0 19 0; +#X connect 10 0 19 0; +#X connect 15 0 19 1; +#X connect 19 0 20 0;
Copied: trunk/externals/moocow/pdstring/src/any2bytes.c (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/any2bytes.c) =================================================================== --- trunk/externals/moocow/pdstring/src/any2bytes.c (rev 0) +++ trunk/externals/moocow/pdstring/src/any2bytes.c 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,181 @@ +/* -*- Mode: C -*- */ +/*=============================================================================*\ + * File: any2bytes.c + * Author: Bryan Jurish moocow@ling.uni-potsdam.de + * Description: convert pd messages to strings (dynamic allocation) + * + * Copyright (c) 2004-2009 Bryan Jurish. + * + * For information on usage and redistribution, and for a DISCLAIMER OF ALL + * WARRANTIES, see the file "COPYING", in this distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *=============================================================================*/ + +#include <string.h> +#include <m_pd.h> + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "mooPdUtils.h" +#include "pdstringUtils.h" + +/* black magic */ +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif + +/*-------------------------------------------------------------------- + * DEBUG + *--------------------------------------------------------------------*/ +/*#define ANY2BYTES_DEBUG 1*/ + +#ifdef ANY2BYTES_DEBUG +# define A2SDEBUG(x) x +#else +# define A2SDEBUG(x) +#endif + +#define ANY2BYTES_DEFAULT_BUFLEN PDSTRING_DEFAULT_BUFLEN + + +/*===================================================================== + * Structures and Types: any2bytes + *=====================================================================*/ +static t_class *any2bytes_class; + +typedef struct _any2bytes +{ + t_object x_obj; + t_pdstring_bytes x_bytes; //-- byte buffer + t_pdstring_atoms x_atoms; //-- atom buffer (for output) + t_float x_eos; //-- EOS character to add (<0 for none) + t_binbuf *x_binbuf; + t_inlet *x_eos_in; + t_outlet *x_outlet; +} t_any2bytes; + + +/*===================================================================== + * Constants + *=====================================================================*/ +static char *any2bytes_banner = "any2bytes: pdstring version " PACKAGE_VERSION " by Bryan Jurish"; + +/*===================================================================== + * Methods + *=====================================================================*/ + +/*-------------------------------------------------------------------- + * anything + */ +static void any2bytes_anything(t_any2bytes *x, t_symbol *sel, int argc, t_atom *argv) +{ + //-- convert any -> bytes -> atoms + t_pdstring_atoms arg_atoms = {argv,argc,0}; + pdstring_bytes_clear(&x->x_bytes); + pdstring_any2bytes(x, &x->x_bytes, sel, &arg_atoms, x->x_binbuf); + pdstring_bytes2atoms(x, &x->x_atoms, &x->x_bytes, x->x_eos); + + //-- output + outlet_list(x->x_outlet, &s_list, x->x_atoms.a_len, x->x_atoms.a_buf); +} + +/*-------------------------------------------------------------------- + * new + */ +static void *any2bytes_new(MOO_UNUSED t_symbol *sel, int argc, t_atom *argv) +{ + t_any2bytes *x = (t_any2bytes *)pd_new(any2bytes_class); + int bufsize = ANY2BYTES_DEFAULT_BUFLEN; + + //-- defaults + x->x_eos = 0; + + //-- args: 0: bufsize + if (argc > 0) { + int initial_bufsize = atom_getintarg(0, argc, argv); + if (initial_bufsize > 0) { bufsize = initial_bufsize; } + } + //-- args: 1: eos + if (argc > 1) { + x->x_eos = atom_getfloatarg(1, argc, argv); + } + + //-- allocate + pdstring_bytes_init(&x->x_bytes, 0); //-- x_bytes gets clobbered by binbuf_gettext() + pdstring_atoms_init(&x->x_atoms, bufsize); + x->x_binbuf = binbuf_new(); + + //-- inlets + x->x_eos_in = floatinlet_new(&x->x_obj, &x->x_eos); + + //-- outlets + x->x_outlet = outlet_new(&x->x_obj, &s_list); + + //-- report + A2SDEBUG(post("any2bytes_new(): x=%p, eos=%d, binbuf=%p", x, x->x_eos, x->x_binbuf)); + + return (void *)x; +} + +/*-------------------------------------------------------------------- + * free + */ +static void any2bytes_free(t_any2bytes *x) +{ + pdstring_bytes_clear(&x->x_bytes); + pdstring_atoms_clear(&x->x_atoms); + binbuf_free(x->x_binbuf); + inlet_free(x->x_eos_in); + outlet_free(x->x_outlet); + return; +} + +/*-------------------------------------------------------------------- + * setup (guts) + */ +void any2bytes_setup_guts(void) +{ + //-- class + any2bytes_class = class_new(gensym("any2bytes"), + (t_newmethod)any2bytes_new, + (t_method)any2bytes_free, + sizeof(t_any2bytes), + CLASS_DEFAULT, + A_GIMME, //-- initial_bufsize, eos_char + 0); + + //-- alias + class_addcreator((t_newmethod)any2bytes_new, gensym("any2string"), A_GIMME, 0); + + //-- methods + class_addanything(any2bytes_class, (t_method)any2bytes_anything); + + //-- help symbol + //class_sethelpsymbol(any2bytes_class, gensym("any2bytes-help.pd")); //-- breaks pd-extended help lookup +} + + +/*-------------------------------------------------------------------- + * setup + */ +void any2bytes_setup(void) +{ + post(any2bytes_banner); + any2bytes_setup_guts(); +}
Deleted: trunk/externals/moocow/pdstring/src/any2string-help.pd =================================================================== --- trunk/externals/moocow/pdstring/src/any2string-help.pd 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/any2string-help.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -1,39 +0,0 @@ -#N canvas 90 20 636 478 10; -#X obj 25 400 print any2string-help; -#X obj 25 314 any2string 128 -1; -#X msg 109 197 0; -#X msg 77 197 -1; -#X text 19 47 INLETS:; -#X text 31 61 1 - pd messages; -#X text 247 49 OUTLETS:; -#X text 263 63 1 - lists of ASCII-valued floats; -#X floatatom 44 147 8 0 0 0 - - -; -#X symbolatom 34 125 10 0 0 0 - - -; -#X text 189 125 ... no special handling for symbols; -#X text 188 103 anything can be converted to a list...; -#X text 190 147 ... but "float" selector is silently dropped; -#X msg 25 104 A B C; -#X text 193 312 First argument: initial buffer size (length of object-local -text buffer). This should get re-allocated when necessary. Specify -0 (zero) to use the default value.; -#X text 195 367 Second argument: initial EOS character. See above. -; -#X text 320 458 Bryan Jurish moocow@ling.uni-potsdam.de; -#X text 19 439 SEE ALSO:; -#X msg 139 197 42; -#X text 21 29 SYNTAX: any2string [INITIAL_BUFSIZE [EOS_CHAR]]; -#X text 184 194 The second inlet sets the terminating EOS ("end-of-string") -character. This value gets implicitly appended to all output lists. -Specify a negative value here to avoid implicit EOS characters entirely. -For backwards compatibility , the default EOS character is 0 (zero). -; -#X text 51 5 any2string : convert pd messages to a list of floats; -#X text 31 75 2 - EOS character (float); -#X obj 100 438 pdstring; -#X connect 1 0 0 0; -#X connect 2 0 1 1; -#X connect 3 0 1 1; -#X connect 8 0 1 0; -#X connect 9 0 1 0; -#X connect 13 0 1 0; -#X connect 18 0 1 1;
Deleted: trunk/externals/moocow/pdstring/src/any2string.c =================================================================== --- trunk/externals/moocow/pdstring/src/any2string.c 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/any2string.c 2009-01-25 22:23:14 UTC (rev 10639) @@ -1,239 +0,0 @@ -/* -*- Mode: C -*- */ -/*=============================================================================*\ - * File: any2string.c - * Author: Bryan Jurish moocow@ling.uni-potsdam.de - * Description: convert pd messages to strings (dynamic allocation) - * - * Copyright (c) 2004 - 2009 Bryan Jurish. - * - * For information on usage and redistribution, and for a DISCLAIMER OF ALL - * WARRANTIES, see the file "COPYING", in this distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program 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. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *=============================================================================*/ - -#include <string.h> -#include <m_pd.h> -#include "mooPdUtils.h" - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -/* black magic */ -#ifdef NT -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - -/*-------------------------------------------------------------------- - * DEBUG - *--------------------------------------------------------------------*/ -/*#define ANY2STRING_DEBUG 1*/ - -#ifdef ANY2STRING_DEBUG -# define A2SDEBUG(x) x -#else -# define A2SDEBUG(x) -#endif - -#define ANY2STRING_DEFAULT_BUFLEN 256 - - -/*===================================================================== - * Structures and Types: any2string - *=====================================================================*/ -static t_class *any2string_class; - -typedef struct _any2string -{ - t_object x_obj; - int x_alloc; - int x_argc; - t_float x_eos; //-- EOS character to add (<0 for none) - char *x_text; - t_atom *x_argv; - t_binbuf *x_binbuf; - t_inlet *x_eos_in; - t_outlet *x_outlet; -} t_any2string; - - -/*===================================================================== - * Constants - *=====================================================================*/ -static char *any2string_banner = "any2string: pdstring version " PACKAGE_VERSION " by Bryan Jurish"; - -/*===================================================================== - * Methods - *=====================================================================*/ - -/*-------------------------------------------------------------------- - * anything - */ -static void any2string_anything(t_any2string *x, t_symbol *sel, int argc, t_atom *argv) -{ - t_atom *ap; - unsigned char *s, *s_max; - int len; - - A2SDEBUG(post("-------any2string_anything(%p,...)---------", x)); - - /*-- set up binbuf --*/ - A2SDEBUG(post("any2string[%p]: binbuf_clear()", x)); - binbuf_clear(x->x_binbuf); - - /*-- binbuf_add(): selector --*/ - if (sel != &s_float && sel != &s_list && sel != &s_) { - t_atom a; - A2SDEBUG(post("any2string[%p]: binbuf_add(): selector: '%s'", x, sel->s_name)); - SETSYMBOL((&a), sel); - binbuf_add(x->x_binbuf, 1, &a); - } - A2SDEBUG(else { post("any2string[%p]: selector: '%s': IGNORED", x, sel->s_name); }); - - /*-- binbuf_add(): arg list --*/ - A2SDEBUG(post("any2string[%p]: binbuf_add(): arg list", x)); - binbuf_add(x->x_binbuf, argc, argv); - A2SDEBUG(post("any2string[%p]: binbuf_print: ", x)); - A2SDEBUG(binbuf_print(x->x_binbuf)); - - A2SDEBUG(post("any2string[%p]: binbuf_gettext()", x)); - binbuf_gettext(x->x_binbuf, &(x->x_text), &len); - A2SDEBUG(post("any2string[%p]: binbuf_gettext() = "%s" ; len=%d", x, x->x_text, len)); - /*text[len] = 0;*/ /*-- ? avoid errors: "free(): invalid next size(fast): 0x..." */ - - /*-- get output atom-list length --*/ - x->x_argc = len; - if (x->x_eos >= 0) { x->x_argc++; } - A2SDEBUG(post("any2string[%p]: argc=%d", x, x->x_argc)); - - /*-- (re-)allocate (maybe) --*/ - if (x->x_alloc < x->x_argc) { - A2SDEBUG(post("any2string[%p]: reallocate(%d->%d)", x, x->x_alloc, x->x_argc)); - freebytes(x->x_argv, x->x_alloc*sizeof(t_atom)); - x->x_argv = (t_atom*)getbytes(x->x_argc * sizeof(t_atom)); - x->x_alloc = x->x_argc; - } - - /*-- atom buffer: binbuf text --*/ - A2SDEBUG(post("any2string[%p]: atom buffer: for {...}", x)); - ap = x->x_argv; - s_max = ((unsigned char *)x->x_text)+len; - for (s=((unsigned char *)x->x_text); s < s_max; s++, ap++) { - A2SDEBUG(post("any2string[%p]: atom buffer[%d]: SETFLOAT(a,%d='%c')", x, (ap-x->x_argv), *s, *s)); - SETFLOAT(ap,*s); - } - A2SDEBUG(post("any2string: atom buffer: DONE")); - - /*-- add EOS character (maybe) --*/ - if (x->x_eos >= 0) { SETFLOAT(ap, ((int)x->x_eos)); } - - A2SDEBUG(post("any2string: outlet_list(..., %d, ...)", x->x_argc)); - outlet_list(x->x_outlet, &s_list, x->x_argc, x->x_argv); -} - - -/*-------------------------------------------------------------------- - * new - */ -static void *any2string_new(MOO_UNUSED t_symbol *sel, int argc, t_atom *argv) -{ - t_any2string *x = (t_any2string *)pd_new(any2string_class); - - //-- defaults - x->x_eos = 0; - x->x_alloc = ANY2STRING_DEFAULT_BUFLEN; - - //-- args: 0: bufsize - if (argc > 0) { - int bufsize = atom_getintarg(0, argc, argv); - if (bufsize > 0) { x->x_alloc = bufsize; } - } - //-- args: 1: eos - if (argc > 1) { - x->x_eos = atom_getfloatarg(1, argc, argv); - } - - //-- allocate - x->x_text = getbytes(x->x_alloc*sizeof(char)); - x->x_argc = 0; - x->x_argv = (t_atom *)getbytes(x->x_alloc*sizeof(t_atom)); - x->x_binbuf = binbuf_new(); - - //-- inlets - x->x_eos_in = floatinlet_new(&x->x_obj, &x->x_eos); - - //-- outlets - x->x_outlet = outlet_new(&x->x_obj, &s_list); - - //-- report - A2SDEBUG(post("any2string_new(): x=%p, alloc=%d, eos=%d, text=%p, argv=%p, binbuf=%p", x, x->x_alloc, x->x_eos, x->x_text, x->x_argv, x->x_binbuf)); - - return (void *)x; -} - -/*-------------------------------------------------------------------- - * free - */ -static void any2string_free(t_any2string *x) -{ - if (x->x_text) { - freebytes(x->x_text, x->x_alloc*sizeof(char)); - x->x_text = NULL; - } - if (x->x_argv) { - freebytes(x->x_argv, x->x_alloc*sizeof(t_atom)); - x->x_argv = NULL; - } - binbuf_free(x->x_binbuf); - inlet_free(x->x_eos_in); - outlet_free(x->x_outlet); - return; -} - -/*-------------------------------------------------------------------- - * setup (guts) - */ -void any2string_setup_guts(void) -{ - //-- class - any2string_class = class_new(gensym("any2string"), - (t_newmethod)any2string_new, - (t_method)any2string_free, - sizeof(t_any2string), - CLASS_DEFAULT, - A_GIMME, //-- initial_bufsize, eos_char - 0); - - //-- alias - class_addcreator((t_newmethod)any2string_new, gensym("any2bytes"), A_GIMME, 0); - - //-- methods - class_addanything(any2string_class, (t_method)any2string_anything); - - //-- help symbol - //class_sethelpsymbol(any2string_class, gensym("any2string-help.pd")); //-- breaks pd-extended help lookup -} - - -/*-------------------------------------------------------------------- - * setup - */ -void any2string_setup(void) -{ - post(any2string_banner); - any2string_setup_guts(); -}
Deleted: trunk/externals/moocow/pdstring/src/any2string_static.c =================================================================== --- trunk/externals/moocow/pdstring/src/any2string_static.c 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/any2string_static.c 2009-01-25 22:23:14 UTC (rev 10639) @@ -1,246 +0,0 @@ -/* -*- Mode: C -*- */ -/*=============================================================================*\ - * File: any2string_static.c - * Author: Bryan Jurish moocow@ling.uni-potsdam.de - * Description: convert pd messages to strings (static buffer allocation) - * - * Copyright (c) 2004 - 2007 Bryan Jurish. - * - * For information on usage and redistribution, and for a DISCLAIMER OF ALL - * WARRANTIES, see the file "COPYING", in this distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program 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. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *=============================================================================*/ - -#include <string.h> -#include <stdio.h> - -#include <m_pd.h> - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -/* black magic */ -#ifdef NT -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - -/*-------------------------------------------------------------------- - * DEBUG - *--------------------------------------------------------------------*/ -/*#define ANY2STRING_DEBUG 1*/ -/*#undef ANY2STRING_DEBUG*/ - -#ifdef ANY2STRING_DEBUG -# define A2SDEBUG(x) x -#else -# define A2SDEBUG(x) -#endif - -#define ANY2STRING_DEFAULT_BUFLEN 512 - - -/*===================================================================== - * Structures and Types: any2string - *=====================================================================*/ -static t_class *any2string_class; - -typedef struct _any2string -{ - t_object x_obj; - int x_alloc; //-- buffer size (text, x_argv) - int x_argc; //-- current number of atoms to outlet - t_atom *x_argv; //-- float-list to outlet - t_outlet *x_outlet; //-- outlet -} t_any2string; - - -/*===================================================================== - * Utilities - *=====================================================================*/ - -/*-------------------------------------------------------------------- - * append_string - */ -static void any2string_append_string(t_any2string *x, char *s, unsigned int maxlen, int doescape) -{ - char *sp; - char *ep = s+maxlen; - - for (sp=s; *sp && sp<ep && *sp && x->x_argc<x->x_alloc; sp++, x->x_argc++) { - if (doescape && (*sp==';' || *sp==',' || *sp=='\' - || (*sp == '$' && sp<(ep-1) && sp[1] >= '0' && sp[1] <= '9'))) - { - A2SDEBUG(post("any2string_append_string: ESCAPE: x_argv[%d] = '%c' = %d", x->x_argc, '\', '\')); - x->x_argv[x->x_argc++].a_w.w_float = '\'; - if (x->x_argc >= x->x_alloc) break; - } - A2SDEBUG(post("any2string_append_string: x_argv[%d] = '%c' = %d", x->x_argc, *sp, *sp)); - x->x_argv[x->x_argc].a_w.w_float = *sp; - } -} - -/*-------------------------------------------------------------------- - * append_atom - */ -#define ANY2STRING_APPEND_BUFSIZE 30 -static void any2string_append_atom(t_any2string *x, t_atom *a) -{ - char buf[ANY2STRING_APPEND_BUFSIZE]; - A2SDEBUG(post("~~ any2string_append_atom(%p,...) ~~", x)); - - if (x->x_argc >= x->x_alloc) { return; } - - /*-- stringify a single atom (inspired by atom_string() from m_atom.c) --*/ - switch (a->a_type) { - case A_SEMI: any2string_append_string(x, ";", 1, 0); break; - case A_COMMA: any2string_append_string(x, ",", 1, 0); break; - case A_POINTER: any2string_append_string(x, "(pointer)", 9, 0); break; - case A_FLOAT: - snprintf(buf, ANY2STRING_APPEND_BUFSIZE, "%g", a->a_w.w_float); - any2string_append_string(x, buf, ANY2STRING_APPEND_BUFSIZE, 0); - break; - case A_SYMBOL: - any2string_append_string(x, a->a_w.w_symbol->s_name, strlen(a->a_w.w_symbol->s_name), 1); - break; - case A_DOLLAR: - snprintf(buf, ANY2STRING_APPEND_BUFSIZE, "$%d", a->a_w.w_index); - any2string_append_string(x, buf, ANY2STRING_APPEND_BUFSIZE, 0); - break; - case A_DOLLSYM: - any2string_append_string(x, a->a_w.w_symbol->s_name, strlen(a->a_w.w_symbol->s_name), 0); - break; - default: - pd_error(x,"any2string_append_atom: unknown atom type '%d'", a->a_type); - break; - } - - if (x->x_argc < x->x_alloc) { - A2SDEBUG(post("any2string_append_atom[%p]: x_argv[%d] = '%c' = %d", x, x->x_argc, ' ', ' ')); - x->x_argv[x->x_argc++].a_w.w_float = ' '; - } -} - -/*===================================================================== - * Methods - *=====================================================================*/ - -/*-------------------------------------------------------------------- - * anything - */ -static void any2string_anything(t_any2string *x, t_symbol *sel, int argc, t_atom *argv) -{ - t_atom *argv_end = argv+argc; - x->x_argc=0; - - A2SDEBUG(post("-------any2string_anything(%p,...) ---------", x)); - - /*-- stringify selector (maybe) --*/ - if (sel != &s_float && sel != &s_list && sel != &s_) { - t_atom a; - SETSYMBOL(&a,sel); - any2string_append_atom(x, &a); - } - - /*-- stringify arg list --*/ - for ( ; argv<argv_end && x->x_argc<x->x_alloc; argv++) { - any2string_append_atom(x, argv); - } - - /*-- add terminating NUL (if we can) --*/ - A2SDEBUG(post("any2string[%p]: terminating NUL: x_argv[%d]=0", x, x->x_argc-1)); - if (x->x_argc >= x->x_alloc) { - pd_error(x, "any2string: input length exceeds buffer size!"); - x->x_argc = x->x_alloc; - x->x_argv[x->x_argc-1].a_w.w_float = '*'; //-- simulate atom_string() behavior - } else if (x->x_argc > 0) { - x->x_argv[x->x_argc-1].a_w.w_float = 0; - } - - A2SDEBUG(post("any2string[%p]: outlet_list(..., %d, ...)", x, x->x_argc)); - outlet_list(x->x_outlet, &s_list, x->x_argc, x->x_argv); -} - - -/*-------------------------------------------------------------------- - * new - */ -static void *any2string_new(t_floatarg bufsize) -{ - t_any2string *x = (t_any2string *)pd_new(any2string_class); - int i; - - //-- bufsize - if (bufsize <= 0) { - x->x_alloc = ANY2STRING_DEFAULT_BUFLEN; - } else { - x->x_alloc = bufsize; - } - A2SDEBUG(post("any2string_new: buf_req=%g, alloc=%d", bufsize, x->x_alloc)); - - //-- defaults - x->x_argc = 0; - x->x_argv = (t_atom*)getbytes(x->x_alloc*sizeof(t_atom)); - - //-- initialize (set a_type) - for (i=0; i < x->x_alloc; i++) { - SETFLOAT((x->x_argv+i),0); - } - - //-- outlets - x->x_outlet = outlet_new(&x->x_obj, &s_list); - A2SDEBUG(post("any2string_new: x=%p, alloc=%d, argv=%p, nbytes=%d", x, x->x_alloc,x->x_argv,x->x_alloc*sizeof(t_atom))); - return (void *)x; -} - -/*-------------------------------------------------------------------- - * free - */ -static void any2string_free(t_any2string *x) -{ - A2SDEBUG(post("any2string_free(x=%p)", x)); - if (x->x_argv) { - A2SDEBUG(post("any2string_free(x=%p): x_argv=%p (size=%d)", x, x->x_argv, x->x_alloc*sizeof(t_atom))); - freebytes(x->x_argv, x->x_alloc*sizeof(t_atom)); - } - A2SDEBUG(post("any2string_free(x=%p): x_outlet=%p", x, x->x_outlet)); - outlet_free(x->x_outlet); - return; -} - -/*-------------------------------------------------------------------- - * setup - */ -void any2string_setup(void) -{ - //-- class - any2string_class = class_new(gensym("any2string"), - (t_newmethod)any2string_new, - (t_method)any2string_free, - sizeof(t_any2string), - CLASS_DEFAULT, - A_DEFFLOAT, - 0); - - //-- methods - class_addanything(any2string_class, - (t_method)any2string_anything); - - - //-- help symbol - class_sethelpsymbol(any2string_class, gensym("pdstring-help.pd")); -}
Copied: trunk/externals/moocow/pdstring/src/any2wchars-help.pd (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/any2wchars-help.pd) =================================================================== --- trunk/externals/moocow/pdstring/src/any2wchars-help.pd (rev 0) +++ trunk/externals/moocow/pdstring/src/any2wchars-help.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,37 @@ +#N canvas 72 8 636 478 10; +#X msg 109 197 0; +#X msg 77 197 -1; +#X text 19 47 INLETS:; +#X text 31 61 1 - pd messages; +#X text 247 49 OUTLETS:; +#X floatatom 44 147 8 0 0 0 - - -; +#X symbolatom 34 125 10 0 0 0 - - -; +#X text 189 125 ... no special handling for symbols; +#X text 188 103 anything can be converted to a list...; +#X text 190 147 ... but "float" selector is silently dropped; +#X msg 25 104 A B C; +#X text 182 312 First argument: initial buffer size (length of object-local +text buffer). This should get re-allocated when necessary. Specify +0 (zero) to use the default value.; +#X text 320 458 Bryan Jurish moocow@ling.uni-potsdam.de; +#X text 19 439 SEE ALSO:; +#X msg 139 197 42; +#X text 31 75 2 - EOS character (float); +#X obj 100 438 pdstring; +#X obj 25 314 any2wchars 128 -1; +#X obj 25 400 print any2wchars-help; +#X text 21 29 SYNTAX: any2wchars [INITIAL_BUFSIZE [EOS_CHAR]]; +#X text 49 5 any2wchars : convert pd messages to a list of wchar_t +values; +#X text 263 63 1 - lists of wchar_t-valued floats; +#X text 184 194 The second inlet is as for [any2bytes]; +#X text 184 367 Second argument: initial EOS character. See [any2bytes]. +; +#X obj 168 438 locale; +#X connect 0 0 17 1; +#X connect 1 0 17 1; +#X connect 5 0 17 0; +#X connect 6 0 17 0; +#X connect 10 0 17 0; +#X connect 14 0 17 1; +#X connect 17 0 18 0;
Copied: trunk/externals/moocow/pdstring/src/any2wchars.pd (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/any2wchars.pd) =================================================================== --- trunk/externals/moocow/pdstring/src/any2wchars.pd (rev 0) +++ trunk/externals/moocow/pdstring/src/any2wchars.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,10 @@ +#N canvas 398 18 328 196 10; +#X obj 54 20 inlet; +#X obj 154 20 inlet; +#X obj 54 62 any2bytes $1 $2; +#X obj 54 134 outlet; +#X obj 54 90 bytes2wchars $1; +#X connect 0 0 2 0; +#X connect 1 0 2 1; +#X connect 2 0 4 0; +#X connect 4 0 3 0;
Copied: trunk/externals/moocow/pdstring/src/bytes2any-help.pd (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/bytes2any-help.pd) =================================================================== --- trunk/externals/moocow/pdstring/src/bytes2any-help.pd (rev 0) +++ trunk/externals/moocow/pdstring/src/bytes2any-help.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,47 @@ +#N canvas 507 20 612 604 10; +#X text 13 52 INLETS:; +#X text 309 54 OUTLETS:; +#X text 325 68 1 - pd messages; +#X text 325 82 2 - bang on done; +#X msg 24 113 97 32 98 32 99; +#X msg 39 135 97 0 98 0 99; +#X msg 92 206 0; +#X msg 60 206 -1; +#X msg 124 206 32; +#X text 166 202 The second inlet sets the message-separating EOS ("end-of-string") +character. If this character is encountered in an input list , the +list is "split" at that point , and two separate messages are output +at the leftmost outlet. You can specify a negative value here to avoid +implicit input splitting entirely. For backwards compatibility , the +default EOS character is -1 , which results in truncation of input +messages whenever a 0 (zero) is encountered.; +#X text 163 350 First argument: initial buffer size (length of object-local +text buffer). This should get re-allocated when necessary. Specify +0 (zero) to use the default value.; +#X text 165 405 Second argument: initial EOS character. See above. +; +#X text 159 477 Right outlet gives a bang after the entire input list +has been processed.; +#X text 189 531 Parsed pd messages are sent to the left outlet.; +#X text 306 580 Bryan Jurish moocow@ling.uni-potsdam.de; +#X text 27 83 2 - EOS character (float); +#X text 161 121 lists of floats are converted to pd messages.; +#X text 168 161 ... selector is ignored ...; +#X text 21 571 SEE ALSO:; +#X obj 102 570 pdstring; +#X text 27 68 1 - byte-valued float lists; +#X text 59 7 bytes2any : convert lists of byte values to pd messages +; +#X text 13 30 SYNTAX: bytes2any [INITIAL_BUFSIZE [EOS_CHAR]]; +#X obj 124 454 print bytes2any-help-done; +#X obj 24 529 print bytes2any-help; +#X msg 54 161 StringThing 97; +#X obj 24 350 bytes2any 128 0; +#X connect 4 0 26 0; +#X connect 5 0 26 0; +#X connect 6 0 26 1; +#X connect 7 0 26 1; +#X connect 8 0 26 1; +#X connect 25 0 26 0; +#X connect 26 0 24 0; +#X connect 26 1 23 0;
Copied: trunk/externals/moocow/pdstring/src/bytes2any.c (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/bytes2any.c) =================================================================== --- trunk/externals/moocow/pdstring/src/bytes2any.c (rev 0) +++ trunk/externals/moocow/pdstring/src/bytes2any.c 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,226 @@ +/* -*- Mode: C -*- */ +/*=============================================================================*\ + * File: bytes2any.c + * Author: Bryan Jurish moocow@ling.uni-potsdam.de + * Description: convert strings to pd messages + * + * Copyright (c) 2004-2009 Bryan Jurish. + * + * For information on usage and redistribution, and for a DISCLAIMER OF ALL + * WARRANTIES, see the file "COPYING", in this distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *=============================================================================*/ + +#include <string.h> +#include <m_pd.h> + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "mooPdUtils.h" +#include "pdstringUtils.h" + +/* black magic */ +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif + +/*-------------------------------------------------------------------- + * DEBUG + *--------------------------------------------------------------------*/ +/*#define BYTES2ANY_DEBUG 1*/ +/*#undef BYTES2ANY_DEBUG*/ + +#ifdef BYTES2ANY_DEBUG +# define S2ADEBUG(x) x +#else +# define S2ADEBUG(x) +#endif + +#define BYTES2ANY_DEFAULT_BUFLEN PDSTRING_DEFAULT_BUFLEN + +/*===================================================================== + * Constants + *=====================================================================*/ +static char *bytes2any_banner = "bytes2any: pdstring version " PACKAGE_VERSION " by Bryan Jurish"; + +/*===================================================================== + * Structures and Types: any2string + *=====================================================================*/ + +static t_class *bytes2any_class; + +typedef struct _bytes2any +{ + t_object x_obj; + t_pdstring_bytes x_bytes; //-- byte buffer: {b_buf~x_text,b_len~?,b_alloc~x_size} + t_float x_eos; //-- eos byte value + t_binbuf *x_binbuf; + t_inlet *x_eos_in; + t_outlet *x_outlet; + t_outlet *x_outlet_done; +} t_bytes2any; + + +/*===================================================================== + * Utilities + *=====================================================================*/ + +/*-------------------------------------------------------------------- + * bytes2any_atoms() + */ +static void bytes2any_atoms(t_bytes2any *x, int argc, t_atom *argv) +{ + t_pdstring_atoms src = {argv,argc,argc}; + pdstring_atoms2bytes(x, &(x->x_bytes), &src, x->x_eos); + pdstring_bytes2any(x, NULL, &(x->x_bytes), x->x_binbuf); + int x_argc; + t_atom *x_argv; + + /*-- output --*/ + x_argc = binbuf_getnatom(x->x_binbuf); + x_argv = binbuf_getvec(x->x_binbuf); + if (x_argc && x_argv->a_type == A_SYMBOL) { + outlet_anything(x->x_outlet, + x_argv->a_w.w_symbol, + x_argc-1, + x_argv+1); + } + else { + outlet_anything(x->x_outlet, + &s_list, + x_argc, + x_argv); + } +} + + +/*===================================================================== + * Methods + *=====================================================================*/ + +/*-------------------------------------------------------------------- + * anything + */ +static void bytes2any_anything(t_bytes2any *x, MOO_UNUSED t_symbol *sel, int argc, t_atom *argv) +{ + int i0=0, i; + + /*-- scan & output --*/ + if (x->x_eos >= 0) { + for (i=i0; i < argc; i++) { + if (((int)atom_getfloatarg(i,argc,argv))==((int)x->x_eos)) { + bytes2any_atoms(x, i-i0, argv+i0); + i0=i+1; + } + } + } + + if (i0 < argc) { + bytes2any_atoms(x, argc-i0, argv+i0); + } + + outlet_bang(x->x_outlet_done); +} + + +/*-------------------------------------------------------------------- + * new + */ +static void *bytes2any_new(MOO_UNUSED t_symbol *sel, int argc, t_atom *argv) +{ + t_bytes2any *x = (t_bytes2any *)pd_new(bytes2any_class); + int bufsize = BYTES2ANY_DEFAULT_BUFLEN; + + //-- defaults + x->x_binbuf = binbuf_new(); + x->x_eos = -1; + + //-- args: 0: bufsize + if (argc > 0) { + int initial_bufsize = atom_getintarg(0,argc,argv); + if (initial_bufsize > 0) bufsize = initial_bufsize; + x->x_eos = -1; //-- backwards-compatibility hack: no default eos character if only bufsize is specified + } + //-- args: 1: separator + if (argc > 1) { + x->x_eos = atom_getfloatarg(1,argc,argv); + } + + //-- allocate x_bytes + pdstring_bytes_init(&x->x_bytes, bufsize); + + //-- inlets + x->x_eos_in = floatinlet_new(&x->x_obj, &x->x_eos); + + //-- outlets + x->x_outlet = outlet_new(&x->x_obj, &s_list); + x->x_outlet_done = outlet_new(&x->x_obj, &s_bang); + + //-- debug + S2ADEBUG(post("bytes2any_new: x=%p, size=%d, eos=%d, binbuf=%p, text=%p", x, x->x_size, x->x_eos, x->x_binbuf, x->x_text)); + + return (void *)x; +} + +/*-------------------------------------------------------------------- + * free + */ +static void bytes2any_free(t_bytes2any *x) +{ + pdstring_bytes_clear(&x->x_bytes); + binbuf_free(x->x_binbuf); + inlet_free(x->x_eos_in); + outlet_free(x->x_outlet_done); + outlet_free(x->x_outlet); + return; +} + +/*-------------------------------------------------------------------- + * setup: guts + */ +void bytes2any_setup_guts(void) +{ + //-- class + bytes2any_class = class_new(gensym("bytes2any"), + (t_newmethod)bytes2any_new, + (t_method)bytes2any_free, + sizeof(t_bytes2any), + CLASS_DEFAULT, + A_GIMME, //-- initial_bufsize, eos_char + 0); + + //-- alias + class_addcreator((t_newmethod)bytes2any_new, gensym("bytes2any"), A_GIMME, 0); + + //-- methods + class_addanything(bytes2any_class, (t_method)bytes2any_anything); + + + //-- help symbol + //class_sethelpsymbol(bytes2any_class, gensym("bytes2any-help.pd")); //-- breaks pd-extended help lookup +} + +/*-------------------------------------------------------------------- + * setup + */ +void bytes2any_setup(void) +{ + post(bytes2any_banner); + bytes2any_setup_guts(); +}
Copied: trunk/externals/moocow/pdstring/src/bytes2wchars-help.pd (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/bytes2wchars-help.pd) =================================================================== --- trunk/externals/moocow/pdstring/src/bytes2wchars-help.pd (rev 0) +++ trunk/externals/moocow/pdstring/src/bytes2wchars-help.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,46 @@ +#N canvas 610 14 566 410 10; +#X text 81 5 bytes2wchars : convert bytes to wide characters; +#X text 11 27 SYNTAX: bytes2wchars [INITIAL_BUFSIZE]; +#X text 11 46 INLETS:; +#X text 241 48 OUTLETS:; +#X text 19 62 1 - byte-valued float lists; +#X text 257 62 1 - wchar_t-valued float lists; +#X obj 24 310 bytes2wchars; +#X obj 24 334 print bytes2wchars-help; +#X msg 24 95 97 32 98 32 99; +#X msg 41 227 228 246 252; +#X msg 71 159 C; +#X text 69 129 8-bit values are interpreted according to the current +locale's LC_CTYPE category: here are some examples:; +#N canvas 0 0 338 182 locale_LC_CTYPE 0; +#X obj 48 124 locale; +#X obj 48 36 inlet; +#X obj 48 64 symbol; +#X msg 48 92 set LC_CTYPE $1; +#X text 57 143 + requires the "locale" external; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X restore 103 190 pd locale_LC_CTYPE; +#X msg 45 255 195 164 195 182 195 188; +#X text 219 253 ... the same string encoded in UTF-8; +#X text 205 387 Bryan Jurish moocow@ling.uni-potsdam.de; +#X text 11 371 SEE ALSO:; +#X obj 26 388 pdstring; +#X obj 93 388 locale; +#X text 11 355 BUGS: float representation is only safe up to 24-bit +values; +#X msg 103 159 en_DK.ISO-8859-1; +#X msg 225 159 en_DK.UTF-8; +#X text 145 97 Values <= 127 are unchanged; +#X msg 49 281 207 128 206 180; +#X text 217 225 ISO-8859-1 bytes "ä , ö , ü"; +#X text 219 283 "&pi &delta" in UTF-8; +#X connect 6 0 7 0; +#X connect 8 0 6 0; +#X connect 9 0 6 0; +#X connect 10 0 12 0; +#X connect 13 0 6 0; +#X connect 20 0 12 0; +#X connect 21 0 12 0; +#X connect 23 0 6 0;
Copied: trunk/externals/moocow/pdstring/src/bytes2wchars-test.pd (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/bytes2wchars-test.pd) =================================================================== --- trunk/externals/moocow/pdstring/src/bytes2wchars-test.pd (rev 0) +++ trunk/externals/moocow/pdstring/src/bytes2wchars-test.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,42 @@ +#N canvas 600 24 578 300 10; +#X obj 114 136 bytes2wchars; +#X obj 138 168 print wchars; +#X obj 285 238 locale; +#X msg 285 159 get; +#X msg 321 215 set LC_CTYPE $1; +#X obj 321 194 symbol; +#X msg 321 163 C; +#X msg 355 163 en_US.ISO-8859-1; +#X msg 477 163 en_US.UTF-8; +#X obj 284 262 print locale; +#X msg 41 41 246; +#X floatatom 116 204 5 0 0 0 - - -; +#X msg 41 61 195 182; +#X text 39 23 ö ;; +#X msg 159 61 197 147; +#X text 155 23 &oelig ;; +#X msg 159 39 339; +#X msg 245 37 960; +#X msg 245 59 207 128; +#X text 245 21 &pi ;; +#X obj 353 136 loadbang; +#X text 97 41 ucs-4; +#X text 99 59 utf-8; +#X msg 337 63 207 128 0 197 147 0 195 182 0; +#X connect 0 0 1 0; +#X connect 0 0 11 0; +#X connect 2 0 9 0; +#X connect 3 0 2 0; +#X connect 4 0 2 0; +#X connect 5 0 4 0; +#X connect 6 0 5 0; +#X connect 7 0 5 0; +#X connect 8 0 5 0; +#X connect 10 0 0 0; +#X connect 12 0 0 0; +#X connect 14 0 0 0; +#X connect 16 0 0 0; +#X connect 17 0 0 0; +#X connect 18 0 0 0; +#X connect 20 0 7 0; +#X connect 23 0 0 0;
Copied: trunk/externals/moocow/pdstring/src/bytes2wchars.c (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/bytes2wchars.c) =================================================================== --- trunk/externals/moocow/pdstring/src/bytes2wchars.c (rev 0) +++ trunk/externals/moocow/pdstring/src/bytes2wchars.c 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,171 @@ +/* -*- Mode: C -*- */ +/*=============================================================================*\ + * File: bytes2wchars.c + * Author: Bryan Jurish moocow@ling.uni-potsdam.de + * Description: convert byte-valued atom lists to wchar_t-valued atom lists + * + * Copyright (c) 2009 Bryan Jurish. + * + * For information on usage and redistribution, and for a DISCLAIMER OF ALL + * WARRANTIES, see the file "COPYING", in this distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *=============================================================================*/ + +#include <string.h> +#include <wchar.h> +#include <stdlib.h> +#include <m_pd.h> + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "mooPdUtils.h" +#include "pdstringUtils.h" + +/* black magic */ +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif + +/*-------------------------------------------------------------------- + * DEBUG + *--------------------------------------------------------------------*/ + +/*===================================================================== + * Constants + *=====================================================================*/ +static char *bytes2wchars_banner = "bytes2wchars: pdstring version " PACKAGE_VERSION " by Bryan Jurish"; + +#define BYTES2WCHARS_DEFAULT_BUFLEN PDSTRING_DEFAULT_BUFLEN + +/*===================================================================== + * Structures and Types: any2string + *=====================================================================*/ + +static t_class *bytes2wchars_class; + +typedef struct _bytes2wchars +{ + t_object x_obj; + t_pdstring_bytes x_bytes; //-- byte buffer + t_pdstring_wchars x_wchars; //-- wide character buffer + t_pdstring_atoms x_atoms; //-- atoms to output + t_outlet *x_outlet; +} t_bytes2wchars; + + +/*===================================================================== + * Utilities + *=====================================================================*/ + +/*-------------------------------------------------------------------- + * bytes2wchars_atoms() + */ +static void bytes2wchars_atoms(t_bytes2wchars *x, int argc, t_atom *argv) +{ + t_pdstring_atoms src = {argv,argc,0}; + + /*-- convert atoms -> bytes -> wchars -> atoms --*/ + pdstring_atoms2bytes (x, &x->x_bytes, &src, PDSTRING_EOS_NONE); + pdstring_bytes2wchars(x, &x->x_wchars, &x->x_bytes); + pdstring_wchars2atoms(x, &x->x_atoms, &x->x_wchars); +} + + +/*===================================================================== + * Methods + *=====================================================================*/ + +/*-------------------------------------------------------------------- + * anything + */ +static void bytes2wchars_anything(t_bytes2wchars *x, MOO_UNUSED t_symbol *sel, int argc, t_atom *argv) +{ + bytes2wchars_atoms(x, argc, argv); + + /*-- output --*/ + outlet_anything(x->x_outlet, &s_list, x->x_atoms.a_len, x->x_atoms.a_buf); +} + + +/*-------------------------------------------------------------------- + * new + */ +static void *bytes2wchars_new(MOO_UNUSED t_symbol *sel, int argc, t_atom *argv) +{ + t_bytes2wchars *x = (t_bytes2wchars *)pd_new(bytes2wchars_class); + int bufsize = PDSTRING_DEFAULT_BUFLEN; + + //-- args: 0: bufsize + if (argc > 0) { + int initial_bufsize = atom_getintarg(0,argc,argv); + if (initial_bufsize > 0) bufsize = initial_bufsize; + } + + //-- allocate + pdstring_bytes_init(&x->x_bytes, bufsize); + pdstring_wchars_init(&x->x_wchars, bufsize); + pdstring_atoms_init(&x->x_atoms, bufsize); + + //-- outlets + x->x_outlet = outlet_new(&x->x_obj, &s_list); + + return (void *)x; +} + +/*-------------------------------------------------------------------- + * free + */ +static void bytes2wchars_free(t_bytes2wchars *x) +{ + pdstring_bytes_clear(&x->x_bytes); + pdstring_wchars_clear(&x->x_wchars); + pdstring_atoms_clear(&x->x_atoms); + outlet_free(x->x_outlet); + return; +} + +/*-------------------------------------------------------------------- + * setup: guts + */ +void bytes2wchars_setup_guts(void) +{ + //-- class + bytes2wchars_class = class_new(gensym("bytes2wchars"), + (t_newmethod)bytes2wchars_new, + (t_method)bytes2wchars_free, + sizeof(t_bytes2wchars), + CLASS_DEFAULT, + A_GIMME, //-- initial_bufsize + 0); + + //-- methods + class_addanything(bytes2wchars_class, (t_method)bytes2wchars_anything); + + //-- help symbol + //class_sethelpsymbol(bytes2wchars_class, gensym("bytes2wchars-help.pd")); //-- breaks pd-extended help lookup +} + +/*-------------------------------------------------------------------- + * setup + */ +void bytes2wchars_setup(void) +{ + post(bytes2wchars_banner); + bytes2wchars_setup_guts(); +}
Modified: trunk/externals/moocow/pdstring/src/config.h.in =================================================================== --- trunk/externals/moocow/pdstring/src/config.h.in 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/config.h.in 2009-01-25 22:23:14 UTC (rev 10639) @@ -1,8 +1,11 @@ /* src/config.h.in. Generated from configure.ac by autoheader. */
-/* Define this to include debugging code for the 'string2any' external. */ -#undef ANY2STRING_DEBUG +/* Define this to include debugging code for the 'bytes2any' external. */ +#undef ANY2BYTES_DEBUG
+/* Define this to include debugging code for the 'any2bytes' external. */ +#undef BYTES2ANY_DEBUG + /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H
@@ -33,8 +36,5 @@ /* User who configured this external */ #undef PDSTRING_USER
-/* Define this to include debugging code for the 'any2string' external. */ -#undef STRING2ANY_DEBUG - /* Version number of package */ #undef VERSION
Modified: trunk/externals/moocow/pdstring/src/pdstring-help.pd =================================================================== --- trunk/externals/moocow/pdstring/src/pdstring-help.pd 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/pdstring-help.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -1,19 +1,31 @@ -#N canvas 191 76 563 311 10; -#X text 258 284 Bryan Jurish moocow@ling.uni-potsdam.de; +#N canvas 163 18 501 441 10; +#X text 196 400 Bryan Jurish moocow@ling.uni-potsdam.de; +#X text 54 3 [pdstring] library : byte and wide-character strings; +#X obj 51 76 bytes2any; +#X obj 51 52 any2bytes; +#X text 148 77 convert byte strings to pd messages; +#X text 148 53 convert pd messages to byte strings; +#X obj 45 142 bytes2wchars; +#X text 147 143 convert byte strings to wide character strings; +#X obj 45 168 wchars2bytes; +#X text 148 169 convert wide character strings to byte strings; +#X text 22 121 BYTES <-> WIDE CHARACTERS; +#X text 26 33 BYTES <-> PD MESSAGES; +#X text 20 211 WIDE CHARACTERS <-> PD MESSAGES; +#X text 145 233 convert pd messages to wide character strings; +#X text 146 259 convert wide character strings to pd messages; +#X text 18 369 SEE ALSO:; +#N canvas 0 0 584 308 pdstring-bytes 0; #X floatatom 56 81 8 0 0 0 - - -; #X symbolatom 46 59 10 0 0 0 - - -; #X text 201 59 ... no special handling for symbols; #X text 200 37 anything can be converted to a list...; -#X obj 37 108 any2string; -#X obj 37 230 string2any; #X floatatom 54 178 4 0 0 0 - - -; -#X text 213 230 string2any converts ASCII lists to Pd messages...; #X text 202 81 ... but "float" selector is silently dropped; #N canvas 0 0 448 335 ascii-table 0; #X obj 162 144 f 0; #X obj 134 153 + 1; #X obj 161 165 t f f f; -#X obj 133 198 string2any; #X obj 154 243 pack s 0; #X obj 162 119 until; #X obj 133 218 symbol; @@ -23,37 +35,69 @@ #X obj 162 54 t b b; #X obj 154 266 route list; #X obj 154 293 print charset; +#X obj 133 198 bytes2any; #X connect 0 0 2 0; #X connect 1 0 0 1; #X connect 2 0 1 0; -#X connect 2 1 3 0; -#X connect 2 2 4 1; -#X connect 3 0 6 0; -#X connect 4 0 11 0; -#X connect 5 0 0 0; +#X connect 2 1 12 0; +#X connect 2 2 3 1; +#X connect 3 0 10 0; +#X connect 4 0 0 0; +#X connect 5 0 3 0; #X connect 6 0 4 0; -#X connect 7 0 5 0; -#X connect 8 0 0 1; -#X connect 9 0 10 0; -#X connect 10 0 7 0; -#X connect 10 1 8 0; -#X connect 11 0 12 0; -#X connect 11 1 12 0; -#X restore 249 144 pd ascii-table; -#X msg 249 121 bang; -#X text 361 143 know your charset; -#X obj 58 139 print any2string-out; -#X obj 37 254 print string2any-out; +#X connect 7 0 0 1; +#X connect 8 0 9 0; +#X connect 9 0 6 0; +#X connect 9 1 7 0; +#X connect 10 0 11 0; +#X connect 10 1 11 0; +#X connect 12 0 5 0; +#X restore 289 156 pd ascii-table; +#X msg 289 133 bang; #X msg 37 38 A B C; #X msg 55 199 list 49 50 51; -#X text 54 3 any2string , string2any : ASCII conversions in [pdstring] -lib; -#X connect 1 0 5 0; -#X connect 2 0 5 0; -#X connect 5 0 13 0; -#X connect 5 0 6 0; -#X connect 6 0 14 0; +#X obj 58 139 print any2bytes-out; +#X obj 37 108 any2bytes; +#X obj 37 254 print bytes2any-out; +#X obj 37 230 bytes2any; +#X text 289 173 ... know your character set; +#X text 213 230 bytes2any converts byte lists to Pd messages...; +#X connect 0 0 11 0; +#X connect 1 0 11 0; +#X connect 4 0 13 0; #X connect 7 0 6 0; +#X connect 8 0 11 0; +#X connect 9 0 13 0; #X connect 11 0 10 0; -#X connect 15 0 5 0; -#X connect 16 0 6 0; +#X connect 11 0 13 0; +#X connect 13 0 12 0; +#X restore 87 368 pd pdstring-bytes; +#N canvas 0 0 584 308 pdstring-wchars 0; +#X floatatom 56 81 8 0 0 0 - - -; +#X symbolatom 46 59 10 0 0 0 - - -; +#X text 201 59 ... no special handling for symbols; +#X text 200 37 anything can be converted to a list...; +#X floatatom 54 178 4 0 0 0 - - -; +#X text 202 81 ... but "float" selector is silently dropped; +#X msg 37 38 A B C; +#X msg 55 199 list 49 50 51; +#X obj 37 254 print wchars2any-out; +#X text 213 230 wchars2any converts wchar lists to Pd messages...; +#X obj 58 139 print any2wchars-out; +#X obj 37 108 any2wchars; +#X obj 37 230 wchars2any; +#X connect 0 0 11 0; +#X connect 1 0 11 0; +#X connect 4 0 12 0; +#X connect 6 0 11 0; +#X connect 7 0 12 0; +#X connect 11 0 10 0; +#X connect 11 0 12 0; +#X connect 12 0 8 0; +#X restore 217 368 pd pdstring-wchars; +#X obj 43 232 any2wchars; +#X obj 43 258 wchars2any; +#X obj 355 368 locale; +#X text 18 303 NOTE:; +#X text 26 319 Wide character support requires locale support to be +enabled , e.g. by the [locale] external.;
Modified: trunk/externals/moocow/pdstring/src/pdstring.c =================================================================== --- trunk/externals/moocow/pdstring/src/pdstring.c 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/pdstring.c 2009-01-25 22:23:14 UTC (rev 10639) @@ -55,13 +55,10 @@ * External declarations *=====================================================================*/ #ifndef PDSTRING_OBJECT_EXTERNALS -/* -extern void any2string_setup_guts(void); -extern void string2any_setup_guts(void); -*/ -#include "any2string.c" -#include "string2any.c" - +# include "any2bytes.c" +# include "bytes2any.c" +# include "bytes2wchars.c" +# include "wchars2bytes.c" #endif
/*-------------------------------------------------------------------- @@ -91,8 +88,10 @@ pdstring_help(NULL);
#ifndef PDSTRING_OBJECT_EXTERNALS - any2string_setup_guts(); - string2any_setup_guts(); + any2bytes_setup_guts(); + bytes2any_setup_guts(); + bytes2wchars_setup_guts(); + wchars2bytes_setup_guts(); #endif
pdstring_class = class_new(gensym("pdstring"),
Copied: trunk/externals/moocow/pdstring/src/pdstringUtils.c (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/pdstringUtils.c) =================================================================== --- trunk/externals/moocow/pdstring/src/pdstringUtils.c (rev 0) +++ trunk/externals/moocow/pdstring/src/pdstringUtils.c 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,452 @@ +/* -*- Mode: C -*- */ +/*=============================================================================*\ + * File: pdstringUtils.c + * Author: Bryan Jurish moocow@ling.uni-potsdam.de + * Description: pdstring: common utilities + * + * Copyright (c) 2009 Bryan Jurish. + * + * For information on usage and redistribution, and for a DISCLAIMER OF ALL + * WARRANTIES, see the file "COPYING", in this distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *=============================================================================*/ + +#ifndef PDSTRING_UTILS_C +#define PDSTRING_UTILS_C + +#include <string.h> +#include <m_pd.h> +#include <stdlib.h> +#include "mooPdUtils.h" + +/*===================================================================== + * Debugging + *=====================================================================*/ +#define PDSTRING_UTILS_DEBUG 1 +//#undef PDSTRING_UTILS_DEBUG + +#ifdef PDSTRING_UTILS_DEBUG +# define PDSDEBUG(x) x +#else +# define PDSDEBUG(x) +#endif + +/*===================================================================== + * Constants + *=====================================================================*/ + +/* PDSTRING_EOS_NONE + * + "safe" float value to use as x_eos if no truncation is desired + */ +#define PDSTRING_EOS_NONE 1e38f + +/* PDSTRING_DEFAULT_BUFLEN + * + common default buffer length + */ +#define PDSTRING_DEFAULT_BUFLEN 256 + +/* PDSTRING_DEFAULT_GET + * + common default buffer grow length + */ +#define PDSTRING_DEFAULT_GET 256 + +/* PDSTRING_BYSTES_GET + * + number of extra bytes to get when buffer must grow + */ +#define PDSTRING_BYTES_GET PDSTRING_DEFAULT_GET +#define PDSTRING_WCHARS_GET PDSTRING_DEFAULT_GET +#define PDSTRING_ATOMS_GET PDSTRING_DEFAULT_GET + +/*===================================================================== + * Structures & Types + *=====================================================================*/ + +/* t_pdstring_bytes + * + a byte-string buffer + */ +typedef struct _pdstring_bytes { + unsigned char *b_buf; //-- byte-string buffer + int b_len; //-- current length of b_buf + size_t b_alloc; //-- allocated size of b_buf +} t_pdstring_bytes; + +/* t_pdstring_wchars + * + a wide character buffer + */ +typedef struct _pdstring_wchars { + wchar_t *w_buf; //-- wide character buffer + int w_len; //-- current length of w_buf + size_t w_alloc; //-- allocated size of w_buf +} t_pdstring_wchars; + +/* t_pdstring_atoms + * + an atom-list buffer + */ +typedef struct _pdstring_atoms { + t_atom *a_buf; //-- t_atom buffer (aka argv) + int a_len; //-- current length of a_buf (aka argc) + size_t a_alloc; //-- allocated size of a_buf +} t_pdstring_atoms; + +/*===================================================================== + * Initialization + *=====================================================================*/ + +/*--------------------------------------------------------------------- + * bytes + */ +static void pdstring_bytes_clear(t_pdstring_bytes *b) +{ + if (b->b_alloc) freebytes(b->b_buf, (b->b_alloc)*sizeof(unsigned char)); + b->b_buf = NULL; + b->b_len = 0; + b->b_alloc = 0; +} +static void pdstring_bytes_realloc(t_pdstring_bytes *b, size_t n) +{ + pdstring_bytes_clear(b); + b->b_buf = n ? (unsigned char*)getbytes(n*sizeof(unsigned char)) : NULL; + b->b_alloc = n; +} +static void pdstring_bytes_init(t_pdstring_bytes *b, size_t n) +{ + pdstring_bytes_clear(b); + pdstring_bytes_realloc(b,n); +} + +/*--------------------------------------------------------------------- + * wchars + */ +static void pdstring_wchars_clear(t_pdstring_wchars *w) +{ + if (w->w_alloc) freebytes(w->w_buf, (w->w_alloc)*sizeof(wchar_t)); + w->w_buf = NULL; + w->w_len = 0; + w->w_alloc = 0; +} +static void pdstring_wchars_realloc(t_pdstring_wchars *w, size_t n) +{ + pdstring_wchars_clear(w); + w->w_buf = n ? (wchar_t*)getbytes(n*sizeof(wchar_t)) : NULL; + w->w_alloc = n; +} +static void pdstring_wchars_init(t_pdstring_wchars *w, size_t n) +{ + pdstring_wchars_clear(w); + pdstring_wchars_realloc(w,n); +} + +/*--------------------------------------------------------------------- + * atoms + */ +static void pdstring_atoms_clear(t_pdstring_atoms *a) +{ + if (a->a_alloc) freebytes(a->a_buf, (a->a_alloc)*sizeof(t_atom)); + a->a_buf = NULL; + a->a_len = 0; + a->a_alloc = 0; +} +static void pdstring_atoms_realloc(t_pdstring_atoms *a, size_t n) +{ + pdstring_atoms_clear(a); + a->a_buf = n ? (t_atom*)getbytes(n*sizeof(t_atom)) : NULL; + a->a_alloc = n; +} +static void pdstring_atoms_init(t_pdstring_atoms *a, size_t n) +{ + pdstring_atoms_clear(a); + pdstring_atoms_realloc(a,n); +} + + +/*===================================================================== + * Utilities + *=====================================================================*/ + +/*-------------------------------------------------------------------- + * pdstring_any2bytes() + * + x is used for error reporting + * + uses x_binbuf for conversion + * + selector sel is added to binbuf too, if it is none of {NULL, &s_float, &s_list, &s_} + * + x_binbuf may be NULL, in which case a temporary t_binbuf is created and used + * - in this case, output bytes are copied into *dst, reallocating if required + * + if x_binbuf is given and non-NULL, dst may be NULL. + * - if dst is non-NULL, its values will be clobbered by those returned by + * binbuf_gettext() + */ +static void pdstring_any2bytes(void *x, t_pdstring_bytes *dst, t_symbol *sel, t_pdstring_atoms *src, t_binbuf *x_binbuf) +{ + int bb_is_tmp=0; + + //-- create temporary binbuf? + if (!x_binbuf) { + x_binbuf = binbuf_new(); + bb_is_tmp = 1; + } + + //-- prepare binbuf + binbuf_clear(x_binbuf); + + //-- binbuf_add(): selector + if (sel && sel != &s_float && sel != &s_list && sel != &s_) { + t_atom a; + SETSYMBOL((&a), sel); + binbuf_add(x_binbuf, 1, &a); + } + + //-- binbuf_add(): src atoms + binbuf_add(x_binbuf, src->a_len, src->a_buf); + + //-- output: get text string + if (bb_is_tmp) { + //-- temporary binbuf: copy text + char *text; + int len; + binbuf_gettext(x_binbuf, &text, &len); + + //-- reallocate? + if ( dst->b_alloc < len ) + pdstring_bytes_realloc(dst, len + PDSTRING_BYTES_GET); + + //-- copy + memcpy(dst->b_buf, text, len*sizeof(char)); + dst->b_len = len; + + //-- cleanup + binbuf_free(x_binbuf); + if (text) freebytes(text,len); + } + else if (dst) { + //-- permanent binbuf: clobber dst + pdstring_bytes_clear(dst); + binbuf_gettext(x_binbuf, ((char**)((void*)(&dst->b_buf))), &dst->b_len); + dst->b_alloc = dst->b_len; + } +} + + +/*-------------------------------------------------------------------- + * pdstring_bytes2any() + * + uses x_binbuf for conversion + * + x_binbuf may be NULL, in which case a temporary t_binbuf is created and used + * - in this case, output atoms are copied into *dst, reallocating if required + * + if x_binbuf is given and non-NULL, dst may be NULL. + * - if dst is non-NULL, its values will be clobbered by those returned by + * binbuf_getnatom() and binbuf_getvec() + */ +static void pdstring_bytes2any(void *x, t_pdstring_atoms *dst, t_pdstring_bytes *src, t_binbuf *x_binbuf) +{ + int bb_is_tmp=0; + + //-- create temporary binbuf? + if (!x_binbuf) { + x_binbuf = binbuf_new(); + bb_is_tmp = 1; + } + + //-- populate binbuf + binbuf_clear(x_binbuf); + binbuf_text(x_binbuf, (char*)src->b_buf, src->b_len); + //PDSDEBUG(post("bytes2any[dst=%p,src=%p,bb=%p]: binbuf_print: ", dst,src,x_binbuf)); + //PDSDEBUG(binbuf_print(x_binbuf)); + + //-- populate atom list + if (bb_is_tmp) { + //-- temporary binbuf: copy atoms + t_atom *argv = binbuf_getvec(x_binbuf); + int argc = binbuf_getnatom(x_binbuf); + + //-- reallocate? + if ( dst->a_alloc < argc ) + pdstring_atoms_realloc(dst, argc + PDSTRING_ATOMS_GET); + + //-- copy + memcpy(dst->a_buf, argv, argc*sizeof(t_atom)); + dst->a_len = argc; + + //-- cleanup + binbuf_free(x_binbuf); + } + else if (dst) { + //-- permanent binbuf: clobber dst + dst->a_buf = binbuf_getvec(x_binbuf); + dst->a_len = binbuf_getnatom(x_binbuf); + dst->a_alloc = 0; //-- don't try to free this + } +} + + +/*-------------------------------------------------------------------- + * pdstring_atoms2bytes() + * + always appends a final NUL byte to *dst_buf, even if src_argv doesn't contain one + * + returns number of bytes actually written to *dst_buf, __including__ implicit trailing NUL + */ +static int pdstring_atoms2bytes(void *x, t_pdstring_bytes *dst, t_pdstring_atoms *src, t_float x_eos) +{ + t_atom *argv = src->a_buf; + int argc = src->a_len; + unsigned char *s; + int new_len=0; + + /*-- re-allocate? --*/ + if (dst->b_alloc <= (argc+1)) + pdstring_bytes_realloc(dst, argc + 1 + PDSTRING_BYTES_GET); + + /*-- get byte string --*/ + for (s=dst->b_buf, new_len=0; argc > 0; argc--, argv++, s++, new_len++) + { + *s = atom_getfloat(argv); + if ((x_eos<0 && !*s) || (*s==x_eos)) { break; } /*-- hack: truncate at first EOS char --*/ + } + *s = '\0'; /*-- always append terminating NUL */ + dst->b_len = new_len; + + return new_len+1; +} + +/*-------------------------------------------------------------------- + * pdstring_atoms2wchars() + * + always appends a final NUL wchar_t to dst->w_buf, even if src->a_buf doesn't contain one + * + returns number of bytes actually written to dst->w_buf, __including__ implicit trailing NUL + * + but dst->w_len does NOT include implicit trailing NUL + */ +static int pdstring_atoms2wchars(void *x, t_pdstring_wchars *dst, t_pdstring_atoms *src, t_float x_eos) +{ + t_atom *argv = src->a_buf; + int argc = src->a_len; + int new_len=0; + wchar_t *s; + + /*-- re-allocate? --*/ + if (dst->w_alloc <= (argc+1)) + pdstring_wchars_realloc(dst, argc + 1 + PDSTRING_WCHARS_GET); + + /*-- get wchar_t string --*/ + for (s=dst->w_buf, new_len=0; argc > 0; argc--, argv++, s++, new_len++) + { + *s = atom_getfloat(argv); + if ((x_eos<0 && !*s) || (*s==x_eos)) { break; } /*-- hack: truncate at first EOS char --*/ + } + *s = L'\0'; /*-- always append terminating NUL */ + dst->w_len = new_len; + + return new_len+1; +} + + +/*-------------------------------------------------------------------- + * pdstring_bytes2wchars() + */ +static int pdstring_bytes2wchars(void *x, t_pdstring_wchars *dst, t_pdstring_bytes *src) +{ + size_t bi, wi; + + //-- re-allocate? + if ( dst->w_alloc < src->b_len ) + pdstring_wchars_realloc(dst, src->b_len + PDSTRING_WCHARS_GET); + + //-- convert + //PDSDEBUG(post("\nbytes2wchars[dst=%p,src=%p]: init", dst,src);) + mbtowc(NULL,NULL,0); //-- re-initialize conversion state for mbtowc() + for (bi=0,wi=0; bi<src->b_len; wi++) { + int nbytes = mbtowc(dst->w_buf+wi, (char*)(src->b_buf+bi), src->b_len-bi); + if (nbytes <= 0) { + if (nbytes < 0) { + pd_error(x,"pdstring_bytes2wchars(): malformed byte string "%s" at char '%c' - copying literal byte", src->b_buf, src->b_buf[bi]); + } + dst->w_buf[wi] = src->b_buf[bi]; + nbytes = 1; + } + bi += nbytes; + //PDSDEBUG(post("bytes2wchars[dst=%p,src=%p]: loop[bi=%d,wi=%d,src=%s]: nbytes=%d,wc=%u", dst,src, bi,wi,src, nbytes,dst->w_buf[wi])); + } + dst->w_len = wi; + return wi; +} + +/*-------------------------------------------------------------------- + * pdstring_wchars2bytes() + */ +static int pdstring_wchars2bytes(void *x, t_pdstring_bytes *dst, t_pdstring_wchars *src) +{ + size_t bi, wi; + + //-- re-allocate? + if ( dst->b_alloc < src->w_len * MB_CUR_MAX ) + pdstring_bytes_realloc(dst, src->w_len * MB_CUR_MAX + PDSTRING_WCHARS_GET); + + //-- convert + for (bi=0,wi=0; wi < src->w_len; wi++) { + int nbytes = wctomb((char*)dst->b_buf+bi, src->w_buf[wi]); + if (nbytes <= 0) { + if (nbytes < 0) { + pd_error(x,"pdstring_wchars2bytes(): malformed wide string "%S" at wchar_t '%C' - forcing literal value", src->w_buf, src->w_buf[wi]); + } + dst->b_buf[bi] = src->w_buf[wi]; + nbytes = 1; + } + bi += nbytes; + } + dst->b_len = bi; + return bi; +} + + +/*-------------------------------------------------------------------- + * pdstring_bytes2atoms() + * + implicitly appends x_eos if >= 0 and != PDSTRING_EOS_NONE + */ +static void pdstring_bytes2atoms(void *x, t_pdstring_atoms *dst, t_pdstring_bytes *src, t_float x_eos) +{ + int i; + + //-- re-allocate? + if ( dst->a_alloc <= src->b_len ) + pdstring_atoms_realloc(dst, src->b_len + 1 + PDSTRING_ATOMS_GET); + + //-- convert + for (i=0; i < src->b_len; i++) { + SETFLOAT((dst->a_buf+i), src->b_buf[i]); + } + dst->a_len = src->b_len; + + //-- append eos atom? + if (x_eos >= 0 && x_eos != PDSTRING_EOS_NONE) { + SETFLOAT(dst->a_buf+dst->a_len, x_eos); + dst->a_len++; + } +} + +/*-------------------------------------------------------------------- + * pdstring_wchars2atoms() + */ +static void pdstring_wchars2atoms(void *x, t_pdstring_atoms *dst, t_pdstring_wchars *src) +{ + int i; + + //-- re-allocate? + if ( dst->a_alloc < src->w_len ) + pdstring_atoms_realloc(dst, src->w_len + PDSTRING_ATOMS_GET); + + //-- convert + for (i=0; i < src->w_len; i++) { + SETFLOAT((dst->a_buf+i), src->w_buf[i]); + } + dst->a_len = src->w_len; +} + + +#endif /* PDSTRING_UTILS_C */
Copied: trunk/externals/moocow/pdstring/src/pdstringUtils.h (from rev 10638, trunk/externals/moocow/pdstring+wchar/src/pdstringUtils.h) =================================================================== --- trunk/externals/moocow/pdstring/src/pdstringUtils.h (rev 0) +++ trunk/externals/moocow/pdstring/src/pdstringUtils.h 2009-01-25 22:23:14 UTC (rev 10639) @@ -0,0 +1,452 @@ +/* -*- Mode: C -*- */ +/*=============================================================================*\ + * File: pdstringUtils.h + * Author: Bryan Jurish moocow@ling.uni-potsdam.de + * Description: pdstring: common utilities (static include) + * + * Copyright (c) 2009 Bryan Jurish. + * + * For information on usage and redistribution, and for a DISCLAIMER OF ALL + * WARRANTIES, see the file "COPYING", in this distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *=============================================================================*/ + +#ifndef PDSTRING_UTILS_H +#define PDSTRING_UTILS_H + +#include <string.h> +#include <m_pd.h> +#include <stdlib.h> +#include "mooPdUtils.h" + +/*===================================================================== + * Debugging + *=====================================================================*/ +#define PDSTRING_UTILS_DEBUG 1 +//#undef PDSTRING_UTILS_DEBUG + +#ifdef PDSTRING_UTILS_DEBUG +# define PDSDEBUG(x) x +#else +# define PDSDEBUG(x) +#endif + +/*===================================================================== + * Constants + *=====================================================================*/ + +/* PDSTRING_EOS_NONE + * + "safe" float value to use as x_eos if no truncation is desired + */ +#define PDSTRING_EOS_NONE 1e38f + +/* PDSTRING_DEFAULT_BUFLEN + * + common default buffer length + */ +#define PDSTRING_DEFAULT_BUFLEN 256 + +/* PDSTRING_DEFAULT_GET + * + common default buffer grow length + */ +#define PDSTRING_DEFAULT_GET 256 + +/* PDSTRING_BYSTES_GET + * + number of extra bytes to get when buffer must grow + */ +#define PDSTRING_BYTES_GET PDSTRING_DEFAULT_GET +#define PDSTRING_WCHARS_GET PDSTRING_DEFAULT_GET +#define PDSTRING_ATOMS_GET PDSTRING_DEFAULT_GET + +/*===================================================================== + * Structures & Types + *=====================================================================*/ + +/* t_pdstring_bytes + * + a byte-string buffer + */ +typedef struct _pdstring_bytes { + unsigned char *b_buf; //-- byte-string buffer + int b_len; //-- current length of b_buf + size_t b_alloc; //-- allocated size of b_buf +} t_pdstring_bytes; + +/* t_pdstring_wchars + * + a wide character buffer + */ +typedef struct _pdstring_wchars { + wchar_t *w_buf; //-- wide character buffer + int w_len; //-- current length of w_buf + size_t w_alloc; //-- allocated size of w_buf +} t_pdstring_wchars; + +/* t_pdstring_atoms + * + an atom-list buffer + */ +typedef struct _pdstring_atoms { + t_atom *a_buf; //-- t_atom buffer (aka argv) + int a_len; //-- current length of a_buf (aka argc) + size_t a_alloc; //-- allocated size of a_buf +} t_pdstring_atoms; + +/*===================================================================== + * Initialization + *=====================================================================*/ + +/*--------------------------------------------------------------------- + * bytes + */ +static void pdstring_bytes_clear(t_pdstring_bytes *b) +{ + if (b->b_alloc) freebytes(b->b_buf, (b->b_alloc)*sizeof(unsigned char)); + b->b_buf = NULL; + b->b_len = 0; + b->b_alloc = 0; +} +static void pdstring_bytes_realloc(t_pdstring_bytes *b, size_t n) +{ + pdstring_bytes_clear(b); + b->b_buf = n ? (unsigned char*)getbytes(n*sizeof(unsigned char)) : NULL; + b->b_alloc = n; +} +static void pdstring_bytes_init(t_pdstring_bytes *b, size_t n) +{ + pdstring_bytes_clear(b); + pdstring_bytes_realloc(b,n); +} + +/*--------------------------------------------------------------------- + * wchars + */ +static void pdstring_wchars_clear(t_pdstring_wchars *w) +{ + if (w->w_alloc) freebytes(w->w_buf, (w->w_alloc)*sizeof(wchar_t)); + w->w_buf = NULL; + w->w_len = 0; + w->w_alloc = 0; +} +static void pdstring_wchars_realloc(t_pdstring_wchars *w, size_t n) +{ + pdstring_wchars_clear(w); + w->w_buf = n ? (wchar_t*)getbytes(n*sizeof(wchar_t)) : NULL; + w->w_alloc = n; +} +static void pdstring_wchars_init(t_pdstring_wchars *w, size_t n) +{ + pdstring_wchars_clear(w); + pdstring_wchars_realloc(w,n); +} + +/*--------------------------------------------------------------------- + * atoms + */ +static void pdstring_atoms_clear(t_pdstring_atoms *a) +{ + if (a->a_alloc) freebytes(a->a_buf, (a->a_alloc)*sizeof(t_atom)); + a->a_buf = NULL; + a->a_len = 0; + a->a_alloc = 0; +} +static void pdstring_atoms_realloc(t_pdstring_atoms *a, size_t n) +{ + pdstring_atoms_clear(a); + a->a_buf = n ? (t_atom*)getbytes(n*sizeof(t_atom)) : NULL; + a->a_alloc = n; +} +static void pdstring_atoms_init(t_pdstring_atoms *a, size_t n) +{ + pdstring_atoms_clear(a); + pdstring_atoms_realloc(a,n); +} + + +/*===================================================================== + * Utilities + *=====================================================================*/ + +/*-------------------------------------------------------------------- + * pdstring_any2bytes() + * + x is used for error reporting + * + uses x_binbuf for conversion + * + selector sel is added to binbuf too, if it is none of {NULL, &s_float, &s_list, &s_} + * + x_binbuf may be NULL, in which case a temporary t_binbuf is created and used + * - in this case, output bytes are copied into *dst, reallocating if required + * + if x_binbuf is given and non-NULL, dst may be NULL. + * - if dst is non-NULL, its values will be clobbered by those returned by + * binbuf_gettext() + */ +static void pdstring_any2bytes(void *x, t_pdstring_bytes *dst, t_symbol *sel, t_pdstring_atoms *src, t_binbuf *x_binbuf) +{ + int bb_is_tmp=0; + + //-- create temporary binbuf? + if (!x_binbuf) { + x_binbuf = binbuf_new(); + bb_is_tmp = 1; + } + + //-- prepare binbuf + binbuf_clear(x_binbuf); + + //-- binbuf_add(): selector + if (sel && sel != &s_float && sel != &s_list && sel != &s_) { + t_atom a; + SETSYMBOL((&a), sel); + binbuf_add(x_binbuf, 1, &a); + } + + //-- binbuf_add(): src atoms + binbuf_add(x_binbuf, src->a_len, src->a_buf); + + //-- output: get text string + if (bb_is_tmp) { + //-- temporary binbuf: copy text + char *text; + int len; + binbuf_gettext(x_binbuf, &text, &len); + + //-- reallocate? + if ( dst->b_alloc < len ) + pdstring_bytes_realloc(dst, len + PDSTRING_BYTES_GET); + + //-- copy + memcpy(dst->b_buf, text, len*sizeof(char)); + dst->b_len = len; + + //-- cleanup + binbuf_free(x_binbuf); + if (text) freebytes(text,len); + } + else if (dst) { + //-- permanent binbuf: clobber dst + pdstring_bytes_clear(dst); + binbuf_gettext(x_binbuf, ((char**)((void*)(&dst->b_buf))), &dst->b_len); + dst->b_alloc = dst->b_len; + } +} + + +/*-------------------------------------------------------------------- + * pdstring_bytes2any() + * + uses x_binbuf for conversion + * + x_binbuf may be NULL, in which case a temporary t_binbuf is created and used + * - in this case, output atoms are copied into *dst, reallocating if required + * + if x_binbuf is given and non-NULL, dst may be NULL. + * - if dst is non-NULL, its values will be clobbered by those returned by + * binbuf_getnatom() and binbuf_getvec() + */ +static void pdstring_bytes2any(void *x, t_pdstring_atoms *dst, t_pdstring_bytes *src, t_binbuf *x_binbuf) +{ + int bb_is_tmp=0; + + //-- create temporary binbuf? + if (!x_binbuf) { + x_binbuf = binbuf_new(); + bb_is_tmp = 1; + } + + //-- populate binbuf + binbuf_clear(x_binbuf); + binbuf_text(x_binbuf, (char*)src->b_buf, src->b_len); + //PDSDEBUG(post("bytes2any[dst=%p,src=%p,bb=%p]: binbuf_print: ", dst,src,x_binbuf)); + //PDSDEBUG(binbuf_print(x_binbuf)); + + //-- populate atom list + if (bb_is_tmp) { + //-- temporary binbuf: copy atoms + t_atom *argv = binbuf_getvec(x_binbuf); + int argc = binbuf_getnatom(x_binbuf); + + //-- reallocate? + if ( dst->a_alloc < argc ) + pdstring_atoms_realloc(dst, argc + PDSTRING_ATOMS_GET); + + //-- copy + memcpy(dst->a_buf, argv, argc*sizeof(t_atom)); + dst->a_len = argc; + + //-- cleanup + binbuf_free(x_binbuf); + } + else if (dst) { + //-- permanent binbuf: clobber dst + dst->a_buf = binbuf_getvec(x_binbuf); + dst->a_len = binbuf_getnatom(x_binbuf); + dst->a_alloc = 0; //-- don't try to free this + } +} + + +/*-------------------------------------------------------------------- + * pdstring_atoms2bytes() + * + always appends a final NUL byte to *dst_buf, even if src_argv doesn't contain one + * + returns number of bytes actually written to *dst_buf, __including__ implicit trailing NUL + */ +static int pdstring_atoms2bytes(void *x, t_pdstring_bytes *dst, t_pdstring_atoms *src, t_float x_eos) +{ + t_atom *argv = src->a_buf; + int argc = src->a_len; + unsigned char *s; + int new_len=0; + + /*-- re-allocate? --*/ + if (dst->b_alloc <= (argc+1)) + pdstring_bytes_realloc(dst, argc + 1 + PDSTRING_BYTES_GET); + + /*-- get byte string --*/ + for (s=dst->b_buf, new_len=0; argc > 0; argc--, argv++, s++, new_len++) + { + *s = atom_getfloat(argv); + if ((x_eos<0 && !*s) || (*s==x_eos)) { break; } /*-- hack: truncate at first EOS char --*/ + } + *s = '\0'; /*-- always append terminating NUL */ + dst->b_len = new_len; + + return new_len+1; +} + +/*-------------------------------------------------------------------- + * pdstring_atoms2wchars() + * + always appends a final NUL wchar_t to dst->w_buf, even if src->a_buf doesn't contain one + * + returns number of bytes actually written to dst->w_buf, __including__ implicit trailing NUL + * + but dst->w_len does NOT include implicit trailing NUL + */ +static int pdstring_atoms2wchars(void *x, t_pdstring_wchars *dst, t_pdstring_atoms *src, t_float x_eos) +{ + t_atom *argv = src->a_buf; + int argc = src->a_len; + int new_len=0; + wchar_t *s; + + /*-- re-allocate? --*/ + if (dst->w_alloc <= (argc+1)) + pdstring_wchars_realloc(dst, argc + 1 + PDSTRING_WCHARS_GET); + + /*-- get wchar_t string --*/ + for (s=dst->w_buf, new_len=0; argc > 0; argc--, argv++, s++, new_len++) + { + *s = atom_getfloat(argv); + if ((x_eos<0 && !*s) || (*s==x_eos)) { break; } /*-- hack: truncate at first EOS char --*/ + } + *s = L'\0'; /*-- always append terminating NUL */ + dst->w_len = new_len; + + return new_len+1; +} + + +/*-------------------------------------------------------------------- + * pdstring_bytes2wchars() + */ +static int pdstring_bytes2wchars(void *x, t_pdstring_wchars *dst, t_pdstring_bytes *src) +{ + size_t bi, wi; + + //-- re-allocate? + if ( dst->w_alloc < src->b_len ) + pdstring_wchars_realloc(dst, src->b_len + PDSTRING_WCHARS_GET); + + //-- convert + //PDSDEBUG(post("\nbytes2wchars[dst=%p,src=%p]: init", dst,src);) + mbtowc(NULL,NULL,0); //-- re-initialize conversion state for mbtowc() + for (bi=0,wi=0; bi<src->b_len; wi++) { + int nbytes = mbtowc(dst->w_buf+wi, (char*)(src->b_buf+bi), src->b_len-bi); + if (nbytes <= 0) { + if (nbytes < 0) { + pd_error(x,"pdstring_bytes2wchars(): malformed byte string "%s" at char '%c' - copying literal byte", src->b_buf, src->b_buf[bi]); + } + dst->w_buf[wi] = src->b_buf[bi]; + nbytes = 1; + } + bi += nbytes; + //PDSDEBUG(post("bytes2wchars[dst=%p,src=%p]: loop[bi=%d,wi=%d,src=%s]: nbytes=%d,wc=%u", dst,src, bi,wi,src, nbytes,dst->w_buf[wi])); + } + dst->w_len = wi; + return wi; +} + +/*-------------------------------------------------------------------- + * pdstring_wchars2bytes() + */ +static int pdstring_wchars2bytes(void *x, t_pdstring_bytes *dst, t_pdstring_wchars *src) +{ + size_t bi, wi; + + //-- re-allocate? + if ( dst->b_alloc < src->w_len * MB_CUR_MAX ) + pdstring_bytes_realloc(dst, src->w_len * MB_CUR_MAX + PDSTRING_WCHARS_GET); + + //-- convert + for (bi=0,wi=0; wi < src->w_len; wi++) { + int nbytes = wctomb((char*)dst->b_buf+bi, src->w_buf[wi]); + if (nbytes <= 0) { + if (nbytes < 0) { + pd_error(x,"pdstring_wchars2bytes(): malformed wide character (%u) - bashing to byte", src->w_buf[wi]); + } + dst->b_buf[bi] = src->w_buf[wi]; + nbytes = 1; + } + bi += nbytes; + } + dst->b_len = bi; + return bi; +} + + +/*-------------------------------------------------------------------- + * pdstring_bytes2atoms() + * + implicitly appends x_eos if >= 0 and != PDSTRING_EOS_NONE + */ +static void pdstring_bytes2atoms(void *x, t_pdstring_atoms *dst, t_pdstring_bytes *src, t_float x_eos) +{ + int i; + + //-- re-allocate? + if ( dst->a_alloc <= src->b_len ) + pdstring_atoms_realloc(dst, src->b_len + 1 + PDSTRING_ATOMS_GET); + + //-- convert + for (i=0; i < src->b_len; i++) { + SETFLOAT((dst->a_buf+i), src->b_buf[i]); + } + dst->a_len = src->b_len; + + //-- append eos atom? + if (x_eos >= 0 && x_eos != PDSTRING_EOS_NONE) { + SETFLOAT(dst->a_buf+dst->a_len, x_eos); + dst->a_len++; + } +} + +/*-------------------------------------------------------------------- + * pdstring_wchars2atoms() + */ +static void pdstring_wchars2atoms(void *x, t_pdstring_atoms *dst, t_pdstring_wchars *src) +{ + int i; + + //-- re-allocate? + if ( dst->a_alloc < src->w_len ) + pdstring_atoms_realloc(dst, src->w_len + PDSTRING_ATOMS_GET); + + //-- convert + for (i=0; i < src->w_len; i++) { + SETFLOAT((dst->a_buf+i), src->w_buf[i]); + } + dst->a_len = src->w_len; +} + + +#endif /* PDSTRING_UTILS_H */
Deleted: trunk/externals/moocow/pdstring/src/string2any-help.pd =================================================================== --- trunk/externals/moocow/pdstring/src/string2any-help.pd 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/string2any-help.pd 2009-01-25 22:23:14 UTC (rev 10639) @@ -1,46 +0,0 @@ -#N canvas 121 48 612 604 10; -#X text 59 7 string2any : convert lists of floats to pd messages; -#X text 13 30 SYNTAX: string2any [INITIAL_BUFSIZE [EOS_CHAR]]; -#X text 13 52 INLETS:; -#X text 27 68 1 - ASCII-valued float lists; -#X text 309 54 OUTLETS:; -#X text 325 68 1 - pd messages; -#X text 325 82 2 - bang on done; -#X obj 24 350 string2any 128 0; -#X obj 24 529 print string2any-help; -#X obj 131 454 print string2any-help-done; -#X msg 24 113 97 32 98 32 99; -#X msg 39 135 97 0 98 0 99; -#X msg 99 206 0; -#X msg 67 206 -1; -#X msg 131 206 32; -#X text 166 202 The second inlet sets the message-separating EOS ("end-of-string") -character. If this character is encountered in an input list , the -list is "split" at that point , and two separate messages are output -at the leftmost outlet. You can specify a negative value here to avoid -implicit input splitting entirely. For backwards compatibility , the -default EOS character is -1 , which results in truncation of input -messages whenever a 0 (zero) is encountered.; -#X text 163 350 First argument: initial buffer size (length of object-local -text buffer). This should get re-allocated when necessary. Specify -0 (zero) to use the default value.; -#X text 165 405 Second argument: initial EOS character. See above. -; -#X text 159 477 Right outlet gives a bang after the entire input list -has been processed.; -#X text 189 531 Parsed pd messages are sent to the left outlet.; -#X text 306 580 Bryan Jurish moocow@ling.uni-potsdam.de; -#X text 27 83 2 - EOS character (float); -#X text 161 121 lists of floats are converted to pd messages.; -#X msg 54 161 StringThing 97; -#X text 168 161 ... selector is ignored ...; -#X text 21 571 SEE ALSO:; -#X obj 102 570 pdstring; -#X connect 7 0 8 0; -#X connect 7 1 9 0; -#X connect 10 0 7 0; -#X connect 11 0 7 0; -#X connect 12 0 7 1; -#X connect 13 0 7 1; -#X connect 14 0 7 1; -#X connect 23 0 7 0;
Deleted: trunk/externals/moocow/pdstring/src/string2any.c =================================================================== --- trunk/externals/moocow/pdstring/src/string2any.c 2009-01-25 22:16:17 UTC (rev 10638) +++ trunk/externals/moocow/pdstring/src/string2any.c 2009-01-25 22:23:14 UTC (rev 10639) @@ -1,249 +0,0 @@ -/* -*- Mode: C -*- */ -/*=============================================================================*\ - * File: string2any.c - * Author: Bryan Jurish moocow@ling.uni-potsdam.de - * Description: convert strings to pd messages - * - * Copyright (c) 2004-2008 Bryan Jurish. - * - * For information on usage and redistribution, and for a DISCLAIMER OF ALL - * WARRANTIES, see the file "COPYING", in this distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program 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. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *=============================================================================*/ - -#include <string.h> -#include <m_pd.h> -#include "mooPdUtils.h" - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -/* black magic */ -#ifdef NT -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - -/*-------------------------------------------------------------------- - * DEBUG - *--------------------------------------------------------------------*/ -/*#define STRING2ANY_DEBUG 1*/ -/*#undef STRING2ANY_DEBUG*/ - -#ifdef STRING2ANY_DEBUG -# define S2ADEBUG(x) x -#else -# define S2ADEBUG(x) -#endif - -#define STRING2ANY_DEFAULT_BUFLEN 256 - - -/*===================================================================== - * Constants - *=====================================================================*/ -static char *string2any_banner = "string2any: pdstring version " PACKAGE_VERSION " by Bryan Jurish"; - -/*===================================================================== - * Structures and Types: any2string - *=====================================================================*/ - -static t_class *string2any_class; - -typedef struct _string2any -{ - t_object x_obj; - size_t x_size; - t_float x_eos; //-- eos character - char *x_text; - t_binbuf *x_binbuf; - t_inlet *x_eos_in; - t_outlet *x_outlet; - t_outlet *x_outlet_done; -} t_string2any; - - -/*===================================================================== - * Utilities - *=====================================================================*/ - -/*-------------------------------------------------------------------- - * string2any_atoms() - */ -static void string2any_atoms(t_string2any *x, int argc, t_atom *argv) -{ - char *s; - int x_argc, a_argc=0; - t_atom *x_argv; - - /*-- allocate --*/ - if ( ((int)x->x_size) <= (argc+1) ) { - freebytes(x->x_text, x->x_size*sizeof(char)); - x->x_size = argc+1; - x->x_text = (char *)getbytes(x->x_size*sizeof(char)); - } - - /*-- get text --*/ - for (s=x->x_text; argc > 0; argc--, a_argc++, argv++, s++) { - *s = atom_getfloat(argv); - S2ADEBUG(post("string2any[%p]: a_argc=%d,*s=%d", x, a_argc, *s));
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.